diff --git a/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java b/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java index b3727500dc2e9a840e5d70e98cee255be90d21e7..062d35049a59742070261306d12ec2b52a897ddb 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java @@ -495,6 +495,7 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag MessageBlock block = m_messageBlocks.poll(5, TimeUnit.MILLISECONDS); if (block != null) { + long time = System.currentTimeMillis(); String dataFile = block.getDataFile(); LocalMessageBucket bucket = m_buckets.get(dataFile); @@ -508,11 +509,12 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag new RuntimeException("Error when dumping for bucket: " + dataFile + ".", e)); } } - m_success++; m_serverStateManager.addBlockTotal(1); - if (m_success % 10000 == 0) { + if ((++m_success) % 10000 == 0) { m_logger.info("block queue size " + m_messageBlocks.size()); } + long duration = System.currentTimeMillis() - time; + m_serverStateManager.addBlockTime(duration); } } } catch (InterruptedException e) { diff --git a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java index 68029bebe4e400f1fadf917d1df9e7714bdad3d4..25760b534c9727dacbdf97b58892dd2795e25fbc 100755 --- a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java @@ -16,6 +16,7 @@ import com.dainping.cat.consumer.dal.report.ReportDao; import com.dainping.cat.consumer.dal.report.TaskDao; import com.dianping.cat.CatHomeModule; import com.dianping.cat.configuration.ServerConfigManager; +import com.dianping.cat.home.dal.report.DailygraphDao; import com.dianping.cat.home.dal.report.DailyreportDao; import com.dianping.cat.home.dal.report.GraphDao; import com.dianping.cat.home.dal.report.MonthreportDao; @@ -105,39 +106,39 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(StateMerger.class)); all.add(C(TransactionReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, TransactionGraphCreator.class)// + .req(GraphDao.class,DailygraphDao.class, ReportDao.class, DailyreportDao.class, TransactionGraphCreator.class)// .req(TransactionMerger.class, WeeklyreportDao.class, MonthreportDao.class)); all.add(C(EventReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, EventGraphCreator.class, EventMerger.class)// + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, EventGraphCreator.class, EventMerger.class)// .req(WeeklyreportDao.class, MonthreportDao.class)); all.add(C(ProblemReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, ProblemGraphCreator.class) // + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, ProblemGraphCreator.class) // .req(WeeklyreportDao.class, MonthreportDao.class, ProblemMerger.class)); all.add(C(HeartbeatReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, HeartbeatGraphCreator.class).req( + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, HeartbeatGraphCreator.class).req( HeartbeatMerger.class, WeeklyreportDao.class, MonthreportDao.class)); all.add(C(MatrixReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, MatrixMerger.class)// + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, MatrixMerger.class)// .req(WeeklyreportDao.class, MonthreportDao.class)); all.add(C(DatabaseReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, DatabaseMerger.class)// + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, DatabaseMerger.class)// .req(WeeklyreportDao.class, MonthreportDao.class)); all.add(C(SqlReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, SqlMerger.class)// + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, SqlMerger.class)// .req(WeeklyreportDao.class, MonthreportDao.class)); all.add(C(CrossReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, CrossMerger.class)// + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, CrossMerger.class)// .req(WeeklyreportDao.class, MonthreportDao.class)); all.add(C(StateReportBuilder.class) // - .req(GraphDao.class, ReportDao.class, DailyreportDao.class, StateMerger.class)// + .req(GraphDao.class, DailygraphDao.class,ReportDao.class, DailyreportDao.class, StateMerger.class)// .req(WeeklyreportDao.class, MonthreportDao.class)); all.add(C(TaskProducer.class, TaskProducer.class) // diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/event/HistoryGraphs.java b/cat-home/src/main/java/com/dianping/cat/report/page/event/HistoryGraphs.java index 31b0f7a87a0e5a6996ccd10e416611b171e437c0..90b3449b8948c77f1a1a5d599d680b3e4960cef9 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/event/HistoryGraphs.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/event/HistoryGraphs.java @@ -6,8 +6,15 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.unidal.dal.jdbc.DalNotFoundException; +import org.unidal.lookup.annotation.Inject; +import org.unidal.lookup.util.StringUtils; + import com.dianping.cat.Cat; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.dal.report.Dailygraph; +import com.dianping.cat.home.dal.report.DailygraphDao; +import com.dianping.cat.home.dal.report.DailygraphEntity; import com.dianping.cat.home.dal.report.Graph; import com.dianping.cat.home.dal.report.GraphDao; import com.dianping.cat.home.dal.report.GraphEntity; @@ -15,14 +22,13 @@ import com.dianping.cat.report.page.HistoryGraphItem; import com.dianping.cat.report.page.event.Handler.DetailOrder; import com.dianping.cat.report.page.event.Handler.SummaryOrder; -import org.unidal.dal.jdbc.DalNotFoundException; -import org.unidal.lookup.annotation.Inject; -import org.unidal.lookup.util.StringUtils; - public class HistoryGraphs { @Inject private GraphDao m_graphDao; + + @Inject + private DailygraphDao m_dailyGraphDao; private void appendArray(double[] src, int index, String str, int size) { String[] values = str.split(","); @@ -37,7 +43,7 @@ public class HistoryGraphs { } } - public Map buildGraphDatas(Date start, Date end, String type, String name, List graphs) { + public Map buildGraphDatasForHour(Date start, Date end, String type, String name, List graphs) { Map result = new HashMap(); int size = (int) ((end.getTime() - start.getTime()) / TimeUtil.ONE_HOUR * 12); double[] total_count = new double[size]; @@ -76,12 +82,53 @@ public class HistoryGraphs { result.put("failure_count", failure_count); return result; } + + public Map buildGraphDatasForDaily(Date start, Date end, String type, String name, + List graphs) { + Map result = new HashMap(); + int size = (int) ((end.getTime() - start.getTime()) / TimeUtil.ONE_DAY); + double[] total_count = new double[size]; + double[] failure_count = new double[size]; - private HistoryGraphItem buildTotal(List> datas, Date start, int size, String name) { + if (!StringUtils.isEmpty(type) && StringUtils.isEmpty(name)) { + for (Dailygraph graph : graphs) { + int indexOfperiod = (int) ((graph.getPeriod().getTime() - start.getTime()) / TimeUtil.ONE_DAY); + 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()]); + } + } + } + } else if (!StringUtils.isEmpty(type) && !StringUtils.isEmpty(name)) { + for (Dailygraph graph : graphs) { + int indexOfperiod = (int) ((graph.getPeriod().getTime() - start.getTime()) / TimeUtil.ONE_DAY); + 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()]); + } + } + } + } + + result.put("total_count", total_count); + result.put("failure_count", failure_count); + return result; + } + + private HistoryGraphItem buildTotal(List> datas, Date start, int size,long step, String name) { HistoryGraphItem item = new HistoryGraphItem(); item.setStart(start); item.setSize(size); + item.setStep(step); item.setTitles(name + " Hits (count)"); for (Map data : datas) { @@ -91,11 +138,12 @@ public class HistoryGraphs { return item; } - private HistoryGraphItem buildFail(List> datas, Date start, int size, String name) { + private HistoryGraphItem buildFail(List> datas, Date start, int size,long step, String name) { HistoryGraphItem item = new HistoryGraphItem(); item.setStart(start); item.setSize(size); + item.setStep(step); item.setTitles(name + " Error (count)"); for (Map data : datas) { @@ -113,41 +161,67 @@ public class HistoryGraphs { int size = (int) ((end.getTime() - start.getTime()) * 12 / TimeUtil.ONE_HOUR); String queryType = payload.getReportType(); List> allDatas = new ArrayList>(); - + long step = TimeUtil.ONE_MINUTE * 5; + if (queryType.equalsIgnoreCase("day")) { - Map currentGraph = getGraphDatas(start, end, model, payload); - Map lastDayGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_DAY), + Map currentGraph = getGraphDatasForHour(start, end, model, payload); + Map lastDayGraph = getGraphDatasForHour(new Date(start.getTime() - TimeUtil.ONE_DAY), new Date(end.getTime() - TimeUtil.ONE_DAY), model, payload); - Map lastWeekGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK), new Date( + Map lastWeekGraph = getGraphDatasForHour(new Date(start.getTime() - TimeUtil.ONE_WEEK), new Date( end.getTime() - TimeUtil.ONE_WEEK), model, payload); allDatas.add(currentGraph); allDatas.add(lastDayGraph); allDatas.add(lastWeekGraph); } else if (queryType.equalsIgnoreCase("week")) { - Map currentGraph = getGraphDatas(start, end, model, payload); - Map lastWeek = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK), + Map currentGraph = getGraphDatasForHour(start, end, model, payload); + Map lastWeek = getGraphDatasForHour(new Date(start.getTime() - TimeUtil.ONE_WEEK), new Date(end.getTime() - TimeUtil.ONE_WEEK), model, payload); allDatas.add(currentGraph); allDatas.add(lastWeek); } else if (queryType.equalsIgnoreCase("month")) { - Map graphData = getGraphDatas(start, end, model, payload); + size = (int) ((end.getTime() - start.getTime()) / TimeUtil.ONE_DAY); + step = TimeUtil.ONE_DAY; + Map graphData = getGraphDatasFromDaily(start, end, model, payload); allDatas.add(graphData); } else { throw new RuntimeException("Error graph query type"); } - HistoryGraphItem item = buildTotal(allDatas, start, size, display); + HistoryGraphItem item = buildTotal(allDatas, start, size,step, display); model.setHitTrend(item.getJsonString()); - item = buildFail(allDatas, start, size, display); + item = buildFail(allDatas, start, size, step,display); model.setFailureTrend(item.getJsonString()); } - public Map getGraphDatas(Date start,Date end,Model model, Payload payload) { + private Map getGraphDatasFromDaily(Date start, Date end, Model model, Payload payload) { + String domain = model.getDomain(); + String type = payload.getType(); + String name = payload.getName(); + String ip = model.getIpAddress(); + String queryIp = "All".equals(ip) == true ? "all" : ip; + List graphs = new ArrayList(); + + for (long startLong = start.getTime(); startLong < end.getTime(); startLong = startLong + TimeUtil.ONE_DAY) { + try { + Dailygraph graph = m_dailyGraphDao.findSingalByDomainNameIpDuration(new Date(startLong), queryIp, domain, + name, DailygraphEntity.READSET_FULL); + graphs.add(graph); + } catch (DalNotFoundException e) { + } catch (Exception e) { + Cat.logError(e); + } + } + Map result = buildGraphDatasForDaily(start, end, type, name, graphs); + return result; + } + + + public Map getGraphDatasForHour(Date start,Date end,Model model, Payload payload) { String domain = model.getDomain(); String type = payload.getType(); String name = payload.getName(); @@ -164,7 +238,7 @@ public class HistoryGraphs { Cat.logError(e); } } - Map result = buildGraphDatas(start, end, type, name, events); + Map result = buildGraphDatasForHour(start, end, type, name, events); return result; } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/transaction/HistoryGraphs.java b/cat-home/src/main/java/com/dianping/cat/report/page/transaction/HistoryGraphs.java index 43b3e8143c4bbe24b3ea9a65443edcebe829a1c6..6645f39e268857e9ee9ed4e2056c63a4d13c6c6c 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/transaction/HistoryGraphs.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/transaction/HistoryGraphs.java @@ -10,8 +10,10 @@ import org.unidal.dal.jdbc.DalNotFoundException; import org.unidal.lookup.annotation.Inject; import org.unidal.lookup.util.StringUtils; -import com.dianping.cat.Cat; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.dal.report.Dailygraph; +import com.dianping.cat.home.dal.report.DailygraphDao; +import com.dianping.cat.home.dal.report.DailygraphEntity; import com.dianping.cat.home.dal.report.Graph; import com.dianping.cat.home.dal.report.GraphDao; import com.dianping.cat.home.dal.report.GraphEntity; @@ -26,6 +28,9 @@ public class HistoryGraphs { @Inject private GraphDao m_graphDao; + @Inject + private DailygraphDao m_dailyGraphDao; + private void appendArray(double[] src, int index, String str, int size) { String[] values = str.split(","); if (values.length < size) { @@ -39,7 +44,8 @@ public class HistoryGraphs { } } - public Map buildGraphDatas(Date start, Date end, String type, String name, List graphs) { + public Map buildGraphDatasForHour(Date start, Date end, String type, String name, + List graphs) { Map result = new HashMap(); int size = (int) ((end.getTime() - start.getTime()) * 12 / TimeUtil.ONE_HOUR); double[] total_count = new double[size]; @@ -88,11 +94,62 @@ public class HistoryGraphs { return result; } - private HistoryGraphItem buildAvg(List> datas, Date start, int size, String name) { + public Map buildGraphDatasForDaily(Date start, Date end, String type, String name, + List graphs) { + Map result = new HashMap(); + int size = (int) ((end.getTime() - start.getTime()) / TimeUtil.ONE_DAY); + double[] total_count = new double[size]; + double[] failure_count = new double[size]; + double[] sum = new double[size]; + + for (int i = 0; i < size; i++) { + total_count[i] = NOTEXIST; + failure_count[i] = NOTEXIST; + sum[i] = NOTEXIST; + } + + if (!StringUtils.isEmpty(type) && StringUtils.isEmpty(name)) { + for (Dailygraph graph : graphs) { + int indexOfperiod = (int) ((graph.getPeriod().getTime() - start.getTime()) / TimeUtil.ONE_DAY); + 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()]); + sum[indexOfperiod] = Double.valueOf(records[SummaryOrder.SUM.ordinal()]); + } + } + } + } else if (!StringUtils.isEmpty(type) && !StringUtils.isEmpty(name)) { + for (Dailygraph graph : graphs) { + int indexOfperiod = (int) ((graph.getPeriod().getTime() - start.getTime()) / TimeUtil.ONE_DAY); + 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()]); + sum[indexOfperiod] = Double.valueOf(records[DetailOrder.SUM.ordinal()]); + } + } + } + } + + result.put("total_count", total_count); + result.put("failure_count", failure_count); + result.put("sum", sum); + return result; + } + + private HistoryGraphItem buildAvg(List> datas, Date start, int size, long step, String name) { HistoryGraphItem item = new HistoryGraphItem(); item.setStart(start); item.setSize(size); + item.setStep(step); item.setTitles(name + " Response Time (ms)"); for (Map data : datas) { @@ -109,11 +166,12 @@ public class HistoryGraphs { return item; } - private HistoryGraphItem buildTotal(List> datas, Date start, int size, String name) { + private HistoryGraphItem buildTotal(List> datas, Date start, int size, long step, String name) { HistoryGraphItem item = new HistoryGraphItem(); item.setStart(start); item.setSize(size); + item.setStep(step); item.setTitles(name + " Hits (count)"); for (Map data : datas) { @@ -123,11 +181,12 @@ public class HistoryGraphs { return item; } - private HistoryGraphItem buildFail(List> datas, Date start, int size, String name) { + private HistoryGraphItem buildFail(List> datas, Date start, int size, long step, String name) { HistoryGraphItem item = new HistoryGraphItem(); item.setStart(start); item.setSize(size); + item.setStep(step); item.setTitles(name + " Error (count)"); for (Map data : datas) { @@ -145,42 +204,68 @@ public class HistoryGraphs { int size = (int) ((end.getTime() - start.getTime()) * 12 / TimeUtil.ONE_HOUR); String queryType = payload.getReportType(); List> allDatas = new ArrayList>(); - + long step = TimeUtil.ONE_MINUTE * 5; + if (queryType.equalsIgnoreCase("day")) { - Map currentGraph = getGraphDatas(start, end, model, payload); - Map lastDayGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_DAY), + Map currentGraph = getGraphDatasFromHour(start, end, model, payload); + Map lastDayGraph = getGraphDatasFromHour(new Date(start.getTime() - TimeUtil.ONE_DAY), new Date(end.getTime() - TimeUtil.ONE_DAY), model, payload); - Map lastWeekGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK), new Date( - end.getTime() - TimeUtil.ONE_WEEK), model, payload); + Map lastWeekGraph = getGraphDatasFromHour(new Date(start.getTime() - TimeUtil.ONE_WEEK), + new Date(end.getTime() - TimeUtil.ONE_WEEK), model, payload); allDatas.add(currentGraph); allDatas.add(lastDayGraph); allDatas.add(lastWeekGraph); } else if (queryType.equalsIgnoreCase("week")) { - Map currentGraph = getGraphDatas(start, end, model, payload); - Map lastWeek = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK), + Map currentGraph = getGraphDatasFromHour(start, end, model, payload); + Map lastWeek = getGraphDatasFromHour(new Date(start.getTime() - TimeUtil.ONE_WEEK), new Date(end.getTime() - TimeUtil.ONE_WEEK), model, payload); allDatas.add(currentGraph); allDatas.add(lastWeek); } else if (queryType.equalsIgnoreCase("month")) { - Map graphData = getGraphDatas(start, end, model, payload); - + size = (int) ((end.getTime() - start.getTime()) / TimeUtil.ONE_DAY); + step = TimeUtil.ONE_DAY; + Map graphData = getGraphDatasFromDaily(start, end, model, payload); + allDatas.add(graphData); } else { throw new RuntimeException("Error graph query type"); } - HistoryGraphItem item = buildAvg(allDatas, start, size, display); + HistoryGraphItem item = buildAvg(allDatas, start, size, step, display); model.setResponseTrend(item.getJsonString()); - item = buildTotal(allDatas, start, size, display); + item = buildTotal(allDatas, start, size, step, display); model.setHitTrend(item.getJsonString()); - item = buildFail(allDatas, start, size, display); + item = buildFail(allDatas, start, size, step, display); model.setErrorTrend(item.getJsonString()); } - public Map getGraphDatas(Date start, Date end, Model model, Payload payload) { + private Map getGraphDatasFromDaily(Date start, Date end, Model model, Payload payload) { + String domain = model.getDomain(); + String type = payload.getType(); + String name = payload.getName(); + String ip = model.getIpAddress(); + String queryIp = "All".equals(ip) == true ? "all" : ip; + List graphs = new ArrayList(); + + for (long startLong = start.getTime(); startLong < end.getTime(); startLong = startLong + TimeUtil.ONE_DAY) { + try { + Dailygraph graph = m_dailyGraphDao.findSingalByDomainNameIpDuration(new Date(startLong), queryIp, domain, + "transaction", DailygraphEntity.READSET_FULL); + graphs.add(graph); + } catch (DalNotFoundException e) { + } catch (Exception e) { + e.printStackTrace(); + //Cat.logError(e); + } + } + Map result = buildGraphDatasForDaily(start, end, type, name, graphs); + return result; + } + + public Map getGraphDatasFromHour(Date start, Date end, Model model, Payload payload) { String domain = model.getDomain(); String type = payload.getType(); String name = payload.getName(); @@ -195,10 +280,11 @@ public class HistoryGraphs { graphs.add(graph); } catch (DalNotFoundException e) { } catch (Exception e) { - Cat.logError(e); + e.printStackTrace(); + //Cat.logError(e); } } - Map result = buildGraphDatas(start, end, type, name, graphs); + Map result = buildGraphDatasForHour(start, end, type, name, graphs); return result; } } \ No newline at end of file diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/event/DailyEventGraphCreator.java b/cat-home/src/main/java/com/dianping/cat/report/task/event/DailyEventGraphCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..4c0e99b82be848a88cd18ad85ad7662f10832f70 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/event/DailyEventGraphCreator.java @@ -0,0 +1,84 @@ +package com.dianping.cat.report.task.event; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.dianping.cat.consumer.event.model.entity.EventName; +import com.dianping.cat.consumer.event.model.entity.EventReport; +import com.dianping.cat.consumer.event.model.entity.EventType; +import com.dianping.cat.consumer.event.model.entity.Machine; +import com.dianping.cat.consumer.event.model.transform.BaseVisitor; +import com.dianping.cat.home.dal.report.Dailygraph; + +public class DailyEventGraphCreator { + + private List m_graphs = new ArrayList(); + + private EventReport m_report; + + public List buildDailygraph(EventReport report) { + m_report = report; + new EventReportVisitor().visitEventReport(report); + + return m_graphs; + } + + private Dailygraph buildDailyGraph(String ip) { + Dailygraph graph = new Dailygraph(); + + graph.setDomain(m_report.getDomain()); + graph.setPeriod(m_report.getStartTime()); + graph.setName("event"); + graph.setIp(ip); + graph.setType(3); + graph.setCreationDate(new Date()); + return graph; + } + + public class EventReportVisitor extends BaseVisitor { + + private String m_currentIp; + + private String m_currentType; + + private Dailygraph m_currentDailygraph; + + private StringBuilder m_summaryContent; + + private StringBuilder m_detailContent; + + @Override + public void visitMachine(Machine machine) { + m_currentIp = machine.getIp(); + m_currentDailygraph = buildDailyGraph(m_currentIp); + m_graphs.add(m_currentDailygraph); + m_summaryContent = new StringBuilder(); + m_detailContent = new StringBuilder(); + + super.visitMachine(machine); + m_currentDailygraph.setDetailContent(m_detailContent.toString()); + m_currentDailygraph.setSummaryContent(m_summaryContent.toString()); + } + + @Override + public void visitName(EventName name) { + // TYPE, NAME, TOTAL_COUNT, FAILURE_COUNT + m_detailContent.append(m_currentType).append('\t'); + m_detailContent.append(name.getId()).append('\t'); + m_detailContent.append(name.getTotalCount()).append('\t'); + m_detailContent.append(name.getFailCount()).append('\t').append('\n'); + super.visitName(name); + } + + @Override + public void visitType(EventType type) { + // TYPE, TOTAL_COUNT, FAILURE_COUNT + m_currentType = type.getId(); + m_summaryContent.append(type.getId()).append('\t'); + m_summaryContent.append(type.getTotalCount()).append('\t'); + m_summaryContent.append(type.getFailCount()).append('\t').append('\n'); + super.visitType(type); + } + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/event/EventReportBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/task/event/EventReportBuilder.java index 0bbd2aee0dacd49fa5be017457d8d146126821b8..9df9a11fb6d194d0febabc54a2148ef8bc9ca226 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/event/EventReportBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/event/EventReportBuilder.java @@ -6,6 +6,9 @@ import java.util.Date; import java.util.List; import java.util.Set; +import org.unidal.dal.jdbc.DalException; +import org.unidal.lookup.annotation.Inject; + import com.dainping.cat.consumer.dal.report.Report; import com.dainping.cat.consumer.dal.report.ReportEntity; import com.dianping.cat.Cat; @@ -13,6 +16,7 @@ import com.dianping.cat.configuration.NetworkInterfaceManager; import com.dianping.cat.consumer.event.model.entity.EventReport; import com.dianping.cat.consumer.event.model.transform.DefaultSaxParser; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.dal.report.Dailygraph; import com.dianping.cat.home.dal.report.Dailyreport; import com.dianping.cat.home.dal.report.DailyreportEntity; import com.dianping.cat.home.dal.report.Graph; @@ -22,8 +26,6 @@ import com.dianping.cat.report.page.model.event.EventReportMerger; import com.dianping.cat.report.task.TaskHelper; import com.dianping.cat.report.task.spi.AbstractReportBuilder; import com.dianping.cat.report.task.spi.ReportBuilder; -import org.unidal.dal.jdbc.DalException; -import org.unidal.lookup.annotation.Inject; public class EventReportBuilder extends AbstractReportBuilder implements ReportBuilder { @@ -36,7 +38,24 @@ public class EventReportBuilder extends AbstractReportBuilder implements ReportB @Override public boolean buildDailyReport(String reportName, String reportDomain, Date reportPeriod) { try { - Dailyreport report = getDailyReportData(reportName, reportDomain, reportPeriod); + EventReport eventReport = getDailyReportData(reportName, reportDomain, reportPeriod); + + try { + buildDailyEventGraph(eventReport); + } catch (Exception e) { + Cat.logError(e); + } + + String content = eventReport.toString(); + Dailyreport report = m_dailyReportDao.createLocal(); + + report.setContent(content); + report.setCreationDate(new Date()); + report.setDomain(reportDomain); + report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); + report.setName(reportName); + report.setPeriod(reportPeriod); + report.setType(1); m_dailyReportDao.insert(report); return true; } catch (Exception e) { @@ -44,7 +63,19 @@ public class EventReportBuilder extends AbstractReportBuilder implements ReportB return false; } } + + private void buildDailyEventGraph(EventReport report) { + DailyEventGraphCreator creator = new DailyEventGraphCreator(); + List graphs = creator.buildDailygraph(report); + for (Dailygraph graph : graphs) { + try { + m_dailygraphDao.insert(graph); + } catch (DalException e) { + Cat.logError(e); + } + } + } @Override public boolean buildHourReport(String reportName, String reportDomain, Date reportPeriod) { try { @@ -61,24 +92,14 @@ public class EventReportBuilder extends AbstractReportBuilder implements ReportB return true; } - private Dailyreport getDailyReportData(String reportName, String reportDomain, Date reportPeriod) + private EventReport getDailyReportData(String reportName, String reportDomain, Date reportPeriod) throws DalException { Date endDate = TaskHelper.tomorrowZero(reportPeriod); Set domainSet = getDomainsFromHourlyReport(reportPeriod, endDate); - String content = null; List reports = m_reportDao.findAllByDomainNameDuration(reportPeriod, endDate, reportDomain, reportName, ReportEntity.READSET_FULL); - content = m_eventMerger.mergeForDaily(reportDomain, reports, domainSet).toString(); - Dailyreport report = m_dailyReportDao.createLocal(); - report.setContent(content); - report.setCreationDate(new Date()); - report.setDomain(reportDomain); - report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); - report.setName(reportName); - report.setPeriod(reportPeriod); - report.setType(1); - return report; + return m_eventMerger.mergeForDaily(reportDomain, reports, domainSet); } @@ -86,22 +107,14 @@ public class EventReportBuilder extends AbstractReportBuilder implements ReportB List graphs = new ArrayList(); List reports = m_reportDao.findAllByPeriodDomainName(reportPeriod, reportDomain, reportName, ReportEntity.READSET_FULL); - EventReport transactionReport = m_eventMerger.mergeForGraph(reportDomain, reports); - graphs = m_eventGraphCreator.splitReportToGraphs(reportPeriod, reportDomain, reportName, transactionReport); + EventReport eventReport = m_eventMerger.mergeForGraph(reportDomain, reports); + graphs = m_eventGraphCreator.splitReportToGraphs(reportPeriod, reportDomain, reportName, eventReport); return graphs; } @Override public boolean redoDailyReport(String reportName, String reportDomain, Date reportPeriod) { - try { - Dailyreport report = getDailyReportData(reportName, reportDomain, reportPeriod); - clearDailyReport(report); - m_dailyReportDao.insert(report); - return true; - } catch (Exception e) { - Cat.logError(e); - return false; - } + return false; } @Override diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/spi/AbstractReportBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/task/spi/AbstractReportBuilder.java index 6da95fda5d88e023eebf2852cb2129cabb5b35f6..56b8430acfd5f2b0d3481b171a7d6c9ac98115a5 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/spi/AbstractReportBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/spi/AbstractReportBuilder.java @@ -6,18 +6,20 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.unidal.dal.jdbc.DalException; +import org.unidal.lookup.annotation.Inject; + import com.dainping.cat.consumer.dal.report.Report; import com.dainping.cat.consumer.dal.report.ReportDao; import com.dainping.cat.consumer.dal.report.ReportEntity; import com.dianping.cat.Cat; +import com.dianping.cat.home.dal.report.DailygraphDao; import com.dianping.cat.home.dal.report.Dailyreport; import com.dianping.cat.home.dal.report.DailyreportDao; import com.dianping.cat.home.dal.report.Graph; import com.dianping.cat.home.dal.report.GraphDao; import com.dianping.cat.home.dal.report.MonthreportDao; import com.dianping.cat.home.dal.report.WeeklyreportDao; -import org.unidal.dal.jdbc.DalException; -import org.unidal.lookup.annotation.Inject; public abstract class AbstractReportBuilder { @@ -36,6 +38,9 @@ public abstract class AbstractReportBuilder { @Inject protected ReportDao m_reportDao; + @Inject + protected DailygraphDao m_dailygraphDao; + protected void clearDailyReport(Dailyreport report) throws DalException { m_dailyReportDao.deleteByDomainNamePeriod(report); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/transaction/DailyTransactionGraphCreator.java b/cat-home/src/main/java/com/dianping/cat/report/task/transaction/DailyTransactionGraphCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..1a9e973906242fc019ef6f861e7cf4fd7e3e4bcf --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/transaction/DailyTransactionGraphCreator.java @@ -0,0 +1,92 @@ +package com.dianping.cat.report.task.transaction; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.dianping.cat.consumer.transaction.model.entity.Machine; +import com.dianping.cat.consumer.transaction.model.entity.TransactionName; +import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; +import com.dianping.cat.consumer.transaction.model.entity.TransactionType; +import com.dianping.cat.consumer.transaction.model.transform.BaseVisitor; +import com.dianping.cat.home.dal.report.Dailygraph; + +public class DailyTransactionGraphCreator { + + private List m_graphs = new ArrayList(); + + private TransactionReport m_report; + + public List buildDailygraph(TransactionReport report) { + m_report = report; + new TransactionReportVisitor().visitTransactionReport(report); + + return m_graphs; + } + + private Dailygraph buildDailyGraph(String ip) { + Dailygraph graph = new Dailygraph(); + + graph.setDomain(m_report.getDomain()); + graph.setPeriod(m_report.getStartTime()); + graph.setName("transaction"); + graph.setIp(ip); + graph.setType(3); + graph.setCreationDate(new Date()); + return graph; + } + + public class TransactionReportVisitor extends BaseVisitor { + + private String m_currentIp; + + private String m_currentType; + + private Dailygraph m_currentDailygraph; + + private StringBuilder m_summaryContent; + + private StringBuilder m_detailContent; + + @Override + public void visitMachine(Machine machine) { + m_currentIp = machine.getIp(); + m_currentDailygraph = buildDailyGraph(m_currentIp); + m_graphs.add(m_currentDailygraph); + m_summaryContent = new StringBuilder(); + m_detailContent = new StringBuilder(); + + super.visitMachine(machine); + m_currentDailygraph.setDetailContent(m_detailContent.toString()); + m_currentDailygraph.setSummaryContent(m_summaryContent.toString()); + } + + @Override + public void visitName(TransactionName name) { + // TYPE, NAME, TOTAL_COUNT, FAILURE_COUNT, MIN, MAX, SUM, SUM2 + m_detailContent.append(m_currentType).append('\t'); + m_detailContent.append(name.getId()).append('\t'); + m_detailContent.append(name.getTotalCount()).append('\t'); + m_detailContent.append(name.getFailCount()).append('\t'); + m_detailContent.append(name.getMin()).append('\t'); + m_detailContent.append(name.getMax()).append('\t'); + m_detailContent.append(name.getSum()).append('\t'); + m_detailContent.append(name.getSum2()).append('\t').append('\n'); + super.visitName(name); + } + + @Override + public void visitType(TransactionType type) { + // TYPE, TOTAL_COUNT, FAILURE_COUNT, MIN, MAX, SUM, SUM2 + m_currentType = type.getId(); + m_summaryContent.append(type.getId()).append('\t'); + m_summaryContent.append(type.getTotalCount()).append('\t'); + m_summaryContent.append(type.getFailCount()).append('\t'); + m_summaryContent.append(type.getMin()).append('\t'); + m_summaryContent.append(type.getMax()).append('\t'); + m_summaryContent.append(type.getSum()).append('\t'); + m_summaryContent.append(type.getSum2()).append('\t').append('\n'); + super.visitType(type); + } + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionGraphCreator.java b/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionGraphCreator.java index f38846c4e18e6cfdbb4b8b50f5e02f02a3dcfc7d..9062d5154d27efd5fa6f76ea10457c3960800d58 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionGraphCreator.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionGraphCreator.java @@ -258,6 +258,5 @@ public class TransactionGraphCreator implements GraphCreator graphs.add(allGraph); return graphs; - } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionReportBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionReportBuilder.java index 02ff399c80505a81e5de7d236c311d494005d301..3163ef66f6a1c3f89e0ef16130cf92378c9e78a9 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionReportBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionReportBuilder.java @@ -6,6 +6,11 @@ import java.util.Date; import java.util.List; import java.util.Set; +import org.codehaus.plexus.logging.LogEnabled; +import org.codehaus.plexus.logging.Logger; +import org.unidal.dal.jdbc.DalException; +import org.unidal.lookup.annotation.Inject; + import com.dainping.cat.consumer.dal.report.Report; import com.dainping.cat.consumer.dal.report.ReportEntity; import com.dianping.cat.Cat; @@ -14,6 +19,7 @@ import com.dianping.cat.consumer.transaction.TransactionReportUrlFilter; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.dal.report.Dailygraph; import com.dianping.cat.home.dal.report.Dailyreport; import com.dianping.cat.home.dal.report.DailyreportEntity; import com.dianping.cat.home.dal.report.Graph; @@ -24,11 +30,6 @@ import com.dianping.cat.report.task.TaskHelper; import com.dianping.cat.report.task.spi.AbstractReportBuilder; import com.dianping.cat.report.task.spi.ReportBuilder; -import org.codehaus.plexus.logging.LogEnabled; -import org.codehaus.plexus.logging.Logger; -import org.unidal.dal.jdbc.DalException; -import org.unidal.lookup.annotation.Inject; - public class TransactionReportBuilder extends AbstractReportBuilder implements ReportBuilder, LogEnabled { @Inject @@ -42,8 +43,27 @@ public class TransactionReportBuilder extends AbstractReportBuilder implements R @Override public boolean buildDailyReport(String reportName, String reportDomain, Date reportPeriod) { try { - Dailyreport report = getDailyReport(reportName, reportDomain, reportPeriod); + TransactionReport transactionReport = getDailyReport(reportName, reportDomain, reportPeriod); + + try { + buildDailyTransactionGraph(transactionReport); + } catch (Exception e) { + Cat.logError(e); + } + + String content = transactionReport.toString(); + Dailyreport report = m_dailyReportDao.createLocal(); + + report.setContent(content); + report.setCreationDate(new Date()); + report.setDomain(reportDomain); + report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); + report.setName(reportName); + report.setPeriod(reportPeriod); + report.setType(1); + m_dailyReportDao.insert(report); + return true; } catch (Exception e) { m_logger.error(e.getMessage(), e); @@ -52,6 +72,19 @@ public class TransactionReportBuilder extends AbstractReportBuilder implements R } } + private void buildDailyTransactionGraph(TransactionReport report) { + DailyTransactionGraphCreator creator = new DailyTransactionGraphCreator(); + List graphs = creator.buildDailygraph(report); + + for (Dailygraph graph : graphs) { + try { + m_dailygraphDao.insert(graph); + } catch (DalException e) { + Cat.logError(e); + } + } + } + @Override public boolean buildHourReport(String reportName, String reportDomain, Date reportPeriod) { try { @@ -69,23 +102,15 @@ public class TransactionReportBuilder extends AbstractReportBuilder implements R return true; } - private Dailyreport getDailyReport(String reportName, String reportDomain, Date reportPeriod) throws DalException { + private TransactionReport getDailyReport(String reportName, String reportDomain, Date reportPeriod) + throws DalException { Date endDate = TaskHelper.tomorrowZero(reportPeriod); Set domainSet = getDomainsFromHourlyReport(reportPeriod, endDate); List reports = m_reportDao.findAllByDomainNameDuration(reportPeriod, endDate, reportDomain, reportName, ReportEntity.READSET_FULL); - String content = m_transactionMerger.mergeForDaily(reportDomain, reports, domainSet).toString(); - Dailyreport report = m_dailyReportDao.createLocal(); - report.setContent(content); - report.setCreationDate(new Date()); - report.setDomain(reportDomain); - report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); - report.setName(reportName); - report.setPeriod(reportPeriod); - report.setType(1); - return report; + return m_transactionMerger.mergeForDaily(reportDomain, reports, domainSet); } private List getHourReport(String reportName, String reportDomain, Date reportPeriod) throws DalException { @@ -99,15 +124,7 @@ public class TransactionReportBuilder extends AbstractReportBuilder implements R @Override public boolean redoDailyReport(String reportName, String reportDomain, Date reportPeriod) { - try { - Dailyreport report = getDailyReport(reportName, reportDomain, reportPeriod); - clearDailyReport(report); - m_dailyReportDao.insert(report); - return true; - } catch (Exception e) { - Cat.logError(e); - return false; - } + return false; } @Override diff --git a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml index 47d309e7f06075bc2481cb708af47e9f02bf98fd..079fa90ce81645aa004b3e344eb3856654811e14 100644 --- a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml +++ b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml @@ -25,13 +25,13 @@ ]]> - + FROM - WHERE == ${start-date} + WHERE == ${period} AND = ${domain} AND = ${name} ]]> @@ -335,9 +335,7 @@ FROM
WHERE = ${name} AND = ${domain} - - AND = ${ip} - + AND = ${ip} AND >= ${start-date} AND < ${end-date} ORDER BY ASC @@ -353,9 +351,7 @@ FROM
WHERE = ${name} AND = ${domain} - - AND = ${ip} - + AND = ${ip} AND = ${start-date} ]]> diff --git a/cat-home/src/main/resources/META-INF/plexus/components.xml b/cat-home/src/main/resources/META-INF/plexus/components.xml index 743095675db81096bcfc704099830bf3ce33af8d..004a5e09fe1b6dcf13fe130b9972c9b34696ae36 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -93,6 +93,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -120,6 +123,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -147,6 +153,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -174,6 +183,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -201,6 +213,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -225,6 +240,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -249,6 +267,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -273,6 +294,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -297,6 +321,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + com.dainping.cat.consumer.dal.report.ReportDao @@ -1511,6 +1538,18 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + + + + + com.dianping.cat.home.dal.report.DailygraphDao + com.dianping.cat.home.dal.report.DailygraphDao + + + org.unidal.dal.jdbc.QueryEngine + @@ -1554,6 +1593,9 @@ com.dianping.cat.home.dal.report.GraphDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2061,6 +2103,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2123,6 +2168,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2158,6 +2206,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2193,6 +2244,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2225,6 +2279,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2253,6 +2310,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2281,6 +2341,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2309,6 +2372,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2337,6 +2403,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + @@ -2394,6 +2463,9 @@ com.dainping.cat.consumer.dal.report.ReportDao + + com.dianping.cat.home.dal.report.DailygraphDao + diff --git a/cat-home/src/main/webapp/js/trendGraph.js b/cat-home/src/main/webapp/js/trendGraph.js index eda6f2ae52f026b5e5d96b148b10a6096b3ca190..5bc02f1f31053ec468aea9e767ed1856179e4b53 100644 --- a/cat-home/src/main/webapp/js/trendGraph.js +++ b/cat-home/src/main/webapp/js/trendGraph.js @@ -1,21 +1,22 @@ function graphReal(container, data, step) { var dataLength = data.values.length; - var real = data.values[0], - size = data.size; + var real = data.values[0], size = data.size; var start = new Date(data.start).getTime(), options, graph, i, x, o; // [ d1, d2, d3 ] var allDataArray = []; - function _rebuild_xy(line_data){ - var _arr=[]; + function _rebuild_xy(line_data) { + var _arr = []; for (i = 0; i < size; i++) { x = start + (i * step); _arr.push([ x, line_data[i] ]); - }; + } + ; return _arr; - }; - + } + ; + for (j = 0; j < dataLength; j++) { allDataArray.push(_rebuild_xy(data.values[j])); } @@ -77,7 +78,13 @@ function graphReal(container, data, step) { // default is five minutes function graph(container, data) { - graphReal(container, data, 5 * 60 * 1000); + var step = data.step; + if (step == 0) { + //deafult is five minute + graphReal(container, data, 5 * 60 * 1000); + } else { + graphReal(container, data, step); + } } function graphPieChart(container, data) { diff --git a/cat-home/src/main/webapp/jsp/report/home.jsp b/cat-home/src/main/webapp/jsp/report/home.jsp index d5bbc90f3b95cc41a8262b1feba11ad49de48746..7118628035324adffbc98d297dc19d7304d65a74 100755 --- a/cat-home/src/main/webapp/jsp/report/home.jsp +++ b/cat-home/src/main/webapp/jsp/report/home.jsp @@ -21,18 +21,19 @@ Welcome to Central Application Tracking (CAT). - + +
CAT用户手册
CAT开发者文档
CAT集成帮助文档
CAT预发环境
CAT预发环境链接

-
- - - +
项目信息修改(修改线上环境即可),请项目负责人到Project标签下,修改项目所在分组的基本信息
默认告警,邮件订阅(修改线上环境即可),请项目负责人到Alarm标签下,订阅相关异常告警、服务调用失败告警、日常邮件,Hawk会逐步下线中。
+ + + +
序号具体功能描述发布时间
1项目信息修改(修改线上环境即可),请项目负责人到Project标签下,修改项目所在分组的基本信息2012-09-01
2默认告警,邮件订阅(修改线上环境即可),请项目负责人到Alarm标签下,订阅相关异常告警、服务调用失败告警、日常邮件,Hawk会逐步下线中。2012-09-01
3Transaction\Event报表日报表、周报表支持趋势图对比2013-01-01

-
- - +
版本说明发布时间
+ @@ -43,16 +44,15 @@ Welcome to Central Application Tracking (CAT).
版本说明发布时间
0.4.11、默认禁止心跳线程获取线程锁信息,以降低对业务线程的影响。2012-09-06
0.4.01、支持开关动态关闭。2、后端存储重构,支持分布式Logview的查看(关联pigeon的call)。2012-08-20
0.3.41、规范了CAT客户端的日志。2、规范了后台模块的加载顺序。3、统一服务端配置存取。4、新增心跳报表的Http线程 2012-07-25
0.2.51、心跳消息监控新增oldgc和newgc 2、更新了ThreadLocal的线程模型(修复了一些无头消息和部分错乱消息)2012-05-01

-
- - +
序号常见问题解答
+ - +
序号常见问题问题解答
1TestCase跑不起来升级至CAT的0.4.0的版本,Pigeon版本至1.6.1
2集成了CAT,测试环境看不到信息请Check相关步骤CAT集成帮助文档
3Transaction、Event报表区间Transaction、Event历史报表,图表X轴以5分钟为刻度,Y轴表示每5分钟的值
4Problem、Hearbeat报表区间Problem、Heartbeat历史报表,图表X轴以1分钟为刻度,Y轴表示每1分钟的值
5项目信息修改(仅修改线上环境)请项目负责人到Project标签下,修改项目所在分组的基本信息
6默认告警,邮件订阅(仅修改线上环境)请项目负责人到Alarm标签下,订阅相关异常告警、服务调用失败告警、日常邮件,Hawk会逐步下线中。
795Line由于计算95line需要数据较多,为了减少内存开销,系统做了一些优化,在单个小时内某一台机器,95Line误差是1ms,但是合并成1一天,1周,1个月误差较大(仅供参考)
795Line由于计算95line需要数据较多,为了减少内存开销,系统做了一些优化,在单个小时内某一台机器,95Line误差是1ms,但是合并成1一天,1周,1个月误差较大(数据仅供参考)


diff --git a/cat-home/src/main/webapp/jsp/report/transactionHistoryGraphs.jsp b/cat-home/src/main/webapp/jsp/report/transactionHistoryGraphs.jsp index 9149814813da25f719ebdfe66d1bf0ff34357671..1882598cffc1493e6b2e55795c3398f787c8fae4 100755 --- a/cat-home/src/main/webapp/jsp/report/transactionHistoryGraphs.jsp +++ b/cat-home/src/main/webapp/jsp/report/transactionHistoryGraphs.jsp @@ -1,4 +1,10 @@ <%@ page contentType="text/html; charset=utf-8"%> +<%@ taglib prefix="w" uri="http://www.unidal.org/web/core"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="res" uri="http://www.unidal.org/webres"%> + + + @@ -6,13 +12,17 @@ - - - - - - - +
日报表:  表示From ${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm:ss')} to ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm:ss')};  表示上一天;  表示上周这一天
周报表:  表示当前From ${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm:ss')} to ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm:ss')};  表示上一周
+ + + + + + + + + + diff --git a/cat-home/src/test/java/com/dianping/cat/AllTests.java b/cat-home/src/test/java/com/dianping/cat/AllTests.java index 2ec815224268b69b50f956843204e158b38c9c53..efac06ac4e34ba146f68de260e8089757afdbd1d 100755 --- a/cat-home/src/test/java/com/dianping/cat/AllTests.java +++ b/cat-home/src/test/java/com/dianping/cat/AllTests.java @@ -31,6 +31,7 @@ import com.dianping.cat.report.task.health.HealthReportBuilderTest; import com.dianping.cat.report.task.problem.ProblemCreateGraphDataTest; import com.dianping.cat.report.task.problem.ProblemDailyGraphMergerTest; import com.dianping.cat.report.task.problem.ProblemGraphCreatorTest; +import com.dianping.cat.report.task.transaction.DailyTransactionReportGraphTest; import com.dianping.cat.report.task.transaction.HistoryTransactionMergerTest; import com.dianping.cat.report.task.transaction.TransactionDailyGraphMergerTest; import com.dianping.cat.report.task.transaction.TransactionGraphCreatorTest; @@ -99,6 +100,8 @@ import com.dianping.cat.system.notify.RenderTest; /* alarm .render */ RenderTest.class, ThresholdRuleTest.class, TemplateMergerTest.class, - ReportServiceImplTest.class, StateReportMergerTest.class }) + ReportServiceImplTest.class, StateReportMergerTest.class, + + DailyTransactionReportGraphTest.class}) public class AllTests { } diff --git a/cat-home/src/test/java/com/dianping/cat/demo/TestMaxMessage.java b/cat-home/src/test/java/com/dianping/cat/demo/TestMaxMessage.java index 689bea31916aa2db2eec2abdc4d35b1f4e1b5db0..eabaecf7dbd9d75cfe234a6defb53a80d049cfad 100644 --- a/cat-home/src/test/java/com/dianping/cat/demo/TestMaxMessage.java +++ b/cat-home/src/test/java/com/dianping/cat/demo/TestMaxMessage.java @@ -109,7 +109,6 @@ public class TestMaxMessage { @Test public void test() { - System.out.println(testTime(1356973200000l, 1356981928482l)); double ttt = 843E2; System.out.println(ttt); @@ -119,12 +118,13 @@ public class TestMaxMessage { } public double testTime(long time, long time2) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); System.out.println(sdf.format(new Date(time))); System.out.println(sdf.format(new Date(time2))); time2 = time2 - time2 % (60 * 60 * 1000); return (double) (time - time2) / (60 * 60 * 1000.0); - + } } \ No newline at end of file diff --git a/cat-home/src/test/java/com/dianping/cat/report/page/event/EventGraphDataTest.java b/cat-home/src/test/java/com/dianping/cat/report/page/event/EventGraphDataTest.java index 620a5163ccbbf8f6d448451ed1657815a8a47fe6..eb7a24e3ed5614bf7f0151cf52121d8736a4ef8a 100644 --- a/cat-home/src/test/java/com/dianping/cat/report/page/event/EventGraphDataTest.java +++ b/cat-home/src/test/java/com/dianping/cat/report/page/event/EventGraphDataTest.java @@ -33,7 +33,7 @@ public class EventGraphDataTest { Date addtime = new Date(time); graphs.add(creatGraph(addtime)); } - Map graphDatas = handler.buildGraphDatas(start, end, "URL", "", graphs); + Map graphDatas = handler.buildGraphDatasForHour(start, end, "URL", "", graphs); double[] total_count = graphDatas.get("total_count"); double[] failure_count = graphDatas.get("failure_count"); assertArray(30, total_count); @@ -54,7 +54,7 @@ public class EventGraphDataTest { Date addtime = new Date(time); graphs.add(creatGraph(addtime)); } - Map graphDatas = handler.buildGraphDatas(start, end, "URL", "ClientInfo", graphs); + Map graphDatas = handler.buildGraphDatasForHour(start, end, "URL", "ClientInfo", graphs); double[] total_count = graphDatas.get("total_count"); double[] failure_count = graphDatas.get("failure_count"); assertArray(15, total_count); diff --git a/cat-home/src/test/java/com/dianping/cat/report/page/transaction/TransactionGraphDataTest.java b/cat-home/src/test/java/com/dianping/cat/report/page/transaction/TransactionGraphDataTest.java index 6505a5d7f525d1649a795e716044a201c7be841f..3a60b5c27552c62dfbd65e8ba4349fa21ed84136 100644 --- a/cat-home/src/test/java/com/dianping/cat/report/page/transaction/TransactionGraphDataTest.java +++ b/cat-home/src/test/java/com/dianping/cat/report/page/transaction/TransactionGraphDataTest.java @@ -33,7 +33,7 @@ public class TransactionGraphDataTest { Date end = sf.parse("20120607"); List graphs = buildGraph(start, end); String type = "URL"; - Map graphDates = handler.buildGraphDatas(start, end, type, null, graphs); + Map graphDates = handler.buildGraphDatasForHour(start, end, type, null, graphs); double[] expectTotalCount = graphDates.get("total_count"); double[] expectFailureCount = graphDates.get("failure_count"); double[] expectSum = graphDates.get("sum"); @@ -55,7 +55,7 @@ public class TransactionGraphDataTest { List graphs = buildGraph(start, end); String type = "Result"; String name = "cacheService:cacheConfigService_1.0.0:getKeyConfigurations"; - Map graphDates = handler.buildGraphDatas(start, end, type, name, graphs); + Map graphDates = handler.buildGraphDatasForHour(start, end, type, name, graphs); double[] expectTotalCount = graphDates.get("total_count"); double[] expectFailureCount = graphDates.get("failure_count"); double[] expectSum = graphDates.get("sum"); @@ -78,7 +78,7 @@ public class TransactionGraphDataTest { List graphs = buildGraph(start, end); String type = "Result"; String name = "Result"; - Map graphDates = handler.buildGraphDatas(start, end, type, name, graphs); + Map graphDates = handler.buildGraphDatasForHour(start, end, type, name, graphs); double[] sum = graphDates.get("sum"); assertArray(-1.0, sum); } catch (ParseException e) { diff --git a/cat-home/src/test/java/com/dianping/cat/report/task/transaction/DailyTransactionReportGraphTest.java b/cat-home/src/test/java/com/dianping/cat/report/task/transaction/DailyTransactionReportGraphTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9af03695aa307977830b1343b7d8cbb3c17ec332 --- /dev/null +++ b/cat-home/src/test/java/com/dianping/cat/report/task/transaction/DailyTransactionReportGraphTest.java @@ -0,0 +1,28 @@ +package com.dianping.cat.report.task.transaction; + +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Test; +import org.unidal.webres.helper.Files; + +import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; +import com.dianping.cat.consumer.transaction.model.transform.DefaultDomParser; +import com.dianping.cat.home.dal.report.Dailygraph; + +public class DailyTransactionReportGraphTest { + + @Test + public void test() throws Exception { + String oldXml = Files.forIO() + .readFrom(getClass().getResourceAsStream("TransactionReportDailyGraph.xml"), "utf-8"); + TransactionReport report1 = new DefaultDomParser().parse(oldXml); + + DailyTransactionGraphCreator creator = new DailyTransactionGraphCreator(); + + List graphs = creator.buildDailygraph(report1); + + Assert.assertEquals(3, graphs.size()); + } +} diff --git a/cat-home/src/test/resources/com/dianping/cat/report/task/transaction/TransactionReportDailyGraph.xml b/cat-home/src/test/resources/com/dianping/cat/report/task/transaction/TransactionReportDailyGraph.xml new file mode 100755 index 0000000000000000000000000000000000000000..fddf267bec1bf19336989a49551390f5c346cc6b --- /dev/null +++ b/cat-home/src/test/resources/com/dianping/cat/report/task/transaction/TransactionReportDailyGraph.xml @@ -0,0 +1,99 @@ + + + Cat + 192.168.165.1 + 192.168.165.2 + + + Cat-c0a8a501-1337230848968-0 + + Cat-c0a8a501-1337230848968-0 + + + + + + Cat-c0a8a501-1337230896586-0 + + Cat-c0a8a501-1337230896586-0 + + + + + Cat-c0a8a501-1337230896586-0 + + + + + + Cat-c0a8a501-1337230848968-0 + + Cat-c0a8a501-1337230848968-0 + + + + + + + + Cat-c0a8a501-1337230848968-0 + + Cat-c0a8a501-1337230848968-0 + + + + + + Cat-c0a8a501-1337230896586-0 + + Cat-c0a8a501-1337230896586-0 + + + + + Cat-c0a8a501-1337230896586-0 + + + + + + Cat-c0a8a501-1337230848968-0 + + Cat-c0a8a501-1337230848968-0 + + + + + + + + Cat-c0a8a501-1337230848968-0 + + Cat-c0a8a501-1337230848968-0 + + + + + + Cat-c0a8a501-1337230896586-0 + + Cat-c0a8a501-1337230896586-0 + + + + + Cat-c0a8a501-1337230896586-0 + + + + + + Cat-c0a8a501-1337230848968-0 + + Cat-c0a8a501-1337230848968-0 + + + + + +
日报表:  表示${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm')} ~ ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm')};  表示上一天;  表示上周这一天
周报表:  表示当前From ${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm')} to ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm')};  表示上一周