提交 32716dd8 编写于 作者: Y You Yong

modify the cat

上级 9f9c503f
...@@ -237,9 +237,12 @@ ...@@ -237,9 +237,12 @@
(<VALUES/>) (<VALUES/>)
]]></statement> ]]></statement>
</query> </query>
<query name="find-by-domain-name-ip-duration" type="SELECT"> <query name="find-by-domain-name-ip-duration" type="SELECT" multiple="true">
<param name="start-date" /> <param name="start-date" />
<param name="end-date" /> <param name="end-date" />
<param name="ip" />
<param name="domain" />
<param name="name" />
<statement><![CDATA[ <statement><![CDATA[
SELECT <FIELDS/> SELECT <FIELDS/>
FROM <TABLE/> FROM <TABLE/>
...@@ -250,9 +253,17 @@ ...@@ -250,9 +253,17 @@
</IF> </IF>
AND <FIELD name='period'/> >= ${start-date} AND <FIELD name='period'/> >= ${start-date}
AND <FIELD name='period'/> < ${end-date} AND <FIELD name='period'/> < ${end-date}
ORDER BY <FIELD name='period'/> ASC
]]></statement> ]]></statement>
</query> </query>
</query-defs> </query-defs>
</entity> </entity>
</entities> </entities>
...@@ -11,7 +11,9 @@ public enum Action implements com.site.web.mvc.Action { ...@@ -11,7 +11,9 @@ public enum Action implements com.site.web.mvc.Action {
MOBILE("mobile"), MOBILE("mobile"),
HISTORY("history"); HISTORY("history"),
HISTORY_GRAPH("historyGraph");
private String m_name; private String m_name;
......
...@@ -12,7 +12,9 @@ public enum JspFile { ...@@ -12,7 +12,9 @@ public enum JspFile {
MOBILE("/jsp/report/problem_mobile.jsp"), MOBILE("/jsp/report/problem_mobile.jsp"),
HISTORY("/jsp/report/problemHistoryReport.jsp"),; HISTORY("/jsp/report/problemHistoryReport.jsp"),
HISTORY_GRAPH("/jsp/report/problemHistoryGraph.jsp");
private String m_path; private String m_path;
......
...@@ -21,6 +21,8 @@ public class JspViewer extends BaseJspViewer<ReportPage, Action, Context, Model> ...@@ -21,6 +21,8 @@ public class JspViewer extends BaseJspViewer<ReportPage, Action, Context, Model>
return JspFile.MOBILE.getPath(); return JspFile.MOBILE.getPath();
case HISTORY: case HISTORY:
return JspFile.HISTORY.getPath(); return JspFile.HISTORY.getPath();
case HISTORY_GRAPH:
return JspFile.HISTORY_GRAPH.getPath();
} }
throw new RuntimeException("Unknown action: " + action); throw new RuntimeException("Unknown action: " + action);
......
package com.dianping.cat.report.page.transaction; package com.dianping.cat.report.page.transaction;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -18,6 +20,9 @@ import com.dianping.cat.consumer.transaction.model.transform.DefaultDomParser; ...@@ -18,6 +20,9 @@ import com.dianping.cat.consumer.transaction.model.transform.DefaultDomParser;
import com.dianping.cat.hadoop.dal.Dailyreport; import com.dianping.cat.hadoop.dal.Dailyreport;
import com.dianping.cat.hadoop.dal.DailyreportDao; import com.dianping.cat.hadoop.dal.DailyreportDao;
import com.dianping.cat.hadoop.dal.DailyreportEntity; import com.dianping.cat.hadoop.dal.DailyreportEntity;
import com.dianping.cat.hadoop.dal.Graph;
import com.dianping.cat.hadoop.dal.GraphDao;
import com.dianping.cat.hadoop.dal.GraphEntity;
import com.dianping.cat.helper.CatString; import com.dianping.cat.helper.CatString;
import com.dianping.cat.report.ReportPage; import com.dianping.cat.report.ReportPage;
import com.dianping.cat.report.graph.GraphBuilder; import com.dianping.cat.report.graph.GraphBuilder;
...@@ -31,6 +36,7 @@ import com.dianping.cat.report.page.transaction.GraphPayload.FailurePayload; ...@@ -31,6 +36,7 @@ import com.dianping.cat.report.page.transaction.GraphPayload.FailurePayload;
import com.dianping.cat.report.page.transaction.GraphPayload.HitPayload; import com.dianping.cat.report.page.transaction.GraphPayload.HitPayload;
import com.dianping.cat.report.page.trend.GraphItem; import com.dianping.cat.report.page.trend.GraphItem;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.site.dal.jdbc.DalException;
import com.site.lookup.annotation.Inject; import com.site.lookup.annotation.Inject;
import com.site.lookup.util.StringUtils; import com.site.lookup.util.StringUtils;
import com.site.web.mvc.PageHandler; import com.site.web.mvc.PageHandler;
...@@ -39,6 +45,9 @@ import com.site.web.mvc.annotation.OutboundActionMeta; ...@@ -39,6 +45,9 @@ import com.site.web.mvc.annotation.OutboundActionMeta;
import com.site.web.mvc.annotation.PayloadMeta; import com.site.web.mvc.annotation.PayloadMeta;
public class Handler implements PageHandler<Context> { public class Handler implements PageHandler<Context> {
public static final long ONE_HOUR = 3600 * 1000L;
@Inject @Inject
private JspViewer m_jspViewer; private JspViewer m_jspViewer;
...@@ -54,6 +63,9 @@ public class Handler implements PageHandler<Context> { ...@@ -54,6 +63,9 @@ public class Handler implements PageHandler<Context> {
@Inject @Inject
private DailyreportDao dailyreportDao; private DailyreportDao dailyreportDao;
@Inject
private GraphDao graphDao;
private StatisticsComputer m_computer = new StatisticsComputer(); private StatisticsComputer m_computer = new StatisticsComputer();
private DefaultDomParser transactionParser = new DefaultDomParser(); private DefaultDomParser transactionParser = new DefaultDomParser();
...@@ -197,44 +209,34 @@ public class Handler implements PageHandler<Context> { ...@@ -197,44 +209,34 @@ public class Handler implements PageHandler<Context> {
private void buildTrendGraph(Model model, Payload payload) { private void buildTrendGraph(Model model, Payload payload) {
Date start = payload.getHistoryStartDate(); Date start = payload.getHistoryStartDate();
Date end = payload.getHistoryEndDate(); Date end = payload.getHistoryEndDate();
String domain = model.getDomain();
String ip = model.getIpAddress();
String type = payload.getType(); String type = payload.getType();
String name = payload.getName(); String name = payload.getName();
String display = name != null ? name : type; String display = name != null ? name : type;
long current = System.currentTimeMillis();
current = current - current % (3600 * 1000);
long date = current - 24 * 3600 * 1000; int size = (int) ((end.getTime() - start.getTime()) / ONE_HOUR);
start = new Date(date);
end = new Date(current);
int size = (int) (current - date) / (3600 * 1000);
GraphItem item = new GraphItem(); GraphItem item = new GraphItem();
item.setStart(start); item.setStart(start);
item.setSize(size); item.setSize(size);
// TO GET The Data from database
// TODO
// For URL
item.setTitles(display + " Response Trend"); item.setTitles(display + " Response Trend");
double[] ylable1 = new double[size]; Map<String, double[]> graphData = getGraphData(model, payload);
for (int i = 0; i < size; i++) { double[] sum = graphData.get("sum");
// TODO double[] totalCount = graphData.get("total_count");
ylable1[i] = Math.random() * 192; double[] avg = new double[sum.length];
for (int i = 1; i < sum.length; i++) {
if (totalCount[i] > 0) {
avg[i] = sum[i] / totalCount[i];
}
} }
item.addValue(ylable1); item.addValue(avg);
model.setResponseTrend(item.getJsonString()); model.setResponseTrend(item.getJsonString());
item.setTitles(display + " Hit Trend"); item.setTitles(display + " Hit Trend");
item.getValues().clear(); item.getValues().clear();
ylable1 = new double[size];
for (int i = 0; i < size; i++) {
ylable1[i] = Math.random() * 192;
}
item.addValue(ylable1);
model.setHitTrend(item.getJsonString());
item.addValue(totalCount);
model.setHitTrend(item.getJsonString());
} }
private void showSummarizeReport(Model model, Payload payload) { private void showSummarizeReport(Model model, Payload payload) {
...@@ -373,15 +375,95 @@ public class Handler implements PageHandler<Context> { ...@@ -373,15 +375,95 @@ public class Handler implements PageHandler<Context> {
} }
} }
public Map<String, double[]> getDetailInfo(Model model, Payload payload) { public Map<String, double[]> getGraphData(Model model, Payload payload) {
Date start = payload.getHistoryEndDate(); Date start = new Date(payload.getDate());
Date end = payload.getHistoryEndDate(); Date end = payload.getHistoryEndDate();
String domain = model.getDomain(); String domain = model.getDomain();
String ip = model.getIpAddress();
String type = payload.getType(); String type = payload.getType();
String name = payload.getName(); String name = payload.getName();
String ip = model.getIpAddress();
List<Graph> graphs = new ArrayList<Graph>();
try {
graphs = this.graphDao.findByDomainNameIpDuration(start, end, ip, domain, "transaction",
GraphEntity.READSET_FULL);
} catch (DalException e) {
e.printStackTrace();
}
return null; Map<String, double[]> result = buildGraphDates(start, end, type, name, graphs);
return result;
} }
Map<String, double[]> buildGraphDates(Date start, Date end, String type, String name, List<Graph> graphs) {
Map<String, double[]> result = new HashMap<String, double[]>();
List<Date> periods = new ArrayList<Date>();
for (long i = start.getTime(); i < end.getTime(); i = i + ONE_HOUR) {
periods.add(new Date(i));
}
int size = periods.size();
double[] total_count = new double[size];
double[] failure_count = new double[size];
double[] min = new double[size];
double[] max = new double[size];
double[] sum = new double[size];
double[] sum2 = new double[size];
if (!isEmpty(type) && isEmpty(name)) {
for (Graph graph : graphs) {
int indexOfperiod = periods.indexOf(graph.getPeriod());
String summaryContent = graph.getSummaryContent();
String[] allLines = summaryContent.split("\n");
for (int j = 0; j < allLines.length; j++) {
String[] records = allLines[j].split("\t");
if (records[SummaryOrder.TYPE.ordinal()].equals(type)) {
total_count[indexOfperiod] = Double.valueOf(records[SummaryOrder.TOTAL_COUNT.ordinal()]);
failure_count[indexOfperiod] = Double.valueOf(records[SummaryOrder.FAILURE_COUNT.ordinal()]);
min[indexOfperiod] = Double.valueOf(records[SummaryOrder.MIN.ordinal()]);
max[indexOfperiod] = Double.valueOf(records[SummaryOrder.MAX.ordinal()]);
sum[indexOfperiod] = Double.valueOf(records[SummaryOrder.SUM.ordinal()]);
sum2[indexOfperiod] = Double.valueOf(records[SummaryOrder.SUM2.ordinal()]);
}
}
}
} else if (!isEmpty(type) && !isEmpty(name)) {
for (Graph graph : graphs) {
int indexOfperiod = periods.indexOf(graph.getPeriod());
String detailContent = graph.getDetailContent();
String[] allLines = detailContent.split("\n");
for (int j = 0; j < allLines.length; j++) {
String[] records = allLines[j].split("\t");
if (records[DetailOrder.TYPE.ordinal()].equals(type) && records[DetailOrder.NAME.ordinal()].equals(name)) {
total_count[indexOfperiod] = Double.valueOf(records[DetailOrder.TOTAL_COUNT.ordinal()]);
failure_count[indexOfperiod] = Double.valueOf(records[DetailOrder.FAILURE_COUNT.ordinal()]);
min[indexOfperiod] = Double.valueOf(records[DetailOrder.MIN.ordinal()]);
max[indexOfperiod] = Double.valueOf(records[DetailOrder.MAX.ordinal()]);
sum[indexOfperiod] = Double.valueOf(records[DetailOrder.SUM.ordinal()]);
sum2[indexOfperiod] = Double.valueOf(records[DetailOrder.SUM2.ordinal()]);
}
}
}
}
result.put("total_count", total_count);
result.put("failure_count", failure_count);
result.put("min", min);
result.put("max", max);
result.put("sum", sum);
result.put("sum2", sum2);
return result;
}
private boolean isEmpty(String content) {
return content == null || content.equals("");
}
public enum SummaryOrder {
TYPE, TOTAL_COUNT, FAILURE_COUNT, MIN, MAX, SUM, SUM2
}
public enum DetailOrder {
TYPE, NAME, TOTAL_COUNT, FAILURE_COUNT, MIN, MAX, SUM, SUM2
}
} }
...@@ -396,7 +396,7 @@ public class DefaultTaskConsumer extends TaskConsumer implements LogEnabled { ...@@ -396,7 +396,7 @@ public class DefaultTaskConsumer extends TaskConsumer implements LogEnabled {
graphs.add(graph); graphs.add(graph);
} }
Graph allGraph = new Graph(); Graph allGraph = new Graph();
allGraph.setIp(null); allGraph.setIp(null);
allGraph.setDomain(domainName); allGraph.setDomain(domainName);
allGraph.setName(reportName); allGraph.setName(reportName);
......
...@@ -450,12 +450,24 @@ ...@@ -450,12 +450,24 @@
<requirement> <requirement>
<role>com.dianping.cat.hadoop.dal.DailyreportDao</role> <role>com.dianping.cat.hadoop.dal.DailyreportDao</role>
</requirement> </requirement>
<requirement>
<role>com.dianping.cat.hadoop.dal.GraphDao</role>
</requirement>
</requirements> </requirements>
</component> </component>
<component> <component>
<role>com.dianping.cat.report.page.transaction.JspViewer</role> <role>com.dianping.cat.report.page.transaction.JspViewer</role>
<implementation>com.dianping.cat.report.page.transaction.JspViewer</implementation> <implementation>com.dianping.cat.report.page.transaction.JspViewer</implementation>
</component> </component>
<component>
<role>com.dianping.cat.hadoop.dal.GraphDao</role>
<implementation>com.dianping.cat.hadoop.dal.GraphDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component> <component>
<role>com.dianping.cat.report.page.event.Handler</role> <role>com.dianping.cat.report.page.event.Handler</role>
<implementation>com.dianping.cat.report.page.event.Handler</implementation> <implementation>com.dianping.cat.report.page.event.Handler</implementation>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
</style> </style>
<script type="text/javascript" src="/cat/js/jquery-1.7.1.js"></script> <script type="text/javascript" src="/cat/js/jquery-1.7.1.js"></script>
<script type="text/javascript" src="/cat/js/flotr2.js"></script> <script type="text/javascript" src="/cat/js/flotr2.js"></script>
<script type="text/javascript" src="/cat/js/graph.js"></script> <script type="text/javascript" src="/cat/js/transactionGraph.js"></script>
<table> <table>
<tr> <tr>
......
package com.dianping.cat.report.page.transaction;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import junit.framework.Assert;
import org.junit.Test;
import com.dianping.cat.hadoop.dal.Graph;
public class GraphDateTest {
public static final long ONE_HOUR = 3600 * 1000L;
@Test
public void testBuildGraphDatesByType(){
Handler handler=new Handler();
SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHH");
try {
Date start=sf.parse("2012060612");
Date end= sf.parse("2012060622");
List<Graph> graphs=buildGraph(start,end);
String type="URL";
Map<String, double[]> graphDates=handler.buildGraphDates(start, end, type, null, graphs);
double[] total_count ={15,15,15,15,15,15,15,15,15,15};
double[] failure_count = {0,0,0,0,0,0,0,0,0,0};
double[] min = {11.836555,11.836555,11.836555,11.836555,11.836555,11.836555,11.836555,11.836555,11.836555,11.836555};
double[] max = {225244.724,225244.724,225244.724,225244.724,225244.724,225244.724,225244.724,225244.724,225244.724,225244.724};
double[] sum = {234038.7,234038.7,234038.7,234038.7,234038.7,234038.7,234038.7,234038.7,234038.7,234038.7};
double[] sum2 ={5.07448582695E10,5.07448582695E10,5.07448582695E10,5.07448582695E10,5.07448582695E10,5.07448582695E10,5.07448582695E10,5.07448582695E10,5.07448582695E10,5.07448582695E10};
double[] expectTotalCount=graphDates.get("total_count");
double[] expectFailureCount=graphDates.get("failure_count");
double[] expectMin=graphDates.get("min");
double[] expectMax=graphDates.get("max");
double[] expectSum2=graphDates.get("sum2");
double[] expectSum=graphDates.get("sum");
Assert.assertEquals(true,Arrays.equals(total_count, expectTotalCount) );
Assert.assertEquals(true,Arrays.equals(failure_count, expectFailureCount));
Assert.assertEquals(true,Arrays.equals(min, expectMin));
Assert.assertEquals(true,Arrays.equals(max,expectMax));
Assert.assertEquals(true,Arrays.equals(sum,expectSum ));
Assert.assertEquals(true,Arrays.equals(sum2,expectSum2));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testBuildGraphDatesByTypeAndName(){
Handler handler=new Handler();
SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHH");
try {
Date start=sf.parse("2012060612");
Date end= sf.parse("2012060622");
List<Graph> graphs=buildGraph(start,end);
String type="Result";
String name="cacheService:cacheConfigService_1.0.0:getKeyConfigurations";
Map<String, double[]> graphDates=handler.buildGraphDates(start, end, type, name, graphs);
double[] total_count ={6,6,6,6,6,6,6,6,6,6};
double[] failure_count = {0,0,0,0,0,0,0,0,0,0};
double[] min = {6.83,6.83,6.83,6.83,6.83,6.83,6.83,6.83,6.83,6.83};
double[] max = {7.583,7.583,7.583,7.583,7.583,7.583,7.583,7.583,7.583,7.583};
double[] sum = {43.2,43.2,43.2,43.2,43.2,43.2,43.2,43.2,43.2,43.2};
double[] sum2 ={311.0,311.0,311.0,311.0,311.0,311.0,311.0,311.0,311.0,311.0};
double[] expectTotalCount=graphDates.get("total_count");
double[] expectFailureCount=graphDates.get("failure_count");
double[] expectMin=graphDates.get("min");
double[] expectMax=graphDates.get("max");
double[] expectSum2=graphDates.get("sum2");
double[] expectSum=graphDates.get("sum");
Assert.assertEquals(true,Arrays.equals(total_count, expectTotalCount) );
Assert.assertEquals(true,Arrays.equals(failure_count, expectFailureCount));
Assert.assertEquals(true,Arrays.equals(min, expectMin));
Assert.assertEquals(true,Arrays.equals(max,expectMax));
Assert.assertEquals(true,Arrays.equals(sum,expectSum ));
Assert.assertEquals(true,Arrays.equals(sum2,expectSum2));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testBuildGraphDatesEmpty(){
Handler handler=new Handler();
SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHH");
try {
Date start=sf.parse("2012060612");
Date end= sf.parse("2012060622");
List<Graph> graphs=buildGraph(start,end);
String type="Result";
String name="Result";
Map<String, double[]> graphDates=handler.buildGraphDates(start, end, type, name, graphs);
double[] expectSum = {0,0,0,0,0,0,0,0,0,0};
double[] sum=graphDates.get("sum");
Assert.assertEquals(true,Arrays.equals(sum,expectSum ));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private List<Graph> buildGraph(Date start,Date end){
List<Graph> graphs = new ArrayList<Graph>();
String summary="Call 13704 0 0.993 505.822 133680.3 7678055.5"+"\n"+
"Result 13704 0 0.096 73.104 13377.4 156669.3"+"\n"+
"Task 26 0 36.406555 60.022 1102.4 47641.6"+"\n"+
"URL 15 0 11.836555 225244.724 234038.7 5.07448582695E10"+"\n";
String detail="Call cacheService:cacheConfigService_1.0.0:getCacheConfigurations 6 0 261.046 481.68 2369.7 989806.8"+"\n"+
"Call cacheService:cacheConfigService_1.0.0:getKeyConfigurations 6 0 40.301 43.161 250.6 10472.6"+"\n"+
"Call shopService:shopService_1.0.0:findShopRegions 2348 0 1.874 505.822 31048.6 1893017.0"+"\n"+
"Call shopService:shopService_1.0.0:findShops 11344 0 0.993 294.569 100011.4 4784759.1"+"\n"+
"Result cacheService:cacheConfigService_1.0.0:getCacheConfigurations 6 0 28.769 64.718 302.0 16596.8"+"\n"+
"Result cacheService:cacheConfigService_1.0.0:getKeyConfigurations 6 0 6.83 7.583 43.2 311.0";
List<Date> periods = new ArrayList<Date>();
for (long i = start.getTime(); i < end.getTime(); i = i + ONE_HOUR) {
periods.add(new Date(i));
}
for(int i=0;i<10;i++){
Graph graph=new Graph();
graph.setDetailContent(detail);
graph.setSummaryContent(summary);
graphs.add(graph);
graph.setPeriod(periods.get(i));
}
return graphs;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册