소스 검색

新增 创建压测测试数据接口

miaolijing 3 년 전
부모
커밋
e1fe32af44

+ 7 - 1
src/main/java/com/persagy/apm/diagnose/feign/client/AlarmServiceClient.java

@@ -1,14 +1,17 @@
 package com.persagy.apm.diagnose.feign.client;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.apm.diagnose.feign.AlarmResult;
+import com.persagy.apm.diagnose.maintenance.model.dto.QueryAlarmProjectDTO;
 import com.persagy.apm.diagnose.service.dto.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 
-//@FeignClient(name = "energy-alarm-service",url = "http://localhost:9977")
+//@FeignClient(name = "energy-alarm-service",url = "http://localhost:9977/")
+//@FeignClient(name = "energy-alarm-service",url = "http://develop.persagy.com")
 @FeignClient(name = "energy-alarm-service")
 public interface AlarmServiceClient {
 
@@ -31,4 +34,7 @@ public interface AlarmServiceClient {
 
     @PostMapping("/alarmConditions/query_by_obj_and_itemcode")
     AlarmResult<JSONObject> queryByObjAndItemCode(@RequestBody QueryAlarmConditionByObjDTO queryAlarmConditionByObjDTO) throws Exception;
+
+    @PostMapping("pressure_measurement/query_project")
+    AlarmResult<JSONArray> queryProject(@RequestBody QueryAlarmProjectDTO queryAlarmProjectDTO) throws Exception;
 }

+ 69 - 2
src/main/java/com/persagy/apm/diagnose/maintenance/controller/MaintenanceController.java

@@ -4,20 +4,34 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.apm.diagnose.config.RabbitConfig;
 import com.persagy.apm.diagnose.constant.AlarmConstants;
+import com.persagy.apm.diagnose.indicatorrecord.model.dto.QueryMonitorIndicatorRecordDTO;
+import com.persagy.apm.diagnose.indicatorrecord.service.IMonitorIndicatorRecordService;
 import com.persagy.apm.diagnose.maintenance.constant.EnumAlarmItem;
 import com.persagy.apm.diagnose.maintenance.constant.EnumMaintenanceIndicatorType;
+import com.persagy.apm.diagnose.maintenance.model.dto.AlarmProjectDTO;
+import com.persagy.apm.diagnose.maintenance.model.dto.CreatePMDataDTO;
+import com.persagy.apm.diagnose.service.EnergyAlarmServiceImpl;
+import com.persagy.apm.diagnose.service.SaasWebServiceImpl;
+import com.persagy.apm.diagnose.service.dto.AlarmRuleDTO;
+import com.persagy.apm.diagnose.service.dto.ProjectDTO;
+import com.persagy.apm.diagnose.utils.DateUtils;
 import com.persagy.apm.diagnose.utils.RedisLock;
 import com.persagy.apm.diagnose.utils.RedisUtil;
+import com.persagy.framework.ems.data.pojo.hbase.MonitorIndicatorRecord;
 import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.LinkedHashMap;
-import java.util.Map;
+import javax.validation.Valid;
+import java.util.*;
 
+@Slf4j
 @Api(tags = "维保数据历史记录")
 @Validated
 @RestController
@@ -29,6 +43,59 @@ public class MaintenanceController {
     private RedisUtil redisUtil;
     @Autowired
     private RabbitConfig rabbitConfig;
+    @Autowired
+    private EnergyAlarmServiceImpl energyAlarmService;
+    @Autowired
+    private IMonitorIndicatorRecordService monitorIndicatorRecordService;
+    //创建压测 数据
+    @PostMapping("/createDataPM")
+    public void createPMData(@Valid @RequestBody CreatePMDataDTO createPMDataDTO) throws Exception {
+        String startTime = createPMDataDTO.getStartTime();
+        String endTime = createPMDataDTO.getEndTime();
+        Date startDate = DateUtils.str2Date(startTime,DateUtils.SDF_SECOND);
+        Date endDate = DateUtils.str2Date(endTime,DateUtils.SDF_SECOND);
+        log.info("开始创造压测测试数据,时间范围:{}~~~{}",startTime,endTime);
+        //查询项目列表
+        List<AlarmProjectDTO> alarmProjectDTOList = energyAlarmService.getAlarmProjectDTOList();
+        int count = 0;
+        if (!CollectionUtils.isEmpty(alarmProjectDTOList)){
+            log.info("共有{}个项目需要创建压测测试数据", alarmProjectDTOList.size());
+            for (AlarmProjectDTO projectDTO:alarmProjectDTOList) {
+                //通过报警服务查询报警规则
+                List<AlarmRuleDTO> projectAlarmRules = energyAlarmService.getProjectAlarmRules(projectDTO.getProjectId());
+                for (AlarmRuleDTO projectAlarmRule : projectAlarmRules) {
+                    List<String> objIds = projectAlarmRule.getObjIds();
+                    if (CollectionUtils.isEmpty(objIds)) {
+                        continue;
+                    }
+                    List<String> infoCodes = projectAlarmRule.getInfoCodes();
+                    if (CollectionUtils.isEmpty(infoCodes)) {
+                        continue;
+                    }
+                    for (String infoCode : infoCodes) {
+                        for (String objId : objIds) {
+                            for (Date start = startDate; start.before(endDate);start = DateUtils.addMinutes(start,15)) {
+                                int num = (int) (Math.random()*100);
+                                //构造实体对象
+                                MonitorIndicatorRecord monitorIndicatorRecord = new MonitorIndicatorRecord();
+                                monitorIndicatorRecord.setProject(projectDTO.getProjectId());
+                                monitorIndicatorRecord.setObjId(objId);
+                                monitorIndicatorRecord.setMonitorIndicatorId(infoCode);
+                                monitorIndicatorRecord.setDataTime(start);
+                                monitorIndicatorRecord.setDataValue(Double.valueOf(num));
+                                monitorIndicatorRecordService.saveOrUpdateByPk(monitorIndicatorRecord);
+                            }
+                        }
+                        Thread.sleep(5);
+                    }
+                }
+                count++;
+                Thread.sleep(5);
+                log.info("已完成{}个项目的压测测试数据创建, 剩余{}个项目的压测测试数据待创建", count, alarmProjectDTOList.size() - count);
+            }
+        }
+    }
+
 
     @PostMapping("/sendData")
     public void sendData() throws Exception {

+ 24 - 0
src/main/java/com/persagy/apm/diagnose/maintenance/model/dto/AlarmProjectDTO.java

@@ -0,0 +1,24 @@
+package com.persagy.apm.diagnose.maintenance.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 易涛
+ * @version 1.0
+ * @date 2021/9/8 11:32
+ */
+@ApiModel(value = "项目")
+@Data
+public class AlarmProjectDTO {
+
+    @ApiModelProperty("集团编码")
+    private String groupCode;
+
+    @ApiModelProperty("项目名称")
+    private String projectName;
+
+    @ApiModelProperty("项目id")
+    private String projectId;
+}

+ 21 - 0
src/main/java/com/persagy/apm/diagnose/maintenance/model/dto/CreatePMDataDTO.java

@@ -0,0 +1,21 @@
+package com.persagy.apm.diagnose.maintenance.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@Builder(toBuilder=true)
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CreatePMDataDTO {
+    private String groupCode;
+    private String userId;
+    private String pd;
+    private String startTime;
+    private String endTime;
+}

+ 19 - 0
src/main/java/com/persagy/apm/diagnose/maintenance/model/dto/QueryAlarmProjectDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.diagnose.maintenance.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@Builder(toBuilder=true)
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class QueryAlarmProjectDTO {
+    private String groupCode;
+    private String userId;
+    private String pd;
+}

+ 12 - 0
src/main/java/com/persagy/apm/diagnose/service/EnergyAlarmServiceImpl.java

@@ -2,11 +2,14 @@ package com.persagy.apm.diagnose.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.mysql.cj.xdevapi.JsonArray;
 import com.persagy.apm.common.model.vo.SimpleObjVO;
 import com.persagy.apm.diagnose.feign.AlarmResult;
 import com.persagy.apm.diagnose.feign.client.AlarmServiceClient;
 import com.persagy.apm.diagnose.indicatorrecord.service.impl.MonitorIndicatorRecordServiceImpl;
 import com.persagy.apm.diagnose.maintenance.model.dto.AlarmCondition;
+import com.persagy.apm.diagnose.maintenance.model.dto.AlarmProjectDTO;
+import com.persagy.apm.diagnose.maintenance.model.dto.QueryAlarmProjectDTO;
 import com.persagy.apm.diagnose.service.dto.*;
 import com.persagy.apm.diagnose.service.vo.MonitorIndicatorConfigVO;
 import com.persagy.apm.diagnose.utils.AlarmResultUtil;
@@ -201,4 +204,13 @@ public class EnergyAlarmServiceImpl {
         AlarmResult<JSONObject> result = alarmServiceClient.queryByObjAndItemCode(selDTO);
         return AlarmResultUtil.getRecords(result, AlarmCondition.class);
     }
+
+    public List<AlarmProjectDTO> getAlarmProjectDTOList()throws Exception{
+        QueryAlarmProjectDTO selDTO = QueryAlarmProjectDTO.builder().build();
+        selDTO.setGroupCode(systemCode);
+        selDTO.setPd("123456");
+        selDTO.setUserId("systemId");
+        AlarmResult<JSONArray> result = alarmServiceClient.queryProject(selDTO);
+        return AlarmResultUtil.getJSONArrayRecords(result, AlarmProjectDTO.class);
+    }
 }

+ 10 - 0
src/main/java/com/persagy/apm/diagnose/utils/AlarmResultUtil.java

@@ -3,6 +3,8 @@ package com.persagy.apm.diagnose.utils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.apm.diagnose.feign.AlarmResult;
+import org.apache.commons.collections.CollectionUtils;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -27,4 +29,12 @@ public class AlarmResultUtil {
         }
         return records.toJavaList(clazz);
     }
+
+    public static <T> List<T> getJSONArrayRecords(AlarmResult<JSONArray> result, Class<T> clazz) {
+        JSONArray contentArray = result.getContent();
+        if (CollectionUtils.isEmpty(contentArray)) {
+            return new ArrayList<T>();
+        }
+        return contentArray.toJavaList(clazz);
+    }
 }