diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Handler.java index dbf7b52d4b4574c1091fe6d63cfd6035bf0b6851..e84676b0db969ccbf80e466940920f9e05f14a86 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/metric/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Handler.java @@ -67,6 +67,8 @@ public class Handler implements PageHandler { display.visitMetricReport(report); + display.buildConvertRate("/index", "/detail"); + display.buildConvertRate("/detail", "/order/submitOrder"); model.setDisplay(display); model.setReport(report); } 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 d81946a4f4512ec36e80acae205aea07836d2f38..386106a2085a838ffd1e9c9628886b02d8ba92b6 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 @@ -19,12 +19,16 @@ public class MetricDisplay extends BaseVisitor { private Map m_metrics = new LinkedHashMap(); + private Map m_conversionRates = new LinkedHashMap(); + private String m_key; private Date m_start; private MetricConfig m_config; + private static final String COUNT = ":count"; + public MetricDisplay(MetricConfig metricConfig, Date start) { m_config = metricConfig; m_start = start; @@ -35,7 +39,7 @@ public class MetricDisplay extends BaseVisitor { m_metrics.put(title, new GraphItem(m_start, title, flag.getKey())); } if (flag.isShowCount()) { - String title = flag.getKey() + ":count"; + String title = flag.getKey() + COUNT; m_metrics.put(title, new GraphItem(m_start, title, flag.getKey())); } if (flag.isShowAvg()) { @@ -45,6 +49,33 @@ public class MetricDisplay extends BaseVisitor { } } + public MetricDisplay buildConvertRate(String key1, String key2) { + GraphItem item1 = m_metrics.get(key1 + COUNT); + GraphItem item2 = m_metrics.get(key2 + COUNT); + + if (item1 != null && item2 != null) { + String key = key1 + ":" + key2; + GraphItem item = new GraphItem(m_start, key1 + " to " + key2 + " Conversion Rate", key); + double[] value1 = item1.getValues(); + double[] value2 = item2.getValues(); + int size = item.getSize(); + double[] value = new double[size]; + + for (int i = 0; i < size; i++) { + if (value1[i] > 0) { + value[i] = value2[i] / value1[i]; + } + } + item.setValues(value); + m_conversionRates.put(key, item); + } + return this; + } + + public List getConversionRates() { + return new ArrayList(m_conversionRates.values()); + } + public List getGroups() { return new ArrayList(m_metrics.values()); } @@ -154,7 +185,15 @@ public class MetricDisplay extends BaseVisitor { public String getKey() { return key; } - + + public double[] getValues() { + return values; + } + + public void setValues(double[] values) { + this.values = values; + } + } } diff --git a/cat-home/src/main/webapp/jsp/report/metric.jsp b/cat-home/src/main/webapp/jsp/report/metric.jsp index 4f695252c144ef8cde79b673d1598a379362d6b8..89039f4d986c6530a7cdd02775c4a329f36cd219 100644 --- a/cat-home/src/main/webapp/jsp/report/metric.jsp +++ b/cat-home/src/main/webapp/jsp/report/metric.jsp @@ -34,7 +34,14 @@ graph(document.getElementById('${item.title}'), data); + + + var data = ${item.jsonString}; + graph(document.getElementById('${item.title}'), data); + + }); +
@@ -65,6 +72,11 @@
+

页面实时转化率

+ + +
+
diff --git a/cat-home/src/test/java/com/dianping/cat/demo/TestBusinessMessage.java b/cat-home/src/test/java/com/dianping/cat/demo/TestBusinessMessage.java index b48f28989b6a74ee371798066ce03bd6fb13e1bb..2e5d7627d318969bba8e717f2f1614ce171d9b12 100644 --- a/cat-home/src/test/java/com/dianping/cat/demo/TestBusinessMessage.java +++ b/cat-home/src/test/java/com/dianping/cat/demo/TestBusinessMessage.java @@ -14,16 +14,15 @@ public class TestBusinessMessage { for (int i = 0; i < 1000; i++) { Transaction t = Cat.newTransaction("URL", "/index"); Cat.logMetric("order", "quantity" , i); - t.complete(); } - for (int i = 0; i < 1000; i++) { + for (int i = 0; i < 900; i++) { Transaction t = Cat.newTransaction("URL", "/detail"); Cat.logMetric("payment.pending", "amount" , i); t.complete(); } - for (int i = 0; i < 1000; i++) { + for (int i = 0; i < 500; i++) { Transaction t = Cat.newTransaction("URL", "/order/submitOrder"); Cat.logMetric("payment.success", "amount" , i); diff --git a/pom.xml b/pom.xml index 0a04d75e7e5d43ee299bab20d1b99be52ada9e83..e32badb788fb76a70b5212448cb82a213bf75b02 100644 --- a/pom.xml +++ b/pom.xml @@ -212,7 +212,7 @@ org.eclipse.jdt.core.compiler.compliance=1.6 dianping.repo - http://192.168.8.45:8080/artifactory/dianping-releases + http://192.168.8.45:8080/artifactory/dianping.repo.snapshots