Bladeren bron

项目功能优化

liukaixiong 5 jaren geleden
bovenliggende
commit
e106c249f9
28 gewijzigde bestanden met toevoegingen van 420 en 149 verwijderingen
  1. 2 1
      README.md
  2. 1 6
      jay-monitor-data-client/src/test/java/com/jay/monitor/data/client/ext/MonitorRuleCallbackTest.java
  3. 23 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/anno/Description.java
  4. 16 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/config/BeanConfig.java
  5. 24 21
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/config/props/AlertProperties.java
  6. 4 1
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/controllers/ApiController.java
  7. 5 5
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/controllers/TraceController.java
  8. 7 3
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/enums/CommonEnums.java
  9. 1 1
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/enums/StoreType.java
  10. 8 40
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/config/AlertConfigModel.java
  11. 52 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/config/AlertRuleConfigModel.java
  12. 65 1
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/dto/alert/RealTimeAlert.java
  13. 1 1
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/RealtimeAlertProcess.java
  14. 7 5
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/notify/DingDingRealTimeAlertProcess.java
  15. 9 5
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/notify/DingDingReportAlertMsgProcess.java
  16. 6 15
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/rule/RequestTimeAlertRule.java
  17. 10 16
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/rule/StatusAlertRule.java
  18. 54 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/ConfigStoreManager.java
  19. 49 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/DefaultLocalConfigManager.java
  20. 41 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlConfigStoreManager.java
  21. 5 3
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/utils/DataUtils.java
  22. 4 3
      jay-monitor-data-server/src/main/resources/application-com.yml
  23. 5 6
      jay-monitor-data-server/src/main/resources/application-dev.yml
  24. 4 3
      jay-monitor-data-server/src/main/resources/application-test.yml
  25. 10 5
      jay-monitor-data-server/src/main/resources/templates/trace/mqList.html
  26. 2 2
      jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/process/MQUserProcessTest.java
  27. 1 1
      jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/utils/DataUtilsTest.java
  28. 4 5
      jay-monitor-data-server/src/test/resources/application-dev.yml

+ 2 - 1
README.md

@@ -6,7 +6,7 @@
 
 对外暴露接口层
 
-### elab-backstage-service
+### elab-backstage-serviceRealtimeAlertProcess
 
 具体后台页面接口实现层
 
@@ -80,6 +80,7 @@ show variables like '%max_allowed_pack%';
 - 钉钉告警
 - 监控控制台
 - 数据采集
+- 支持mysql【可拓展其他存储】
 
 
 

+ 1 - 6
jay-monitor-data-client/src/test/java/com/jay/monitor/data/client/ext/MonitorRuleCallbackTest.java

@@ -1,9 +1,7 @@
 package com.jay.monitor.data.client.ext;
 
-import com.jay.monitor.data.client.ext.kafka.KafkaMonitorProducer;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
@@ -14,12 +12,9 @@ import org.springframework.test.context.junit4.SpringRunner;
  * @Date 2020/11/2 10:30
  */
 @RunWith(SpringRunner.class)
