Prechádzať zdrojové kódy

系统压力排名,使用正式数据

wukai 8 mesiacov pred
rodič
commit
6d9b05163d

+ 138 - 84
jjt-biz/src/main/java/com/jjt/biz/controller/AlarmRecordController.java

@@ -22,7 +22,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 告警记录Controller
@@ -165,7 +170,7 @@ public class AlarmRecordController extends BaseController {
     @GetMapping("/list/bizSort")
     public AjaxResult listBizSort(@ApiParam(value = "分类") String bizType, @ApiParam(value = "开始时间yyyy-mm-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") Date start, @ApiParam(value = "结束时间yyyy-mm-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") Date end) {
         List<BizSortVO> list = new ArrayList();
-//          TODO 暂时使用模拟数据
+//          暂时使用模拟数据
         String sql = "SELECT a.obj_id,b.obj_name,b.obj_type,COUNT(*) num FROM alarm_record a,biz_obj b WHERE a.obj_id=b.obj_id";
         Vector<Object> v = new Vector<>();
         if (StringUtils.isNotEmpty(bizType)) {
@@ -200,45 +205,56 @@ public class AlarmRecordController extends BaseController {
     @GetMapping("/list/bizAccess")
     public AjaxResult listBizAccess(@ApiParam(value = "开始时间yyyy-mm-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") Date start, @ApiParam(value = "结束时间yyyy-mm-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") Date end) {
         List<BizAccessVO> list = new ArrayList<>();
-//        //TODO 还是得先用模拟数据。
-//        String sql = "SELECT a.model_id,a.model_name,ifnull(sum(c.ACCESS_TIMES),0) times FROM biz_model a,biz_model_detail b,biz_obj c" +
-//                " WHERE a.model_id=b.model_id AND b.obj_id=c.obj_id GROUP BY a.model_id,a.model_name ORDER BY times desc";
-//        List<Map<String, Object>> mdList = jdbcTemplate.queryForList(sql);
-//        mdList.forEach(map -> {
-//            BizAccessVO vo = new BizAccessVO();
-//            Integer modelId = (Integer) map.get("model_id");
-//            String modelName = (String) map.get("model_name");
-//            BigDecimal times = (BigDecimal) map.get("times");
-//            vo.setAccess(times.longValue());
-//            vo.setModelId(Long.valueOf(modelId));
-//            vo.setModelName(modelName);
-//            Vector<Object> v = new Vector<>();
-//            String sql1 = "SELECT COUNT(*) FROM alarm_record WHERE obj_id IN(SELECT obj_id FROM biz_model_detail WHERE model_id=?)";
-//            v.add(modelId);
-//            if (start != null && end != null) {
-//                sql1 += " AND alarm_time BETWEEN ? AND ?";
-//                v.add(start);
-//                v.add(end);
-//            }
-//            Long num = jdbcTemplate.queryForObject(sql1, Long.class, v.toArray());
-//            vo.setNum(num);
-//            list.add(vo);
-//        });
-        String[] names = {"市场服务", "市场出清", "市场结算", "市场合规", "信息发布"};
-        int[] as = new int[5];
-        int[] nums = new int[5];
-        for (int i = 0; i < as.length; i++) {
-            as[i] = new Random().nextInt(1000) + 200;
-            nums[i] = new Random().nextInt(500);
-        }
-        for (int i = 0; i < names.length; i++) {
+//        //还是得先用模拟数据。
+        String sql = "SELECT model_id,model_name FROM biz_model";
+        List<Map<String, Object>> mdList = jdbcTemplate.queryForList(sql);
+        mdList.forEach(map -> {
             BizAccessVO vo = new BizAccessVO();
-            vo.setModelId((long) (i + 1));
-            vo.setModelName(names[i]);
-            vo.setAccess((long) as[i]);
-            vo.setNum((long) nums[i]);
+            Integer modelId = (Integer) map.get("model_id");
+            String modelName = (String) map.get("model_name");
+            vo.setModelId(Long.valueOf(modelId));
+            vo.setModelName(modelName);
+            Vector<Object> v = new Vector<>();
+            String sql1 = "SELECT COUNT(*) FROM alarm_record WHERE obj_id IN(SELECT obj_id FROM biz_model_detail WHERE model_id=?)";
+            v.add(modelId);
+            if (start != null && end != null) {
+                sql1 += " AND alarm_time BETWEEN ? AND ?";
+                v.add(start);
+                v.add(end);
+            }
+            Long num = jdbcTemplate.queryForObject(sql1, Long.class, v.toArray());
+            vo.setNum(num);
+            Vector<Object> v1 = new Vector<>();
+            String sql2 = "SELECT IFNULL(SUM(D_VALUE),0) FROM biz_obj_metrics_data " +
+                    "WHERE obj_metrics_id IN(" +
+                    "SELECT obj_metrics_id FROM biz_obj_metrics" +
+                    " WHERE metrics_id =(SELECT metrics_id FROM metrics_def WHERE metrics_code='pp.tot')" +
+                    " AND obj_id IN(SELECT obj_id FROM biz_model_detail WHERE model_id=?))";
+            v1.add(modelId);
+            if (start != null && end != null) {
+                sql2 += " AND CREATE_TIME BETWEEN ? AND ?";
+                v1.add(start);
+                v1.add(end);
+            }
+            Long access = jdbcTemplate.queryForObject(sql2, Long.class, v1.toArray());
+            vo.setAccess(access);
             list.add(vo);
-        }
+        });
+//        String[] names = {"市场服务", "市场出清", "市场结算", "市场合规", "信息发布"};
+//        int[] as = new int[5];
+//        int[] nums = new int[5];
+//        for (int i = 0; i < as.length; i++) {
+//            as[i] = new Random().nextInt(1000) + 200;
+//            nums[i] = new Random().nextInt(500);
+//        }
+//        for (int i = 0; i < names.length; i++) {
+//            BizAccessVO vo = new BizAccessVO();
+//            vo.setModelId((long) (i + 1));
+//            vo.setModelName(names[i]);
+//            vo.setAccess((long) as[i]);
+//            vo.setNum((long) nums[i]);
+//            list.add(vo);
+//        }
 
         list.sort(Comparator.comparing(BizAccessVO::getAccess).reversed());
         return AjaxResult.success(list);
@@ -253,10 +269,10 @@ public class AlarmRecordController extends BaseController {
         Vector<Object> v = new Vector<>();
         if (modelId != null) {
             sql += " AND b.MODEL_ID=? ";
-            //TODO 因为是模拟数据,所以这里要做个映射,之后要取消掉
-            int[] idRela = {4, 5, 15, 20, 23};
-            v.add(idRela[modelId.intValue() - 1]);
-//            v.add(modelId);
+//            因为是模拟数据,所以这里要做个映射,之后要取消掉
+//            int[] idRela = {4, 5, 15, 20, 23};
+//            v.add(idRela[modelId.intValue() - 1]);
+            v.add(modelId);
         }
         if (start != null && end != null) {
             sql += " AND a.alarm_time BETWEEN ? AND ?";
@@ -278,56 +294,94 @@ public class AlarmRecordController extends BaseController {
     @ApiOperation("组件压力排名")
     @GetMapping("/list/objAccess")
     public AjaxResult objAccess(@ApiParam(value = "对象ID") Long modelId, @ApiParam(value = "开始时间yyyy-mm-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") Date start, @ApiParam(value = "结束时间yyyy-mm-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") Date end) {
-//        TODO 依然得用模拟数据
-//        String sql = "SELECT b.OBJ_ID,c.OBJ_NAME,ifnull(sum(c.ACCESS_TIMES),0) TIMES FROM biz_model_detail b,biz_obj c WHERE b.obj_id=c.obj_id AND c.OBJ_TYPE=1";
-//        sql += " AND b.model_id=?";
-//        sql += " GROUP BY b.OBJ_ID,c.obj_name order by TIMES desc";
-//        List<Map<String, Object>> mdList = jdbcTemplate.queryForList(sql, modelId);
+//        依然得用模拟数据
         Map<String, Object> result = new HashMap<>(16);
         List<BizAccessVO> list = new ArrayList<>();
-        String[] names = {"服务", "出清", "结算", "合规", "发布"};
-        String[] objs = {"USER", "mysql", "redis", "job", "auth", "biz"};
-        int[] as = new int[6];
-        int[] es = new int[6];
-        for (int i = 0; i < as.length; i++) {
-            as[i] = new Random().nextInt(300);
-            es[i] = new Random().nextInt(80);
-        }
-        for (int i = 0; i < objs.length; i++) {
+
+        String sql = "SELECT b.OBJ_ID,c.OBJ_NAME FROM biz_model_detail b,biz_obj c WHERE b.obj_id=c.obj_id AND c.OBJ_TYPE=1";
+        sql += " AND b.model_id=?";
+        sql += " GROUP BY b.OBJ_ID,c.obj_name";
+
+        List<Map<String, Object>> objList = jdbcTemplate.queryForList(sql, modelId);
+        objList.forEach(map -> {
             BizAccessVO vo = new BizAccessVO();
-            String name = names[modelId.intValue() - 1];
-            vo.setModelName(name + "/" + objs[i]);
-            vo.setAccess((long) as[i]);
-            vo.setNum((long) es[i]);
+            Integer objId = (Integer) map.get("OBJ_ID");
+            String objName = (String) map.get("OBJ_NAME");
+            Vector<Object> v = new Vector<>();
+            v.add(objId);
+            String totSql = "SELECT IFNULL(SUM(D_VALUE),0) FROM biz_obj_metrics_data " +
+                    "WHERE obj_metrics_id IN(" +
+                    "SELECT obj_metrics_id FROM biz_obj_metrics" +
+                    " WHERE metrics_id =(SELECT metrics_id FROM metrics_def WHERE metrics_code='pp.tot')" +
+                    " AND obj_id =?)";
+            String errSql = "SELECT IFNULL(SUM(D_VALUE),0) FROM biz_obj_metrics_data " +
+                    "WHERE obj_metrics_id IN(" +
+                    "SELECT obj_metrics_id FROM biz_obj_metrics" +
+                    " WHERE metrics_id =(SELECT metrics_id FROM metrics_def WHERE metrics_code='pp.error')" +
+                    " AND obj_id =?)";
+
+            if (start != null && end != null) {
+                totSql += " AND CREATE_TIME BETWEEN ? AND ?";
+                errSql += " AND CREATE_TIME BETWEEN ? AND ?";
+                v.add(start);
+                v.add(end);
+            }
+
+            Long access = jdbcTemplate.queryForObject(totSql, Long.class, v.toArray());
+            Long num = jdbcTemplate.queryForObject(errSql, Long.class, v.toArray());
+
+            vo.setModelName(objName);
+            vo.setAccess(access);
+            vo.setNum(num);
             list.add(vo);
-        }
-        list.sort(Comparator.comparing(BizAccessVO::getAccess).reversed());
+        });
 
         List<Map<String, Object>> dataList = new ArrayList<>();
-        int[] max = new int[20];
-        int[] avg = new int[20];
-        int[] error = new int[20];
-        int hour = 14;
-        int mi = 0;
-        for (int i = 0; i < 20; i++) {
-            mi = mi + i;
-            if (mi >= 60) {
-                mi = 0;
-                hour++;
-            }
-            String time = hour + ":" + (mi < 10 ? "0" + mi : mi + "");
-            Map<String, Object> map = new HashMap<>();
-            map.put("time", time);
-            max[i] = new Random().nextInt(300);
-            avg[i] = new Random().nextInt(100);
-            error[i] = new Random().nextInt(15);
-            map.put("max", max[i]);
-            map.put("avg", avg[i]);
-            map.put("error", error[i]);
-
-            dataList.add(map);
+        //获取趋势
+        Vector<Object> v = new Vector<>();
+        String totSql = "SELECT CREATE_TIME,SUM(D_VALUE) MAX_V,AVG(D_VALUE) AVG_V FROM biz_obj_metrics_data " +
+                "WHERE obj_metrics_id IN(" +
+                "SELECT obj_metrics_id FROM biz_obj_metrics" +
+                " WHERE metrics_id =(SELECT metrics_id FROM metrics_def WHERE metrics_code='pp.tot')" +
+                " AND obj_id IN(SELECT obj_id FROM biz_model_detail WHERE model_id=?))";
+
+        String errSql = "SELECT CREATE_TIME,SUM(D_VALUE) D_VALUE FROM biz_obj_metrics_data " +
+                "WHERE obj_metrics_id IN(" +
+                "SELECT obj_metrics_id FROM biz_obj_metrics" +
+                " WHERE metrics_id =(SELECT metrics_id FROM metrics_def WHERE metrics_code='pp.error')" +
+                " AND obj_id IN(SELECT obj_id FROM biz_model_detail WHERE model_id=?))";
+        v.add(modelId);
+        if (start != null && end != null) {
+            totSql += " AND CREATE_TIME BETWEEN ? AND ?";
+            errSql += " AND CREATE_TIME BETWEEN ? AND ?";
+            v.add(start);
+            v.add(end);
         }
 
+        totSql += " group by create_time";
+        errSql += " group by create_time";
+
+        List<Map<String, Object>> totList = jdbcTemplate.queryForList(totSql, v.toArray());
+        List<Map<String, Object>> errList = jdbcTemplate.queryForList(errSql, v.toArray());
+        AtomicInteger index = new AtomicInteger();
+        totList.forEach(map -> {
+            Map<String, Object> errMap = errList.get(index.get());
+            Map<String, Object> data = new HashMap<>(16);
+            LocalDateTime time = (LocalDateTime) map.get("CREATE_TIME");
+            String formatTime = time.format(DateTimeFormatter.ofPattern("MM-dd HH:mm"));
+            BigDecimal error = (BigDecimal) errMap.get("D_VALUE");
+            BigDecimal max = (BigDecimal) map.get("MAX_V");
+            BigDecimal avg = (BigDecimal) map.get("AVG_V");
+            data.put("time", formatTime);
+            data.put("max", max);
+            data.put("avg", avg.setScale(2, RoundingMode.HALF_UP));
+            data.put("error", error);
+            dataList.add(data);
+            index.getAndIncrement();
+        });
+
+
+        list.sort(Comparator.comparing(BizAccessVO::getAccess).reversed());
         result.put("objs", list);
         result.put("datas", dataList);
         return AjaxResult.success(result);