提交 f8c05657 编写于 作者: Y youyong

modify the month graph

上级 d00e86fa
......@@ -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) {
......
......@@ -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) //
......
......@@ -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<String, double[]> buildGraphDatas(Date start, Date end, String type, String name, List<Graph> graphs) {
public Map<String, double[]> buildGraphDatasForHour(Date start, Date end, String type, String name, List<Graph> graphs) {
Map<String, double[]> result = new HashMap<String, double[]>();
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<String, double[]> buildGraphDatasForDaily(Date start, Date end, String type, String name,
List<Dailygraph> graphs) {
Map<String, double[]> result = new HashMap<String, double[]>();
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<Map<String, double[]>> 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<Map<String, double[]>> 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<String, double[]> data : datas) {
......@@ -91,11 +138,12 @@ public class HistoryGraphs {
return item;
}
private HistoryGraphItem buildFail(List<Map<String, double[]>> datas, Date start, int size, String name) {
private HistoryGraphItem buildFail(List<Map<String, double[]>> 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<String, double[]> 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<Map<String, double[]>> allDatas = new ArrayList<Map<String, double[]>>();
long step = TimeUtil.ONE_MINUTE * 5;
if (queryType.equalsIgnoreCase("day")) {
Map<String, double[]> currentGraph = getGraphDatas(start, end, model, payload);
Map<String, double[]> lastDayGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_DAY),
Map<String, double[]> currentGraph = getGraphDatasForHour(start, end, model, payload);
Map<String, double[]> lastDayGraph = getGraphDatasForHour(new Date(start.getTime() - TimeUtil.ONE_DAY),
new Date(end.getTime() - TimeUtil.ONE_DAY), model, payload);
Map<String, double[]> lastWeekGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK), new Date(
Map<String, double[]> 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<String, double[]> currentGraph = getGraphDatas(start, end, model, payload);
Map<String, double[]> lastWeek = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK),
Map<String, double[]> currentGraph = getGraphDatasForHour(start, end, model, payload);
Map<String, double[]> 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<String, double[]> graphData = getGraphDatas(start, end, model, payload);
size = (int) ((end.getTime() - start.getTime()) / TimeUtil.ONE_DAY);
step = TimeUtil.ONE_DAY;
Map<String, double[]> 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<String, double[]> getGraphDatas(Date start,Date end,Model model, Payload payload) {
private Map<String, double[]> 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<Dailygraph> graphs = new ArrayList<Dailygraph>();
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<String, double[]> result = buildGraphDatasForDaily(start, end, type, name, graphs);
return result;
}
public Map<String, double[]> 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<String, double[]> result = buildGraphDatas(start, end, type, name, events);
Map<String, double[]> result = buildGraphDatasForHour(start, end, type, name, events);
return result;
}
}
......@@ -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<String, double[]> buildGraphDatas(Date start, Date end, String type, String name, List<Graph> graphs) {
public Map<String, double[]> buildGraphDatasForHour(Date start, Date end, String type, String name,
List<Graph> graphs) {
Map<String, double[]> result = new HashMap<String, double[]>();
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<Map<String, double[]>> datas, Date start, int size, String name) {
public Map<String, double[]> buildGraphDatasForDaily(Date start, Date end, String type, String name,
List<Dailygraph> graphs) {
Map<String, double[]> result = new HashMap<String, double[]>();
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<Map<String, double[]>> 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<String, double[]> data : datas) {
......@@ -109,11 +166,12 @@ public class HistoryGraphs {
return item;
}
private HistoryGraphItem buildTotal(List<Map<String, double[]>> datas, Date start, int size, String name) {
private HistoryGraphItem buildTotal(List<Map<String, double[]>> 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<String, double[]> data : datas) {
......@@ -123,11 +181,12 @@ public class HistoryGraphs {
return item;
}
private HistoryGraphItem buildFail(List<Map<String, double[]>> datas, Date start, int size, String name) {
private HistoryGraphItem buildFail(List<Map<String, double[]>> 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<String, double[]> 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<Map<String, double[]>> allDatas = new ArrayList<Map<String, double[]>>();
long step = TimeUtil.ONE_MINUTE * 5;
if (queryType.equalsIgnoreCase("day")) {
Map<String, double[]> currentGraph = getGraphDatas(start, end, model, payload);
Map<String, double[]> lastDayGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_DAY),
Map<String, double[]> currentGraph = getGraphDatasFromHour(start, end, model, payload);
Map<String, double[]> lastDayGraph = getGraphDatasFromHour(new Date(start.getTime() - TimeUtil.ONE_DAY),
new Date(end.getTime() - TimeUtil.ONE_DAY), model, payload);
Map<String, double[]> lastWeekGraph = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK), new Date(
end.getTime() - TimeUtil.ONE_WEEK), model, payload);
Map<String, double[]> 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<String, double[]> currentGraph = getGraphDatas(start, end, model, payload);
Map<String, double[]> lastWeek = getGraphDatas(new Date(start.getTime() - TimeUtil.ONE_WEEK),
Map<String, double[]> currentGraph = getGraphDatasFromHour(start, end, model, payload);
Map<String, double[]> 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<String, double[]> graphData = getGraphDatas(start, end, model, payload);
size = (int) ((end.getTime() - start.getTime()) / TimeUtil.ONE_DAY);
step = TimeUtil.ONE_DAY;
Map<String, double[]> 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<String, double[]> getGraphDatas(Date start, Date end, Model model, Payload payload) {
private Map<String, double[]> 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<Dailygraph> graphs = new ArrayList<Dailygraph>();
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<String, double[]> result = buildGraphDatasForDaily(start, end, type, name, graphs);
return result;
}
public Map<String, double[]> 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<String, double[]> result = buildGraphDatas(start, end, type, name, graphs);
Map<String, double[]> result = buildGraphDatasForHour(start, end, type, name, graphs);
return result;
}
}
\ No newline at end of file
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<Dailygraph> m_graphs = new ArrayList<Dailygraph>();
private EventReport m_report;
public List<Dailygraph> 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);
}
}
}
......@@ -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<Dailygraph> 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<String> domainSet = getDomainsFromHourlyReport(reportPeriod, endDate);
String content = null;
List<Report> 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<Graph> graphs = new ArrayList<Graph>();
List<Report> 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
......
......@@ -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);
}
......
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<Dailygraph> m_graphs = new ArrayList<Dailygraph>();
private TransactionReport m_report;
public List<Dailygraph> 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);
}
}
}
......@@ -258,6 +258,5 @@ public class TransactionGraphCreator implements GraphCreator<TransactionReport>
graphs.add(allGraph);
return graphs;
}
}
......@@ -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<Dailygraph> 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<String> domainSet = getDomainsFromHourlyReport(reportPeriod, endDate);
List<Report> 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<Graph> 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
......
......@@ -25,13 +25,13 @@
]]></statement>
</query>
<query name="find-report-by-domain-name-period" type="SELECT">
<param name="start-date" />
<param name="period" />
<param name="domain" />
<param name="name" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='period'/> == ${start-date}
WHERE <FIELD name='period'/> == ${period}
AND <FIELD name='domain'/> = ${domain}
AND <FIELD name='name'/> = ${name}
]]></statement>
......@@ -335,9 +335,7 @@
FROM <TABLE/>
WHERE <FIELD name='name'/> = ${name}
AND <FIELD name='domain'/> = ${domain}
<IF type='NOT_NULL' field='ip'>
AND <FIELD name='ip'/> = ${ip}
</IF>
AND <FIELD name='ip'/> = ${ip}
AND <FIELD name='period'/> >= ${start-date}
AND <FIELD name='period'/> < ${end-date}
ORDER BY <FIELD name='period'/> ASC
......@@ -353,9 +351,7 @@
FROM <TABLE/>
WHERE <FIELD name='name'/> = ${name}
AND <FIELD name='domain'/> = ${domain}
<IF type='NOT_NULL' field='ip'>
AND <FIELD name='ip'/> = ${ip}
</IF>
AND <FIELD name='ip'/> = ${ip}
AND <FIELD name='period'/> = ${start-date}
]]></statement>
</query>
......
......@@ -93,6 +93,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -120,6 +123,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -147,6 +153,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -174,6 +183,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -201,6 +213,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -225,6 +240,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -249,6 +267,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -273,6 +294,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -297,6 +321,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
......@@ -1511,6 +1538,18 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
<implementation>com.dianping.cat.home.dal.report.DailygraphDao</implementation>
<requirements>
<requirement>
<role>org.unidal.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
......@@ -1554,6 +1593,9 @@
<requirement>
<role>com.dianping.cat.home.dal.report.GraphDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2061,6 +2103,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2123,6 +2168,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2158,6 +2206,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2193,6 +2244,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2225,6 +2279,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2253,6 +2310,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2281,6 +2341,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2309,6 +2372,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2337,6 +2403,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2394,6 +2463,9 @@
<requirement>
<role>com.dainping.cat.consumer.dal.report.ReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailygraphDao</role>
</requirement>
</requirements>
</component>
<component>
......
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) {
......
......@@ -21,18 +21,19 @@ Welcome to <b>Central Application Tracking (CAT)</b>.
<tr><td><a href="http://wiki.dianpingoa.com/bin/view/SOA%E6%9E%B6%E6%9E%84/CAT%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C" target="_blank">CAT用户手册</a></td> </tr>
<tr><td><a href="http://wiki.dianpingoa.com/bin/view/SOA%E6%9E%B6%E6%9E%84/CAT%E5%BC%80%E5%8F%91%E8%80%85%E6%96%87%E6%A1%A3" target="_blank">CAT开发者文档</a></td> </tr>
<tr><td><a href="http://wiki.dianpingoa.com/bin/view/SOA%E6%9E%B6%E6%9E%84/CAT%E9%9B%86%E6%88%90%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3" target="_blank">CAT集成帮助文档</a></td> </tr>
<tr><td><a href="http://10.1.8.64:8080/cat/r">CAT预发环境</a><td></tr>
<tr height="20px"><td></td></tr>
<tr><td><a href="http://10.1.8.64:8080/cat/r">CAT预发环境链接</a><td></tr>
</table>
<br>
<br>
<table>
<tr><td style="color:red;font-size:16px;font-weight:normal">项目信息修改(修改线上环境即可),请项目负责人到Project标签下,修改项目所在分组的基本信息</td></tr>
<tr><td style="color:red;font-size:16px;font-weight:normal">默认告警,邮件订阅(修改线上环境即可),请项目负责人到Alarm标签下,订阅相关异常告警、服务调用失败告警、日常邮件,Hawk会逐步下线中。</td></tr>
<table class='version' rules="all" >
<tr class="even"><td width="3%">序号</td><td width="87%">具体功能描述</td><td width="10%">发布时间</td></tr>
<tr class="odd"><td>1</td><td>项目信息修改(修改线上环境即可),请项目负责人到Project标签下,修改项目所在分组的基本信息</td><td>2012-09-01</td></tr>
<tr class="even"><td>2</td><td>默认告警,邮件订阅(修改线上环境即可),请项目负责人到Alarm标签下,订阅相关异常告警、服务调用失败告警、日常邮件,Hawk会逐步下线中。</td><td>2012-09-01</td></tr>
<tr class="odd"><td>3</td><td style="color:red">Transaction\Event报表日报表、周报表支持趋势图对比</td><td>2013-01-01</td></tr>
</table>
<br>
<br>
<table class='version'>
<tr class="even"><td>版本</td><td>说明</td><td>发布时间</td></tr>
<table class='version' rules="all">
<tr class="even"><td width="3%">版本</td><td width="87%">说明</td><td width="10%">发布时间</td></tr>
<tr class="odd"><td>0.4.1</td><td>1、默认禁止心跳线程获取线程锁信息,以降低对业务线程的影响。</td><td>2012-09-06</td></tr>
<tr class="even"><td>0.4.0</td><td>1、支持开关动态关闭。2、后端存储重构,支持分布式Logview的查看(关联pigeon的call)。</td><td>2012-08-20</td></tr>
<tr class="odd"><td>0.3.4</td><td>1、规范了CAT客户端的日志。2、规范了后台模块的加载顺序。3、统一服务端配置存取。4、新增心跳报表的Http线程 </td><td>2012-07-25</td></tr>
......@@ -43,16 +44,15 @@ Welcome to <b>Central Application Tracking (CAT)</b>.
<tr class="even"><td>0.2.5</td><td>1、心跳消息监控新增oldgc和newgc 2、更新了ThreadLocal的线程模型(修复了一些无头消息和部分错乱消息)</td><td>2012-05-01</td></tr>
</table>
<br>
<br>
<table>
<tr class="even"><td>序号</td><td>常见问题</td><td>解答</td></tr>
<table class='version' rules="all">
<tr class="even"><td width="3%">序号</td><td width="47%">常见问题</td><td width="50%">问题解答</td></tr>
<tr class="odd"><td>1</td><td>TestCase跑不起来</td><td>升级至CAT的0.4.0的版本,Pigeon版本至1.6.1</td></tr>
<tr class="even"><td>2</td><td>集成了CAT,测试环境看不到信息</td><td>请Check相关步骤<a href="http://wiki.dianpingoa.com/bin/view/SOA%E6%9E%B6%E6%9E%84/CAT%E9%9B%86%E6%88%90%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3" target="_blank">CAT集成帮助文档</a></td></tr>
<tr class="odd"><td>3</td><td>Transaction、Event报表区间</<td><td>Transaction、Event历史报表,图表X轴以5分钟为刻度,Y轴表示每5分钟的值</td></tr>
<tr class="even"><td>4</td><td>Problem、Hearbeat报表区间</<td><td>Problem、Heartbeat历史报表,图表X轴以1分钟为刻度,Y轴表示每1分钟的值</td></tr>
<tr class="odd"><td>5</td><td>项目信息修改(仅修改线上环境)</<td><td>请项目负责人到Project标签下,修改项目所在分组的基本信息</td></tr>
<tr class="even"><td>6</td><td>默认告警,邮件订阅(仅修改线上环境)</<td><td>请项目负责人到Alarm标签下,订阅相关异常告警、服务调用失败告警、日常邮件,Hawk会逐步下线中。</td></tr>
<tr class="odd"><td>7</td><td>95Line</<td><td>由于计算95line需要数据较多,为了减少内存开销,系统做了一些优化,在单个小时内某一台机器,95Line误差是1ms,但是合并成1一天,1周,1个月误差较大(仅供参考)</td></tr>
<tr class="odd"><td>7</td><td>95Line</<td><td style="white-space:normal;">由于计算95line需要数据较多,为了减少内存开销,系统做了一些优化,在单个小时内某一台机器,95Line误差是1ms,但是合并成1一天,1周,1个月误差较大(数据仅供参考)</td></tr>
</table>
<br>
<br>
......
<%@ 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"%>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<jsp:useBean id="ctx" type="com.dianping.cat.report.page.transaction.Context" scope="request" />
<jsp:useBean id="payload" type="com.dianping.cat.report.page.transaction.Payload" scope="request" />
<jsp:useBean id="model" type="com.dianping.cat.report.page.transaction.Model" scope="request" />
<link rel="stylesheet" type="text/css" href="/cat/css/graph.css">
<script type="text/javascript" src="/cat/js/jquery-1.7.1.js"></script>
......@@ -6,13 +12,17 @@
<script type="text/javascript" src="/cat/js/baseTools.js"></script>
<script type="text/javascript" src="/cat/js/trendGraph.js"></script>
<table>
<tr>
<td colspan="3">日报表:<a href="#" class="first">&nbsp;&nbsp;</a>表示From ${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm:ss')} to ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm:ss')};<a href="#" class="second">&nbsp;&nbsp;</a>表示上一天;<a href="#" class="third">&nbsp;&nbsp;</a>表示上周这一天</td>
</tr>
<tr>
<td colspan="3">周报表:<a href="#" class="first">&nbsp;&nbsp;</a>表示当前From ${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm:ss')} to ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm:ss')};<a href="#" class="second">&nbsp;&nbsp;</a>表示上一周</td>
</tr>
<table><c:choose>
<c:when test="${payload.reportType eq 'day'}">
<tr>
<td colspan="3">日报表:<a href="#" class="first">&nbsp;&nbsp;</a>表示${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm')} ~ ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm')};<a href="#" class="second">&nbsp;&nbsp;</a>表示上一天;<a href="#" class="third">&nbsp;&nbsp;</a>表示上周这一天</td>
</tr>
</c:when></c:choose><c:choose>
<c:when test="${payload.reportType eq 'week'}">
<tr>
<td colspan="3">周报表:<a href="#" class="first">&nbsp;&nbsp;</a>表示当前From ${w:format(payload.historyStartDate,'yyyy-MM-dd HH:mm')} to ${w:format(payload.historyDisplayEndDate,'yyyy-MM-dd HH:mm')};<a href="#" class="second">&nbsp;&nbsp;</a>表示上一周</td>
</tr>
</c:when></c:choose>
<tr>
<td><div id="responseTrend" class="graph"></div></td>
<td><div id="hitTrend" class="graph"></div></td>
......
......@@ -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 {
}
......@@ -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
......@@ -33,7 +33,7 @@ public class EventGraphDataTest {
Date addtime = new Date(time);
graphs.add(creatGraph(addtime));
}
Map<String, double[]> graphDatas = handler.buildGraphDatas(start, end, "URL", "", graphs);
Map<String, double[]> 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<String, double[]> graphDatas = handler.buildGraphDatas(start, end, "URL", "ClientInfo", graphs);
Map<String, double[]> 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);
......
......@@ -33,7 +33,7 @@ public class TransactionGraphDataTest {
Date end = sf.parse("20120607");
List<Graph> graphs = buildGraph(start, end);
String type = "URL";
Map<String, double[]> graphDates = handler.buildGraphDatas(start, end, type, null, graphs);
Map<String, double[]> 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<Graph> graphs = buildGraph(start, end);
String type = "Result";
String name = "cacheService:cacheConfigService_1.0.0:getKeyConfigurations";
Map<String, double[]> graphDates = handler.buildGraphDatas(start, end, type, name, graphs);
Map<String, double[]> 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<Graph> graphs = buildGraph(start, end);
String type = "Result";
String name = "Result";
Map<String, double[]> graphDates = handler.buildGraphDatas(start, end, type, name, graphs);
Map<String, double[]> graphDates = handler.buildGraphDatasForHour(start, end, type, name, graphs);
double[] sum = graphDates.get("sum");
assertArray(-1.0, sum);
} catch (ParseException e) {
......
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<Dailygraph> graphs = creator.buildDailygraph(report1);
Assert.assertEquals(3, graphs.size());
}
}
<?xml version="1.0" encoding="utf-8"?>
<transaction-report domain="Cat" startTime="2012-05-17 13:00:00" endTime="2012-05-17 13:59:59">
<domain>Cat</domain>
<ip>192.168.165.1</ip>
<ip>192.168.165.2</ip>
<machine ip="All">
<type id="Task1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="2" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="79560.6" sum2="3164940717.2" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="79560.00" line95Count="2">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model2" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
<name id="model" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
<type id="Task" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
</machine>
<machine ip="All1">
<type id="Task1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="2" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="79560.6" sum2="3164940717.2" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="79560.00" line95Count="2">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model2" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
<name id="model" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
<type id="Task" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
</machine>
<machine ip="All2">
<type id="Task1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="2" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="79560.6" sum2="3164940717.2" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="79560.00" line95Count="2">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model2" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
<name id="model" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
<type id="Task" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
</machine>
</transaction-report>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册