perf: 调整规则一次检测多组数据

dev
huangfeng 12 months ago
parent 22de91940d
commit 1677aacaf8

@ -6,6 +6,8 @@ import com.xydl.cac.comparator.Comparator;
import com.xydl.cac.comparator.FloatCompare; import com.xydl.cac.comparator.FloatCompare;
import com.xydl.cac.comparator.IntCompare; import com.xydl.cac.comparator.IntCompare;
import com.xydl.cac.entity.constants.Constants; import com.xydl.cac.entity.constants.Constants;
import com.xydl.cac.model.TriggerModel;
import com.xydl.cac.util.DateUtil;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -13,11 +15,15 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map;
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
@Data @Data
@ -118,8 +124,31 @@ public class WarnRule {
return false; return false;
} }
// 是否触发 // 单个数据是否触发
public boolean triggerRule(Object value) { public boolean triggerRule(Object value) {
return actualComp.compare(value, threshold); return actualComp.compare(value, threshold);
} }
// 多数据触发返回告警数据
public List<TriggerModel> checkData(List<Map<String, Object>> list) throws Exception {
List<TriggerModel> result = null;
if (CollectionUtils.isEmpty(list)) {
} else {
result = new ArrayList<>();
for (Map<String, Object> map : list) {
String str = (String) map.get("acquisitionTime");
lastDTime = DateUtil.parse(str);
Object value = map.get(typePoint.getField());
boolean r = this.triggerRule(value);
if (r) {
TriggerModel model = new TriggerModel();
model.setDate(lastDTime);
model.setValue(String.valueOf(value));
result.add(model);
}
}
}
return result;
}
} }

@ -0,0 +1,11 @@
package com.xydl.cac.model;
import lombok.Data;
import java.util.Date;
@Data
public class TriggerModel {
private Date date;
private String value;
}

@ -4,6 +4,7 @@ import com.xydl.cac.entity.ModevTypePoint;
import com.xydl.cac.entity.NSensor; import com.xydl.cac.entity.NSensor;
import com.xydl.cac.entity.WarnRule; import com.xydl.cac.entity.WarnRule;
import com.xydl.cac.entity.Warning; import com.xydl.cac.entity.Warning;
import com.xydl.cac.model.TriggerModel;
import com.xydl.cac.repository.WarnRuleRepository; import com.xydl.cac.repository.WarnRuleRepository;
import com.xydl.cac.repository.WarningRepository; import com.xydl.cac.repository.WarningRepository;
import com.xydl.cac.service.DataService; import com.xydl.cac.service.DataService;
@ -13,7 +14,6 @@ import com.xydl.cac.util.DingTalkPushUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
@ -55,26 +55,19 @@ public class RuleCheckTask {
List<ModevTypePoint> points = new ArrayList<>(); List<ModevTypePoint> points = new ArrayList<>();
points.add(typePoint); points.add(typePoint);
List<Map<String, Object>> list = dataService.getLatestData(sensor, points, rule.getLastDTime()); List<Map<String, Object>> list = dataService.getLatestData(sensor, points, rule.getLastDTime());
if (!CollectionUtils.isEmpty(list)) { List<TriggerModel> warnList = rule.checkData(list);
Date date = null; if (warnList != null) {
for (Map<String, Object> map : list) {
String str = (String) map.get("acquisitionTime");
date = DateUtil.parse(str);
Object value = map.get(typePoint.getField());
boolean r = rule.triggerRule(value);
if (r) {
this.sendWarning(rule, date, str, String.valueOf(value));
}
}
rule.setLastDTime(date);
ruleRepository.save(rule); ruleRepository.save(rule);
for (TriggerModel model : warnList) {
this.sendWarning(rule, model);
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error("RuleCheckTask.ruleCheck error.", e); log.error("RuleCheckTask.ruleCheck error.", e);
} }
} }
private void sendWarning(WarnRule rule, Date date, String dateStr, String value) throws Exception { private void sendWarning(WarnRule rule, TriggerModel model) throws Exception {
NSensor sensor = rule.getNSensor(); NSensor sensor = rule.getNSensor();
ModevTypePoint typePoint = rule.getTypePoint(); ModevTypePoint typePoint = rule.getTypePoint();
Warning warning = Warning.builder() Warning warning = Warning.builder()
@ -83,9 +76,9 @@ public class RuleCheckTask {
.zsbName(sensor.getZsbName()) .zsbName(sensor.getZsbName())
.ruleId(rule.getId()) .ruleId(rule.getId())
.field(typePoint.getField()) .field(typePoint.getField())
.dTime(date) .dTime(model.getDate())
.threshold(rule.getThreshold()) .threshold(rule.getThreshold())
.warnValue(value) .warnValue(model.getValue())
.warnLevel(rule.getLevel()) .warnLevel(rule.getLevel())
.state("1") .state("1")
.warnDesc(sensor.getName() + " " + typePoint.getFieldDesc() + " 告警") .warnDesc(sensor.getName() + " " + typePoint.getFieldDesc() + " 告警")
@ -95,7 +88,7 @@ public class RuleCheckTask {
.build(); .build();
warningRepository.save(warning); warningRepository.save(warning);
String str = warning.getZsbName() + "-" + warning.getWarnDesc() String str = warning.getZsbName() + "-" + warning.getWarnDesc()
+ ", 采集时间:" + dateStr + ", 当前值:" + value + " " + warning.getTriggerDesc(); + ", 采集时间:" + DateUtil.format(model.getDate()) + ", 当前值:" + model.getValue() + " " + warning.getTriggerDesc();
log.warn("触发规则告警: " + str); log.warn("触发规则告警: " + str);
webSocketServer.sendMessage(str); webSocketServer.sendMessage(str);
dingTalkPushUtil.pushText(str); dingTalkPushUtil.pushText(str);

Loading…
Cancel
Save