From 6c9057a66042a7a19e0fb78dd33b2786eb295b19 Mon Sep 17 00:00:00 2001 From: "yong.you" Date: Thu, 20 Jun 2013 15:04:25 +0800 Subject: [PATCH] modify the metric analyzer --- .../cat/consumer/advanced/MetricAnalyzer.java | 19 ++++- .../cat/report/page/metric/MetricDisplay.java | 34 +++++---- .../cat/demo/TestABTestBusinessMessage.java | 71 +++++++++++++++++++ 3 files changed, 107 insertions(+), 17 deletions(-) create mode 100644 cat-home/src/test/java/com/dianping/cat/demo/TestABTestBusinessMessage.java diff --git a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricAnalyzer.java b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricAnalyzer.java index f2a99910c..e74f244e8 100644 --- a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricAnalyzer.java +++ b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricAnalyzer.java @@ -29,6 +29,7 @@ import com.dianping.cat.consumer.metric.model.entity.Point; import com.dianping.cat.consumer.metric.model.transform.DefaultNativeBuilder; import com.dianping.cat.consumer.metric.model.transform.DefaultSaxParser; import com.dianping.cat.consumer.metric.model.transform.DefaultXmlBuilder; +import com.dianping.cat.message.Event; import com.dianping.cat.message.Message; import com.dianping.cat.message.Metric; import com.dianping.cat.message.Transaction; @@ -107,12 +108,26 @@ public class MetricAnalyzer extends AbstractMessageAnalyzer implem private Map parseABtests(Transaction transaction) { String abtest = queryAbTest(transaction); + return parseABTests(abtest); } private String queryAbTest(Transaction transaction) { - return ""; - } + List messages = transaction.getChildren(); + + for (Message message : messages) { + if (message instanceof Event) { + if ("URL".equals(message.getType()) && "ABTest".equals(message.getName())) { + String data = (String) message.getData(); + + System.out.println(data); + return data; + } + } + } + + return ""; + } public Map parseABTests(String str) { Map abtests = new HashMap(); diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplay.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplay.java index bec39c2f8..3e714c225 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplay.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplay.java @@ -35,12 +35,12 @@ public class MetricDisplay extends BaseVisitor { private static final String COUNT = ":count"; private static final String AVG = "avg"; - - public List getLineCharts(){ + + public List getLineCharts() { return new ArrayList(m_lineCharts.values()); } - - public Set getAbtests(){ + + public Set getAbtests() { return m_abtests; } @@ -51,32 +51,32 @@ public class MetricDisplay extends BaseVisitor { for (BusinessConfig flag : configs) { if (flag.isShowSum()) { String key = flag.getMainKey() + SUM; - + m_lineCharts.put(key, creatLineChart(key)); } if (flag.isShowCount()) { String key = flag.getMainKey() + COUNT; - + m_lineCharts.put(key, creatLineChart(key)); } if (flag.isShowAvg()) { String key = flag.getMainKey() + AVG; - + m_lineCharts.put(key, creatLineChart(key)); } } } private LineChart creatLineChart(String key) { - LineChart lineChart = new LineChart(); - - lineChart.setTitles(key); - lineChart.setStart(m_start); - lineChart.setSize(60); - lineChart.setStep(TimeUtil.ONE_MINUTE); - return lineChart; - } + LineChart lineChart = new LineChart(); + + lineChart.setTitles(key); + lineChart.setStart(m_start); + lineChart.setSize(60); + lineChart.setStep(TimeUtil.ONE_MINUTE); + return lineChart; + } @Override public void visitAbtest(Abtest abtest) { @@ -91,6 +91,10 @@ public class MetricDisplay extends BaseVisitor { @Override public void visitGroup(Group group) { String id = group.getName(); + + if ("".equals(id)) { + id = "Default"; + } double[] sum = new double[60]; double[] avg = new double[60]; double[] count = new double[60]; diff --git a/cat-home/src/test/java/com/dianping/cat/demo/TestABTestBusinessMessage.java b/cat-home/src/test/java/com/dianping/cat/demo/TestABTestBusinessMessage.java new file mode 100644 index 000000000..8aae6b493 --- /dev/null +++ b/cat-home/src/test/java/com/dianping/cat/demo/TestABTestBusinessMessage.java @@ -0,0 +1,71 @@ +package com.dianping.cat.demo; + +import org.junit.Test; + +import com.dianping.cat.Cat; +import com.dianping.cat.message.Event; +import com.dianping.cat.message.Transaction; +import com.dianping.cat.message.internal.DefaultMessageManager; +import com.dianping.cat.message.spi.internal.DefaultMessageTree; + +public class TestABTestBusinessMessage { + + private static final String TuanGou = "TuanGouWeb"; + + private static final String PayOrder = "PayOrder"; + + @Test + public void test() throws Exception { + + for (int i = 0; i < 1000; i++) { + Transaction t = Cat.newTransaction("URL", "/index"); + String abtest = buildAbStr(i); + + Cat.logEvent("URL", "ABTest", Event.SUCCESS, abtest); + ((DefaultMessageManager) Cat.getManager()).setMetricType(abtest); + + DefaultMessageTree tree = (DefaultMessageTree) Cat.getManager().getThreadLocalMessageTree(); + tree.setDomain(TuanGou); + t.complete(); + } + for (int i = 0; i < 800; i++) { + Transaction t = Cat.newTransaction("URL", "/detail"); + String abtest = buildAbStr(i); + + Cat.logEvent("URL", "ABTest", Event.SUCCESS, abtest); + ((DefaultMessageManager) Cat.getManager()).setMetricType(abtest); + + DefaultMessageTree tree = (DefaultMessageTree) Cat.getManager().getThreadLocalMessageTree(); + tree.setDomain(TuanGou); + t.complete(); + } + + for (int i = 0; i < 500; i++) { + Transaction t = Cat.newTransaction("URL", "/order/submitOrder"); + String abtest = buildAbStr(i); + + Cat.logEvent("URL", "ABTest", Event.SUCCESS, abtest); + ((DefaultMessageManager) Cat.getManager()).setMetricType(abtest); + Cat.logMetricForCount("order"); + Cat.logMetricForSum("payment.success", i); + + DefaultMessageTree tree = (DefaultMessageTree) Cat.getManager().getThreadLocalMessageTree(); + tree.setDomain(PayOrder); + t.complete(); + } + + Thread.sleep(1000); + + } + + private String buildAbStr(int i) { + int value = i % 3; + if (value == 0) { + return "1=ab:A&2=ab:A"; + } else if (value == 1) { + return "1=ab:B&2=ab:B"; + } else { + return "1=ab:C&2=ab:"; + } + } +} -- GitLab