1
0
AE86 3 жил өмнө
parent
commit
fb72ecdffc

+ 8 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/MonitorService.java

@@ -2,6 +2,7 @@ package org.dbsyncer.biz;
 
 import org.dbsyncer.biz.vo.MetaVo;
 import org.dbsyncer.common.model.Paging;
+import org.dbsyncer.monitor.enums.MetricEnum;
 import org.dbsyncer.storage.enums.StorageDataStatusEnum;
 
 import java.util.List;
@@ -72,4 +73,11 @@ public interface MonitorService {
      * @return
      */
     List<StorageDataStatusEnum> getStorageDataStatusEnumAll();
+
+    /**
+     * 获取监控系统指标
+     *
+     * @return
+     */
+    List<MetricEnum> getMetricEnumAll();
 }

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

@@ -11,6 +11,7 @@ import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.monitor.Monitor;
+import org.dbsyncer.monitor.enums.MetricEnum;
 import org.dbsyncer.parser.enums.ModelEnum;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Meta;
@@ -138,6 +139,11 @@ public class MonitorServiceImpl implements MonitorService {
         return manager.getStorageDataStatusEnumAll();
     }
 
+    @Override
+    public List<MetricEnum> getMetricEnumAll() {
+        return monitor.getMetricEnumAll();
+    }
+
     private MetaVo convertMeta2Vo(Meta meta) {
         Mapping mapping = manager.getMapping(meta.getMappingId());
         Assert.notNull(mapping, "驱动不存在.");

+ 5 - 0
dbsyncer-monitor/src/main/java/org/dbsyncer/monitor/Monitor.java

@@ -1,5 +1,8 @@
 package org.dbsyncer.monitor;
 
+import org.dbsyncer.monitor.enums.MetricEnum;
+
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -11,5 +14,7 @@ public interface Monitor {
 
     boolean isAlive(String id);
 
+    List<MetricEnum> getMetricEnumAll();
+
     Map getThreadInfo();
 }

+ 8 - 0
dbsyncer-monitor/src/main/java/org/dbsyncer/monitor/MonitorFactory.java

@@ -1,6 +1,7 @@
 package org.dbsyncer.monitor;
 
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.monitor.enums.MetricEnum;
 import org.dbsyncer.parser.model.Connector;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -9,7 +10,9 @@ import org.springframework.cache.annotation.Cacheable;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -37,6 +40,11 @@ public class MonitorFactory implements Monitor {
         return null != connector ? manager.isAliveConnectorConfig(connector.getConfig()) : false;
     }
 
+    @Override
+    public List<MetricEnum> getMetricEnumAll() {
+        return Arrays.asList(MetricEnum.values());
+    }
+
     @Override
     public Map getThreadInfo() {
         Map map = new HashMap();

+ 80 - 0
dbsyncer-monitor/src/main/java/org/dbsyncer/monitor/enums/MetricEnum.java

@@ -0,0 +1,80 @@
+package org.dbsyncer.monitor.enums;
+
+/**
+ * 系统指标
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2021/07/22 19:19
+ */
+public enum MetricEnum {
+
+    /**
+     * 线程活跃数
+     */
+    THREADS_LIVE("jvm.threads.live", "线程", "活跃数"),
+
+    /**
+     * 线程峰值
+     */
+    THREADS_PEAK("jvm.threads.peak", "线程", "峰值"),
+
+    /**
+     * 内存已用
+     */
+    MEMORY_USED("jvm.memory.used", "内存", "已用", "字节"),
+
+    /**
+     * 内存空闲
+     */
+    MEMORY_COMMITTED("jvm.memory.committed", "内存", "空闲", "字节"),
+
+    /**
+     * 内存总共
+     */
+    MEMORY_MAX("jvm.memory.max", "内存", "总共", "字节"),
+
+    /**
+     * CPU已用
+     */
+    CPU_USAGE("system.cpu.usage", "CPU", "已用", "%"),
+
+    /**
+     * GC
+     */
+    GC_PAUSE("jvm.gc.pause", "GC", "已用", "秒");
+
+    private String code;
+    private String group;
+    private String name;
+    private String baseUnit;
+
+    MetricEnum(String code, String group, String name) {
+        this.code = code;
+        this.group = group;
+        this.name = name;
+    }
+
+    MetricEnum(String code, String group, String name, String baseUnit) {
+        this.code = code;
+        this.group = group;
+        this.name = name;
+        this.baseUnit = baseUnit;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getGroup() {
+        return group;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getBaseUnit() {
+        return baseUnit;
+    }
+}

+ 55 - 0
dbsyncer-monitor/src/main/java/org/dbsyncer/monitor/enums/StatisticEnum.java

@@ -0,0 +1,55 @@
+package org.dbsyncer.monitor.enums;
+
+public enum StatisticEnum {
+
+    /**
+     * The sum of the amounts recorded.
+     */
+    TOTAL("total"),
+
+    /**
+     * The sum of the times recorded. Reported in the monitoring system's base unit of time
+     */
+    TOTAL_TIME("total"),
+
+    /**
+     * Rate per second for calls.
+     */
+    COUNT("count"),
+
+    /**
+     * The maximum amount recorded. When this represents a time, it is reported in the monitoring system's base unit of time.
+     */
+    MAX("max"),
+
+    /**
+     * Instantaneous value, such as those reported by gauges.
+     */
+    VALUE("value"),
+
+    /**
+     * Undetermined.
+     */
+    UNKNOWN("unknown"),
+
+    /**
+     * Number of currently active tasks for a long task timer.
+     */
+    ACTIVE_TASKS("active"),
+
+    /**
+     * Duration of a running task in a long task timer. Always reported in the monitoring system's base unit of time.
+     */
+    DURATION("duration");
+
+    private String tagValueRepresentation;
+
+    StatisticEnum(String tagValueRepresentation) {
+        this.tagValueRepresentation = tagValueRepresentation;
+    }
+
+    public String getTagValueRepresentation() {
+        return tagValueRepresentation;
+    }
+
+}

+ 26 - 0
dbsyncer-monitor/src/main/java/org/dbsyncer/monitor/model/MetricResponse.java

@@ -0,0 +1,26 @@
+package org.dbsyncer.monitor.model;
+
+import java.util.List;
+
+public class MetricResponse {
+
+    private String name;
+
+    private List<Sample> measurements;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<Sample> getMeasurements() {
+        return measurements;
+    }
+
+    public void setMeasurements(List<Sample> measurements) {
+        this.measurements = measurements;
+    }
+}

+ 26 - 0
dbsyncer-monitor/src/main/java/org/dbsyncer/monitor/model/Sample.java

@@ -0,0 +1,26 @@
+package org.dbsyncer.monitor.model;
+
+import org.dbsyncer.monitor.enums.StatisticEnum;
+
+public final class Sample {
+
+    private StatisticEnum statistic;
+
+    private Double value;
+
+    public StatisticEnum getStatistic() {
+        return statistic;
+    }
+
+    public void setStatistic(StatisticEnum statistic) {
+        this.statistic = statistic;
+    }
+
+    public Double getValue() {
+        return value;
+    }
+
+    public void setValue(Double value) {
+        this.value = value;
+    }
+}

+ 4 - 2
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/TestController.java

@@ -8,6 +8,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.metrics.MetricsEndpoint;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.DefaultParameterNameDiscoverer;
 import org.springframework.core.ParameterNameDiscoverer;
@@ -46,9 +47,10 @@ public class TestController implements InitializingBean {
 
     @ResponseBody
     @RequestMapping("/demo")
-    public void demo(ModelMap modelMap, Long id, String version) {
+    public String demo(ModelMap modelMap, Long id, String version) {
         logger.info("id:{},version:{}", id, version);
         modelMap.put("data", RandomUtils.nextInt(100));
+        return id + version;
     }
 
     @ResponseBody
@@ -78,7 +80,7 @@ public class TestController implements InitializingBean {
             Object invoke = invocableMethod.invokeForRequest(webRequest, mavContainer, providedArgs.toArray());
             return invoke;
         } catch (Exception e) {
-            e.printStackTrace();
+            logger.error(e.getMessage());
         }
         return null;
     }

+ 26 - 0
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/monitor/MonitorController.java

@@ -2,15 +2,22 @@ package org.dbsyncer.web.controller.monitor;
 
 import org.dbsyncer.biz.MonitorService;
 import org.dbsyncer.biz.vo.RestResult;
+import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.monitor.enums.MetricEnum;
+import org.dbsyncer.monitor.model.MetricResponse;
 import org.dbsyncer.web.controller.BaseController;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.metrics.MetricsEndpoint;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 @Controller
@@ -22,6 +29,25 @@ public class MonitorController extends BaseController {
     @Autowired
     private MonitorService monitorService;
 
+    @Autowired
+    private MetricsEndpoint metricsEndpoint;
+
+    @ResponseBody
+    @RequestMapping("/get")
+    public Object get(ModelMap modelMap) {
+        List<MetricEnum> metricEnumList = monitorService.getMetricEnumAll();
+        List<MetricResponse> list = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(metricEnumList)){
+            metricEnumList.forEach(m -> {
+                MetricsEndpoint.MetricResponse metric = metricsEndpoint.metric(m.getCode(), null);
+                MetricResponse metricResponse = new MetricResponse();
+                BeanUtils.copyProperties(metric, metricResponse);
+                list.add(metricResponse);
+            });
+        }
+        return list;
+    }
+
     @RequestMapping("")
     public String index(HttpServletRequest request, ModelMap model) {
         Map<String, String> params = getParams(request);