提交 1d8d71a4 编写于 作者: Y yong.you

modify the metric page

上级 3c0b7521
......@@ -63,8 +63,6 @@ public class Handler implements PageHandler<Context> {
private static final String TUAN = "TuanGou";
private int m_timeRange;
private final Map<String, MetricReport> m_metricReportMap = new LinkedHashMap<String, MetricReport>() {
private static final long serialVersionUID = 1L;
......@@ -118,16 +116,14 @@ public class Handler implements PageHandler<Context> {
Model model = new Model(ctx);
Payload payload = ctx.getPayload();
Action action = payload.getAction();
m_timeRange = payload.getTimeRange();
normalize(model, payload);
MetricDisplay metricDisplay = null;
Collection<ProductLine> 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<Context> {
case DASHBOARD:
List<LineChart> allCharts = new ArrayList<LineChart>();
for (ProductLine productLine : productLines) {
metricDisplay = buildMetricsByProduct(date, productLine.getId(), payload.getTest(), true);
metricDisplay = buildProductLineMetrics(productLine.getId(), payload, true);
List<LineChart> charts = metricDisplay.getLineCharts();
......@@ -149,12 +144,17 @@ public class Handler implements PageHandler<Context> {
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<String> domains = m_productLineConfigManager.queryProductLineDomains(product);
List<MetricItemConfig> metricConfigs = m_configManager.queryMetricItemConfigs(new HashSet<String>(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<Context> {
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<Context> {
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);
......
......@@ -28,7 +28,11 @@ public class Model extends AbstractReportModel<Action, Context> {
private Date m_endTime;
private Map<Integer, Abtest> m_abtests;
public Range[] getAllRange() {
return Range.values();
}
public Model(Context ctx) {
super(ctx);
}
......
......@@ -26,7 +26,6 @@ public class Payload extends AbstractReportPayload<Action> {
@FieldMeta("timeRange")
private int m_timeRange = 2;
@FieldMeta("fullScreen")
private boolean m_fullScreen = false;
......
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;
}
}
......@@ -18,6 +18,22 @@
<c:choose>
<c:when test="${payload.fullScreen}">
<table>
<tr style="text-align: left">
<th>&nbsp;&nbsp;时间段选择:
<c:forEach var="range" items="${model.allRange}">
<c:choose>
<c:when test="${payload.timeRange eq range.duration}">
&nbsp;&nbsp;&nbsp;[ <a href="?op=dashboard&${navUrlPrefix}&fullScreen=${payload.fullScreen}&date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=${range.duration}" class="current">${range.title}</a> ]
</c:when>
<c:otherwise>
&nbsp;&nbsp;&nbsp;[ <a href="?op=dashboard&${navUrlPrefix}&fullScreen=${payload.fullScreen}&date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=${range.duration}">${range.title}</a> ]
</c:otherwise>
</c:choose>
</c:forEach>
</th>
</tr>
</table>
<%@ include file="detail.jsp" %>
</c:when>
<c:otherwise>
......@@ -28,12 +44,28 @@
<td class="title">&nbsp;&nbsp;From ${w:format(model.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(model.endTime,'yyyy-MM-dd HH:mm:ss')}</td>
<td class="nav">
<c:forEach var="nav" items="${model.navs}">
&nbsp;[ <a href="${model.baseUri}?date=${model.date}&domain=${model.domain}&step=${nav.hours}&product=${payload.product}&test=${payload.test}&${navUrlPrefix}">${nav.title}</a> ]&nbsp;
&nbsp;[ <a href="${model.baseUri}?op=dashboard&date=${model.date}&domain=${model.domain}&step=${nav.hours}&product=${payload.product}&test=${payload.test}&${navUrlPrefix}">${nav.title}</a> ]&nbsp;
</c:forEach>
&nbsp;[ <a href="${model.baseUri}?${navUrlPrefix}&product=${payload.product}">now</a> ]&nbsp;
&nbsp;[ <a href="${model.baseUri}?op=dashboard&${navUrlPrefix}&product=${payload.product}">now</a> ]&nbsp;
</td>
</tr>
</table>
<table>
<tr style="text-align: left">
<th>&nbsp;&nbsp;时间段选择:
<c:forEach var="range" items="${model.allRange}">
<c:choose>
<c:when test="${payload.timeRange eq range.duration}">
&nbsp;&nbsp;&nbsp;[ <a href="?op=dashboard&date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=${range.duration}" class="current">${range.title}</a> ]
</c:when>
<c:otherwise>
&nbsp;&nbsp;&nbsp;[ <a href="?op=dashboard&date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=${range.duration}">${range.title}</a> ]
</c:otherwise>
</c:choose>
</c:forEach>
</th>
</tr>
</table>
<%@ include file="detail.jsp" %>
<table class="footer">
<tr>
......@@ -54,76 +86,6 @@
</c:forEach>
});
</script>
<div class="report">
<table class="header">
<tr>
<td class="title">&nbsp;&nbsp;From ${w:format(model.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(model.endTime,'yyyy-MM-dd HH:mm:ss')}</td>
<td class="nav">
<c:forEach var="nav" items="${model.navs}">
&nbsp;[ <a href="${model.baseUri}?date=${model.date}&domain=${model.domain}&step=${nav.hours}&product=${payload.product}&test=${payload.test}&${navUrlPrefix}">${nav.title}</a> ]&nbsp;
</c:forEach>
&nbsp;[ <a href="${model.baseUri}?${navUrlPrefix}&product=${payload.product}">now</a> ]&nbsp;
</td>
</tr>
</table>
</br>
<table>
<tr style="text-align: left">
<th>Time range: &nbsp;[&nbsp;
<c:choose>
<c:when test="${payload.timeRange eq 2}">
<a href="?op=dashboard&date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=2"
class="current">Two hours</a>
</c:when>
<c:otherwise>
<a href="?op=dashboard&date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=2">Two hours</a>
</c:otherwise>
</c:choose> &nbsp;]&nbsp;
&nbsp;[&nbsp;
<c:choose>
<c:when test="${payload.timeRange eq 24}">
<a href="?op=dashboard&date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=24"
class="current">One day</a>
</c:when>
<c:otherwise>
<a href="?op=dashboard&?date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=24">One day</a>
</c:otherwise>
</c:choose> &nbsp;]
</th>
</tr>
</table>
<br/>
<div class="container-fluid">
<div class="row-fluid">
<div class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class='nav-header active' id="${item.id}"><a href="?op=dashboard&date=${model.date}&domain=${model.domain}"><strong>业务大盘</strong></a></li>
<c:forEach var="item" items="${model.productLines}" varStatus="status">
<li class='nav-header' id="${item.id}"><a href="?date=${model.date}&domain=${model.domain}&product=${item.id}"><strong>${item.title}</strong></a></li>
</c:forEach>
<li >&nbsp;</li>
</ul>
</div><!--/.well -->
</div><!--/span-->
<div class="span10">
<c:if test="${payload.timeRange eq 24 }">
<h3 class='text-red'>说明:图中纵轴数据为10分钟数据之和</h3>
</c:if>
<c:forEach var="item" items="${model.lineCharts}" varStatus="status">
<div style="float:left;">
<h5 class="text-center text-error">${item.title}</h5>
<div id="${item.title}" class="metricGraph"></div>
</div>
</c:forEach>
</div>
<table class="footer">
<tr>
<td>[ end ]</td>
</tr>
</table>
</div>
<style type="text/css">
.row-fluid .span2{
width:10%;
......
......@@ -40,33 +40,22 @@
</td>
</tr>
</table>
</br>
<table>
<tr style="text-align: left">
<th>Time range: &nbsp;[&nbsp;
<c:choose>
<c:when test="${payload.timeRange eq 2}">
<a href="?date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=2"
class="current">Two hours</a>
</c:when>
<c:otherwise>
<a href="?date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=2">Two hours</a>
</c:otherwise>
</c:choose> &nbsp;]&nbsp;
&nbsp;[&nbsp;
<c:choose>
<c:when test="${payload.timeRange eq 24}">
<a href="?date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=24"
class="current">One day</a>
</c:when>
<c:otherwise>
<a href="?date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=24">One day</a>
</c:otherwise>
</c:choose> &nbsp;]
<th>&nbsp;&nbsp;时间段选择:
<c:forEach var="range" items="${model.allRange}">
<c:choose>
<c:when test="${payload.timeRange eq range.duration}">
&nbsp;&nbsp;&nbsp;[ <a href="?date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=${range.duration}" class="current">${range.title}</a> ]
</c:when>
<c:otherwise>
&nbsp;&nbsp;&nbsp;[ <a href="?date=${model.date}&domain=${model.domain}&product=${payload.product}&test=${payload.test}&timeRange=${range.duration}">${range.title}</a> ]
</c:otherwise>
</c:choose>
</c:forEach>
</th>
</tr>
</table>
<br/>
<div class="container-fluid">
<div class="row-fluid">
<div class="span2">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册