-@SpringBootTest(classes = {TestMQMonitorRule.class, KafkaMonitorProducer.class})
+@SpringBootTest(classes = {TestMQMonitorRule.class})
 public class MonitorRuleCallbackTest {
 
-    @Autowired
-    KafkaMonitorProducer producer;
-
 
     @Test
     public void test() {

+ 23 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/anno/Description.java

@@ -0,0 +1,23 @@
+package com.jay.monitor.data.server.anno;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * 字段描述值
+ *
+ * @author liukaixiong
+ */
+@Documented
+@Target({ElementType.FIELD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Description {
+
+    String value();
+
+    String key() default "";
+}

+ 16 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/config/BeanConfig.java

@@ -9,10 +9,14 @@ import com.jay.monitor.data.server.factory.DataIdFactory;
 import com.jay.monitor.data.server.factory.IdGenerateService;
 import com.jay.monitor.data.server.factory.callback.IdChangeCallback;
 import com.jay.monitor.data.server.store.AbstractSplitDataProcess;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
+import com.jay.monitor.data.server.store.DefaultLocalConfigManager;
 import com.jay.monitor.data.server.store.SplitDataManager;
+import com.jay.monitor.data.server.store.mysql.MysqlConfigStoreManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -59,4 +63,16 @@ public class BeanConfig {
         return new SplitDataManager(splitDataProcessList);
     }
 
+    @Bean
+    @ConditionalOnProperty(prefix = "spring.alert", value = "storeType", havingValue = "LOCAL", matchIfMissing = true)
+    public ConfigStoreManager localConfigManager() {
+        return new DefaultLocalConfigManager();
+    }
+
+    @Bean
+    @ConditionalOnProperty(prefix = "spring.alert", value = "storeType", havingValue = "MYSQL")
+    public ConfigStoreManager mysqlConfigStoreManager() {
+        return new MysqlConfigStoreManager();
+    }
+
 }

+ 24 - 21
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/config/props/AlertProperties.java

@@ -2,7 +2,9 @@ package com.jay.monitor.data.server.config.props;
 
 import com.jay.monitor.data.core.enums.MsgTypeEnums;
 import com.jay.monitor.data.server.enums.AlertMsgEnums;
+import com.jay.monitor.data.server.enums.StoreType;
 import com.jay.monitor.data.server.models.config.AlertConfigModel;
+import com.jay.monitor.data.server.models.config.AlertRuleConfigModel;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 import java.util.HashMap;
@@ -22,29 +24,38 @@ public class AlertProperties {
     private boolean isEnable = true;
 
     /**
-     * 推送类型
+     * 存储类型
      */
-    private AlertMsgEnums alertType;
+    private StoreType storeType = StoreType.LOCAL;
 
     /**
-     * 推送的第三方URL
+     * 推送类型
      */
-    private String url;
+    private Map<AlertMsgEnums, AlertConfigModel> alertType;
 
     /**
      * 规则配置
      */
-    private Map<MsgTypeEnums, AlertConfigModel> alertConfigMap = new HashMap<>();
+    private Map<MsgTypeEnums, AlertRuleConfigModel> alertRuleConfigMap = new HashMap<>();
 
     /**
      * 监控后台URL
      */
     private String logMonitorUrl;
+
     /**
      * 控制台URL
      */
     private String consoleUrl;
 
+    public StoreType getStoreType() {
+        return storeType;
+    }
+
+    public void setStoreType(StoreType storeType) {
+        this.storeType = storeType;
+    }
+
     public String getConsoleUrl() {
         return consoleUrl;
     }
@@ -69,28 +80,20 @@ public class AlertProperties {
         isEnable = enable;
     }
 
-    public AlertMsgEnums getAlertType() {
-        return alertType;
+    public Map<MsgTypeEnums, AlertRuleConfigModel> getAlertRuleConfigMap() {
+        return alertRuleConfigMap;
     }
 
-    public void setAlertType(AlertMsgEnums alertType) {
-        this.alertType = alertType;
-    }
-
-    public String getUrl() {
-        return url;
+    public void setAlertRuleConfigMap(Map<MsgTypeEnums, AlertRuleConfigModel> alertRuleConfigMap) {
+        this.alertRuleConfigMap = alertRuleConfigMap;
     }
 
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public Map<MsgTypeEnums, AlertConfigModel> getAlertConfigMap() {
-        return alertConfigMap;
+    public Map<AlertMsgEnums, AlertConfigModel> getAlertType() {
+        return alertType;
     }
 
-    public void setAlertConfigMap(Map<MsgTypeEnums, AlertConfigModel> alertConfigMap) {
-        this.alertConfigMap = alertConfigMap;
+    public void setAlertType(Map<AlertMsgEnums, AlertConfigModel> alertType) {
+        this.alertType = alertType;
     }
 }
 

+ 4 - 1
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/controllers/ApiController.java

@@ -1,8 +1,10 @@
 package com.jay.monitor.data.server.controllers;
 
+import com.alibaba.fastjson.JSON;
 import com.jay.monitor.data.core.enums.MsgTypeEnums;
 import com.jay.monitor.data.core.model.response.ResponseCommonModel;
 import com.jay.monitor.data.core.utils.ResponseUtils;
+import com.jay.monitor.data.server.enums.CommonEnums;
 import com.jay.monitor.data.server.report.DayAlertProcess;
 import com.jay.monitor.data.server.store.StoreDataManager;
 import org.apache.commons.lang3.StringUtils;
@@ -38,7 +40,8 @@ public class ApiController {
         if (StringUtils.isEmpty(date)) {
             date = sdf.format(new Date());
         }
-        return storeDataManager.selectContentById(MsgTypeEnums.MQ, date, id);
+        String body = storeDataManager.selectContentById(MsgTypeEnums.MQ, date, id);
+        return body == null ? JSON.toJSONString(ResponseUtils.falses(CommonEnums.COMMON_DATA_NOT_FOUND)) : body;
     }
 
     @RequestMapping(value = "/log/url", method = RequestMethod.GET, produces = "application/json; charset=utf-8")

+ 5 - 5
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/controllers/TraceController.java

@@ -8,11 +8,11 @@ import com.jay.monitor.data.server.models.entity.JayMonitorMq;
 import com.jay.monitor.data.server.models.entity.JayMonitorUrl;
 import com.jay.monitor.data.server.models.request.trace.MQRequest;
 import com.jay.monitor.data.server.models.request.trace.URLRequest;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
 import com.jay.monitor.data.server.store.mysql.MysqlMQStoreProcess;
 import com.jay.monitor.data.server.store.mysql.MysqlUrlStoreProcess;
 import com.jay.monitor.data.server.utils.DataUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -36,8 +36,8 @@ public class TraceController {
 
     final static private String page = "/trace/";
 
-    @Value("${spring.cat.url}")
-    private String catUrl;
+    @Autowired
+    private ConfigStoreManager configStoreManager;
 
     @Autowired
     private MysqlMQStoreProcess mqStoreProcess;
@@ -47,13 +47,13 @@ public class TraceController {
 
     @RequestMapping(value = "/mqList.html", method = RequestMethod.GET)
     public String list(Model model) throws Exception {
-        model.addAttribute("catUrl", catUrl);
+        model.addAttribute("catUrl", configStoreManager.getLogMonitorUrl());
         return page + "mqList";
     }
 
     @RequestMapping(value = "/urlList.html", method = RequestMethod.GET)
     public String urlList(Model model) throws Exception {
-        model.addAttribute("catUrl", catUrl);
+        model.addAttribute("catUrl", configStoreManager.getLogMonitorUrl());
         return page + "urlList";
     }
 

+ 7 - 3
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/enums/CommonEnums.java

@@ -3,13 +3,17 @@ package com.jay.monitor.data.server.enums;
 
 import com.jay.monitor.data.core.enums.EnumService;
 
+/**
+ * 公共的枚举
+ *
+ * @author liukx
+ */
 public enum CommonEnums implements EnumService {
     COMMON_PARAM_ERROR("COMMON.PARAM.ERROR", "参数[%s]错误"),
-
+    COMMON_DATA_NOT_FOUND("COMMON.DATA.NOT.FOUND.ERROR", "数据未找到"),
 
     ROUTE_REQUEST_URL_ERROR("ROUTE.REQUEST.URL.ERROR", "请求的URL异常"),
-    ROUTE_EUREKA_APP_ERROR("ROUTE.EUREKA.APP.ERROR", "Eureka找不到应用名称")
-    ;
+    ROUTE_EUREKA_APP_ERROR("ROUTE.EUREKA.APP.ERROR", "Eureka找不到应用名称");
 
 
     private final String code;

+ 1 - 1
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/enums/StoreType.java

@@ -7,5 +7,5 @@ package com.jay.monitor.data.server.enums;
  * @Date 2020/10/29 13:31
  */
 public enum StoreType {
-    MYSQL
+    MYSQL,LOCAL
 }

+ 8 - 40
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/config/AlertConfigModel.java

@@ -1,52 +1,20 @@
 package com.jay.monitor.data.server.models.config;
 
-import java.util.List;
-
 /**
- * @Module 告警
- * @Description 告警配置
+ * @Module 告警配置
+ * @Description 告警配置信息
  * @Author liukaixiong
- * @Date 2021/1/14 10:55
+ * @Date 2021/1/15 10:39
  */
 public class AlertConfigModel {
 
-    private Integer maxTime;
-
-    private List<Integer> statusList;
-
-    private Integer maxPushRowData = 10;
-
-    private Integer intervalTime = 300;
-
-    public Integer getIntervalTime() {
-        return intervalTime;
-    }
-
-    public void setIntervalTime(Integer intervalTime) {
-        this.intervalTime = intervalTime;
-    }
-
-    public Integer getMaxPushRowData() {
-        return maxPushRowData;
-    }
-
-    public void setMaxPushRowData(Integer maxPushRowData) {
-        this.maxPushRowData = maxPushRowData;
-    }
-
-    public Integer getMaxTime() {
-        return maxTime;
-    }
-
-    public void setMaxTime(Integer maxTime) {
-        this.maxTime = maxTime;
-    }
+    private String url;
 
-    public List<Integer> getStatusList() {
-        return statusList;
+    public String getUrl() {
+        return url;
     }
 
-    public void setStatusList(List<Integer> statusList) {
-        this.statusList = statusList;
+    public void setUrl(String url) {
+        this.url = url;
     }
 }

+ 52 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/config/AlertRuleConfigModel.java

@@ -0,0 +1,52 @@
+package com.jay.monitor.data.server.models.config;
+
+import java.util.List;
+
+/**
+ * @Module 告警
+ * @Description 告警配置
+ * @Author liukaixiong
+ * @Date 2021/1/14 10:55
+ */
+public class AlertRuleConfigModel {
+
+    private Integer maxTime;
+
+    private List<Integer> statusList;
+
+    private Integer maxPushRowData = 10;
+
+    private Integer intervalTime = 300;
+
+    public Integer getIntervalTime() {
+        return intervalTime;
+    }
+
+    public void setIntervalTime(Integer intervalTime) {
+        this.intervalTime = intervalTime;
+    }
+
+    public Integer getMaxPushRowData() {
+        return maxPushRowData;
+    }
+
+    public void setMaxPushRowData(Integer maxPushRowData) {
+        this.maxPushRowData = maxPushRowData;
+    }
+
+    public Integer getMaxTime() {
+        return maxTime;
+    }
+
+    public void setMaxTime(Integer maxTime) {
+        this.maxTime = maxTime;
+    }
+
+    public List<Integer> getStatusList() {
+        return statusList;
+    }
+
+    public void setStatusList(List<Integer> statusList) {
+        this.statusList = statusList;
+    }
+}

+ 65 - 1
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/dto/alert/RealTimeAlert.java

@@ -1,10 +1,11 @@
 package com.jay.monitor.data.server.models.dto.alert;
 
+import com.jay.monitor.data.core.enums.MsgTypeEnums;
 import com.jay.monitor.data.core.model.serializable.base.ApplicationData;
 import com.jay.monitor.data.core.model.serializable.base.LogDataData;
 import com.jay.monitor.data.core.model.serializable.base.RequestDataData;
 import com.jay.monitor.data.core.model.serializable.base.SearchIndexData;
-import com.sun.org.glassfish.gmbal.Description;
+import com.jay.monitor.data.server.anno.Description;
 
 /**
  * @Module 告警模块
@@ -13,10 +14,23 @@ import com.sun.org.glassfish.gmbal.Description;
  * @Date 2021/1/14 17:40
  */
 public class RealTimeAlert implements ApplicationData, SearchIndexData, RequestDataData, LogDataData {
+
+    @Description(value = "监控类型")
+    private MsgTypeEnums type;
     @Description(value = "服务名称")
     private String applicationName;
     @Description(value = "服务器ip")
     private String ip;
+    @Description(value ="请求url")
+    private String url;
+    @Description(value ="用户编号")
+    private String userId;
+    @Description(value = "消息队列类型")
+    private String mqType;
+    @Description(value ="主题类型")
+    private String topic;
+    @Description(value ="消息编号")
+    private String msgId;
     @Description(value = "组名称")
     private String groupName;
     @Description(value = "组key名称")
@@ -27,8 +41,58 @@ public class RealTimeAlert implements ApplicationData, SearchIndexData, RequestD
     private Integer status;
     @Description(value = "请求时长")
     private Long requestTime;
+
     private String logId;
 
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getMqType() {
+        return mqType;
+    }
+
+    public void setMqType(String mqType) {
+        this.mqType = mqType;
+    }
+
+    public String getTopic() {
+        return topic;
+    }
+
+    public void setTopic(String topic) {
+        this.topic = topic;
+    }
+
+    public String getMsgId() {
+        return msgId;
+    }
+
+    public void setMsgId(String msgId) {
+        this.msgId = msgId;
+    }
+
+    public MsgTypeEnums getType() {
+        return type;
+    }
+
+    public void setType(MsgTypeEnums type) {
+        this.type = type;
+    }
+
     @Override
     public String getLogId() {
         return this.logId;

+ 1 - 1
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/RealtimeAlertProcess.java

@@ -50,7 +50,7 @@ public class RealtimeAlertProcess {
         for (int i = 0; i < baseDTOList.size(); i++) {
             BaseDTO baseDTO = baseDTOList.get(i);
             for (int j = 0; j < this.alertRules.size(); j++) {
-                AlertRule alertRule = this.alertRules.get(i);
+                AlertRule alertRule = this.alertRules.get(j);
                 if (alertRule.isTrigger(baseDTO)) {
                     RealTimeAlert realTimeAlert = new RealTimeAlert();
                     AlertRuleEnums alertRuleEnums = alertRule.ruleType();

+ 7 - 5
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/notify/DingDingRealTimeAlertProcess.java

@@ -2,12 +2,13 @@ package com.jay.monitor.data.server.report.alert.notify;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.jay.monitor.data.server.config.props.AlertProperties;
 import com.jay.monitor.data.server.costs.MdConstants;
 import com.jay.monitor.data.server.enums.AlertMsgEnums;
 import com.jay.monitor.data.server.enums.AlertRuleEnums;
+import com.jay.monitor.data.server.models.config.AlertConfigModel;
 import com.jay.monitor.data.server.models.dto.alert.RealTimeAlert;
 import com.jay.monitor.data.server.models.request.dingding.ActionCardModel;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
 import com.jay.monitor.data.server.utils.DataUtils;
 import com.jay.monitor.data.server.utils.DingDingUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,7 +26,7 @@ import java.util.*;
 public class DingDingRealTimeAlertProcess implements AlertRealTimeMsg {
 
     @Autowired
-    private AlertProperties alertProperties;
+    private ConfigStoreManager configStoreManager;
 
     @Override
     public AlertMsgEnums alertType() {
@@ -34,9 +35,10 @@ public class DingDingRealTimeAlertProcess implements AlertRealTimeMsg {
 
     @Override
     public boolean send(AlertRuleEnums triggerRule, List<RealTimeAlert> msg) {
-        String url = alertProperties.getUrl();
-        String consoleUrl = alertProperties.getConsoleUrl();
-        String logMonitorUrl = alertProperties.getLogMonitorUrl();
+        AlertConfigModel alertConfigModel = configStoreManager.getAlertConfigModel(AlertMsgEnums.DingDing);
+        String url = alertConfigModel.getUrl();
+        String consoleUrl = configStoreManager.getConsoleUrl();
+        String logMonitorUrl = configStoreManager.getLogMonitorUrl();
 
         LinkedHashMap dataMap = new LinkedHashMap();
         dataMap.put("触发原因", triggerRule);

+ 9 - 5
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/notify/DingDingReportAlertMsgProcess.java

@@ -1,10 +1,11 @@
 package com.jay.monitor.data.server.report.alert.notify;
 
 import com.jay.monitor.data.server.componts.OOSInvoke;
-import com.jay.monitor.data.server.config.props.AlertProperties;
 import com.jay.monitor.data.server.costs.MdConstants;
 import com.jay.monitor.data.server.enums.AlertMsgEnums;
+import com.jay.monitor.data.server.models.config.AlertConfigModel;
 import com.jay.monitor.data.server.models.request.dingding.MdModel;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
 import com.jay.monitor.data.server.utils.DingDingUtils;
 import com.jay.monitor.data.server.utils.MarkDownUtils;
 import org.slf4j.Logger;
@@ -25,7 +26,7 @@ public class DingDingReportAlertMsgProcess implements AlertReportMsg {
     private Logger logger = LoggerFactory.getLogger(getClass());
 
     @Autowired
-    private AlertProperties alertProperties;
+    private ConfigStoreManager configStoreManager;
 
     @Autowired(required = false)
     private OOSInvoke oosInvoke;
@@ -37,10 +38,13 @@ public class DingDingReportAlertMsgProcess implements AlertReportMsg {
 
     @Override
     public boolean send(String date, String msg) {
-        String dingDingUrl = alertProperties.getUrl();
-        String consoleUrl = alertProperties.getConsoleUrl();
-        String filename = System.currentTimeMillis() + ".jpg";
 
+        AlertConfigModel alertConfigModel = configStoreManager.getAlertConfigModel(AlertMsgEnums.DingDing);
+        String dingDingUrl = alertConfigModel.getUrl();
+
+        String consoleUrl = configStoreManager.getConsoleUrl();
+
+        String filename = System.currentTimeMillis() + ".jpg";
         InputStream inputStream = MarkDownUtils.mdToImage(msg);
         // local
         // FileUtil.writeFromStream(inputStream, "C:\\Users\\Administrator\\Desktop\\md1.jpg");

+ 6 - 15
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/rule/RequestTimeAlertRule.java

@@ -3,12 +3,11 @@ package com.jay.monitor.data.server.report.alert.rule;
 import com.jay.monitor.data.core.enums.MsgTypeEnums;
 import com.jay.monitor.data.core.model.serializable.base.BaseDTO;
 import com.jay.monitor.data.core.model.serializable.base.RequestDataData;
-import com.jay.monitor.data.server.config.props.AlertProperties;
 import com.jay.monitor.data.server.enums.AlertRuleEnums;
-import com.jay.monitor.data.server.models.config.AlertConfigModel;
+import com.jay.monitor.data.server.models.config.AlertRuleConfigModel;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -19,14 +18,12 @@ import org.springframework.stereotype.Component;
  * @Date 2021/1/14 10:49
  */
 @Component
-public class RequestTimeAlertRule implements AlertRule, InitializingBean {
+public class RequestTimeAlertRule implements AlertRule {
 
     private Logger logger = LoggerFactory.getLogger(getClass());
 
     @Autowired
-    private AlertProperties alertProperties;
-
-    private volatile boolean isEnableRule = false;
+    private ConfigStoreManager configStoreManager;
 
     @Override
     public AlertRuleEnums ruleType() {
@@ -36,7 +33,7 @@ public class RequestTimeAlertRule implements AlertRule, InitializingBean {
     @Override
     public boolean isTrigger(BaseDTO baseDTO) {
 
-        if (!this.isEnableRule) {
+        if (!configStoreManager.alertEnable()) {
             return false;
         }
 
@@ -45,7 +42,7 @@ public class RequestTimeAlertRule implements AlertRule, InitializingBean {
             RequestDataData requestData = (RequestDataData) baseDTO;
             Long requestTime = requestData.getRequestTime();
             if (requestTime != null) {
-                AlertConfigModel alertConfigModel = alertProperties.getAlertConfigMap().get(type);
+                AlertRuleConfigModel alertConfigModel = configStoreManager.getAlertRuleConfigModel(type);
                 if (alertConfigModel != null) {
                     Integer maxTime = alertConfigModel.getMaxTime();
                     if (requestTime >= maxTime) {
@@ -59,10 +56,4 @@ public class RequestTimeAlertRule implements AlertRule, InitializingBean {
         return false;
     }
 
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        if (alertProperties.isEnable() && alertProperties.getAlertConfigMap().size() > 0) {
-            this.isEnableRule = true;
-        }
-    }
 }

+ 10 - 16
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/rule/StatusAlertRule.java

@@ -1,11 +1,11 @@
 package com.jay.monitor.data.server.report.alert.rule;
 
 import com.jay.monitor.data.core.model.serializable.base.BaseDTO;
-import com.jay.monitor.data.server.config.props.AlertProperties;
 import com.jay.monitor.data.server.enums.AlertRuleEnums;
-import com.jay.monitor.data.server.models.config.AlertConfigModel;
-import org.springframework.beans.factory.InitializingBean;
+import com.jay.monitor.data.server.models.config.AlertRuleConfigModel;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  * @Module 告警
@@ -13,12 +13,11 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @Author liukaixiong
  * @Date 2021/1/14 16:17
  */
-public class StatusAlertRule implements AlertRule, InitializingBean {
+@Component
+public class StatusAlertRule implements AlertRule {
 
     @Autowired
-    private AlertProperties alertProperties;
-
-    private volatile boolean isEnableRule = false;
+    private ConfigStoreManager configStoreManager;
 
     @Override
     public AlertRuleEnums ruleType() {
@@ -27,23 +26,18 @@ public class StatusAlertRule implements AlertRule, InitializingBean {
 
     @Override
     public boolean isTrigger(BaseDTO baseDTO) {
-        if (!this.isEnableRule) {
+
+        if (!this.configStoreManager.alertEnable()) {
             return false;
         }
         Integer status = baseDTO.getStatus();
-        AlertConfigModel alertConfigModel = alertProperties.getAlertConfigMap().get(baseDTO.getType());
+        AlertRuleConfigModel alertConfigModel = configStoreManager.getAlertRuleConfigModel(baseDTO.getType());
         if (alertConfigModel != null) {
-            if (alertConfigModel.getStatusList().contains(status + "")) {
+            if (alertConfigModel.getStatusList().contains(status)) {
                 return true;
             }
         }
         return false;
     }
 
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        if (alertProperties.isEnable() && alertProperties.getAlertConfigMap().size() > 0) {
-            this.isEnableRule = true;
-        }
-    }
 }

+ 54 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/ConfigStoreManager.java

@@ -0,0 +1,54 @@
+package com.jay.monitor.data.server.store;
+
+import com.jay.monitor.data.core.enums.MsgTypeEnums;
+import com.jay.monitor.data.server.enums.AlertMsgEnums;
+import com.jay.monitor.data.server.models.config.AlertConfigModel;
+import com.jay.monitor.data.server.models.config.AlertRuleConfigModel;
+
+/**
+ * @Module 配置管理器
+ * @Description 配置管理
+ * @Author liukaixiong
+ * @Date 2021/1/15 10:28
+ */
+public interface ConfigStoreManager {
+
+    /**
+     * 获取控制台url配置
+     *
+     * @return
+     */
+    public String getConsoleUrl();
+
+    /**
+     * 获取监控日志的跳转地址
+     *
+     * @return
+     */
+    public String getLogMonitorUrl();
+
+    /**
+     * 告警开启
+     *
+     * @return
+     */
+    public boolean alertEnable();
+
+    /**
+     * 获取告警配置
+     *
+     * @param alertMsgEnums
+     * @return
+     */
+    public AlertConfigModel getAlertConfigModel(AlertMsgEnums alertMsgEnums);
+
+    /**
+     * 获取告警规则配置
+     *
+     * @param msgTypeEnums
+     * @return
+     */
+    public AlertRuleConfigModel getAlertRuleConfigModel(MsgTypeEnums msgTypeEnums);
+
+
+}

+ 49 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/DefaultLocalConfigManager.java

@@ -0,0 +1,49 @@
+package com.jay.monitor.data.server.store;
+
+import com.jay.monitor.data.core.enums.MsgTypeEnums;
+import com.jay.monitor.data.server.config.props.AlertProperties;
+import com.jay.monitor.data.server.enums.AlertMsgEnums;
+import com.jay.monitor.data.server.models.config.AlertConfigModel;
+import com.jay.monitor.data.server.models.config.AlertRuleConfigModel;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Map;
+
+/**
+ * @Module 配置模块
+ * @Description 基于本地文件配置
+ * @Author liukaixiong
+ * @Date 2021/1/15 10:55
+ */
+public class DefaultLocalConfigManager implements ConfigStoreManager {
+
+    @Autowired
+    private AlertProperties alertProperties;
+
+    @Override
+    public String getConsoleUrl() {
+        return alertProperties.getConsoleUrl();
+    }
+
+    @Override
+    public String getLogMonitorUrl() {
+        return alertProperties.getLogMonitorUrl();
+    }
+
+    @Override
+    public boolean alertEnable() {
+        return alertProperties.isEnable();
+    }
+
+    @Override
+    public AlertConfigModel getAlertConfigModel(AlertMsgEnums alertMsgEnums) {
+        Map<AlertMsgEnums, AlertConfigModel> alertType = alertProperties.getAlertType();
+        return alertType.get(alertMsgEnums);
+    }
+
+    @Override
+    public AlertRuleConfigModel getAlertRuleConfigModel(MsgTypeEnums msgTypeEnums) {
+        Map<MsgTypeEnums, AlertRuleConfigModel> alertRuleConfigMap = alertProperties.getAlertRuleConfigMap();
+        return alertRuleConfigMap.get(msgTypeEnums);
+    }
+}

+ 41 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlConfigStoreManager.java

@@ -0,0 +1,41 @@
+package com.jay.monitor.data.server.store.mysql;
+
+import com.jay.monitor.data.core.enums.MsgTypeEnums;
+import com.jay.monitor.data.server.enums.AlertMsgEnums;
+import com.jay.monitor.data.server.models.config.AlertConfigModel;
+import com.jay.monitor.data.server.models.config.AlertRuleConfigModel;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
+
+/**
+ * @Module 存储管理
+ * @Description 基于mysql的配置
+ * @Author liukaixiong
+ * @Date 2021/1/15 10:46
+ */
+public class MysqlConfigStoreManager implements ConfigStoreManager {
+
+    @Override
+    public String getConsoleUrl() {
+        return null;
+    }
+
+    @Override
+    public String getLogMonitorUrl() {
+        return null;
+    }
+
+    @Override
+    public boolean alertEnable() {
+        return false;
+    }
+
+    @Override
+    public AlertConfigModel getAlertConfigModel(AlertMsgEnums alertMsgEnums) {
+        return null;
+    }
+
+    @Override
+    public AlertRuleConfigModel getAlertRuleConfigModel(MsgTypeEnums msgTypeEnums) {
+        return null;
+    }
+}

+ 5 - 3
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/utils/DataUtils.java

@@ -1,6 +1,6 @@
 package com.jay.monitor.data.server.utils;
 
-import com.sun.org.glassfish.gmbal.Description;
+import com.jay.monitor.data.server.anno.Description;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.core.annotation.AnnotationUtils;
@@ -69,8 +69,10 @@ public class DataUtils {
                 Annotation declaredAnnotation = declaredField.getDeclaredAnnotation(annotation);
                 Object defaultValue = AnnotationUtils.getValue(declaredAnnotation, annotationName);
                 if (defaultValue != null) {
-                    String property = BeanUtils.getProperty(obj, name);
-                    fieldMap.put(defaultValue.toString(), property);
+                    String propertyValue = BeanUtils.getProperty(obj, name);
+                    if (propertyValue != null) {
+                        fieldMap.put(defaultValue.toString(), propertyValue);
+                    }
                 }
             }
         } catch (Exception e) {

+ 4 - 3
jay-monitor-data-server/src/main/resources/application-com.yml

@@ -25,9 +25,10 @@ spring:
     default-bucket-name: linux-data
     default-bucket-path: alert/image  # 注意不要/开头
   alert:
-    alert-type: dingding
-    url: https://oapi.dingtalk.com/robot/send?access_token=1dd1309908d8d77afe87e9d205f4bdd4751685f7fc00ee26ddf8023d4b2f3601
-    alert-config-map:
+    alert-type:
+      dingding:
+        url: https://oapi.dingtalk.com/robot/send?access_token=1dd1309908d8d77afe87e9d205f4bdd4751685f7fc00ee26ddf8023d4b2f3601
+    alert-rule-config-map:
       URL:
         max-time: 5000
         status-list: [ 500,503,504 ]

+ 5 - 6
jay-monitor-data-server/src/main/resources/application-dev.yml

@@ -27,19 +27,18 @@ spring:
     default-bucket-path: alert/image  # 注意不要/开头
   alert:
     enable: true
-    alert-type: dingding
-    url: https://oapi.dingtalk.com/robot/send?access_token=c2d694e28fd5de8c0b4f42be2e253bb3e4ef1fbb7d589ac377015e738713b995
-    alert-config-map:
+    alert-type:
+      DingDing:
+        url: https://oapi.dingtalk.com/robot/send?access_token=c2d694e28fd5de8c0b4f42be2e253bb3e4ef1fbb7d589ac377015e738713b995
+    alert-rule-config-map:
       URL:
         max-time: 5000
         status-list: [ 500,503,504 ]
       MQ:
         max-time: 1000
-        status-list: [-1]
+        status-list: [ -1 ]
     log-monitor-url: http://192.168.0.90:2281/cat/r/m/
     console-url: http://127.0.0.1:5800/index.html
-  cat:
-    url: ${spring.alert.log-monitor-url}
 logging:
   level:
     com.jay.monitor.data.server: DEBUG

+ 4 - 3
jay-monitor-data-server/src/main/resources/application-test.yml

@@ -25,9 +25,10 @@ spring:
     default-bucket-name: linux-data
     default-bucket-path: alert/image  # 注意不要/开头
   alert:
-    alert-type: dingding
-    url: https://oapi.dingtalk.com/robot/send?access_token=e60c210c07708843b8e991e47daee84bfe43af6d91d660d613104d910e1c4e1f
-    alert-config-map:
+    alert-type:
+      dingding:
+        url: https://oapi.dingtalk.com/robot/send?access_token=e60c210c07708843b8e991e47daee84bfe43af6d91d660d613104d910e1c4e1f
+    alert-rule-config-map:
       URL:
         max-time: 5000
         status-list: [ 500,503,504 ]

+ 10 - 5
jay-monitor-data-server/src/main/resources/templates/trace/mqList.html

@@ -212,7 +212,7 @@
                         return '<em> <a href="' + catUrl + res.parentLogId + '"  target="_blank" ' + style + ' title="点击查看日志详情"><i class="layui-icon" style="font-size: 30px; color: #1E9FFF;">&#xe64c;</i></a> </em>' +
                             '<em><a href="javascript:void(0);" onclick="nextTree(\'' + res.logId + '\')"  ' + style + ' title="查看下级消息树"><i class="layui-icon" style="font-size: 30px; color: #1E9FFF;">&#xe62e;</i></a></em>'
                     } else {
-                        return '暂无编号';
+                        return '<em><i class="layui-icon" style="font-size: 30px; ">&#xe64d;</i></em>';
                     }
                 }
             }, {
@@ -249,7 +249,11 @@
                     return '<em>' + elab_common.longConvertDateTime(res.createdTime) + '</em>'
                 }
             }
-            , {fixed: 'right', title: '操作', toolbar: '#barDemo', width: 100}
+            , {
+                fixed: 'right', title: '操作',  width: 100, templet: function (res) {
+                    return '<em><a className="layui-btn layui-btn-xs" lay-event="findDetail"><i class="layui-icon" style="font-size: 30px; color: #1E9FFF;">&#xe62a;</i></a></em>'
+                }
+            }
         ];
 
 
@@ -259,6 +263,7 @@
             debugger;
             if ("findDetail" == event) {
                 elab_common.getReq("/api/log/mq?id=" + obj.data.id, null, function (data) {
+                    debugger;
                     showJson(data);
                 })
             }
@@ -302,9 +307,9 @@
 
 
 </script>
-<script code="text/html" id="barDemo">
-    <a className="layui-btn layui-btn-xs" lay-event="findDetail">消息内容</a>
-</script>
+<!--<script code="text/html" id="barDemo">-->
+<!--    <a className="layui-btn layui-btn-xs" lay-event="findDetail">消息内容</a>-->
+<!--</script>-->
 </body>
 
 </html>

File diff suppressed because it is too large
+ 2 - 2
jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/process/MQUserProcessTest.java


+ 1 - 1
jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/utils/DataUtilsTest.java

@@ -1,7 +1,7 @@
 package com.jay.monitor.data.server.utils;
 
+import com.jay.monitor.data.server.anno.Description;
 import com.jay.monitor.data.server.models.dto.alert.RealTimeAlert;
-import com.sun.org.glassfish.gmbal.Description;
 import org.apache.commons.beanutils.BeanUtils;
 import org.junit.Test;
 

+ 4 - 5
jay-monitor-data-server/src/test/resources/application-dev.yml

@@ -16,9 +16,10 @@ spring:
     password: jayzhou
   alert:
     enable: true
-    alert-type: dingding
-    url: https://oapi.dingtalk.com/robot/send?access_token=c2d694e28fd5de8c0b4f42be2e253bb3e4ef1fbb7d589ac377015e738713b995
-    alert-config-map:
+    alert-type:
+      dingding:
+        url: https://oapi.dingtalk.com/robot/send?access_token=c2d694e28fd5de8c0b4f42be2e253bb3e4ef1fbb7d589ac377015e738713b995
+    alert-rule-config-map:
       URL:
         max-time: 5000
         status-list: [ 500,503,504 ]
@@ -27,8 +28,6 @@ spring:
         status-list: [ -1 ]
     log-monitor-url: http://192.168.0.90:2281/cat/r/m/
     console-url: http://127.0.0.1:5800/index.html
-  cat:
-    url: ${spring.alert.log-monitor-url}
   oss:
     access-key-id: LTAImNZed054h0YV
     access-key-secret: 8hmhlhiQ2ikmVeLKujwMNWsktFpSzm