AE86 3 jaren geleden
bovenliggende
commit
7a2c3d97a0

+ 1 - 10
dbsyncer-biz/src/main/java/org/dbsyncer/biz/MonitorService.java

@@ -2,7 +2,6 @@ package org.dbsyncer.biz;
 
 import org.dbsyncer.biz.vo.AppReportMetricVo;
 import org.dbsyncer.biz.vo.MetaVo;
-import org.dbsyncer.biz.vo.MetricResponseVo;
 import org.dbsyncer.common.model.Paging;
 import org.dbsyncer.monitor.enums.MetricEnum;
 import org.dbsyncer.monitor.model.MetricResponse;
@@ -77,18 +76,10 @@ public interface MonitorService {
      */
     List<MetricEnum> getMetricEnumAll();
 
-    /**
-     * 获取监控系统指标
-     *
-     * @param metrics
-     * @return
-     */
-    List<MetricResponseVo> queryMetric(List<MetricResponse> metrics);
-
     /**
      * 获取应用报告
      *
      * @return
      */
-    AppReportMetricVo queryAppReportMetric();
+    AppReportMetricVo queryAppReportMetric(List<MetricResponse> metrics);
 }

+ 20 - 20
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MonitorServiceImpl.java

@@ -130,29 +130,11 @@ public class MonitorServiceImpl implements MonitorService {
     }
 
     @Override
-    public List<MetricResponseVo> queryMetric(List<MetricResponse> metrics) {
-        // 线程池状态
-        List<MetricResponse> metricList = monitor.getThreadPoolInfo();
-        // 系统指标
-        metricList.addAll(metrics);
-
-        // 转换显示
-        return metricList.stream().map(metric -> {
-            MetricResponseVo vo = new MetricResponseVo();
-            BeanUtils.copyProperties(metric, vo);
-            MetricDetailFormatter detailFormatter = metricDetailFormatterMap.get(vo.getCode());
-            if (null != detailFormatter) {
-                detailFormatter.format(vo);
-            }
-            return vo;
-        }).collect(Collectors.toList());
-    }
-
-    @Override
-    public AppReportMetricVo queryAppReportMetric() {
+    public AppReportMetricVo queryAppReportMetric(List<MetricResponse> metrics) {
         AppReportMetric appReportMetric = monitor.getAppReportMetric();
         AppReportMetricVo vo = new AppReportMetricVo();
         BeanUtils.copyProperties(appReportMetric, vo);
+        vo.setMetrics(getMetrics(metrics));
         return vo;
     }
 
@@ -179,4 +161,22 @@ public class MonitorServiceImpl implements MonitorService {
         }
         return id;
     }
+
+    private List<MetricResponseVo> getMetrics(List<MetricResponse> metrics) {
+        // 线程池状态
+        List<MetricResponse> metricList = monitor.getThreadPoolInfo();
+        // 系统指标
+        metricList.addAll(metrics);
+
+        // 转换显示
+        return metricList.stream().map(metric -> {
+            MetricResponseVo vo = new MetricResponseVo();
+            BeanUtils.copyProperties(metric, vo);
+            MetricDetailFormatter detailFormatter = metricDetailFormatterMap.get(vo.getCode());
+            if (null != detailFormatter) {
+                detailFormatter.format(vo);
+            }
+            return vo;
+        }).collect(Collectors.toList());
+    }
 }

+ 31 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/AppReportMetricVo.java

@@ -2,6 +2,37 @@ package org.dbsyncer.biz.vo;
 
 import org.dbsyncer.monitor.model.AppReportMetric;
 
+import java.util.List;
+
 public class AppReportMetricVo extends AppReportMetric {
 
+    private List<MetricResponseVo> metrics;
+
+    private HistoryStackVo cpu;
+
+    private HistoryStackVo memery;
+
+    public List<MetricResponseVo> getMetrics() {
+        return metrics;
+    }
+
+    public void setMetrics(List<MetricResponseVo> metrics) {
+        this.metrics = metrics;
+    }
+
+    public HistoryStackVo getCpu() {
+        return cpu;
+    }
+
+    public void setCpu(HistoryStackVo cpu) {
+        this.cpu = cpu;
+    }
+
+    public HistoryStackVo getMemery() {
+        return memery;
+    }
+
+    public void setMemery(HistoryStackVo memery) {
+        this.memery = memery;
+    }
 }

+ 16 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/HistoryStackVo.java

