Przeglądaj źródła

历史数据清理

wukai 8 miesięcy temu
rodzic
commit
5deb6d46a1

+ 187 - 0
jjt-admin/src/main/resources/application-jt.yml

@@ -0,0 +1,187 @@
+# 项目相关配置
+jjt:
+  # 名称
+  name: jjt
+  # 版本
+  version: 3.8.7
+  # 版权年份
+  copyrightYear: 2024
+  # 文件路径 示例( Windows配置D:/jjt/uploadPath,Linux配置 /home/jjt/uploadPath)
+  profile: D:/jjt/uploadPath
+  # 获取ip地址开关
+  addressEnabled: false
+  # 验证码类型 math 数字计算 char 字符验证
+  captchaType: math
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 9527
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
+
+# 日志配置
+logging:
+  level:
+    com.jjt: debug
+    org.springframework: warn
+
+# 用户配置
+user:
+  password:
+    # 密码最大错误次数
+    maxRetryCount: 5
+    # 密码锁定时间(默认10分钟)
+    lockTime: 10
+
+# Spring配置
+spring:
+  # 数据源配置
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:mysql://192.168.188.66:3306/jy2024?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
+        username: root
+        password: 123456
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置连接超时时间
+      connectTimeout: 30000
+      # 配置网络超时时间
+      socketTimeout: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: jjt
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  # 文件上传
+  servlet:
+    multipart:
+      # 单个文件大小
+      max-file-size: 10MB
+      # 设置总上传的文件大小
+      max-request-size: 20MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  # redis 配置
+  redis:
+    # 地址
+    host: 192.168.188.66
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password: redis@123
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+
+# token配置
+token:
+  # 令牌自定义标识
+  header: Authorization
+  # 令牌密钥
+  secret: JJT@basic!2024.
+  # 令牌有效期(默认30分钟)
+  expireTime: 30
+
+# MyBatis Plus配置
+mybatis-plus:
+  # 搜索指定包别名
+  typeAliasesPackage: com.jjt.**.domain
+  # 配置mapper的扫描,找到所有的mapper.xml映射文件
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 加载全局的配置文件
+  configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+pagehelper:
+  helperDialect: mysql
+  supportMethodsArguments: true
+  params: count=countSql
+
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: true
+  # 请求前缀
+  pathMapping: /dev-api
+
+# 防止XSS攻击
+xss:
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*

+ 28 - 0
jjt-admin/src/test/java/com/test/PpTest.java

