diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/DataExtractor.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/DataExtractor.java new file mode 100644 index 0000000000000000000000000000000000000000..5536cb79d4d68137afae27bd698383cb1880182c --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/DataExtractor.java @@ -0,0 +1,75 @@ +package com.dianping.cat.report.page.metric; + +import java.util.List; + +public class DataExtractor { + + private int m_timeRange; + + private int m_interval; + + private static final int MINUTE = 60; + + public DataExtractor(int timeRange, int interval) { + super(); + this.m_timeRange = timeRange; + this.m_interval = interval; + } + + public double[] extract(List datas, int offset) { + int pointNumber = (m_timeRange * MINUTE) / m_interval; + double[] result = new double[pointNumber]; + + if (datas == null) { + return result; + } + int size = datas.size(); + double[] hourData = null; + int length = 0; + + for (int i = 0, j = -1; i < pointNumber; i++) { + int insideOffset = i * m_interval + offset; + while (length <= insideOffset) { + insideOffset = insideOffset - length; + offset = offset - length; + j++; + if (j >= size) { + return result; + } + hourData = datas.get(j); + if (hourData == null) { + length = 0; + continue; + } + length = hourData.length; + } + result[i] = avgOfArray(hourData, insideOffset, m_interval); + } + + return result; + } + + private double avgOfArray(double[] values, int index, int interval) { + + double result = 0; + + for (int i = index; i < index + interval; i++) { + if (values[i] >= 0) { + result += values[i]; + } + } + return result / interval; + } + + // private double sumOfArray(double[] values, int index, int interval) { + // + // double result = 0; + // + // for (int i = index; i < index + interval; i++) { + // if (values[i] >= 0) { + // result += values[i]; + // } + // } + // return result; + // } +} 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 435e3cb0c6775ff2fad2ff978979d6a2aa236d00..9f368813d6d491b9527be621120a6d8fe5a8e31d 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 @@ -5,10 +5,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import javax.servlet.ServletException; @@ -18,7 +15,6 @@ import org.unidal.web.mvc.annotation.InboundActionMeta; import org.unidal.web.mvc.annotation.OutboundActionMeta; import org.unidal.web.mvc.annotation.PayloadMeta; -import com.dianping.cat.Cat; import com.dianping.cat.advanced.metric.config.entity.MetricItemConfig; import com.dianping.cat.consumer.advanced.MetricConfigManager; import com.dianping.cat.consumer.advanced.ProductLineConfigManager; @@ -31,10 +27,6 @@ import com.dianping.cat.report.page.LineChart; import com.dianping.cat.report.page.PayloadNormalizer; import com.dianping.cat.report.page.model.spi.ModelService; import com.dianping.cat.report.service.ReportService; -import com.dianping.cat.service.ModelPeriod; -import com.dianping.cat.service.ModelRequest; -import com.dianping.cat.service.ModelResponse; -import com.dianping.cat.system.page.abtest.service.ABTestService; public class Handler implements PageHandler { @Inject @@ -52,9 +44,6 @@ public class Handler implements PageHandler { @Inject private ProductLineConfigManager m_productLineConfigManager; - @Inject - private ABTestService m_abtestService; - @Inject private ReportService m_reportService; @@ -63,47 +52,6 @@ public class Handler implements PageHandler { private static final String TUAN = "TuanGou"; - private final Map m_metricReportMap = new LinkedHashMap() { - - private static final long serialVersionUID = 1L; - - @Override - protected boolean removeEldestEntry(Entry eldest) { - return size() > 1000; - } - }; - - private MetricReport getReportFromDB(String product, long date) { - String key = product + date; - MetricReport result = m_metricReportMap.get(key); - if (result == null) { - Date start = new Date(date); - Date end = new Date(date + TimeUtil.ONE_HOUR); - try { - result = m_reportService.queryMetricReport(product, start, end); - m_metricReportMap.put(key, result); - } catch (Exception e) { - Cat.logError(e); - } - } - return result; - } - - private MetricReport getReport(ModelPeriod period, String product, long date) { - if (period == ModelPeriod.CURRENT || period == ModelPeriod.LAST) { - ModelRequest request = new ModelRequest(product, date); - if (m_service.isEligable(request)) { - ModelResponse response = m_service.invoke(request); - MetricReport report = response.getModel(); - return report; - } else { - throw new RuntimeException("Internal error: no eligable metric service registered for " + request + "!"); - } - } else { - return getReportFromDB(product, date); - } - } - @Override @PayloadMeta(Payload.class) @InboundActionMeta(name = "metric") @@ -151,30 +99,11 @@ public class Handler implements PageHandler { 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, timeRange); + MetricDisplay display = new MetricDisplay(product, abtestID, startTime, isDashboard, timeRange); display.initializeLineCharts(metricConfigs); - - MetricDisplayMerger displayMerger = new MetricDisplayMerger(abtestID, isDashboard); - long time = startTime.getTime(); - - displayMerger.setAbtestService(m_abtestService); - display.setBaselineService(m_baselineService); - display.setDisplayMerger(displayMerger); - - for (int index = 0; index < timeRange; index++) { - ModelPeriod period = ModelPeriod.getByTime(time); - MetricReport report = getReport(period, product, time); - - if (report != null) { - displayMerger.visitMetricReport(index, report); - } - time = time + TimeUtil.ONE_HOUR; - } - display.generateLineCharts(); - if (abtestID.equals("-1")) { - display.generateBaselineChart(); - } + display.setBaselineService(m_baselineService).setReportService(m_reportService).setService(m_service); + display.generateAllCharts(); return display; } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDate.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDate.java new file mode 100644 index 0000000000000000000000000000000000000000..e6e19fa5376e8947eb9cdf28443dd21351343926 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDate.java @@ -0,0 +1,27 @@ +package com.dianping.cat.report.page.metric; + +public enum MetricDate { + CURRENT(0, "当前时段"), + + LAST_DAY(-1, "前一天相同时段"), + + LAST_WEEK(-7, "上周相同时段"); + + int m_index; + + String m_title; + + private MetricDate(int index, String title) { + m_index = index; + m_title = title; + } + + public int getIndex() { + return m_index; + } + + public String getTitle() { + return m_title; + } + +} 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 bae45a9966a12de1a7a6d6b9e2e2c8afe38180de..1702d4d113f0ccdd0839a1df01f2e88b83363aac 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 @@ -8,14 +8,21 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import com.dianping.cat.Cat; import com.dianping.cat.advanced.metric.config.entity.MetricItemConfig; +import com.dianping.cat.consumer.metric.model.entity.MetricReport; import com.dianping.cat.consumer.metric.model.transform.BaseVisitor; import com.dianping.cat.helper.Chinese; import com.dianping.cat.helper.TimeUtil; import com.dianping.cat.report.baseline.BaselineService; import com.dianping.cat.report.page.LineChart; +import com.dianping.cat.report.page.model.spi.ModelService; +import com.dianping.cat.report.service.ReportService; import com.dianping.cat.report.task.TaskHelper; import com.dianping.cat.report.task.metric.MetricType; +import com.dianping.cat.service.ModelPeriod; +import com.dianping.cat.service.ModelRequest; +import com.dianping.cat.service.ModelResponse; public class MetricDisplay extends BaseVisitor { @@ -23,21 +30,25 @@ public class MetricDisplay extends BaseVisitor { private Map m_abtests = new HashMap(); - private Date m_start; - private BaselineService m_baselineService; - private boolean m_isDashboard; + private DataExtractor m_dataExtractor; + + private Date m_start; - private MetricDisplayMerger m_displayMerger; + private boolean m_isDashboard; private int m_timeRange; - private int m_pointNumber; + private int m_interval = 1; - private int m_realPointNumber; + private String m_abtest; - private int m_interval = 1; + private String m_product; + + private static final int MIN_POINT_NUMBER = 60; + + private static final int MAX_POINT_NUMBER = 180; private static final String SUM = MetricType.SUM.name(); @@ -45,19 +56,21 @@ public class MetricDisplay extends BaseVisitor { private static final String AVG = MetricType.AVG.name(); - private static final int HOUR = 24; + private static final String METRIC_STRING = "metric"; - private static final int MINUTE = 60; + private ReportService m_reportService; - private static final String METRIC_STRING = "metric"; + private ModelService m_service; - public MetricDisplayMerger getDisplayMerger() { - return m_displayMerger; - } + private final Map m_metricReportMap = new LinkedHashMap() { - public void setDisplayMerger(MetricDisplayMerger displayMerger) { - m_displayMerger = displayMerger; - } + private static final long serialVersionUID = 1L; + + @Override + protected boolean removeEldestEntry(Entry eldest) { + return size() > 1000; + } + }; private boolean showAvg(MetricItemConfig config) { if (m_isDashboard) { @@ -83,18 +96,61 @@ public class MetricDisplay extends BaseVisitor { } } - public MetricDisplay(String abtest, Date start, boolean isDashboard, int timeRange) { - int minute = (int) (System.currentTimeMillis() % TimeUtil.ONE_HOUR / TimeUtil.ONE_MINUTE); + private MetricReport getReportFromDB(String product, long date) { + String key = product + date; + MetricReport result = m_metricReportMap.get(key); + if (result == null) { + Date start = new Date(date); + Date end = new Date(date + TimeUtil.ONE_HOUR); + try { + result = m_reportService.queryMetricReport(product, start, end); + m_metricReportMap.put(key, result); + } catch (Exception e) { + Cat.logError(e); + } + } + return result; + } + + private MetricReport getReport(ModelPeriod period, String product, long date) { + if (period == ModelPeriod.CURRENT || period == ModelPeriod.LAST) { + ModelRequest request = new ModelRequest(product, date); + if (m_service.isEligable(request)) { + ModelResponse response = m_service.invoke(request); + MetricReport report = response.getModel(); + return report; + } else { + throw new RuntimeException("Internal error: no eligable metric service registered for " + request + "!"); + } + } else { + return getReportFromDB(product, date); + } + } + + public MetricDisplay(String product, String abtest, Date start, boolean isDashboard, int timeRange) { + m_product = product; m_isDashboard = isDashboard; m_start = start; m_timeRange = timeRange; - if (m_timeRange == 24) { - m_interval = 6; + m_abtest = abtest; + m_interval = intervalCalculate(m_timeRange); + m_dataExtractor = new DataExtractor(m_timeRange, m_interval); + } + + private int intervalCalculate(int timeRange) { + int[] values = { 1, 2, 3, 6, 10, 20, 30, 60 }; + for (int value : values) { + int pm = timeRange * 60 / value; + if (pm >= MIN_POINT_NUMBER && pm < MAX_POINT_NUMBER) { + return value; + } + } + int pm = timeRange * 60 / 60; + if (pm > MAX_POINT_NUMBER) { + return 60; } else { - m_interval = 1; + return 1; } - m_pointNumber = m_timeRange * MINUTE / m_interval; - m_realPointNumber = (m_timeRange * MINUTE - 60 + minute) / m_interval; } public void initializeLineCharts(List configs) { @@ -117,87 +173,99 @@ public class MetricDisplay extends BaseVisitor { private LineChart createLineChart(String title) { LineChart lineChart = new LineChart(); + int pointNumber = m_timeRange * 60 / m_interval; + lineChart.setTitle(title); lineChart.setStart(m_start); - lineChart.setSize(m_pointNumber); + lineChart.setSize(pointNumber); lineChart.setStep(TimeUtil.ONE_MINUTE * m_interval); return lineChart; } - public void generateBaselineChart() { + public void generateAllCharts() { + long startTime = m_start.getTime(); + for (MetricDate metricDate : MetricDate.values()) { + MetricReportMerger merger = new MetricReportMerger(m_abtest, metricDate.getTitle()); + long time = startTime + metricDate.getIndex() * TimeUtil.ONE_DAY; + for (int index = 0; index < m_timeRange; index++) { + ModelPeriod period = ModelPeriod.getByTime(time); + MetricReport report = getReport(period, m_product, time); + + if (report != null) { + merger.visitMetricReport(index, report); + } + time = time + TimeUtil.ONE_HOUR; + } + generateLineCharts(merger); + if (metricDate.equals(MetricDate.CURRENT) && m_abtest.equals("-1")) { + generateBaselineChart(merger); + } + } + + } + + public void generateBaselineChart(MetricReportMerger merger) { + long time = m_start.getTime(); + + for (int index = 0; index < m_timeRange; index++) { + ModelPeriod period = ModelPeriod.getByTime(time); + MetricReport report = getReport(period, m_product, time); + + if (report != null) { + merger.visitMetricReport(index, report); + } + time = time + TimeUtil.ONE_HOUR; + } + for (String key : m_lineCharts.keySet()) { LineChart lineChart = m_lineCharts.get(key); + Date yesterday = TaskHelper.todayZero(m_start); - boolean isAvg = key.toUpperCase().endsWith(AVG); - int index = (int) ((m_start.getTime() + 8 * TimeUtil.ONE_HOUR) % TimeUtil.ONE_DAY / TimeUtil.ONE_MINUTE); + int offset = (int) ((m_start.getTime() + 8 * TimeUtil.ONE_HOUR) % TimeUtil.ONE_DAY / TimeUtil.ONE_MINUTE); double[] yesterdayBaseline = m_baselineService.queryDailyBaseline(METRIC_STRING, key, yesterday); Date today = TaskHelper.tomorrowZero(m_start); double[] todayBaseline = m_baselineService.queryDailyBaseline(METRIC_STRING, key, today); - double[] value = new double[m_realPointNumber]; - double[] day = yesterdayBaseline; - for (int i = 0; i < m_realPointNumber; i++) { - int j = (index + i * m_interval) % (HOUR * MINUTE); - if (j == 0 && index != 0) { - day = todayBaseline; - } - if (day == null) { - continue; - } - if (isAvg) { - value[i] = avgOfArray(day, i * m_interval); - } else { - value[i] = sumOfArray(day, i * m_interval); - } + List datas = new ArrayList(); + if (yesterdayBaseline != null) { + datas.add(yesterdayBaseline); + } else if (todayBaseline != null) { + datas.add(todayBaseline); } + + double[] value = m_dataExtractor.extract(datas, offset); lineChart.addSubTitle("Baseline"); lineChart.addValue(value); } } - public void generateLineCharts() { - Map> metricDatas = m_displayMerger.getMetricStatistic(); + public void generateLineCharts(MetricReportMerger merger) { + Map> metricDatas = merger.getMetricStatistic(); for (Entry> entry : metricDatas.entrySet()) { String key = entry.getKey(); Map value = entry.getValue(); LineChart lineChart = m_lineCharts.get(key); - List resultValues = new ArrayList(); - List subTitles = new ArrayList(); - boolean isAvg = key.toUpperCase().endsWith(AVG); if (lineChart == null) { lineChart = createLineChart(key); m_lineCharts.put(key, lineChart); } - lineChart.setSubTitles(subTitles); - lineChart.setValues(resultValues); - for (Entry metricItem : value.entrySet()) { String subTitle = metricItem.getKey(); double[][] metricItemData = metricItem.getValue(); - double[] resultValue = new double[m_realPointNumber]; - - subTitles.add(subTitle); - resultValues.add(resultValue); - - for (int hour = 0; hour < metricItemData.length; hour++) { - for (int i = 0; i < MINUTE / m_interval; i++) { - int index = hour * MINUTE / m_interval + i; - if (metricItemData[hour] == null) { - continue; - } - if (index >= m_realPointNumber) { - break; - } - if (isAvg) { - resultValue[index] = avgOfArray(metricItemData[hour], i * m_interval); - } else { - resultValue[index] = sumOfArray(metricItemData[hour], i * m_interval); - } + List datas = new ArrayList(); + for (double[] data : metricItemData) { + if (data == null) { + data = new double[60]; } + datas.add(data); } + + double[] resultValue = m_dataExtractor.extract(datas, 0); + lineChart.addSubTitle(subTitle); + lineChart.addValue(resultValue); } } @@ -216,24 +284,14 @@ public class MetricDisplay extends BaseVisitor { return this; } - private double avgOfArray(double[] values, int j) { - double result = 0; - for (int i = j; i < j + m_interval; i++) { - if (values[i] >= 0) { - result += values[i]; - } - } - return result / m_interval; + public MetricDisplay setReportService(ReportService m_reportService) { + this.m_reportService = m_reportService; + return this; } - private double sumOfArray(double[] values, int j) { - double result = 0; - for (int i = j; i < j + m_interval; i++) { - if (values[i] >= 0) { - result += values[i]; - } - } - return result; + public MetricDisplay setService(ModelService m_service) { + this.m_service = m_service; + return this; } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplayMerger.java b/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricReportMerger.java similarity index 77% rename from cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplayMerger.java rename to cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricReportMerger.java index d641a529690a2405fdeb3f2dcbf2ad250430f953..ef1cd8b1a12faa683fa57f3e77da3c882d9abae6 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplayMerger.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricReportMerger.java @@ -1,6 +1,5 @@ package com.dianping.cat.report.page.metric; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -11,22 +10,18 @@ import com.dianping.cat.consumer.metric.model.entity.MetricReport; import com.dianping.cat.consumer.metric.model.entity.Point; import com.dianping.cat.consumer.metric.model.transform.BaseVisitor; import com.dianping.cat.report.task.metric.MetricType; -import com.dianping.cat.system.page.abtest.service.ABTestService; - -public class MetricDisplayMerger extends BaseVisitor { +public class MetricReportMerger extends BaseVisitor { private Map> m_metricStatistic = new LinkedHashMap>(); - private Map m_abtests = new HashMap(); - private String m_abtest; + private String m_subtitle; + private String m_metricKey; private String m_currentComputeType; - private ABTestService m_abtestService; - private int m_index; private static final String SUM = MetricType.SUM.name(); @@ -35,18 +30,16 @@ public class MetricDisplayMerger extends BaseVisitor { private static final String AVG = MetricType.AVG.name(); - private boolean m_isDashboard; - - public MetricDisplayMerger(String abtest, boolean isDashboard) { + public MetricReportMerger(String abtest, String subtitle) { m_abtest = abtest; - m_isDashboard = isDashboard; + m_subtitle = subtitle; } private Map findOrCreateStatistic(String type, String metricKey, String computeType) { String key = metricKey + ":" + computeType; Map statisticItem = m_metricStatistic.get(key); - if (statisticItem == null && !m_isDashboard) { + if (statisticItem == null) { if (computeType.equals(COUNT)) { if (type.equals("C") || type.equals("S,C")) { statisticItem = createMetricStatistic(key); @@ -66,11 +59,6 @@ public class MetricDisplayMerger extends BaseVisitor { } return statisticItem; } - - public MetricDisplayMerger setAbtestService(ABTestService service) { - m_abtestService = service; - return this; - } private Map createMetricStatistic(String key) { Map value = new LinkedHashMap(); @@ -78,27 +66,9 @@ public class MetricDisplayMerger extends BaseVisitor { return value; } - private com.dianping.cat.home.dal.abtest.Abtest findAbTest(int id) { - com.dianping.cat.home.dal.abtest.Abtest abtest = null; - if (id >= 0) { - abtest = m_abtestService.getABTestByRunId(id); - } - if (abtest == null) { - abtest = new com.dianping.cat.home.dal.abtest.Abtest(); - - abtest.setId(id); - abtest.setName(String.valueOf(id)); - } - return abtest; - } - @Override public void visitAbtest(Abtest abtest) { String abtestId = abtest.getRunId(); - int id = Integer.parseInt(abtestId); - com.dianping.cat.home.dal.abtest.Abtest temp = findAbTest(id); - - m_abtests.put(id, temp); if (m_abtest.equals(abtestId)) { super.visitAbtest(abtest); } @@ -109,7 +79,7 @@ public class MetricDisplayMerger extends BaseVisitor { String id = group.getName(); if ("".equals(id)) { - id = "Current"; + id = m_subtitle; } double[] sum = new double[60]; 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 f108cce5223b6733679426178fa9e5c7afa60962..9a0fe88062c1d44acd8cebde4b15a1cd64cd2222 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 @@ -18,17 +18,18 @@ public class Payload extends AbstractReportPayload { @FieldMeta("frequency") private int m_frequency = 10; - @FieldMeta("refresh") - private boolean m_refresh = false; + @FieldMeta("refresh") + private boolean m_refresh = false; @FieldMeta("test") private String m_test = "-1"; - + @FieldMeta("timeRange") private int m_timeRange = 2; - - @FieldMeta("fullScreen") - private boolean m_fullScreen = false; + + @FieldMeta("fullScreen") + private boolean m_fullScreen = false; + public Payload() { super(ReportPage.METRIC); } @@ -67,34 +68,34 @@ public class Payload extends AbstractReportPayload { public void setTest(String test) { m_test = test; } - + public int getTimeRange() { return m_timeRange; } - + public int getFrequency() { - return m_frequency; - } + return m_frequency; + } public void setFrequency(int frequency) { - m_frequency = frequency; - } + m_frequency = frequency; + } public boolean isRefresh() { - return m_refresh; - } + return m_refresh; + } public void setRefresh(boolean refresh) { - m_refresh = refresh; - } + m_refresh = refresh; + } public boolean isFullScreen() { - return m_fullScreen; - } + return m_fullScreen; + } public void setFullScreen(boolean fullScreen) { - m_fullScreen = fullScreen; - } + m_fullScreen = fullScreen; + } @Override public void validate(ActionContext ctx) { @@ -102,6 +103,5 @@ public class Payload extends AbstractReportPayload { m_action = Action.METRIC; } } - - + } 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 index caabcec3f3197b3104c7ae49636c63e2814b9b1f..dfb087c50ad269b43e5f643d6d2f0119d85d4ada 100644 --- 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 @@ -9,8 +9,8 @@ public enum Range { NINE("9小时", 9), - THELVE("12小时", 12), - + THELVE("12小时", 12), + ONE_DAY("24小时", 24), ; private Range(String title, int duration) { 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 4e4018260550a0a1e5f568a50868e05556f91312..f076db859ef723b9a71b524889da61e96d7a2298 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -2811,9 +2811,6 @@ com.dianping.cat.consumer.advanced.ProductLineConfigManager - - com.dianping.cat.system.page.abtest.service.ABTestService - com.dianping.cat.report.service.ReportService diff --git a/cat-home/src/main/webapp/jsp/report/metric/metric.jsp b/cat-home/src/main/webapp/jsp/report/metric/metric.jsp index b487d01de66cc2fe8beebef8ff621f7a5a8855c3..8d42d9e5cfd2d7a7d1248d669a88ac109e4fef8f 100644 --- a/cat-home/src/main/webapp/jsp/report/metric/metric.jsp +++ b/cat-home/src/main/webapp/jsp/report/metric/metric.jsp @@ -76,9 +76,6 @@
- -

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

-