liukx 4 年 前
コミット
5c0cbdba7a
22 ファイル変更2143 行追加112 行削除
  1. 6 1
      README.md
  2. 9 11
      jay-monitor-data-client/src/main/java/com/jay/monitor/data/client/config/ClientMonitorAutoConfiguration.java
  3. 5 5
      jay-monitor-data-client/src/main/java/com/jay/monitor/data/client/config/KafkaMonitorAutoConfiguration.java
  4. 50 48
      jay-monitor-data-core/src/main/java/com/jay/monitor/data/core/model/serializable/SQLMonitorDTO.java
  5. 1 0
      jay-monitor-data-server/pom.xml
  6. 30 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/daos/JayMonitorSqlMapper.java
  7. 7 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/daos/JayMonitorSqlMapperExt.java
  8. 194 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/entity/JayMonitorSql.java
  9. 1132 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/entity/JayMonitorSqlExample.java
  10. 9 5
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/process/SQLUserProcess.java
  11. 56 7
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/AbstractStoreProcess.java
  12. 10 2
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlMQStoreProcess.java
  13. 97 0
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlSQLStoreProcess.java
  14. 37 24
      jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlUrlStoreProcess.java
  15. 6 6
      jay-monitor-data-server/src/main/resources/application-dev.yml
  16. 5 3
      jay-monitor-data-server/src/main/resources/application-uat.yml
  17. 1 0
      jay-monitor-data-server/src/main/resources/application.yml
  18. 347 0
      jay-monitor-data-server/src/main/resources/mybatis/mapper/JayMonitorSqlMapper.xml
  19. 101 0
      jay-monitor-data-server/src/main/resources/mybatis/mapper/JayMonitorSqlMapperExt.xml
  20. 32 0
      jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/process/SQLUserProcessTest.java
  21. 7 0
      jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/process/URLUserProcessTest.java
  22. 1 0
      jay-monitor-data-server/src/test/resources/application-dev.yml

+ 6 - 1
README.md

@@ -31,7 +31,12 @@
   - URL
   - MQ
 
-
+开发步骤:
+1. 设计表
+2. 设计传输实体
+3. 构建process包下执行器
+4. 构建store包下的存储器
+5. 注册配置文件中的拆分器
 
 
 

+ 9 - 11
jay-monitor-data-client/src/main/java/com/jay/monitor/data/client/config/ClientMonitorAutoConfiguration.java

@@ -15,6 +15,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
+import org.springframework.core.env.Environment;
 
 import java.net.InetAddress;
 