@@ -0,0 +1,28 @@
+package com.test;
+
+import com.jjt.JjtApplication;
+import com.jjt.biz.service.IBizObjMetricsService;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ *
+ */
+@SpringBootTest(classes = JjtApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("tt")
+public class PpTest {
+    @Resource
+    private IBizObjMetricsService metricsService;
+
+    @Test
+    void data() {
+        Date date = new Date();
+//        metricsService.pinpointMetricsValue(21l, date);
+        metricsService.prometheusMetricsValue(21l, date);
+    }
+
+}

+ 3 - 1
jjt-biz/src/main/java/com/jjt/biz/controller/BizObjMetricsController.java

@@ -89,7 +89,9 @@ public class BizObjMetricsController extends BaseController {
         BizObjMetricsData data = new BizObjMetricsData();
         data.setObjMetricsId(objMetricsId);
         List<BizObjMetricsData> list = dataService.selectBizObjMetricsDataList(data);
-
+        if (list == null) {
+            return AjaxResult.error();
+        }
         List<Long> times = new ArrayList<>();
         List<Float> values = new ArrayList<>();
         list.sort(Comparator.comparing(BizObjMetricsData::getCreateTime));

+ 14 - 7
jjt-biz/src/main/java/com/jjt/biz/mapper/BizObjMetricsDataMapper.java

@@ -1,12 +1,13 @@
 package com.jjt.biz.mapper;
 
+import java.util.Date;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jjt.biz.domain.BizObjMetricsData;
 
 /**
  * 业务对象指标数据Mapper接口
- * 
+ *
  * @author jjt
  * @date 2024-09-01
  */
@@ -14,7 +15,7 @@ public interface BizObjMetricsDataMapper extends BaseMapper<BizObjMetricsData>
 {
     /**
      * 查询业务对象指标数据
-     * 
+     *
      * @param dataId 业务对象指标数据主键
      * @return 业务对象指标数据
      */
@@ -22,7 +23,7 @@ public interface BizObjMetricsDataMapper extends BaseMapper<BizObjMetricsData>
 
     /**
      * 查询业务对象指标数据列表
-     * 
+     *
      * @param bizObjMetricsData 业务对象指标数据
      * @return 业务对象指标数据集合
      */
@@ -30,7 +31,7 @@ public interface BizObjMetricsDataMapper extends BaseMapper<BizObjMetricsData>
 
     /**
      * 新增业务对象指标数据
-     * 
+     *
      * @param bizObjMetricsData 业务对象指标数据
      * @return 结果
      */
@@ -38,7 +39,7 @@ public interface BizObjMetricsDataMapper extends BaseMapper<BizObjMetricsData>
 
     /**
      * 修改业务对象指标数据
-     * 
+     *
      * @param bizObjMetricsData 业务对象指标数据
      * @return 结果
      */
@@ -46,7 +47,7 @@ public interface BizObjMetricsDataMapper extends BaseMapper<BizObjMetricsData>
 
     /**
      * 删除业务对象指标数据
-     * 
+     *
      * @param dataId 业务对象指标数据主键
      * @return 结果
      */
@@ -54,9 +55,15 @@ public interface BizObjMetricsDataMapper extends BaseMapper<BizObjMetricsData>
 
     /**
      * 批量删除业务对象指标数据
-     * 
+     *
      * @param dataIds 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteBizObjMetricsDataByDataIds(Long[] dataIds);
+    /**
+     * 清理date之前的历史数据
+     *
+     * @param date 时间
+     */
+    void clean(Date date);
 }

+ 18 - 10
jjt-biz/src/main/java/com/jjt/biz/service/IBizObjMetricsDataService.java

@@ -1,19 +1,20 @@
 package com.jjt.biz.service;
 
-import java.util.List;
 import com.jjt.biz.domain.BizObjMetricsData;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 业务对象指标数据Service接口
- * 
+ *
  * @author jjt
  * @date 2024-09-01
  */
-public interface IBizObjMetricsDataService 
-{
+public interface IBizObjMetricsDataService {
     /**
      * 查询业务对象指标数据
-     * 
+     *
      * @param dataId 业务对象指标数据主键
      * @return 业务对象指标数据
      */
@@ -21,7 +22,7 @@ public interface IBizObjMetricsDataService
 
     /**
      * 查询业务对象指标数据列表
-     * 
+     *
      * @param bizObjMetricsData 业务对象指标数据
      * @return 业务对象指标数据集合
      */
@@ -29,7 +30,7 @@ public interface IBizObjMetricsDataService
 
     /**
      * 新增业务对象指标数据
-     * 
+     *
      * @param bizObjMetricsData 业务对象指标数据
      * @return 结果
      */
@@ -37,7 +38,7 @@ public interface IBizObjMetricsDataService
 
     /**
      * 修改业务对象指标数据
-     * 
+     *
      * @param bizObjMetricsData 业务对象指标数据
      * @return 结果
      */
@@ -45,7 +46,7 @@ public interface IBizObjMetricsDataService
 
     /**
      * 批量删除业务对象指标数据
-     * 
+     *
      * @param dataIds 需要删除的业务对象指标数据主键集合
      * @return 结果
      */
@@ -53,9 +54,16 @@ public interface IBizObjMetricsDataService
 
     /**
      * 删除业务对象指标数据信息
-     * 
+     *
      * @param dataId 业务对象指标数据主键
      * @return 结果
      */
     public int deleteBizObjMetricsDataByDataId(Long dataId);
+
+    /**
+     * 清理date之前的历史数据
+     *
+     * @param date 时间
+     */
+    void clean(Date date);
 }

+ 11 - 0
jjt-biz/src/main/java/com/jjt/biz/service/impl/BizObjMetricsDataServiceImpl.java

@@ -6,6 +6,7 @@ import com.jjt.biz.service.IBizObjMetricsDataService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -84,4 +85,14 @@ public class BizObjMetricsDataServiceImpl implements IBizObjMetricsDataService {
     public int deleteBizObjMetricsDataByDataId(Long dataId) {
         return bizObjMetricsDataMapper.deleteBizObjMetricsDataByDataId(dataId);
     }
+
+    /**
+     * 清理date之前的历史数据
+     *
+     * @param date 时间
+     */
+    @Override
+    public void clean(Date date) {
+        bizObjMetricsDataMapper.clean(date);
+    }
 }

+ 33 - 12
jjt-biz/src/main/java/com/jjt/biz/service/impl/BizObjMetricsServiceImpl.java

@@ -13,6 +13,7 @@ import com.jjt.common.utils.StringUtils;
 import com.jjt.hl.domain.HlEvent;
 import com.jjt.hl.mapper.HlEventMapper;
 import com.jjt.hl.service.IHlEventService;
+import com.jjt.system.service.ISysConfigService;
 import org.apache.ibatis.session.ExecutorType;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
@@ -22,7 +23,6 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.*;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -57,6 +57,8 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
     private IBizObjMetricsDataService metricsDataService;
     @Resource
     private IHlEventService eventService;
+    @Resource
+    private ISysConfigService configService;
 
     /**
      * 查询业务对象指标
@@ -311,9 +313,10 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
             BizObjApp app = appService.selectBizObjAppByAppId(bizObj.getAppId());
             String appName = app.getAppCode();
 
+            Long time = Long.parseLong(configService.selectConfigByKey("pp.api.time"));
             LocalDateTime endTime = LocalDateTime.now();
-            LocalDateTime startTime = endTime.minusDays(2);
-            //TODO 暂时取2天的值,不然难得搞
+
+            LocalDateTime startTime = endTime.minusMinutes(time);
             Map<String, String> appMap = pinpointService.getApps();
             String appType = appMap.get(appName);
 
@@ -665,7 +668,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
      * @param date           时间
      */
     private void updateLinkMetrics(Long objId, List<PinpointVO> pinpointVOList, Date date) {
-        Map<String, BizObjMetrics> metricsMap = getAllMetricsForObjId(objId);
+        Map<String, List<BizObjMetrics>> metricsMap = getAllMetricsForObjId(objId);
         pinpointVOList.forEach(vo -> updateMetricsValues(metricsMap, vo, date));
     }
 
@@ -677,10 +680,11 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
      * @param vo         pp链路对象
      * @param date       时间
      */
-    private void updateMetricsValues(Map<String, BizObjMetrics> metricsMap, PinpointVO vo, Date date) {
-        metricsMap.values().stream()
-                .filter(om -> om.getMetricsCode().startsWith(vo.getApplicationName() + "/"))
-                .forEach(om -> {
+    private void updateMetricsValues(Map<String, List<BizObjMetrics>> metricsMap, PinpointVO vo, Date date) {
+        for (String code : metricsMap.keySet()) {
+            List<BizObjMetrics> list = metricsMap.get(code);
+            list.forEach(om -> {
+                if (om.getMetricsCode().startsWith(vo.getApplicationName() + "/")) {
                     updateMetric(om, "pp.1s", vo.getTime1s(), date);
                     updateMetric(om, "pp.3s", vo.getTime3s(), date);
                     updateMetric(om, "pp.5s", vo.getTime5s(), date);
@@ -693,7 +697,25 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
                     updateMetric(om, "pp.avg", vo.getAvg(), date);
                     updateMetric(om, "pp.slow", vo.getSlow(), date);
                     updateMetric(om, "pp.error", vo.getError(), date);
-                });
+                }
+            });
+        }
+//        metricsMap.values().stream()
+//                .filter(om -> om.getMetricsCode().startsWith(vo.getApplicationName() + "/"))
+//                .forEach(om -> {
+//                    updateMetric(om, "pp.1s", vo.getTime1s(), date);
+//                    updateMetric(om, "pp.3s", vo.getTime3s(), date);
+//                    updateMetric(om, "pp.5s", vo.getTime5s(), date);
+//                    updateMetric(om, "pp.100ms", vo.getTime100ms(), date);
+//                    updateMetric(om, "pp.300ms", vo.getTime300ms(), date);
+//                    updateMetric(om, "pp.500ms", vo.getTime500ms(), date);
+//                    updateMetric(om, "pp.tot", vo.getTot(), date);
+//                    updateMetric(om, "pp.sum", vo.getSum(), date);
+//                    updateMetric(om, "pp.max", vo.getMax(), date);
+//                    updateMetric(om, "pp.avg", vo.getAvg(), date);
+//                    updateMetric(om, "pp.slow", vo.getSlow(), date);
+//                    updateMetric(om, "pp.error", vo.getError(), date);
+//                });
     }
 
     /**
@@ -722,9 +744,8 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
      * @param objId 对象ID
      * @return map
      */
-    private Map<String, BizObjMetrics> getAllMetricsForObjId(Long objId) {
-        return getAllMetricsForObjIdList(objId).stream()
-                .collect(Collectors.toMap(BizObjMetrics::getMetricsCode, Function.identity()));
+    private Map<String, List<BizObjMetrics>> getAllMetricsForObjId(Long objId) {
+        return getAllMetricsForObjIdList(objId).stream().collect(Collectors.groupingBy(BizObjMetrics::getMetricsCode));
     }
 
     /**

+ 32 - 0
jjt-biz/src/main/java/com/jjt/task/CleanTask.java

@@ -0,0 +1,32 @@
+package com.jjt.task;
+
+import com.jjt.biz.service.IBizObjMetricsDataService;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Date;
+
+/**
+ * 定时任务调度测试
+ *
+ * @author jjt
+ */
+@Component("cleanTask")
+public class CleanTask {
+    @Resource
+    private IBizObjMetricsDataService dataService;
+
+    /**
+     * 清理历史数据
+     */
+    public void clean(Integer day) {
+        LocalDate time = LocalDate.now();
+        time = time.minusDays(day);
+        Date date = Date.from(time.atStartOfDay(ZoneId.systemDefault()).toInstant());
+        dataService.clean(date);
+    }
+
+
+}

+ 17 - 0
jjt-biz/src/main/java/com/jjt/task/DataTask.java

@@ -27,6 +27,20 @@ public class DataTask {
     @Resource
     private JdbcTemplate jdbcTemplate;
 
+    /**
+     * 正常获取指标
+     */
+    public void metrics() {
+        Date date = new Date();
+        objService.selectBizObjList(new BizObj()).forEach(obj -> {
+            metricsService.pinpointMetricsValue(obj.getObjId(),date);
+            metricsService.prometheusMetricsValue(obj.getObjId(),date);
+        });
+    }
+
+    /**
+     * 模拟数据
+     */
     public void imitate() {
         String sql = "SELECT MAX(create_time) from biz_obj_metrics_data";
         LocalDateTime localDateTime = jdbcTemplate.queryForObject(sql, LocalDateTime.class);
@@ -44,6 +58,9 @@ public class DataTask {
         } while (!st.isAfter(ed));
     }
 
+    /**
+     * 模拟一次数据
+     */
     public void imitateOne() {
         try {
             ExecutorService threadPool = new ThreadPoolExecutor(

+ 5 - 0
jjt-biz/src/main/resources/mapper/obj/BizObjMetricsDataMapper.xml

@@ -90,4 +90,9 @@
             #{dataId}
         </foreach>
     </delete>
+    <delete id="clean">
+        delete
+        from biz_obj_metrics_data
+        where create_time &lt;= #{date}
+    </delete>
 </mapper>

+ 1 - 1
jjt-quartz/src/main/java/com/jjt/quartz/config/ScheduleConfig.java

@@ -14,7 +14,7 @@ import java.util.Properties;
  * @author jjt
  */
 @Configuration
-@Profile("!junit")
+@Profile({"!junit","!jt"})
 public class ScheduleConfig {
     @Bean
     public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {