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 04b9422edbb320b48dbb1dbd00b2002de7bba5b4..336649dba0b4782c781ec56d1febe3d80a0895ec 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 @@ -63,8 +63,6 @@ public class Handler implements PageHandler { private static final String TUAN = "TuanGou"; - private int m_timeRange; - private final Map m_metricReportMap = new LinkedHashMap() { private static final long serialVersionUID = 1L; @@ -118,16 +116,14 @@ public class Handler implements PageHandler { Model model = new Model(ctx); Payload payload = ctx.getPayload(); Action action = payload.getAction(); - m_timeRange = payload.getTimeRange(); normalize(model, payload); MetricDisplay metricDisplay = null; Collection productLines = m_productLineConfigManager.queryProductLines().values(); - long date = payload.getDate(); switch (action) { case METRIC: - metricDisplay = buildMetricsByProduct(date, payload.getProduct(), payload.getTest(), false); + metricDisplay = buildProductLineMetrics(payload.getProduct(), payload, false); model.setLineCharts(metricDisplay.getLineCharts()); model.setAbtests(metricDisplay.getAbtests()); @@ -135,8 +131,7 @@ public class Handler implements PageHandler { case DASHBOARD: List allCharts = new ArrayList(); for (ProductLine productLine : productLines) { - - metricDisplay = buildMetricsByProduct(date, productLine.getId(), payload.getTest(), true); + metricDisplay = buildProductLineMetrics(productLine.getId(), payload, true); List charts = metricDisplay.getLineCharts(); @@ -149,12 +144,17 @@ public class Handler implements PageHandler { m_jspViewer.view(ctx, model); } - private MetricDisplay buildMetricsByProduct(long date, String product, String abtestID, boolean isDashboard) { - Date startTime = new Date(date - (m_timeRange - 1) * TimeUtil.ONE_HOUR); + private MetricDisplay buildProductLineMetrics(String product, Payload payload, boolean isDashboard) { + long date = payload.getDate(); + String abtestID = payload.getTest(); + int timeRange = payload.getTimeRange(); + Date startTime = new Date(date - (timeRange - 1) * TimeUtil.ONE_HOUR); List domains = m_productLineConfigManager.queryProductLineDomains(product); List metricConfigs = m_configManager.queryMetricItemConfigs(new HashSet(domains)); - MetricDisplay display = new MetricDisplay(abtestID, startTime, isDashboard, m_timeRange); + MetricDisplay display = new MetricDisplay(abtestID, startTime, isDashboard, timeRange); + display.initializeLineCharts(metricConfigs); + MetricDisplayMerger displayMerger = new MetricDisplayMerger(abtestID, isDashboard); long time = startTime.getTime(); @@ -162,15 +162,16 @@ public class Handler implements PageHandler { display.setBaselineService(m_baselineService); display.setDisplayMerger(displayMerger); - for (int i = 0; i < m_timeRange; i++) { + for (int index = 0; index < timeRange; index++) { ModelPeriod period = ModelPeriod.getByTime(time); MetricReport report = getReport(period, product, time); if (report != null) { - displayMerger.visitMetricReport(i, report); + displayMerger.visitMetricReport(index, report); } time = time + TimeUtil.ONE_HOUR; } + display.generateLineCharts(); if (abtestID.equals("-1")) { display.generateBaselineChart(); @@ -186,7 +187,8 @@ public class Handler implements PageHandler { if (poduct == null || poduct.length() == 0) { payload.setProduct(TUAN); } - Date startTime = new Date(payload.getDate() - (m_timeRange - 1) * TimeUtil.ONE_HOUR); + int timeRange = payload.getTimeRange(); + Date startTime = new Date(payload.getDate() - (timeRange - 1) * TimeUtil.ONE_HOUR); Date endTime = new Date(payload.getDate() + TimeUtil.ONE_HOUR - 1); model.setStartTime(startTime); diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/Model.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Model.java index f928001dcade0c8075ee2d28312a20d320f18c6d..5630664e0a0d94f8f8b0e82d6e668945fa1749a5 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/metric/Model.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Model.java @@ -28,7 +28,11 @@ public class Model extends AbstractReportModel { private Date m_endTime; private Map m_abtests; - + + public Range[] getAllRange() { + return Range.values(); + } + public Model(Context ctx) { super(ctx); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/Payload.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Payload.java index 37b1aba1635253543bc1de79a600bb4bb2364dcd..f108cce5223b6733679426178fa9e5c7afa60962 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/metric/Payload.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Payload.java @@ -26,7 +26,6 @@ public class Payload extends AbstractReportPayload { @FieldMeta("timeRange") private int m_timeRange = 2; - @FieldMeta("fullScreen") private boolean m_fullScreen = false; diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/Range.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Range.java new file mode 100644 index 0000000000000000000000000000000000000000..caabcec3f3197b3104c7ae49636c63e2814b9b1f --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/Range.java @@ -0,0 +1,41 @@ +package com.dianping.cat.report.page.metric; + +public enum Range { + ONE("1小时", 1), + + TWO("2小时", 2), + + SIX("6小时", 6), + + NINE("9小时", 9), + + THELVE("12小时", 12), + + ONE_DAY("24小时", 24), ; + + private Range(String title, int duration) { + m_title = title; + m_duration = duration; + } + + public String getTitle() { + return m_title; + } + + public int getDuration() { + return m_duration; + } + + private String m_title; + + private int m_duration; + + public static Range getByTitle(String title, Range defaultRange) { + for (Range range : Range.values()) { + if (range.getTitle().equals(title)) { + return range; + } + } + return defaultRange; + } +} diff --git a/cat-home/src/main/webapp/jsp/report/metric/dashboard.jsp b/cat-home/src/main/webapp/jsp/report/metric/dashboard.jsp index 89bcdaedd0b2f4c0c9e0c6d82c31e4fd5db9f2fe..2f8b168fb512726046353a3e6eab03afebf85593 100644 --- a/cat-home/src/main/webapp/jsp/report/metric/dashboard.jsp +++ b/cat-home/src/main/webapp/jsp/report/metric/dashboard.jsp @@ -18,6 +18,22 @@ + + + + +
  时间段选择: + + + +    [ ${range.title} ] + + +    [ ${range.title} ] + + + +
<%@ include file="detail.jsp" %>
@@ -28,12 +44,28 @@   From ${w:format(model.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(model.endTime,'yyyy-MM-dd HH:mm:ss')} -  [ ${nav.title} ]  +  [ ${nav.title} -  [ now ]  +  [ now ]  + + + + +
  时间段选择: + + + +    [ ${range.title} ] + + +    [ ${range.title} ] + + + +
<%@ include file="detail.jsp" %> @@ -54,76 +86,6 @@ }); -
-
- - - - -
  From ${w:format(model.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(model.endTime,'yyyy-MM-dd HH:mm:ss')}
-
- - - - -
Time range:  [  - - - - Two hours - - - Two hours - -  ]  -  [  - - - One day - - - One day - -  ] -
-
-
-
-
- -
-
- -

说明:图中纵轴数据为10分钟数据之和

-
- -
-
${item.title}
-
-
-
-
- - - - - -