@@ -29,26 +30,23 @@ import java.net.InetAddress;
 @Import({MonitorSendProducer.class})
 public class ClientMonitorAutoConfiguration {
 
-    @Value(value = "${spring.application.name:未知服务}")
-    private String applicationName;
-
     @Bean
     @ConditionalOnProperty(prefix = "spring.monitor-data", value = "host")
-    public MonitorDataClient monitorDataClient(@Autowired MonitorProperties monitorProperties) throws Exception {
+    public MonitorDataClient monitorDataClient(@Autowired MonitorProperties monitorProperties,@Autowired Environment env) throws Exception {
         MonitorDataClient client = new MonitorDataClient(monitorProperties.getHost(), monitorProperties.getPort());
         client.setQueueSize(monitorProperties.getQueueSize());
-        client.addInvokeContext(MonitorDataConstants.INVOKE_CLIENT_NAME, applicationName);
+        client.addInvokeContext(MonitorDataConstants.INVOKE_CLIENT_NAME, env.getProperty("spring.application.name","未知服务"));
         client.addInvokeContext(MonitorDataConstants.INVOKE_CLIENT_IP, InetAddress.getLocalHost().getHostAddress());
         client.init();
         return client;
     }
 
-    @Bean
-    @ConditionalOnBean(value = {DruidDataSource.class})
-    public DruidMonitorFilter druidMonitorFilter() {
-        DruidMonitorFilter monitorFilter = new DruidMonitorFilter();
-        return monitorFilter;
-    }
+//    @Bean
+////    @ConditionalOnBean(value = {DruidDataSource.class})
+//    public DruidMonitorFilter druidMonitorFilter() {
+//        DruidMonitorFilter monitorFilter = new DruidMonitorFilter();
+//        return monitorFilter;
+//    }
 
     @Bean
     public MonitorRuleFactory monitorRuleFactory() {

+ 5 - 5
jay-monitor-data-client/src/main/java/com/jay/monitor/data/client/config/KafkaMonitorAutoConfiguration.java

@@ -22,10 +22,10 @@ public class KafkaMonitorAutoConfiguration {
 //        return new KafkaMonitorProducer();
 //    }
 
-    @Bean
-    @ConditionalOnBean(value = {MessageListener.class})
-    public MonitorRuleFactory monitorRuleFactory() {
-        return new MonitorRuleFactory();
-    }
+//    @Bean
+//    @ConditionalOnBean(value = {MessageListener.class})
+//    public MonitorRuleFactory monitorRuleFactory() {
+//        return new MonitorRuleFactory();
+//    }
 
 }

+ 50 - 48
jay-monitor-data-core/src/main/java/com/jay/monitor/data/core/model/serializable/SQLMonitorDTO.java

@@ -2,6 +2,7 @@ package com.jay.monitor.data.core.model.serializable;
 
 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.CommonDataDTO;
 
 /**
  * SQL相关的数据
@@ -9,94 +10,95 @@ import com.jay.monitor.data.core.model.serializable.base.BaseDTO;
  * @author : liukx
  * @time : 2020/8/26 - 16:31
  */
-public class SQLMonitorDTO extends BaseDTO {
+public class SQLMonitorDTO extends CommonDataDTO {
+
+    public SQLMonitorDTO() {
+        super(MsgTypeEnums.SQL);
+    }
+
     /**
-     * sql编号
+     * 执行命令
      */
-    private String sqlId;
+    private String commandType;
     /**
-     * sql内容
+     * sql编号
      */
-    private String sqlText;
+    private String sqlId;
     /**
-     * SQL类型
+     * 表名称
      */
-    private Integer sqlType;
+    private String table;
     /**
-     * 返回行数
+     * SQL 语句
      */
-    private String resultRow;
+    private String sql;
+
     /**
-     * 获取读取的数据大小
+     * 影响行数
      */
-    private Long readStringLength;
+    private Integer affectedRows;
     /**
-     * 请求耗时
+     * 结果返回
      */
-    private String requestTime;
-
+    private Object result;
     /**
-     * 最大并发数
+     * 耗时
      */
-    private Integer concurrentMax;
+    private Long time;
 
-    public SQLMonitorDTO() {
-        super(MsgTypeEnums.SQL);
+    public Integer getAffectedRows() {
+        return affectedRows;
     }
 
-    public String getSqlId() {
-        return sqlId;
+    public void setAffectedRows(Integer affectedRows) {
+        this.affectedRows = affectedRows;
     }
 
-    public void setSqlId(String sqlId) {
-        this.sqlId = sqlId;
+    public String getCommandType() {
+        return commandType;
     }
 
-    public String getSqlText() {
-        return sqlText;
+    public void setCommandType(String commandType) {
+        this.commandType = commandType;
     }
 
-    public void setSqlText(String sqlText) {
-        this.sqlText = sqlText;
-    }
-
-    public Integer getSqlType() {
-        return sqlType;
+    public String getSqlId() {
+        return sqlId;
     }
 
-    public void setSqlType(Integer sqlType) {
-        this.sqlType = sqlType;
+    public void setSqlId(String sqlId) {
+        this.sqlId = sqlId;
     }
 
-    public String getResultRow() {
-        return resultRow;
+    public String getTable() {
+        return table;
     }
 
-    public void setResultRow(String resultRow) {
-        this.resultRow = resultRow;
+    public void setTable(String table) {
+        this.table = table;
     }
 
-    public Long getReadStringLength() {
-        return readStringLength;
+    public String getSql() {
+        return sql;
     }
 
-    public void setReadStringLength(Long readStringLength) {
-        this.readStringLength = readStringLength;
+    public void setSql(String sql) {
+        this.sql = sql;
     }
 
-    public String getRequestTime() {
-        return requestTime;
+    public Object getResult() {
+        return result;
     }
 
-    public void setRequestTime(String requestTime) {
-        this.requestTime = requestTime;
+    public void setResult(Object result) {
+        this.result = result;
     }
 
-    public Integer getConcurrentMax() {
-        return concurrentMax;
+    public Long getTime() {
+        return time;
     }
 
-    public void setConcurrentMax(Integer concurrentMax) {
-        this.concurrentMax = concurrentMax;
+    public void setTime(Long time) {
+        this.time = time;
     }
 }

+ 1 - 0
jay-monitor-data-server/pom.xml

@@ -99,6 +99,7 @@
             <artifactId>aliyun-sdk-oss</artifactId>
             <version>3.10.2</version>
         </dependency>
+
 <!--        <dependency>-->
 <!--            <groupId>org.springframework.cloud</groupId>-->
 <!--            <artifactId>spring-cloud-starter-eureka</artifactId>-->

+ 30 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/daos/JayMonitorSqlMapper.java

@@ -0,0 +1,30 @@
+package com.jay.monitor.data.server.daos;
+
+import com.jay.monitor.data.server.models.entity.JayMonitorSql;
+import com.jay.monitor.data.server.models.entity.JayMonitorSqlExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface JayMonitorSqlMapper {
+    long countByExample(JayMonitorSqlExample example);
+
+    int deleteByExample(JayMonitorSqlExample example);
+
+    int deleteByPrimaryKey(Integer id);
+
+    int insert(JayMonitorSql record);
+
+    int insertSelective(JayMonitorSql record);
+
+    List<JayMonitorSql> selectByExample(JayMonitorSqlExample example);
+
+    JayMonitorSql selectByPrimaryKey(Integer id);
+
+    int updateByExampleSelective(@Param("record") JayMonitorSql record, @Param("example") JayMonitorSqlExample example);
+
+    int updateByExample(@Param("record") JayMonitorSql record, @Param("example") JayMonitorSqlExample example);
+
+    int updateByPrimaryKeySelective(JayMonitorSql record);
+
+    int updateByPrimaryKey(JayMonitorSql record);
+}

+ 7 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/daos/JayMonitorSqlMapperExt.java

@@ -0,0 +1,7 @@
+package com.jay.monitor.data.server.daos;
+
+import com.jay.monitor.data.server.models.entity.JayMonitorSql;
+
+public interface JayMonitorSqlMapperExt extends PartitionOperation<JayMonitorSql> {
+
+}

+ 194 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/entity/JayMonitorSql.java

@@ -0,0 +1,194 @@
+package com.jay.monitor.data.server.models.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * jay_monitor_sql
+ * @author 
+ */
+public class JayMonitorSql implements Serializable {
+    /**
+     * 主键名称
+     */
+    private Integer id;
+
+    /**
+     * 应用名称
+     */
+    private String applicationName;
+
+    /**
+     * 应用地址
+     */
+    private String applicationIp;
+
+    /**
+     * sql编号
+     */
+    private String sqlId;
+
+    /**
+     * 表名称
+     */
+    private String tableName;
+
+    /**
+     * 执行类型
+     */
+    private String invokeType;
+
+    /**
+     * 返回的行数
+     */
+    private Integer affectedRows;
+
+    /**
+     * 应用监控组
+     */
+    private String dataGroupName;
+
+    /**
+     * 应用监控key
+     */
+    private String dataGroupKey;
+
+    /**
+     * 数据编号
+     */
+    private String dataId;
+
+    /**
+     * 日志编号
+     */
+    private String logId;
+
+    /**
+     * 状态1:正常消息 -1异常消息
+     */
+    private Integer status;
+
+    /**
+     * 请求时长
+     */
+    private Integer requestTime;
+
+    /**
+     * 时间时间
+     */
+    private Date createdTime;
+
+    private static final long serialVersionUID = 1L;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getApplicationName() {
+        return applicationName;
+    }
+
+    public void setApplicationName(String applicationName) {
+        this.applicationName = applicationName;
+    }
+
+    public String getApplicationIp() {
+        return applicationIp;
+    }
+
+    public void setApplicationIp(String applicationIp) {
+        this.applicationIp = applicationIp;
+    }
+
+    public String getSqlId() {
+        return sqlId;
+    }
+
+    public void setSqlId(String sqlId) {
+        this.sqlId = sqlId;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getInvokeType() {
+        return invokeType;
+    }
+
+    public void setInvokeType(String invokeType) {
+        this.invokeType = invokeType;
+    }
+
+    public Integer getAffectedRows() {
+        return affectedRows;
+    }
+
+    public void setAffectedRows(Integer affectedRows) {
+        this.affectedRows = affectedRows;
+    }
+
+    public String getDataGroupName() {
+        return dataGroupName;
+    }
+
+    public void setDataGroupName(String dataGroupName) {
+        this.dataGroupName = dataGroupName;
+    }
+
+    public String getDataGroupKey() {
+        return dataGroupKey;
+    }
+
+    public void setDataGroupKey(String dataGroupKey) {
+        this.dataGroupKey = dataGroupKey;
+    }
+
+    public String getDataId() {
+        return dataId;
+    }
+
+    public void setDataId(String dataId) {
+        this.dataId = dataId;
+    }
+
+    public String getLogId() {
+        return logId;
+    }
+
+    public void setLogId(String logId) {
+        this.logId = logId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Integer getRequestTime() {
+        return requestTime;
+    }
+
+    public void setRequestTime(Integer requestTime) {
+        this.requestTime = requestTime;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+}

ファイルの差分が大きいため隠しています
+ 1132 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/entity/JayMonitorSqlExample.java


+ 9 - 5
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/process/SQLUserProcess.java

@@ -4,8 +4,11 @@ import com.alipay.remoting.BizContext;
 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.SQLMonitorDTO;
+import com.jay.monitor.data.server.store.StoreDataManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 import java.util.List;
 
@@ -15,20 +18,21 @@ import java.util.List;
  * @author : liukx
  * @time : 2020/8/26 - 19:26
  */
+@Component
 public class SQLUserProcess extends AbstractUserProcess<BaseDTO> {
     private Logger logger = LoggerFactory.getLogger(getClass());
 
+    @Autowired
+    private StoreDataManager storeDataManager;
+
     @Override
     public Object handleRequest0(BizContext bizCtx, BaseDTO request) throws Exception {
-        MsgTypeEnums type = request.getType();
-        logger.info(" 查找到的类型 : " + type);
-        return request;
+        return storeDataManager.store(MsgTypeEnums.SQL, request);
     }
 
     @Override
     public List<String> multiInterest() {
-        return getNamesList(BaseDTO.class, SQLMonitorDTO.class);
+        return getNamesList(SQLMonitorDTO.class);
     }
 
-
 }

+ 56 - 7
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/AbstractStoreProcess.java

@@ -2,26 +2,35 @@ package com.jay.monitor.data.server.store;
 
 import com.cat.file.message.MessageManagerProcess;
 import com.cat.file.message.internal.DefaultMessageTree;
+import com.cat.file.message.internal.MessageTree;
 import com.jay.monitor.data.core.enums.MsgTypeEnums;
+import com.jay.monitor.data.core.model.serializable.SQLMonitorDTO;
 import com.jay.monitor.data.core.model.serializable.base.BaseDTO;
 import com.jay.monitor.data.core.model.serializable.base.ErrorInfoData;
 import com.jay.monitor.data.core.model.serializable.base.JsonTextData;
 import com.jay.monitor.data.server.config.props.MonitorProperties;
 import com.jay.monitor.data.server.costs.ServerConstants;
+import com.jay.monitor.data.server.daos.PartitionOperation;
 import com.jay.monitor.data.server.enums.DataSplitType;
 import com.jay.monitor.data.server.enums.StoreType;
 import com.jay.monitor.data.server.factory.thread.TaskRunnable;
+import com.jay.monitor.data.server.models.entity.JayMonitorMq;
+import com.jay.monitor.data.server.models.entity.JayMonitorSql;
+import com.jay.monitor.data.server.models.entity.JayMonitorUrl;
 import com.jay.monitor.data.server.report.RealtimeAlertProcess;
 import com.jay.monitor.data.server.store.mysql.MysqlDDLProcess;
 import com.jay.monitor.data.server.utils.DataUtils;
 import com.jay.monitor.data.server.utils.MonitorPropertiesUtil;
+import com.jay.monitor.data.server.utils.PrefixUtils;
 import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.beanutils.PropertyUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ArrayBlockingQueue;
@@ -98,7 +107,11 @@ public abstract class AbstractStoreProcess<T extends BaseDTO, E> implements Task
      * @return
      * @throws Exception
      */
-    public abstract String searchErrorById(String date, String id) throws Exception;
+    public String searchErrorById(String date, String id) throws Exception {
+        E e = getMapper().selectPartitionById(date, Integer.valueOf(id));
+        String applicationName = org.apache.commons.beanutils.BeanUtils.getProperty(e, "applicationName");
+        return getMessage(e, PrefixUtils.prefixErrorMessage(applicationName));
+    }
 
     /**
      * 根据信息编号查询请求内容信息
@@ -108,7 +121,26 @@ public abstract class AbstractStoreProcess<T extends BaseDTO, E> implements Task
      * @return
      * @throws Exception
      */
-    public abstract String searchContentById(String date, String id) throws Exception;
+    public String searchContentById(String date, String id) throws Exception {
+        E e = getMapper().selectPartitionById(date, Integer.valueOf(id));
+        String applicationName = org.apache.commons.beanutils.BeanUtils.getProperty(e, "applicationName");
+        return getMessage(e, applicationName);
+    }
+
+    public String getMessage(Object obj, String applicationName) {
+        try {
+            String applicationIp = org.apache.commons.beanutils.BeanUtils.getProperty(obj, "applicationIp");
+            String id = org.apache.commons.beanutils.BeanUtils.getProperty(obj, "id");
+            Object createdTime = PropertyUtils.getProperty(obj, "createdTime");
+            MessageTree messageTree =
+                new DefaultMessageTree(applicationName, applicationIp, Integer.valueOf(id), (Date)createdTime, null);
+            String messageId = messageTree.getMessageId();
+            return this.messageManagerProcess.getMessage(messageId);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 
     /**
      * 查询分页数据
@@ -119,14 +151,32 @@ public abstract class AbstractStoreProcess<T extends BaseDTO, E> implements Task
      * @return
      * @throws Exception
      */
-    public abstract List<E> searchDataByList(String date, Integer pageSize, E entity) throws Exception;
+    public List<E> searchDataByList(String date, Integer pageSize, E entity) throws Exception {
+        return getMapper().selectPartitionByList(date, pageSize, entity);
+    }
 
     /**
      * 加速消费
      *
-     * @param request
+     * @param dataList
      */
-    public abstract List<E> speedUpConsumerList(List<T> request);
+    public List<E> speedUpConsumerList(List<T> dataList) {
+        List<E> monitorList = new ArrayList<>();
+
+        for (int i = 0; i < dataList.size(); i++) {
+            T request = dataList.get(i);
+            E mqData = builderJayMonitor(request);
+            monitorList.add(mqData);
+        }
+
+        getMapper().batchPartitionInsert(getPartitionId(), monitorList);
+
+        return monitorList;
+    }
+
+    protected abstract PartitionOperation<E> getMapper();
+
+    protected abstract E builderJayMonitor(T request);
 
     public Object store(T request) throws Exception {
 
@@ -193,7 +243,6 @@ public abstract class AbstractStoreProcess<T extends BaseDTO, E> implements Task
         realtimeAlertProcess.process(requestList);
     }
 
-
     public void speedUpConsumer(BlockingQueue<T> queue, int rate) throws Exception {
         List<T> requestList = new ArrayList<>();
 
@@ -217,7 +266,7 @@ public abstract class AbstractStoreProcess<T extends BaseDTO, E> implements Task
         int defaultSize = getQueueSize();
         int batchSize = getBatchSize();
         int minBatch = batchSize / 10;
-        int thresholdValue = (int) (defaultSize * 0.8);
+        int thresholdValue = (int)(defaultSize * 0.8);
         long startHour = TimeUnit.MILLISECONDS.toHours(System.currentTimeMillis());
         while (isConsumer) {
             try {

+ 10 - 2
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlMQStoreProcess.java

@@ -5,6 +5,7 @@ import com.cat.file.message.internal.MessageTree;
 import com.jay.monitor.data.core.enums.MsgTypeEnums;
 import com.jay.monitor.data.core.model.serializable.MQDataDTO;
 import com.jay.monitor.data.server.daos.JayMonitorMqMapperExt;
+import com.jay.monitor.data.server.daos.PartitionOperation;
 import com.jay.monitor.data.server.enums.StoreType;
 import com.jay.monitor.data.server.models.entity.JayMonitorMq;
 import com.jay.monitor.data.server.store.AbstractStoreProcess;
@@ -59,6 +60,12 @@ public class MysqlMQStoreProcess extends AbstractStoreProcess<MQDataDTO, JayMoni
         return "jay_monitor_mq";
     }
 
+    @Override
+    protected PartitionOperation<JayMonitorMq> getMapper() {
+        return mqMapper;
+    }
+
+
     /**
      * 加速消费,单条记录插入会造成大量的并发写
      *
@@ -70,7 +77,7 @@ public class MysqlMQStoreProcess extends AbstractStoreProcess<MQDataDTO, JayMoni
 
         for (int i = 0; i < dataList.size(); i++) {
             MQDataDTO request = dataList.get(i);
-            JayMonitorMq mqData = builderJayMonitorMq(request);
+            JayMonitorMq mqData = builderJayMonitor(request);
             monitorList.add(mqData);
         }
 
@@ -102,7 +109,8 @@ public class MysqlMQStoreProcess extends AbstractStoreProcess<MQDataDTO, JayMoni
         return resultList;
     }
 
-    private JayMonitorMq builderJayMonitorMq(MQDataDTO request) {
+    @Override
+    public JayMonitorMq builderJayMonitor(MQDataDTO request) {
         JayMonitorMq mqData = new JayMonitorMq();
         try {
             BeanUtils.copyProperties(request, mqData);

+ 97 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlSQLStoreProcess.java

@@ -0,0 +1,97 @@
+package com.jay.monitor.data.server.store.mysql;
+
+import com.cat.file.message.internal.DefaultMessageTree;
+import com.cat.file.message.internal.MessageTree;
+import com.jay.monitor.data.core.enums.MsgTypeEnums;
+import com.jay.monitor.data.core.model.serializable.MQDataDTO;
+import com.jay.monitor.data.core.model.serializable.SQLMonitorDTO;
+import com.jay.monitor.data.server.daos.JayMonitorSqlMapperExt;
+import com.jay.monitor.data.server.daos.PartitionOperation;
+import com.jay.monitor.data.server.enums.StoreType;
+import com.jay.monitor.data.server.models.entity.JayMonitorMq;
+import com.jay.monitor.data.server.models.entity.JayMonitorSql;
+import com.jay.monitor.data.server.store.AbstractStoreProcess;
+import com.jay.monitor.data.server.utils.PrefixUtils;
+import org.apache.commons.beanutils.ConvertUtils;
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.time.DateUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.LongAdder;
+
+/**
+ * @Module 数据存储器
+ * @Description Mysql的SQL存储实现
+ * @Author liukaixiong
+ * @Date 2020/10/29 13:36
+ */
+@Component
+@Lazy
+public class MysqlSQLStoreProcess extends AbstractStoreProcess<SQLMonitorDTO, JayMonitorSql> {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 队列的大小
+     */
+    public int defaultSize = 5000;
+
+    @Autowired
+    @Qualifier("jayMonitorSqlMapperExt")
+    private JayMonitorSqlMapperExt sqlMapper;
+
+    @Override
+    public StoreType storeType() {
+        return StoreType.MYSQL;
+    }
+
+    @Override
+    public MsgTypeEnums msgTypeEnums() {
+        return MsgTypeEnums.SQL;
+    }
+
+    @Override
+    public String tableName() {
+        return "jay_monitor_sql";
+    }
+
+    @Override
+    protected PartitionOperation<JayMonitorSql> getMapper() {
+        return sqlMapper;
+    }
+
+    @Override
+    protected JayMonitorSql builderJayMonitor(SQLMonitorDTO request) {
+        JayMonitorSql sqlData = new JayMonitorSql();
+        try {
+            BeanUtils.copyProperties(request, sqlData);
+            sqlData.setApplicationName(request.getApplicationName());
+            sqlData.setApplicationIp(request.getIp());
+            sqlData.setCreatedTime(request.getCreateDate());
+            sqlData.setDataGroupName(request.getGroupName());
+            sqlData.setDataGroupKey(request.getGroupKeyName());
+            sqlData.setDataId(request.getDataId());
+            sqlData.setLogId(request.getLogId());
+            sqlData.setInvokeType(request.getCommandType());
+            sqlData.setRequestTime(request.getRequestTime().intValue());
+            sqlData.setAffectedRows(request.getAffectedRows());
+            sqlData.setTableName(request.getTable());
+            sqlData.setSqlId(request.getSqlId());
+        } catch (Exception e) {
+            logger.error("builderJayMonitorSql 失败", e);
+        }
+        return sqlData;
+    }
+
+}

+ 37 - 24
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/store/mysql/MysqlUrlStoreProcess.java

@@ -6,6 +6,7 @@ import com.cat.file.message.internal.MessageTree;
 import com.jay.monitor.data.core.enums.MsgTypeEnums;
 import com.jay.monitor.data.core.model.serializable.URLDataDTO;
 import com.jay.monitor.data.server.daos.JayMonitorUrlMapperExt;
+import com.jay.monitor.data.server.daos.PartitionOperation;
 import com.jay.monitor.data.server.enums.StoreType;
 import com.jay.monitor.data.server.models.entity.JayMonitorUrl;
 import com.jay.monitor.data.server.store.AbstractStoreProcess;
@@ -55,10 +56,40 @@ public class MysqlUrlStoreProcess extends AbstractStoreProcess<URLDataDTO, JayMo
         return "jay_monitor_url";
     }
 
+    @Override
+    protected PartitionOperation<JayMonitorUrl> getMapper() {
+        return urlMapper;
+    }
+
+    @Override
+    protected JayMonitorUrl builderJayMonitor(URLDataDTO request) {
+        String url = request.getUrl();
+        if (StringUtils.isNotEmpty(request.getUrl())) {
+            url = url.replaceAll("//", "/");
+        }
+        JayMonitorUrl monitorUrl = new JayMonitorUrl();
+        BeanUtils.copyProperties(request, monitorUrl);
+        monitorUrl.setUrl(url);
+        monitorUrl.setApplicationName(request.getApplicationName());
+        monitorUrl.setApplicationIp(request.getIp());
+        monitorUrl.setCreatedTime(request.getCreateDate());
+        monitorUrl.setDataGroupName(request.getGroupName());
+        monitorUrl.setDataGroupKey(request.getGroupKeyName());
+        monitorUrl.setDataId(request.getDataId());
+        monitorUrl.setClientIp(request.getClientIp());
+        monitorUrl.setUserId(request.getUserId());
+        if (request.getRequestTime() != null) {
+            monitorUrl.setRequestTime(request.getRequestTime().intValue());
+        }
+        return monitorUrl;
+    }
+
     @Override
     public String searchContentById(String date, String id) throws Exception {
         JayMonitorUrl monitorData = urlMapper.selectPartitionById(date, Integer.valueOf(id));
-        MessageTree messageTree = new DefaultMessageTree(monitorData.getApplicationName(), monitorData.getApplicationIp(), monitorData.getId(), monitorData.getCreatedTime(), null);
+        MessageTree messageTree =
+            new DefaultMessageTree(monitorData.getApplicationName(), monitorData.getApplicationIp(),
+                monitorData.getId(), monitorData.getCreatedTime(), null);
         String messageId = messageTree.getMessageId();
         return this.messageManagerProcess.getMessage(messageId);
     }
@@ -66,7 +97,9 @@ public class MysqlUrlStoreProcess extends AbstractStoreProcess<URLDataDTO, JayMo
     @Override
     public String searchErrorById(String date, String id) throws Exception {
         JayMonitorUrl monitorData = urlMapper.selectPartitionById(date, Integer.valueOf(id));
-        MessageTree messageTree = new DefaultMessageTree(PrefixUtils.prefixErrorMessage(monitorData.getApplicationName()), monitorData.getApplicationIp(), monitorData.getId(), monitorData.getCreatedTime(), null);
+        MessageTree messageTree =
+            new DefaultMessageTree(PrefixUtils.prefixErrorMessage(monitorData.getApplicationName()),
+                monitorData.getApplicationIp(), monitorData.getId(), monitorData.getCreatedTime(), null);
         String messageId = messageTree.getMessageId();
         return this.messageManagerProcess.getMessage(messageId);
     }
@@ -75,30 +108,10 @@ public class MysqlUrlStoreProcess extends AbstractStoreProcess<URLDataDTO, JayMo
     public List<JayMonitorUrl> speedUpConsumerList(List<URLDataDTO> requestList) {
         List<JayMonitorUrl> monitorList = new ArrayList<>();
         for (int i = 0; i < requestList.size(); i++) {
-
             URLDataDTO request = requestList.get(i);
-            String url = request.getUrl();
-            if (StringUtils.isNotEmpty(request.getUrl())) {
-                url = url.replaceAll("//", "/");
-            }
-
-            JayMonitorUrl monitorUrl = new JayMonitorUrl();
-            BeanUtils.copyProperties(request, monitorUrl);
-            monitorUrl.setUrl(url);
-            monitorUrl.setApplicationName(request.getApplicationName());
-            monitorUrl.setApplicationIp(request.getIp());
-            monitorUrl.setCreatedTime(request.getCreateDate());
-            monitorUrl.setDataGroupName(request.getGroupName());
-            monitorUrl.setDataGroupKey(request.getGroupKeyName());
-            monitorUrl.setDataId(request.getDataId());
-            monitorUrl.setClientIp(request.getClientIp());
-            monitorUrl.setUserId(request.getUserId());
-            if (request.getRequestTime() != null) {
-                monitorUrl.setRequestTime(request.getRequestTime().intValue());
-            }
-            monitorList.add(monitorUrl);
+            monitorList.add(builderJayMonitor(request));
         }
-
+        
         urlMapper.batchPartitionInsert(getPartitionId(), monitorList);
 
         return monitorList;

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

@@ -13,12 +13,12 @@ spring:
     test-on-return: false
     test-while-idle: true
     keep-alive: true
-#    url: jdbc:mysql://192.168.0.13:3306/elab_db?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior
-#    username: root
-#    password: elab@123
-    url: jdbc:mysql://106.14.4.198:3306/jay_monitor?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior
-    username: jay_monitor
-    password: jayzhou
+    url: jdbc:mysql://192.168.0.13:3306/elab_db?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior
+    username: root
+    password: elab@123
+#    url: jdbc:mysql://106.14.4.198:3306/jay_monitor?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior
+#    username: jay_monitor
+#    password: jayzhou
   oss:
     access-key-id: LTAImNZed054h0YV
     access-key-secret: 8hmhlhiQ2ikmVeLKujwMNWsktFpSzm

+ 5 - 3
jay-monitor-data-server/src/main/resources/application-uat.yml

@@ -4,14 +4,16 @@ spring:
     driver-class-name: com.mysql.jdbc.Driver
     max-wait: 60000
     time-between-eviction-runs-millis: 60000
-    initial-size: 10
+    initial-size: 50
     min-idle: 10
-    max-active: 20
+    max-active: 50
     min-evictable-idle-time-millis: 600000
-#    max-evictable-idle-time-millis: 900000
+    #    max-evictable-idle-time-millis: 900000
     test-on-borrow: false
     test-on-return: false
     test-while-idle: true
+    remove-abandoned: true
+    remove-abandoned-timeout: 180
     keep-alive: true
     url: jdbc:mysql://172.19.189.118/jay_monitor_uat?characterEncoding=UTF-8&connectTimeout=60000&socketTimeout=60000
     username: jay_monitor

+ 1 - 0
jay-monitor-data-server/src/main/resources/application.yml

@@ -20,6 +20,7 @@ spring:
         table-rule:
           jay_monitor_mq: day
           jay_monitor_url: day
+          jay_monitor_sql: day
   thymeleaf:
     cache: false
     prefix: classpath:/templates

+ 347 - 0
jay-monitor-data-server/src/main/resources/mybatis/mapper/JayMonitorSqlMapper.xml

@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jay.monitor.data.server.daos.JayMonitorSqlMapper">
+  <resultMap id="BaseResultMap" type="com.jay.monitor.data.server.models.entity.JayMonitorSql">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="application_name" jdbcType="VARCHAR" property="applicationName" />
+    <result column="application_ip" jdbcType="VARCHAR" property="applicationIp" />
+    <result column="sql_id" jdbcType="VARCHAR" property="sqlId" />
+    <result column="table_name" jdbcType="VARCHAR" property="tableName" />
+    <result column="invoke_type" jdbcType="VARCHAR" property="invokeType" />
+    <result column="affected_rows" jdbcType="INTEGER" property="affectedRows" />
+    <result column="data_group_name" jdbcType="VARCHAR" property="dataGroupName" />
+    <result column="data_group_key" jdbcType="VARCHAR" property="dataGroupKey" />
+    <result column="data_id" jdbcType="VARCHAR" property="dataId" />
+    <result column="log_id" jdbcType="VARCHAR" property="logId" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="request_time" jdbcType="INTEGER" property="requestTime" />
+    <result column="created_time" jdbcType="TIMESTAMP" property="createdTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, application_name, application_ip, sql_id, `table_name`, invoke_type, affected_rows, 
+    data_group_name, data_group_key, data_id, log_id, `status`, request_time, created_time
+  </sql>
+  <select id="selectByExample" parameterType="com.jay.monitor.data.server.models.entity.JayMonitorSqlExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from jay_monitor_sql
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from jay_monitor_sql
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from jay_monitor_sql
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.jay.monitor.data.server.models.entity.JayMonitorSqlExample">
+    delete from jay_monitor_sql
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.jay.monitor.data.server.models.entity.JayMonitorSql" useGeneratedKeys="true">
+    insert into jay_monitor_sql (application_name, application_ip, sql_id, 
+      `table_name`, invoke_type, affected_rows, 
+      data_group_name, data_group_key, data_id, 
+      log_id, `status`, request_time, 
+      created_time)
+    values (#{applicationName,jdbcType=VARCHAR}, #{applicationIp,jdbcType=VARCHAR}, #{sqlId,jdbcType=VARCHAR}, 
+      #{tableName,jdbcType=VARCHAR}, #{invokeType,jdbcType=VARCHAR}, #{affectedRows,jdbcType=INTEGER}, 
+      #{dataGroupName,jdbcType=VARCHAR}, #{dataGroupKey,jdbcType=VARCHAR}, #{dataId,jdbcType=VARCHAR}, 
+      #{logId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{requestTime,jdbcType=INTEGER}, 
+      #{createdTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.jay.monitor.data.server.models.entity.JayMonitorSql" useGeneratedKeys="true">
+    insert into jay_monitor_sql
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="applicationName != null">
+        application_name,
+      </if>
+      <if test="applicationIp != null">
+        application_ip,
+      </if>
+      <if test="sqlId != null">
+        sql_id,
+      </if>
+      <if test="tableName != null">
+        `table_name`,
+      </if>
+      <if test="invokeType != null">
+        invoke_type,
+      </if>
+      <if test="affectedRows != null">
+        affected_rows,
+      </if>
+      <if test="dataGroupName != null">
+        data_group_name,
+      </if>
+      <if test="dataGroupKey != null">
+        data_group_key,
+      </if>
+      <if test="dataId != null">
+        data_id,
+      </if>
+      <if test="logId != null">
+        log_id,
+      </if>
+      <if test="status != null">
+        `status`,
+      </if>
+      <if test="requestTime != null">
+        request_time,
+      </if>
+      <if test="createdTime != null">
+        created_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="applicationName != null">
+        #{applicationName,jdbcType=VARCHAR},
+      </if>
+      <if test="applicationIp != null">
+        #{applicationIp,jdbcType=VARCHAR},
+      </if>
+      <if test="sqlId != null">
+        #{sqlId,jdbcType=VARCHAR},
+      </if>
+      <if test="tableName != null">
+        #{tableName,jdbcType=VARCHAR},
+      </if>
+      <if test="invokeType != null">
+        #{invokeType,jdbcType=VARCHAR},
+      </if>
+      <if test="affectedRows != null">
+        #{affectedRows,jdbcType=INTEGER},
+      </if>
+      <if test="dataGroupName != null">
+        #{dataGroupName,jdbcType=VARCHAR},
+      </if>
+      <if test="dataGroupKey != null">
+        #{dataGroupKey,jdbcType=VARCHAR},
+      </if>
+      <if test="dataId != null">
+        #{dataId,jdbcType=VARCHAR},
+      </if>
+      <if test="logId != null">
+        #{logId,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        #{status,jdbcType=INTEGER},
+      </if>
+      <if test="requestTime != null">
+        #{requestTime,jdbcType=INTEGER},
+      </if>
+      <if test="createdTime != null">
+        #{createdTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.jay.monitor.data.server.models.entity.JayMonitorSqlExample" resultType="java.lang.Long">
+    select count(*) from jay_monitor_sql
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update jay_monitor_sql
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=INTEGER},
+      </if>
+      <if test="record.applicationName != null">
+        application_name = #{record.applicationName,jdbcType=VARCHAR},
+      </if>
+      <if test="record.applicationIp != null">
+        application_ip = #{record.applicationIp,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sqlId != null">
+        sql_id = #{record.sqlId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.tableName != null">
+        `table_name` = #{record.tableName,jdbcType=VARCHAR},
+      </if>
+      <if test="record.invokeType != null">
+        invoke_type = #{record.invokeType,jdbcType=VARCHAR},
+      </if>
+      <if test="record.affectedRows != null">
+        affected_rows = #{record.affectedRows,jdbcType=INTEGER},
+      </if>
+      <if test="record.dataGroupName != null">
+        data_group_name = #{record.dataGroupName,jdbcType=VARCHAR},
+      </if>
+      <if test="record.dataGroupKey != null">
+        data_group_key = #{record.dataGroupKey,jdbcType=VARCHAR},
+      </if>
+      <if test="record.dataId != null">
+        data_id = #{record.dataId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.logId != null">
+        log_id = #{record.logId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.status != null">
+        `status` = #{record.status,jdbcType=INTEGER},
+      </if>
+      <if test="record.requestTime != null">
+        request_time = #{record.requestTime,jdbcType=INTEGER},
+      </if>
+      <if test="record.createdTime != null">
+        created_time = #{record.createdTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update jay_monitor_sql
+    set id = #{record.id,jdbcType=INTEGER},
+      application_name = #{record.applicationName,jdbcType=VARCHAR},
+      application_ip = #{record.applicationIp,jdbcType=VARCHAR},
+      sql_id = #{record.sqlId,jdbcType=VARCHAR},
+      `table_name` = #{record.tableName,jdbcType=VARCHAR},
+      invoke_type = #{record.invokeType,jdbcType=VARCHAR},
+      affected_rows = #{record.affectedRows,jdbcType=INTEGER},
+      data_group_name = #{record.dataGroupName,jdbcType=VARCHAR},
+      data_group_key = #{record.dataGroupKey,jdbcType=VARCHAR},
+      data_id = #{record.dataId,jdbcType=VARCHAR},
+      log_id = #{record.logId,jdbcType=VARCHAR},
+      `status` = #{record.status,jdbcType=INTEGER},
+      request_time = #{record.requestTime,jdbcType=INTEGER},
+      created_time = #{record.createdTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.jay.monitor.data.server.models.entity.JayMonitorSql">
+    update jay_monitor_sql
+    <set>
+      <if test="applicationName != null">
+        application_name = #{applicationName,jdbcType=VARCHAR},
+      </if>
+      <if test="applicationIp != null">
+        application_ip = #{applicationIp,jdbcType=VARCHAR},
+      </if>
+      <if test="sqlId != null">
+        sql_id = #{sqlId,jdbcType=VARCHAR},
+      </if>
+      <if test="tableName != null">
+        `table_name` = #{tableName,jdbcType=VARCHAR},
+      </if>
+      <if test="invokeType != null">
+        invoke_type = #{invokeType,jdbcType=VARCHAR},
+      </if>
+      <if test="affectedRows != null">
+        affected_rows = #{affectedRows,jdbcType=INTEGER},
+      </if>
+      <if test="dataGroupName != null">
+        data_group_name = #{dataGroupName,jdbcType=VARCHAR},
+      </if>
+      <if test="dataGroupKey != null">
+        data_group_key = #{dataGroupKey,jdbcType=VARCHAR},
+      </if>
+      <if test="dataId != null">
+        data_id = #{dataId,jdbcType=VARCHAR},
+      </if>
+      <if test="logId != null">
+        log_id = #{logId,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        `status` = #{status,jdbcType=INTEGER},
+      </if>
+      <if test="requestTime != null">
+        request_time = #{requestTime,jdbcType=INTEGER},
+      </if>
+      <if test="createdTime != null">
+        created_time = #{createdTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.jay.monitor.data.server.models.entity.JayMonitorSql">
+    update jay_monitor_sql
+    set application_name = #{applicationName,jdbcType=VARCHAR},
+      application_ip = #{applicationIp,jdbcType=VARCHAR},
+      sql_id = #{sqlId,jdbcType=VARCHAR},
+      `table_name` = #{tableName,jdbcType=VARCHAR},
+      invoke_type = #{invokeType,jdbcType=VARCHAR},
+      affected_rows = #{affectedRows,jdbcType=INTEGER},
+      data_group_name = #{dataGroupName,jdbcType=VARCHAR},
+      data_group_key = #{dataGroupKey,jdbcType=VARCHAR},
+      data_id = #{dataId,jdbcType=VARCHAR},
+      log_id = #{logId,jdbcType=VARCHAR},
+      `status` = #{status,jdbcType=INTEGER},
+      request_time = #{requestTime,jdbcType=INTEGER},
+      created_time = #{createdTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 101 - 0
jay-monitor-data-server/src/main/resources/mybatis/mapper/JayMonitorSqlMapperExt.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jay.monitor.data.server.daos.JayMonitorSqlMapperExt">
+
+    <insert id="batchPartitionInsert" keyColumn="list.id" keyProperty="list.id"
+            useGeneratedKeys="true">
+        insert into jay_monitor_sql_${date} (application_name, application_ip, sql_id,
+        `table_name`, invoke_type, affected_rows,
+        data_group_name, data_group_key, data_id,
+        log_id, `status`, request_time,
+        created_time)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (
+            #{item.applicationName,jdbcType=VARCHAR}, #{item.applicationIp,jdbcType=VARCHAR},
+            #{item.sqlId,jdbcType=VARCHAR},
+            #{item.tableName,jdbcType=VARCHAR}, #{item.invokeType,jdbcType=VARCHAR},
+            #{item.affectedRows,jdbcType=INTEGER},
+            #{item.dataGroupName,jdbcType=VARCHAR}, #{item.dataGroupKey,jdbcType=VARCHAR},
+            #{item.dataId,jdbcType=VARCHAR},
+            #{item.logId,jdbcType=VARCHAR}, #{item.status,jdbcType=INTEGER}, #{item.requestTime,jdbcType=INTEGER},
+            #{item.createdTime,jdbcType=TIMESTAMP}
+            )
+        </foreach>
+    </insert>
+
+    <sql id="Base_Column_List">
+        id, application_name, application_ip, sql_id, `table_name`, invoke_type, affected_rows,
+        data_group_name, data_group_key, data_id, log_id, `status`, request_time, created_time
+    </sql>
+
+    <select id="selectPartitionById" resultType="com.jay.monitor.data.server.models.entity.JayMonitorMq">
+        select
+        <include refid="Base_Column_List"/>
+        from jay_monitor_sql_${date}
+        where id = #{id,jdbcType=INTEGER}
+    </select>
+
+
+    <select id="selectPartitionByList" resultType="com.jay.monitor.data.server.models.entity.JayMonitorMq">
+        select
+        <include refid="Base_Column_List"/>
+        from jay_monitor_sql_${date}
+        <include refid="whereCondition"/>
+    </select>
+
+    <sql id="whereCondition">
+        <where>
+            1=1
+            <if test="record.applicationName != null and record.applicationName != ''">
+                AND application_name = #{record.applicationName,jdbcType=VARCHAR}
+            </if>
+            <if test="record.applicationIp != null and record.applicationIp != ''">
+                AND application_ip = #{record.applicationIp,jdbcType=VARCHAR}
+            </if>
+            <if test="record.invokeType != null and record.invokeType != ''">
+                AND invoke_type = #{record.invokeType,jdbcType=VARCHAR}
+            </if>
+            <if test="record.tableName != null and record.tableName != ''">
+                AND table_name = #{record.tableName,jdbcType=VARCHAR}
+            </if>
+            <if test="record.affectedRows != null and record.affectedRows != ''">
+                AND affected_rows = #{record.affectedRows,jdbcType=INTEGER}
+            </if>
+            <if test="record.msgId != null and record.msgId != ''">
+                AND msg_id = #{record.msgId,jdbcType=VARCHAR}
+            </if>
+            <if test="record.dataGroupName != null and record.dataGroupName != ''">
+                AND data_group_name = #{record.dataGroupName,jdbcType=VARCHAR}
+            </if>
+            <if test="record.dataGroupKey != null and record.dataGroupKey != ''">
+                AND data_group_key = #{record.dataGroupKey,jdbcType=VARCHAR}
+            </if>
+            <if test="record.dataId != null and record.dataId != ''">
+                AND data_id = #{record.dataId,jdbcType=VARCHAR}
+            </if>
+            <if test="record.rootLogId != null and record.rootLogId != ''">
+                AND root_log_id = #{record.rootLogId,jdbcType=VARCHAR}
+            </if>
+            <if test="record.parentLogId != null and record.parentLogId != ''">
+                AND parent_log_id = #{record.parentLogId,jdbcType=VARCHAR}
+            </if>
+            <if test="record.logId != null and record.logId != ''">
+                AND log_id = #{record.logId,jdbcType=VARCHAR}
+            </if>
+            <if test="record.status != null and record.status != ''">
+                AND `status` = #{record.status,jdbcType=INTEGER}
+            </if>
+            <if test="record.sourceTime != null and record.sourceTime != ''">
+                AND source_time = #{record.sourceTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="record.createdTime != null and record.createdTime != ''">
+                AND created_time = #{record.createdTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="record.requestTime != null and record.requestTime != ''">
+                AND request_time >= #{record.requestTime,jdbcType=INTEGER}
+            </if>
+        </where>
+        order by id desc limit ${pageSize}
+    </sql>
+</mapper>

ファイルの差分が大きいため隠しています
+ 32 - 0
jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/process/SQLUserProcessTest.java


+ 7 - 0
jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/process/URLUserProcessTest.java

@@ -0,0 +1,7 @@
+package com.jay.monitor.data.server.process;
+
+import junit.framework.TestCase;
+
+public class URLUserProcessTest extends TestCase {
+
+}

+ 1 - 0
jay-monitor-data-server/src/test/resources/application-dev.yml

@@ -5,6 +5,7 @@ spring:
         table-rule:
           jay_monitor_mq: day
           jay_monitor_url: day
+          jay_monitor_sql: day
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driver-class-name: com.mysql.jdbc.Driver