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.IntCompare;
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.ApiModelProperty;
import lombok.AllArgsConstructor;
@ -13,11 +15,15 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
@ -118,8 +124,31 @@ public class WarnRule {
return false;
}
// 是否触发
// 单个数据是否触发
public boolean triggerRule(Object value) {
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.WarnRule;
import com.xydl.cac.entity.Warning;
import com.xydl.cac.model.TriggerModel;
import com.xydl.cac.repository.WarnRuleRepository;
import com.xydl.cac.repository.WarningRepository;
import com.xydl.cac.service.DataService;
@ -13,7 +14,6 @@ import com.xydl.cac.util.DingTalkPushUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
@ -55,26 +55,19 @@ public class RuleCheckTask {
List<ModevTypePoint> points = new ArrayList<>();
points.add(typePoint);
List<Map<String, Object>> list = dataService.getLatestData(sensor, points, rule.getLastDTime());
if (!CollectionUtils.isEmpty(list)) {
Date date = 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);
List<TriggerModel> warnList = rule.checkData(list);
if (warnList != null) {
ruleRepository.save(rule);
for (TriggerModel model : warnList) {
this.sendWarning(rule, model);
}
}
} catch (Exception 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();
ModevTypePoint typePoint = rule.getTypePoint();
Warning warning = Warning.builder()
@ -83,9 +76,9 @@ public class RuleCheckTask {
.zsbName(sensor.getZsbName())
.ruleId(rule.getId())
.field(typePoint.getField())
.dTime(date)
.dTime(model.getDate())
.threshold(rule.getThreshold())
.warnValue(value)
.warnValue(model.getValue())
.warnLevel(rule.getLevel())
.state("1")
.warnDesc(sensor.getName() + " " + typePoint.getFieldDesc() + " 告警")
@ -95,7 +88,7 @@ public class RuleCheckTask {
.build();
warningRepository.save(warning);
String str = warning.getZsbName() + "-" + warning.getWarnDesc()
+ ", 采集时间:" + dateStr + ", 当前值:" + value + " " + warning.getTriggerDesc();
+ ", 采集时间:" + DateUtil.format(model.getDate()) + ", 当前值:" + model.getValue() + " " + warning.getTriggerDesc();
log.warn("触发规则告警: " + str);
webSocketServer.sendMessage(str);
dingTalkPushUtil.pushText(str);

Loading…
Cancel
Save