提交 94bc5444 编写于 作者: Y yong.you

refactor dependency handler

上级 16756e04
......@@ -75,9 +75,9 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(TopologyGraphItemBuilder.class).req(TopologyGraphConfigManager.class));
all.add(C(TopologyGraphBuilder.class).req(TopologyGraphItemBuilder.class).is(PER_LOOKUP));
all.add(C(TopologyGraphManager.class).req(TopologyGraphBuilder.class, ServerConfigManager.class) //
.req(ProductLineConfigManager.class, TopologyGraphDao.class,DomainNavManager.class)//
.req(ProductLineConfigManager.class, TopologyGraphDao.class, DomainNavManager.class)//
.req(ModelService.class, "dependency"));
// report serivce
......
package com.dianping.cat.report.page.dependency;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.top.model.entity.TopReport;
import com.dianping.cat.helper.CatString;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.home.dal.report.Event;
import com.dianping.cat.home.dependency.graph.entity.TopologyGraph;
import com.dianping.cat.home.dependency.graph.entity.TopologyNode;
import com.dianping.cat.report.page.dependency.graph.GraphConstrant;
import com.dianping.cat.report.page.externalError.EventCollectManager;
import com.dianping.cat.report.page.model.spi.ModelRequest;
import com.dianping.cat.report.page.model.spi.ModelResponse;
import com.dianping.cat.report.page.model.spi.ModelService;
import com.dianping.cat.report.page.top.TopMetric;
import com.dianping.cat.report.service.ReportService;
public class ExternalInfoBuilder {
@Inject(type = ModelService.class, value = "problem")
private ModelService<ProblemReport> m_problemservice;
@Inject(type = ModelService.class, value = "top")
private ModelService<TopReport> m_topService;
@Inject
private EventCollectManager m_eventManager;
@Inject
private ReportService m_reportService;
private SimpleDateFormat m_dateFormat = new SimpleDateFormat("yyyyMMddHH");
private SimpleDateFormat m_sdf = new SimpleDateFormat("HH:mm");
public void buildExceptionInfoOnGraph(Payload payload, Model model, TopologyGraph graph) {
if (graph.getStatus() != GraphConstrant.OK) {
String problemInfo = buildProblemInfo(graph.getId(), payload);
graph.setDes(graph.getDes() + problemInfo);
}
for (TopologyNode node : graph.getNodes().values()) {
if (node.getType().equals(GraphConstrant.PROJECT)) {
node.setLink(buildTopologyNodeLink(payload, model, node.getId()));
if (node.getStatus() != GraphConstrant.OK) {
String problemInfo = buildProblemInfo(node.getId(), payload);
node.setDes(node.getDes() + problemInfo);
}
}
}
}
public void buildZabbixErrorOnGraph(TopologyGraph graph, String zabbixHeader, Map<String, List<Event>> events) {
Set<String> nodes = new HashSet<String>();
for (Entry<String, List<Event>> entry : events.entrySet()) {
List<Event> eventList = entry.getValue();
for (Event event : eventList) {
TopologyNode node = graph.findTopologyNode(event.getDomain());
if (node != null) {
if (!nodes.contains(node.getId())) {
node.setDes(node.getDes() + zabbixHeader);
nodes.add(node.getId());
}
if (node.getStatus() == GraphConstrant.OK) {
node.setStatus(GraphConstrant.OP_ERROR);
}
String des = node.getDes();
des = des + m_sdf.format(event.getDate()) + " " + event.getSubject() + GraphConstrant.ENTER;
node.setDes(des);
} else if (event.getDomain().equals(graph.getId())) {
if (!nodes.contains(graph.getId())) {
graph.setDes(graph.getDes() + zabbixHeader);
nodes.add(graph.getId());
}
if (graph.getStatus() == GraphConstrant.OK) {
graph.setStatus(GraphConstrant.OP_ERROR);
}
String des = graph.getDes();
des = des + m_sdf.format(event.getDate()) + " " + event.getSubject() + GraphConstrant.ENTER;
graph.setDes(des);
}
}
}
}
private String buildTopologyNodeLink(Payload payload, Model model, String domain) {
return String.format("?op=dependencyGraph&minute=%s&domain=%s&date=%s", model.getMinute(), domain,
m_dateFormat.format(new Date(payload.getDate())));
}
public void buildNodeExceptionInfo(TopologyNode node, Model model, Payload payload) {
String domain = node.getId();
if (node.getStatus() != GraphConstrant.OK) {
String exceptionInfo = buildProblemInfo(domain, payload);
node.setDes(node.getDes() + exceptionInfo);
}
}
public void buildNodeZabbixInfo(TopologyNode node,Model model, Payload payload) {
Date reportTime = new Date(payload.getDate() + TimeUtil.ONE_MINUTE * model.getMinute());
String domain = node.getId();
List<Event> events = m_eventManager.findEvents(reportTime.getTime(), domain);
node.setLink(buildTopologyNodeLink(payload, model, domain));
if (events != null && events.size() > 0) {
if (node.getStatus() == GraphConstrant.OK) {
node.setStatus(GraphConstrant.OP_ERROR);
}
node.setDes(node.getDes() + buildZabbixHeader(payload, model));
StringBuilder sb = new StringBuilder();
for (Event event : events) {
sb.append(m_sdf.format(event.getDate())).append((" "));
sb.append(event.getSubject()).append(GraphConstrant.ENTER);
}
node.setDes(node.getDes() + sb.toString());
}
}
private String buildProblemInfo(String domain, Payload payload) {
ProblemReport report = queryProblemReport(payload, domain);
ProblemInfoVisitor visitor = new ProblemInfoVisitor();
visitor.visitProblemReport(report);
return visitor.buildExceptionInfo();
}
public void buildTopErrorInfo(Payload payload, Model model) {
int minuteCount = payload.getMinuteCounts();
int minute = model.getMinute();
TopReport report = queryTopReport(payload);
TopMetric topMetric = new TopMetric(minuteCount, payload.getTopCounts());
Date end = new Date(payload.getDate() + TimeUtil.ONE_MINUTE * minute);
Date start = new Date(end.getTime() - TimeUtil.ONE_MINUTE * minuteCount);
topMetric.setStart(start).setEnd(end);
if (minuteCount > minute) {
Payload lastPayload = new Payload();
Date lastHour = new Date(payload.getDate() - TimeUtil.ONE_HOUR);
lastPayload.setDate(new SimpleDateFormat("yyyyMMddHH").format(lastHour));
topMetric.visitTopReport(queryTopReport(lastPayload));
}
topMetric.visitTopReport(report);
model.setTopReport(report);
model.setTopMetric(topMetric);
}
public String buildZabbixHeader(Payload payload, Model model) {
StringBuilder sb = new StringBuilder();
long end = payload.getDate() + TimeUtil.ONE_MINUTE * model.getMinute();
sb.append(GraphConstrant.LINE).append(GraphConstrant.ENTER);
sb.append("<span style='color:red'>").append(CatString.ZABBIX_ERROR).append("(")
.append(m_sdf.format(new Date(end - TimeUtil.ONE_MINUTE * 10))).append("-").append(m_sdf.format(end))
.append(")").append("</span>").append(GraphConstrant.ENTER);
return sb.toString();
}
public Map<String, List<Event>> queryDependencyEvent(Map<String, List<String>> dependencies, String domain,
Date date) {
Map<String, List<Event>> result = new LinkedHashMap<String, List<Event>>();
List<Event> domainEvents = m_eventManager.queryEvents(domain, date);
if (domainEvents != null && domainEvents.size() > 0) {
result.put(domain, domainEvents);
}
for (Entry<String, List<String>> entry : dependencies.entrySet()) {
String key = entry.getKey();
List<String> targets = entry.getValue();
for (String temp : targets) {
List<Event> queryEvents = m_eventManager.queryEvents(temp, date);
if (queryEvents != null && queryEvents.size() > 0) {
List<Event> events = result.get(key);
if (events == null) {
events = new ArrayList<Event>();
result.put(key, events);
}
events.addAll(queryEvents);
}
}
}
return result;
}
private ProblemReport queryProblemReport(Payload payload, String domain) {
String date = String.valueOf(payload.getDate());
ModelRequest request = new ModelRequest(domain, payload.getPeriod()) //
.setProperty("date", date).setProperty("type", "view");
if (m_problemservice.isEligable(request)) {
ModelResponse<ProblemReport> response = m_problemservice.invoke(request);
return response.getModel();
} else {
throw new RuntimeException("Internal error: no eligible problem service registered for " + request + "!");
}
}
private TopReport queryTopReport(Payload payload) {
String domain = CatString.CAT;
String date = String.valueOf(payload.getDate());
ModelRequest request = new ModelRequest(domain, payload.getPeriod()) //
.setProperty("date", date);
if (m_topService.isEligable(request)) {
ModelResponse<TopReport> response = m_topService.invoke(request);
TopReport report = response.getModel();
if (report == null || report.getDomains().size() == 0) {
report = m_reportService.queryTopReport(domain, new Date(payload.getDate()), new Date(payload.getDate()
+ TimeUtil.ONE_HOUR));
}
return report;
} else {
throw new RuntimeException("Internal error: no eligable top service registered for " + request + "!");
}
}
}
\ No newline at end of file
package com.dianping.cat.report.page.dependency;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import javax.servlet.ServletException;
......@@ -26,8 +22,6 @@ import com.dianping.cat.consumer.dependency.model.entity.Dependency;
import com.dianping.cat.consumer.dependency.model.entity.DependencyReport;
import com.dianping.cat.consumer.dependency.model.entity.Index;
import com.dianping.cat.consumer.dependency.model.entity.Segment;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.top.model.entity.TopReport;
import com.dianping.cat.helper.CatString;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.home.company.entity.ProductLine;
......@@ -41,16 +35,12 @@ import com.dianping.cat.report.page.LineChart;
import com.dianping.cat.report.page.PayloadNormalizer;
import com.dianping.cat.report.page.dependency.dashboard.ProductLineDashboard;
import com.dianping.cat.report.page.dependency.dashboard.ProductLinesDashboard;
import com.dianping.cat.report.page.dependency.graph.GraphConstrant;
import com.dianping.cat.report.page.dependency.graph.LineGraphBuilder;
import com.dianping.cat.report.page.dependency.graph.TopologyGraphManager;
import com.dianping.cat.report.page.externalError.EventCollectManager;
import com.dianping.cat.report.page.model.dependency.DependencyReportMerger;
import com.dianping.cat.report.page.model.spi.ModelRequest;
import com.dianping.cat.report.page.model.spi.ModelResponse;
import com.dianping.cat.report.page.model.spi.ModelService;
import com.dianping.cat.report.page.top.TopMetric;
import com.dianping.cat.report.service.ReportService;
import com.dianping.cat.system.config.ProductLineConfigManager;
public class Handler implements PageHandler<Context> {
......@@ -58,9 +48,6 @@ public class Handler implements PageHandler<Context> {
@Inject(type = ModelService.class, value = "dependency")
private ModelService<DependencyReport> m_dependencyService;
@Inject
private EventCollectManager m_eventManager;
@Inject
private TopologyGraphManager m_graphManager;
......@@ -68,27 +55,15 @@ public class Handler implements PageHandler<Context> {
private ProductLineConfigManager m_productLineConfigManger;
@Inject
private ReportService m_reportService;
private ExternalInfoBuilder m_externalInfoBuilder;
@Inject
private JspViewer m_jspViewer;
private Set<String> m_nodes;
@Inject
private PayloadNormalizer m_normalizePayload;
@Inject(type = ModelService.class, value = "problem")
private ModelService<ProblemReport> m_problemservice;
@Inject(type = ModelService.class, value = "top")
private ModelService<TopReport> m_topService;
private SimpleDateFormat m_sdf = new SimpleDateFormat("HH:mm");
private SimpleDateFormat m_dateFormat = new SimpleDateFormat("yyyyMMddHH");
private Segment buildAllSegmentInfo(DependencyReport report) {
private Segment buildAllSegmentsInfo(DependencyReport report) {
Segment result = new Segment();
Map<Integer, Segment> segments = report.getSegments();
DependencyReportMerger merger = new DependencyReportMerger(null);
......@@ -110,63 +85,6 @@ public class Handler implements PageHandler<Context> {
return result;
}
private void buildExceptionInfoOnGraph(Payload payload, Model model, TopologyGraph graph) {
if (graph.getStatus() != GraphConstrant.OK) {
String problemInfo = buildProblemInfo(graph.getId(), payload);
graph.setDes(graph.getDes() + problemInfo);
}
for (TopologyNode node : graph.getNodes().values()) {
if (node.getType().equals(GraphConstrant.PROJECT)) {
node.setLink(buildLink(payload, model, node.getId()));
if (node.getStatus() != GraphConstrant.OK) {
String problemInfo = buildProblemInfo(node.getId(), payload);
node.setDes(node.getDes() + problemInfo);
}
}
}
}
private void buildExternalErrorOnGraph(TopologyGraph graph, String zabbixHeader, Map<String, List<Event>> events) {
for (Entry<String, List<Event>> entry : events.entrySet()) {
List<Event> eventList = entry.getValue();
for (Event event : eventList) {
TopologyNode node = graph.findTopologyNode(event.getDomain());
if (node != null) {
if (!m_nodes.contains(node.getId())) {
node.setDes(node.getDes() + zabbixHeader);
m_nodes.add(node.getId());
}
if (node.getStatus() == GraphConstrant.OK) {
node.setStatus(GraphConstrant.OP_ERROR);
}
String des = node.getDes();
des = des + m_sdf.format(event.getDate()) + " " + event.getSubject() + GraphConstrant.ENTER;
node.setDes(des);
} else if (event.getDomain().equals(graph.getId())) {
if (!m_nodes.contains(graph.getId())) {
graph.setDes(graph.getDes() + zabbixHeader);
m_nodes.add(graph.getId());
}
if (graph.getStatus() == GraphConstrant.OK) {
graph.setStatus(GraphConstrant.OP_ERROR);
}
String des = graph.getDes();
des = des + m_sdf.format(event.getDate()) + " " + event.getSubject() + GraphConstrant.ENTER;
graph.setDes(des);
}
}
}
}
private void buildHourlyLineGraph(DependencyReport report, Model model) {
LineGraphBuilder builder = new LineGraphBuilder();
......@@ -175,8 +93,8 @@ public class Handler implements PageHandler<Context> {
List<LineChart> index = builder.queryIndex();
Map<String, List<LineChart>> dependencys = builder.queryDependencyGraph();
model.setIndexGraph(buildLineChartGraphs(index));
model.setDependencyGraph(buildLineChartGraphMap(dependencys));
model.setIndexGraph(buildLineChartGraph(index));
model.setDependencyGraph(buildLineChartGraphs(dependencys));
}
private void buildHourlyReport(DependencyReport report, Model model, Payload payload) {
......@@ -186,20 +104,20 @@ public class Handler implements PageHandler<Context> {
model.setSegment(segment);
if (payload.isAll()) {
model.setSegment(buildAllSegmentInfo(report));
model.setSegment(buildAllSegmentsInfo(report));
}
}
private Map<String, List<String>> buildLineChartGraphMap(Map<String, List<LineChart>> charts) {
private Map<String, List<String>> buildLineChartGraphs(Map<String, List<LineChart>> charts) {
Map<String, List<String>> result = new HashMap<String, List<String>>();
for (Entry<String, List<LineChart>> temp : charts.entrySet()) {
result.put(temp.getKey(), buildLineChartGraphs(temp.getValue()));
result.put(temp.getKey(), buildLineChartGraph(temp.getValue()));
}
return result;
}
private List<String> buildLineChartGraphs(List<LineChart> charts) {
private List<String> buildLineChartGraph(List<LineChart> charts) {
List<String> result = new ArrayList<String>();
for (LineChart temp : charts) {
......@@ -208,104 +126,7 @@ public class Handler implements PageHandler<Context> {
return result;
}
private String buildLink(Payload payload, Model model, String domain) {
return String.format("?op=dependencyGraph&minute=%s&domain=%s&date=%s", model.getMinute(), domain,
m_dateFormat.format(new Date(payload.getDate())));
}
private void buildNodeZabbixInfo(TopologyNode node, Model model, Payload payload) {
Date reportTime = new Date(payload.getDate() + TimeUtil.ONE_MINUTE * model.getMinute());
String domain = node.getId();
List<Event> events = m_eventManager.queryEvents(domain, reportTime);
node.setLink(buildLink(payload, model, domain));
if (events != null && events.size() > 0) {
if (node.getStatus() == GraphConstrant.OK) {
node.setStatus(GraphConstrant.OP_ERROR);
}
node.setDes(node.getDes() + buildZabbixHeader(payload, model));
StringBuilder sb = new StringBuilder();
for (Event event : events) {
sb.append(m_sdf.format(event.getDate())).append((" "));
sb.append(event.getSubject()).append(GraphConstrant.ENTER);
}
node.setDes(node.getDes() + sb.toString());
}
}
private void buildNodeExceptionInfo(TopologyNode node, Model model, Payload payload) {
String domain = node.getId();
if (node.getStatus() != GraphConstrant.OK) {
String exceptionInfo = buildProblemInfo(domain, payload);
node.setDes(node.getDes() + exceptionInfo);
}
}
private String buildProblemInfo(String domain, Payload payload) {
ProblemReport report = queryProblemReport(payload, domain);
ExceptionInfoBuilder visitor = new ExceptionInfoBuilder();
visitor.visitProblemReport(report);
String result = visitor.buildResult();
return result;
}
private String buildZabbixHeader(Payload payload, Model model) {
StringBuilder sb = new StringBuilder();
long end = payload.getDate() + TimeUtil.ONE_MINUTE * model.getMinute();
sb.append(GraphConstrant.LINE).append(GraphConstrant.ENTER);
sb.append("<span style='color:red'>").append(CatString.ZABBIX_ERROR).append("(")
.append(m_sdf.format(new Date(end - TimeUtil.ONE_MINUTE * 10))).append("-").append(m_sdf.format(end))
.append(")").append("</span>").append(GraphConstrant.ENTER);
return sb.toString();
}
private TopReport queryTopReport(Payload payload) {
String domain = CatString.CAT;
String date = String.valueOf(payload.getDate());
ModelRequest request = new ModelRequest(domain, payload.getPeriod()) //
.setProperty("date", date);
if (m_topService.isEligable(request)) {
ModelResponse<TopReport> response = m_topService.invoke(request);
TopReport report = response.getModel();
if (report == null || report.getDomains().size() == 0) {
report = m_reportService.queryTopReport(domain, new Date(payload.getDate()), new Date(payload.getDate()
+ TimeUtil.ONE_HOUR));
}
return report;
} else {
throw new RuntimeException("Internal error: no eligable top service registered for " + request + "!");
}
}
private void buildTopErrorInfo(Payload payload, Model model) {
int minuteCount = payload.getMinuteCounts();
int minute = model.getMinute();
TopReport report = queryTopReport(payload);
TopMetric topMetric = new TopMetric(minuteCount, payload.getTopCounts());
Date end = new Date(payload.getDate() + TimeUtil.ONE_MINUTE * minute);
Date start = new Date(end.getTime() - TimeUtil.ONE_MINUTE * minuteCount);
topMetric.setStart(start).setEnd(end);
if (minuteCount > minute) {
Payload lastPayload = new Payload();
Date lastHour = new Date(payload.getDate() - TimeUtil.ONE_HOUR);
lastPayload.setDate(new SimpleDateFormat("yyyyMMddHH").format(lastHour));
topMetric.visitTopReport(queryTopReport(lastPayload));
}
topMetric.visitTopReport(report);
model.setTopReport(report);
model.setTopMetric(topMetric);
}
private int computeMinute(Payload payload) {
private int parseQueryMinute(Payload payload) {
int minute = 0;
String min = payload.getMinute();
......@@ -335,33 +156,31 @@ public class Handler implements PageHandler<Context> {
Action action = payload.getAction();
Date reportTime = new Date(payload.getDate() + TimeUtil.ONE_MINUTE * model.getMinute());
DependencyReport report = null;
switch (action) {
case TOPOLOGY:
TopologyGraph topologyGraph = m_graphManager.buildTopologyGraph(model.getDomain(), reportTime.getTime());
Map<String, List<String>> graphDependency = parseDependencies(topologyGraph);
Map<String, List<Event>> externalErrors = queryDependencyEvent(graphDependency, model.getDomain(), reportTime);
Map<String, List<Event>> externalErrors = m_externalInfoBuilder.queryDependencyEvent(graphDependency, model.getDomain(), reportTime);
report = queryDependencyReport(payload);
DependencyReport report = queryDependencyReport(payload);
buildHourlyReport(report, model, payload);
model.setEvents(externalErrors);
m_nodes = new HashSet<String>();
buildExternalErrorOnGraph(topologyGraph, buildZabbixHeader(payload, model), externalErrors);
buildExceptionInfoOnGraph(payload, model, topologyGraph);
m_externalInfoBuilder.buildZabbixErrorOnGraph(topologyGraph, m_externalInfoBuilder.buildZabbixHeader(payload, model), externalErrors);
m_externalInfoBuilder.buildExceptionInfoOnGraph(payload, model, topologyGraph);
model.setReportStart(new Date(payload.getDate()));
model.setReportEnd(new Date(payload.getDate() + TimeUtil.ONE_HOUR - 1));
model.setTopologyGraph(new DefaultJsonBuilder().buildJson(topologyGraph));
break;
case LINE_CHART:
report = queryDependencyReport(payload);
buildHourlyReport(report, model, payload);
buildHourlyLineGraph(report, model);
DependencyReport dependencyReport = queryDependencyReport(payload);
buildHourlyReport(dependencyReport, model, payload);
buildHourlyLineGraph(dependencyReport, model);
Segment segment = report.findSegment(model.getMinute());
Segment segment = dependencyReport.findSegment(model.getMinute());
Map<String, List<String>> dependency = parseDependencies(segment);
model.setEvents(queryDependencyEvent(dependency, model.getDomain(), reportTime));
model.setEvents(m_externalInfoBuilder.queryDependencyEvent(dependency, model.getDomain(), reportTime));
break;
case DASHBOARD:
ProductLinesDashboard dashboardGraph = m_graphManager.buildDashboardGraph(reportTime.getTime());
......@@ -369,10 +188,10 @@ public class Handler implements PageHandler<Context> {
for (Entry<String, List<TopologyNode>> entry : dashboardNodes.entrySet()) {
for (TopologyNode node : entry.getValue()) {
buildNodeZabbixInfo(node, model, payload);
m_externalInfoBuilder.buildNodeZabbixInfo(node, model, payload);
}
}
buildTopErrorInfo(payload, model);
m_externalInfoBuilder.buildTopErrorInfo(payload, model);
model.setReportStart(new Date(payload.getDate()));
model.setReportEnd(new Date(payload.getDate() + TimeUtil.ONE_HOUR - 1));
model.setDashboardGraph(dashboardGraph.toJson());
......@@ -389,8 +208,8 @@ public class Handler implements PageHandler<Context> {
List<TopologyNode> productLineNodes = productLineGraph.getNodes();
for (TopologyNode node : productLineNodes) {
buildNodeZabbixInfo(node, model, payload);
buildNodeExceptionInfo(node, model, payload);
m_externalInfoBuilder.buildNodeZabbixInfo(node, model, payload);
m_externalInfoBuilder.buildNodeExceptionInfo(node, model, payload);
}
model.setReportStart(new Date(payload.getDate()));
model.setReportEnd(new Date(payload.getDate() + TimeUtil.ONE_HOUR - 1));
......@@ -407,7 +226,7 @@ public class Handler implements PageHandler<Context> {
m_normalizePayload.normalize(model, payload);
Integer minute = computeMinute(payload);
Integer minute = parseQueryMinute(payload);
int maxMinute = 60;
List<Integer> minutes = new ArrayList<Integer>();
......@@ -461,35 +280,6 @@ public class Handler implements PageHandler<Context> {
return dependencies;
}
private Map<String, List<Event>> queryDependencyEvent(Map<String, List<String>> dependencies, String domain,
Date date) {
Map<String, List<Event>> result = new LinkedHashMap<String, List<Event>>();
List<Event> domainEvents = m_eventManager.queryEvents(domain, date);
if (domainEvents != null && domainEvents.size() > 0) {
result.put(domain, domainEvents);
}
for (Entry<String, List<String>> entry : dependencies.entrySet()) {
String key = entry.getKey();
List<String> targets = entry.getValue();
for (String temp : targets) {
List<Event> queryEvents = m_eventManager.queryEvents(temp, date);
if (queryEvents != null && queryEvents.size() > 0) {
List<Event> events = result.get(key);
if (events == null) {
events = new ArrayList<Event>();
result.put(key, events);
}
events.addAll(queryEvents);
}
}
}
return result;
}
private DependencyReport queryDependencyReport(Payload payload) {
String domain = payload.getDomain();
String date = String.valueOf(payload.getDate());
......@@ -510,17 +300,4 @@ public class Handler implements PageHandler<Context> {
}
}
private ProblemReport queryProblemReport(Payload payload, String domain) {
String date = String.valueOf(payload.getDate());
ModelRequest request = new ModelRequest(domain, payload.getPeriod()) //
.setProperty("date", date).setProperty("type", "view");
if (m_problemservice.isEligable(request)) {
ModelResponse<ProblemReport> response = m_problemservice.invoke(request);
return response.getModel();
} else {
throw new RuntimeException("Internal error: no eligible problem service registered for " + request + "!");
}
}
}
......@@ -16,7 +16,7 @@ import com.dianping.cat.helper.MapUtils;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.report.page.dependency.graph.GraphConstrant;
public class ExceptionInfoBuilder extends BaseVisitor {
public class ProblemInfoVisitor extends BaseVisitor {
private Map<String, Integer> m_errors = new LinkedHashMap<String, Integer>();
......@@ -54,7 +54,7 @@ public class ExceptionInfoBuilder extends BaseVisitor {
super.visitSegment(segment);
}
public String buildResult() {
public String buildExceptionInfo() {
StringBuilder sb = new StringBuilder();
Comparator<java.util.Map.Entry<String, Integer>> compator = new Comparator<Map.Entry<String, Integer>>() {
@Override
......@@ -63,6 +63,7 @@ public class ExceptionInfoBuilder extends BaseVisitor {
}
};
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if (m_errors.size() > 0) {
sb.append(GraphConstrant.LINE).append(GraphConstrant.ENTER);
sb.append("<span style='color:red'>").append(CatString.EXCEPTION_INFO).append("(");
......
......@@ -2646,9 +2646,6 @@
<role-hint>dependency</role-hint>
<field-name>m_dependencyService</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.externalError.EventCollectManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.dependency.graph.TopologyGraphManager</role>
</requirement>
......@@ -2656,7 +2653,7 @@
<role>com.dianping.cat.system.config.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.service.ReportService</role>
<role>com.dianping.cat.report.page.dependency.ExternalInfoBuilder</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.dependency.JspViewer</role>
......@@ -2664,37 +2661,6 @@
<requirement>
<role>com.dianping.cat.report.page.PayloadNormalizer</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
<role-hint>problem</role-hint>
<field-name>m_problemservice</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
<role-hint>top</role-hint>
<field-name>m_topService</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.page.externalError.EventCollectManager</role>
<implementation>com.dianping.cat.report.page.externalError.EventCollectManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.EventDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.configuration.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.report.EventDao</role>
<implementation>com.dianping.cat.home.dal.report.EventDao</implementation>
<requirements>
<requirement>
<role>org.unidal.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2766,6 +2732,49 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.page.dependency.ExternalInfoBuilder</role>
<implementation>com.dianping.cat.report.page.dependency.ExternalInfoBuilder</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
<role-hint>problem</role-hint>
<field-name>m_problemservice</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
<role-hint>top</role-hint>
<field-name>m_topService</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.externalError.EventCollectManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.service.ReportService</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.page.externalError.EventCollectManager</role>
<implementation>com.dianping.cat.report.page.externalError.EventCollectManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.EventDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.configuration.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.report.EventDao</role>
<implementation>com.dianping.cat.home.dal.report.EventDao</implementation>
<requirements>
<requirement>
<role>org.unidal.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.page.dependency.JspViewer</role>
<implementation>com.dianping.cat.report.page.dependency.JspViewer</implementation>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册