diff --git a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java index 465c0a71dc5877548753aa9ca7e999b9cdbb941d..99da09e52f5a4ef3fa6024f0fd62d025b5ec7057 100755 --- a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java @@ -32,10 +32,9 @@ import com.dianping.cat.report.graph.DefaultValueTranslater; import com.dianping.cat.report.graph.GraphBuilder; import com.dianping.cat.report.graph.ValueTranslater; import com.dianping.cat.report.page.PayloadNormalizer; -import com.dianping.cat.report.page.dependency.DefaultDependencyGraphItemBuilder; -import com.dianping.cat.report.page.dependency.DependencyGraphBuilder; -import com.dianping.cat.report.page.dependency.DependendencyGraphItemBuilder; -import com.dianping.cat.report.page.dependency.GraphManager; +import com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder; +import com.dianping.cat.report.page.dependency.graph.TopologyGraphItemBuilder; +import com.dianping.cat.report.page.dependency.graph.TopologyGraphManager; import com.dianping.cat.report.page.externalError.EventCollectManager; import com.dianping.cat.report.page.health.HistoryGraphs; import com.dianping.cat.report.page.model.spi.ModelService; @@ -207,14 +206,14 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(EventCollectManager.class).req(EventDao.class, ServerConfigManager.class)); - all.add(C(DependendencyGraphItemBuilder.class,DefaultDependencyGraphItemBuilder.class)); + all.add(C(TopologyGraphItemBuilder.class)); - all.add(C(DependencyGraphBuilder.class).req(DependendencyGraphItemBuilder.class)); + all.add(C(TopologyGraphBuilder.class).req(TopologyGraphItemBuilder.class)); // model service all.addAll(new ServiceComponentConfigurator().defineComponents()); - all.add(C(GraphManager.class).req(DependencyGraphBuilder.class).req(ModelService.class, "dependency")); + all.add(C(TopologyGraphManager.class).req(TopologyGraphBuilder.class).req(ModelService.class, "dependency")); // database all.add(C(JdbcDataSourceConfigurationManager.class) // diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/DependendencyGraphItemBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/DependendencyGraphItemBuilder.java deleted file mode 100644 index a2d8d05396fd4051efdd40843cf3d6ebb2c7d024..0000000000000000000000000000000000000000 --- a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/DependendencyGraphItemBuilder.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.dianping.cat.report.page.dependency; - -import com.dianping.cat.consumer.dependency.model.entity.Dependency; -import com.dianping.cat.consumer.dependency.model.entity.Index; -import com.dianping.cat.home.dependency.entity.Edge; -import com.dianping.cat.home.dependency.entity.Node; - -public interface DependendencyGraphItemBuilder { - - public Node buildNode(String domain, Index index); - - public Node buildDatabaseNode(String database); - - public Edge buildEdge(String domain, Dependency dependency); - -} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Handler.java index 1cf285c76002e60686cbc2298265432d1e795597..10a5e56a34a055942f704d9f46ddb0d95095f01e 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Handler.java @@ -30,6 +30,8 @@ import com.dianping.cat.home.dependency.transform.DefaultJsonBuilder; import com.dianping.cat.report.ReportPage; import com.dianping.cat.report.page.LineChart; import com.dianping.cat.report.page.PayloadNormalizer; +import com.dianping.cat.report.page.dependency.graph.TopologyGraphManager; +import com.dianping.cat.report.page.dependency.graph.LineGraphBuilder; 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; @@ -50,7 +52,7 @@ public class Handler implements PageHandler { private PayloadNormalizer m_normalizePayload; @Inject - private GraphManager m_graphManager; + private TopologyGraphManager m_graphManager; private DependencyReport getReport(Payload payload) { String domain = payload.getDomain(); @@ -140,7 +142,7 @@ public class Handler implements PageHandler { DependencyGraph graph = m_graphManager.queryGraph(domain, time); String json = new DefaultJsonBuilder().buildJson(graph); - model.setGraph(json); + model.setTopologyGraph(json); } private int computeMinute(Payload payload) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Model.java b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Model.java index 5bec2252ffd24e0fa6d2b203edc2c5a7c9f5e415..b0ecfa889dba80275ab0565d3fbe1d6b47dad8fe 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Model.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/Model.java @@ -6,14 +6,18 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.unidal.web.mvc.view.annotation.EntityMeta; +import org.unidal.web.mvc.view.annotation.ModelMeta; + import com.dianping.cat.consumer.dependency.model.entity.DependencyReport; import com.dianping.cat.consumer.dependency.model.entity.Segment; import com.dianping.cat.home.dal.report.Event; import com.dianping.cat.report.page.AbstractReportModel; import com.dianping.cat.report.view.StringSortHelper; +@ModelMeta("dependecy") public class Model extends AbstractReportModel { - + @EntityMeta private DependencyReport m_report; private Segment m_segment; @@ -26,7 +30,7 @@ public class Model extends AbstractReportModel { private Map> m_events; - private String m_graph; + private String m_topologyGraph; private List m_indexGraph; @@ -124,12 +128,12 @@ public class Model extends AbstractReportModel { m_minute = minute; } - public String getGraph() { - return m_graph; - } + public String getTopologyGraph() { + return m_topologyGraph; + } - public void setGraph(String graph) { - m_graph = graph; - } + public void setTopologyGraph(String topologyGraph) { + m_topologyGraph = topologyGraph; + } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/LineGraphBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/LineGraphBuilder.java similarity index 98% rename from cat-home/src/main/java/com/dianping/cat/report/page/dependency/LineGraphBuilder.java rename to cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/LineGraphBuilder.java index d61f257ece4584c6c22a3e40a2c7255211efe362..353acafb7953aa89a786044184c50fc8d2ed049f 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/LineGraphBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/LineGraphBuilder.java @@ -1,4 +1,4 @@ -package com.dianping.cat.report.page.dependency; +package com.dianping.cat.report.page.dependency.graph; import java.util.ArrayList; import java.util.Date; diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/DependencyGraphBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphBuilder.java similarity index 90% rename from cat-home/src/main/java/com/dianping/cat/report/page/dependency/DependencyGraphBuilder.java rename to cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphBuilder.java index b2ed23ca5114e16aebf4fba6e1058d323ef53bea..f33e9a37ccaca32165aa9ff25350500bdaff4a10 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/DependencyGraphBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphBuilder.java @@ -1,4 +1,4 @@ -package com.dianping.cat.report.page.dependency; +package com.dianping.cat.report.page.dependency.graph; import org.hsqldb.lib.StringUtil; @@ -11,7 +11,7 @@ import com.dianping.cat.home.dependency.entity.DependencyGraph; import com.dianping.cat.home.dependency.entity.Edge; import com.dianping.cat.home.dependency.entity.Node; -public class DependencyGraphBuilder extends BaseVisitor { +public class TopologyGraphBuilder extends BaseVisitor { private String m_domain; @@ -19,7 +19,7 @@ public class DependencyGraphBuilder extends BaseVisitor { private int m_minute; - private DependendencyGraphItemBuilder m_itemBuilder; + private TopologyGraphItemBuilder m_itemBuilder; private Node mergeNode(Node old, Node node) { if (old == null) { @@ -53,12 +53,12 @@ public class DependencyGraphBuilder extends BaseVisitor { } } - public DependencyGraphBuilder setGraph(DependencyGraph graph) { + public TopologyGraphBuilder setGraph(DependencyGraph graph) { m_graph = graph; return this; } - public DependencyGraphBuilder setMinute(int minute) { + public TopologyGraphBuilder setMinute(int minute) { m_minute = minute; return this; } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/DefaultDependencyGraphItemBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphItemBuilder.java similarity index 84% rename from cat-home/src/main/java/com/dianping/cat/report/page/dependency/DefaultDependencyGraphItemBuilder.java rename to cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphItemBuilder.java index d8eaebfe7953b055edb4ede8cc327f7c237728e6..7cd2d1ea22391325cdf2e299007291dc11dc1734 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/DefaultDependencyGraphItemBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphItemBuilder.java @@ -1,13 +1,14 @@ -package com.dianping.cat.report.page.dependency; +package com.dianping.cat.report.page.dependency.graph; import com.dianping.cat.consumer.dependency.model.entity.Dependency; import com.dianping.cat.consumer.dependency.model.entity.Index; import com.dianping.cat.home.dependency.entity.Edge; import com.dianping.cat.home.dependency.entity.Node; -public class DefaultDependencyGraphItemBuilder implements DependendencyGraphItemBuilder { +public class TopologyGraphItemBuilder { public static final String PROJECT = "project"; + public static final String DATABASE = "database"; public static int OK = 1; @@ -16,7 +17,6 @@ public class DefaultDependencyGraphItemBuilder implements DependendencyGraphItem public static int ERROR = 3; - @Override public Node buildNode(String domain, Index index) { Node node = new Node(domain); @@ -28,7 +28,6 @@ public class DefaultDependencyGraphItemBuilder implements DependendencyGraphItem return node; } - @Override public Edge buildEdge(String domain, Dependency dependency) { Edge edge = new Edge(); @@ -44,8 +43,7 @@ public class DefaultDependencyGraphItemBuilder implements DependendencyGraphItem return edge; } - @Override - public Node buildDatabaseNode(String database) { + public Node buildDatabaseNode(String database) { Node node = new Node(database); node.setStatus(OK); @@ -54,6 +52,6 @@ public class DefaultDependencyGraphItemBuilder implements DependendencyGraphItem node.setDes(""); node.setLink(""); return node; - } + } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/GraphManager.java b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphManager.java similarity index 94% rename from cat-home/src/main/java/com/dianping/cat/report/page/dependency/GraphManager.java rename to cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphManager.java index f1e0f2ea988b24110befabe793c7af2579dab130..f1171c51266a1406d73488ddb789b5b83c748eac 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/dependency/GraphManager.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/TopologyGraphManager.java @@ -1,4 +1,4 @@ -package com.dianping.cat.report.page.dependency; +package com.dianping.cat.report.page.dependency.graph; import java.util.Collection; import java.util.Map; @@ -25,13 +25,13 @@ import com.dianping.cat.report.page.model.spi.ModelResponse; import com.dianping.cat.report.page.model.spi.ModelService; import com.dianping.cat.report.view.DomainNavManager; -public class GraphManager implements Initializable, LogEnabled { +public class TopologyGraphManager implements Initializable, LogEnabled { @Inject(type = ModelService.class, value = "dependency") private ModelService m_service; @Inject - private DependencyGraphBuilder m_builder; + private TopologyGraphBuilder m_builder; private Map m_graphs = new ConcurrentHashMap(1000); @@ -85,8 +85,8 @@ public class GraphManager implements Initializable, LogEnabled { private Node creatNode(String domain) { Node node = new Node(domain); - node.setStatus(DefaultDependencyGraphItemBuilder.OK); - node.setType(DefaultDependencyGraphItemBuilder.PROJECT); + node.setStatus(TopologyGraphItemBuilder.OK); + node.setType(TopologyGraphItemBuilder.PROJECT); node.setWeight(1); node.setDes(""); node.setLink(""); diff --git a/cat-home/src/main/resources/META-INF/plexus/components.xml b/cat-home/src/main/resources/META-INF/plexus/components.xml index 5adb7c2a40be801809d85ca4612aff7a17779120..a3bbb24105433b685bcd7ce5675977a42b51d228 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -586,15 +586,15 @@ - com.dianping.cat.report.page.dependency.DependendencyGraphItemBuilder - com.dianping.cat.report.page.dependency.DefaultDependencyGraphItemBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphItemBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphItemBuilder - com.dianping.cat.report.page.dependency.DependencyGraphBuilder - com.dianping.cat.report.page.dependency.DependencyGraphBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder - com.dianping.cat.report.page.dependency.DependendencyGraphItemBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphItemBuilder @@ -1185,11 +1185,11 @@ - com.dianping.cat.report.page.dependency.GraphManager - com.dianping.cat.report.page.dependency.GraphManager + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager - com.dianping.cat.report.page.dependency.DependencyGraphBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder com.dianping.cat.report.page.model.spi.ModelService @@ -2524,7 +2524,7 @@ com.dianping.cat.report.page.PayloadNormalizer - com.dianping.cat.report.page.dependency.GraphManager + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager @@ -2559,8 +2559,8 @@ - com.dianping.cat.report.page.dependency.GraphManager - com.dianping.cat.report.page.dependency.GraphManager + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager com.dianping.cat.report.page.model.spi.ModelService @@ -2568,13 +2568,13 @@ m_service - com.dianping.cat.report.page.dependency.DependencyGraphBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder - com.dianping.cat.report.page.dependency.DependencyGraphBuilder - com.dianping.cat.report.page.dependency.DependencyGraphBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder com.dianping.cat.report.page.externalError.Handler diff --git a/cat-home/src/main/webapp/jsp/report/dependencyGraph.jsp b/cat-home/src/main/webapp/jsp/report/dependencyGraph.jsp index c711b64870d4091270d6da09a4ffd8378bdc3564..8ac40d8ea143874be62b729187f9783a5a2c64e7 100644 --- a/cat-home/src/main/webapp/jsp/report/dependencyGraph.jsp +++ b/cat-home/src/main/webapp/jsp/report/dependencyGraph.jsp @@ -105,7 +105,7 @@ $('#tab0').addClass('active'); $('#leftTab0').addClass('active'); - var data = ${model.graph}; + var data = ${model.topologyGraph}; function parse(data){ var nodes = data.nodes; diff --git a/cat-home/src/test/java/com/dianping/cat/report/analyzer/OpDataCollectTest.java b/cat-home/src/test/java/com/dianping/cat/report/analyzer/OpDataCollectTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1038acc1730e9349811ad22273f79d630b1c7859 --- /dev/null +++ b/cat-home/src/test/java/com/dianping/cat/report/analyzer/OpDataCollectTest.java @@ -0,0 +1,173 @@ +package com.dianping.cat.report.analyzer; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.Test; +import org.unidal.lookup.ComponentTestCase; + +import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport; +import com.dianping.cat.consumer.heartbeat.model.entity.Period; +import com.dianping.cat.consumer.transaction.model.entity.Machine; +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.helper.CatString; +import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.report.page.model.transaction.TransactionReportMerger; +import com.dianping.cat.report.service.HourlyReportService; + +public class OpDataCollectTest extends ComponentTestCase { + + private HourlyReportService m_hourlyReportService; + + private SimpleDateFormat m_sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + @Test + public void test() throws Exception { + m_hourlyReportService = (HourlyReportService) lookup(HourlyReportService.class); + String dateStr1 = "2012-12-24 16:00"; + String dateStr2 = "2013-02-14 16:00"; + String dateStr3 = "2013-05-24 16:00"; + + String[] domains = getDomains(); + System.out.println("Domain\tDate\tType\tTotal\tAvg\tLine95\tStd\tQPS"); + for (String domain : domains) { + buildTransactionData(domain, dateStr1); + } + for (String domain : domains) { + buildTransactionData(domain, dateStr2); + } + for (String domain : domains) { + buildTransactionData(domain, dateStr3); + } + + System.out.println("Domain\tDate\tLoad\tHttp"); + for (String domain : domains) { + buildHeartbeatData(domain, dateStr1); + } + for (String domain : domains) { + buildHeartbeatData(domain, dateStr2); + } + for (String domain : domains) { + buildHeartbeatData(domain, dateStr3); + } + } + + private void buildHeartbeatData(String domain, String str) throws Exception { + Date start = m_sdf.parse(str); + Date end = new Date(start.getTime() + TimeUtil.ONE_HOUR); + HeartbeatReport heartbeatReport = m_hourlyReportService.queryHeartbeatReport(domain, start, end); + showHeartbeatInfo(domain, str, heartbeatReport); + } + + private void buildTransactionData(String domain, String str) throws Exception { + Date start = m_sdf.parse(str); + Date end = new Date(start.getTime() + TimeUtil.ONE_HOUR); + TransactionReport transactionReport = m_hourlyReportService.queryTransactionReport(domain, start, end); + + showTransactionInfo(domain, str, transactionReport); + + } + + private void showTransactionInfo(String domain, String str, TransactionReport report) { + TransactionReport temp = new TransactionReport(); + TransactionReportMerger merger = new TransactionReportMerger(temp); + Machine machine = merger.mergesForAllMachine(report); + report.addMachine(machine); + + new TransactionVisitor(domain, str).visitTransactionReport(report); + } + + private void showHeartbeatInfo(String domain, String str, HeartbeatReport report) { + HeartbeatVisitor visitor = new HeartbeatVisitor(); + visitor.visitHeartbeatReport(report); + System.out.println(report.getDomain() + "\t" + str + "\t" + visitor.computeLoad() + "\t" + visitor.computeHttp()); + } + + private String[] getDomains() { + String domains = "MobileMembercardMainApiWeb,MobileMembercardMainServer,MobileMembercardRecomServer,PayEngine,tuangou-paygate,DealService,TuanGouApiMobile,TuanGouRank,TuanGouRemote,TuanGouWap,TuanGouWeb,MobileApi,MLocationService,MConfigAPI,MobileRecomStore,UserBaseService,GroupService,GroupWeb,PiccenterDisplay,PiccenterStorage,PiccenterUpload,ShopServer,ShopWeb,ShoppicService,ShopSearchWeb,ReviewServer,UserService"; + + return domains.split(","); + } + + class HeartbeatVisitor extends com.dianping.cat.consumer.heartbeat.model.transform.BaseVisitor { + + private List loads = new ArrayList(); + + private List https = new ArrayList(); + + public double computeLoad() { + double sum = 0.0; + + for (Double temp : loads) { + sum += temp; + } + return sum / loads.size(); + } + + public double computeHttp() { + double sum = 0.0; + + for (Double temp : https) { + sum += temp; + } + return sum / https.size(); + } + + @Override + public void visitPeriod(Period period) { + double load = period.getSystemLoadAverage(); + double http = period.getHttpThreadCount(); + + loads.add(load); + https.add(http); + } + } + + class TransactionVisitor extends BaseVisitor { + public Set ALL_TYPES = new HashSet(); + + private String m_domain; + + private String m_str; + + public TransactionVisitor(String domain, String str) { + ALL_TYPES.add("URL"); + ALL_TYPES.add("Service"); + ALL_TYPES.add("PigeonService"); + m_domain = domain; + m_str = str; + } + + @Override + public void visitMachine(Machine machine) { + String ip = machine.getIp(); + + if (CatString.ALL.equalsIgnoreCase(ip)) { + super.visitMachine(machine); + } + } + + @Override + public void visitType(TransactionType type) { + StringBuilder sb = new StringBuilder(128); + if (ALL_TYPES.contains(type.getId())) { + sb.append(m_domain).append("\t"); + sb.append(m_str).append("\t"); + sb.append(type.getId()).append("\t"); + sb.append(type.getTotalCount()).append("\t"); + sb.append(type.getAvg()).append("\t"); + sb.append(type.getLine95Value()).append("\t"); + sb.append(type.getStd()).append("\t"); + sb.append(1000 * type.getTotalCount() / TimeUtil.ONE_HOUR).append("\t"); + System.out.println(sb.toString()); + } + } + } + +}