@@ -0,0 +1,16 @@
+package org.dbsyncer.biz.vo;
+
+import java.util.List;
+
+public class HistoryStackVo {
+
+    private List<Object> value;
+
+    public List<Object> getValue() {
+        return value;
+    }
+
+    public void setValue(List<Object> value) {
+        this.value = value;
+    }
+}

+ 31 - 34
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/monitor/MonitorController.java

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.actuate.health.Health;
 import org.springframework.boot.actuate.health.HealthEndpoint;
 import org.springframework.boot.actuate.metrics.MetricsEndpoint;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -23,10 +24,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Controller
 @RequestMapping("/monitor")
@@ -46,7 +44,6 @@ public class MonitorController extends BaseController {
     @RequestMapping("")
     public String index(HttpServletRequest request, ModelMap model) {
         Map<String, String> params = getParams(request);
-        model.put("metrics", get().getResultValue());
         model.put("metaId", monitorService.getDefaultMetaId(params));
         model.put("meta", monitorService.getMetaAll());
         model.put("storageDataStatus", monitorService.getStorageDataStatusEnumAll());
@@ -55,6 +52,15 @@ public class MonitorController extends BaseController {
         return "monitor/monitor.html";
     }
 
+    private final static int COUNT = 3;
+    private Deque<Double> cpu = new ArrayDeque<>(COUNT);
+    private Deque<Double> memory = new ArrayDeque<>(COUNT);
+
+    @Scheduled(fixedRate = 5000)
+    public void recordHistoryStackMertic() {
+        // TODO 统计最近记录
+    }
+
     @GetMapping("/queryData")
     @ResponseBody
     public RestResult queryData(HttpServletRequest request) {
@@ -102,41 +108,16 @@ public class MonitorController extends BaseController {
     }
 
     @ResponseBody
-    @RequestMapping("/get")
-    public RestResult get() {
+    @RequestMapping("/queryAppReportMetric")
+    public RestResult queryAppReportMetric() {
         try {
             List<MetricResponse> list = new ArrayList<>();
-            // 系统指标
             List<MetricEnum> metricEnumList = monitorService.getMetricEnumAll();
             if (!CollectionUtils.isEmpty(metricEnumList)) {
-                metricEnumList.forEach(m -> {
-                    MetricsEndpoint.MetricResponse metric = metricsEndpoint.metric(m.getCode(), null);
-                    MetricResponse metricResponse = new MetricResponse();
-                    MetricEnum metricEnum = MetricEnum.getMetric(metric.getName());
-                    metricResponse.setCode(metricEnum.getCode());
-                    metricResponse.setGroup(metricEnum.getGroup());
-                    metricResponse.setMetricName(metricEnum.getMetricName());
-                    if (!CollectionUtils.isEmpty(metric.getMeasurements())) {
-                        List<Sample> measurements = new ArrayList<>();
-                        metric.getMeasurements().forEach(s -> measurements.add(new Sample(s.getStatistic().getTagValueRepresentation(), s.getValue())));
-                        metricResponse.setMeasurements(measurements);
-                    }
-                    list.add(metricResponse);
-                });
+                metricEnumList.forEach(m -> list.add(getMetricResponse(m.getCode())));
             }
             list.addAll(getDiskHealth());
-            return RestResult.restSuccess(monitorService.queryMetric(list));
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
-    @ResponseBody
-    @RequestMapping("/queryAppReportMetric")
-    public RestResult queryAppReportMetric() {
-        try {
-            return RestResult.restSuccess(monitorService.queryAppReportMetric());
+            return RestResult.restSuccess(monitorService.queryAppReportMetric(list));
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage(), e.getClass());
             return RestResult.restFail(e.getMessage());
@@ -164,4 +145,20 @@ public class MonitorController extends BaseController {
         return new MetricResponse(metricEnum.getCode(), metricEnum.getGroup(), metricEnum.getMetricName(),
                 Arrays.asList(new Sample(StatisticEnum.COUNT.getTagValueRepresentation(), value)));
     }
+
+    private MetricResponse getMetricResponse(String code) {
+        MetricsEndpoint.MetricResponse metric = metricsEndpoint.metric(code, null);
+        MetricResponse metricResponse = new MetricResponse();
+        MetricEnum metricEnum = MetricEnum.getMetric(metric.getName());
+        metricResponse.setCode(metricEnum.getCode());
+        metricResponse.setGroup(metricEnum.getGroup());
+        metricResponse.setMetricName(metricEnum.getMetricName());
+        if (!CollectionUtils.isEmpty(metric.getMeasurements())) {
+            List<Sample> measurements = new ArrayList<>();
+            metric.getMeasurements().forEach(s -> measurements.add(new Sample(s.getStatistic().getTagValueRepresentation(), s.getValue())));
+            metricResponse.setMeasurements(measurements);
+        }
+        return metricResponse;
+    }
+
 }

+ 1 - 1
dbsyncer-web/src/main/resources/public/monitor/monitor.html

@@ -58,7 +58,7 @@
                             <div class="col-md-5">
                                 <div class="row">
                                     <div class="col-md-12">
-                                        <table class="table table-hover">
+                                        <table id="metricTable" class="table table-hover">
                                             <tr th:each="m,s : ${metrics}">
                                                 <td style="width:5%;" th:text="${s.index}+1"></td>
                                                 <td th:text="${'['+ m?.group + '] ' + m?.metricName}"></td>

+ 2 - 0
dbsyncer-web/src/main/resources/static/js/common.js

@@ -4,6 +4,8 @@ var $path = document.location.pathname;
 var $basePath = $location[0] + '//' + $location[2] + $path.substr(0, $path.substr(1).indexOf("/")+1);
 // 全局内容区域
 var $initContainer = $("#initContainer");
+// 监控定时器
+var timer;
 
 // ******************* 插件封装 ***************************
 // 全局提示框

+ 1 - 0
dbsyncer-web/src/main/resources/static/js/index.js

@@ -39,6 +39,7 @@ $(function () {
 
     // 绑定所有的菜单链接点击事件,根据不同的URL加载页面
     $("#menu li a[url]").click(function () {
+        clearInterval(timer);
         // 加载页面
         doLoader($(this).attr("url"));
     });

+ 35 - 12
dbsyncer-web/src/main/resources/static/js/monitor/index.js

@@ -256,7 +256,6 @@ function showQueueChart(queueUp, queueCapacity){
     };
     echarts.init(document.getElementById('queueChart')).setOption(option);
 }
-
 // 事件分类
 function showEventChart(ins, upd, del){
     var option = {
@@ -301,7 +300,6 @@ function showEventChart(ins, upd, del){
     $("#updateSpan").html(upd);
     $("#deleteSpan").html(del);
 }
-
 // 统计成功失败
 function showTotalChart(success, fail){
     var option = {
@@ -345,6 +343,40 @@ function showTotalChart(success, fail){
     $("#successSpan").html(success);
     $("#failSpan").html(fail);
 }
+// 指标列表
+function showMetricTable(metrics){
+    var html = '';
+    $.each(metrics, function(i) {
+        html += '<tr>';
+        html += '   <td style="width:5%;">'+ i +'</td>';
+        html += '   <td>'+ metrics[i].metricName +'</td>';
+        html += '   <td>'+ metrics[i].detail +'</td>';
+        html += '</tr>';
+    });
+    $("#metricTable").html(html);
+}
+// 显示图表信息
+function showChartTable(){
+    doGetWithoutLoading("/monitor/queryAppReportMetric",{}, function (data) {
+        if (data.success == true) {
+            var report = data.resultValue;
+            showTotalChart(report.success, report.fail);
+            showEventChart(report.insert, report.update, report.delete);
+            showQueueChart(report.queueUp, report.queueCapacity);
+            showMetricTable(report.metrics);
+        } else {
+            bootGrowl(data.resultValue, "danger");
+        }
+    });
+}
+// 创建定时器
+function createTimer(){
+    clearInterval(timer);
+    showChartTable();
+    timer = setInterval(function(){
+        showChartTable();
+    }, 5000);
+}
 
 $(function () {
     // 初始化select2插件
@@ -371,16 +403,7 @@ $(function () {
     bindClearEvent($(".clearDataBtn"), "确认清空数据?", "清空数据成功!", "/monitor/clearData");
     bindClearEvent($(".clearLogBtn"), "确认清空日志?", "清空日志成功!", "/monitor/clearLog");
 
-    doGetWithoutLoading("/monitor/queryAppReportMetric",{}, function (data) {
-        if (data.success == true) {
-            var report = data.resultValue;
-            showTotalChart(report.success, report.fail);
-            showEventChart(report.insert, report.update, report.delete);
-            showQueueChart(report.queueUp, report.queueCapacity);
-        } else {
-            bootGrowl(data.resultValue, "danger");
-        }
-    });
+    createTimer();
 
     // 绑定回车事件
     $("#searchDataKeyword").keydown(function (e) {