|
@ -11,6 +11,7 @@ import ( |
|
|
"goInOut/monitors" |
|
|
"goInOut/monitors" |
|
|
"gopkg.in/yaml.v3" |
|
|
"gopkg.in/yaml.v3" |
|
|
"log" |
|
|
"log" |
|
|
|
|
|
"regexp" |
|
|
"strings" |
|
|
"strings" |
|
|
"sync" |
|
|
"sync" |
|
|
"time" |
|
|
"time" |
|
@ -145,6 +146,42 @@ func (the *consumerSavoirTheme) judgeOffline() { |
|
|
for _, theme := range allThemes { |
|
|
for _, theme := range allThemes { |
|
|
offlineMin := now.Sub(theme.CollectTime).Minutes() |
|
|
offlineMin := now.Sub(theme.CollectTime).Minutes() |
|
|
log.Printf("s:%d,f:%d,sensor:%d 离线%f min", gap.StructId, gap.FactorId, theme.Sensor, offlineMin) |
|
|
log.Printf("s:%d,f:%d,sensor:%d 离线%f min", gap.StructId, gap.FactorId, theme.Sensor, offlineMin) |
|
|
|
|
|
|
|
|
|
|
|
//拿到当前es最后一条数据和当前数据库的配置之后去查是否产生告警
|
|
|
|
|
|
StrValue := "80040003" |
|
|
|
|
|
alarmQueryStr := the.getEsAlarmValueStr(gap.StructId, StrValue) |
|
|
|
|
|
allAlarmThemes, err := the.OutEs.SearchAlarmThemeData("native_alarms", alarmQueryStr) |
|
|
|
|
|
log.Printf("allAlarmThemes----- > %s", allAlarmThemes) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Printf("查询es 异常") |
|
|
|
|
|
} |
|
|
|
|
|
for _, alarmTheme := range allAlarmThemes { |
|
|
|
|
|
detailPoint := extractSensorName(alarmTheme.Detail) |
|
|
|
|
|
if theme.SensorName == detailPoint { |
|
|
|
|
|
if offlineMin < float64(gap.OfflineGap) { |
|
|
|
|
|
prefix := "offline-" |
|
|
|
|
|
sourceId := prefix + fmt.Sprintf("%d-%d", gap.StructId, gap.FactorId) |
|
|
|
|
|
alarmMsg := models.KafkaAlarm{ |
|
|
|
|
|
MessageMode: "AlarmAutoElimination", |
|
|
|
|
|
StructureId: gap.StructId, |
|
|
|
|
|
StructureName: gap.StructName, |
|
|
|
|
|
SourceId: sourceId, |
|
|
|
|
|
SourceName: gap.StructName, |
|
|
|
|
|
AlarmTypeCode: "3004", |
|
|
|
|
|
AlarmCode: "********", |
|
|
|
|
|
Content: "", |
|
|
|
|
|
Time: time.Now().Format("2006-01-02T15:04:05+0800"), |
|
|
|
|
|
SourceTypeId: 2, // 0:DTU, 1:传感器, 2:测点
|
|
|
|
|
|
Sponsor: "goInOut_savoirTheme", |
|
|
|
|
|
Extras: nil, |
|
|
|
|
|
SubDevices: nil, |
|
|
|
|
|
} |
|
|
|
|
|
log.Printf("----- > 恢复告警已准备发送") |
|
|
|
|
|
payload, _ := json.Marshal(alarmMsg) |
|
|
|
|
|
the.InKafka.Publish(the.Info.IoConfig.In.Kafka.AlarmTopic, payload) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
if offlineMin > float64(gap.OfflineGap) { |
|
|
if offlineMin > float64(gap.OfflineGap) { |
|
|
msg := fmt.Sprintf("测点[%s]离线%f min > %d min", theme.SensorName, offlineMin, gap.OfflineGap) |
|
|
msg := fmt.Sprintf("测点[%s]离线%f min > %d min", theme.SensorName, offlineMin, gap.OfflineGap) |
|
|
log.Printf("----- > %s", msg) |
|
|
log.Printf("----- > %s", msg) |
|
@ -171,11 +208,55 @@ func (the *consumerSavoirTheme) judgeOffline() { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
payload, _ := json.Marshal(alarmMsg) |
|
|
payload, _ := json.Marshal(alarmMsg) |
|
|
the.InKafka.Publish("savoir_alarm", payload) |
|
|
the.InKafka.Publish(the.Info.IoConfig.In.Kafka.AlarmTopic, payload) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 提取方括号 [] 内的内容
|
|
|
|
|
|
func extractSensorName(alert string) string { |
|
|
|
|
|
// 正则表达式匹配方括号内的内容
|
|
|
|
|
|
re := regexp.MustCompile(`\[(.*?)\]`) |
|
|
|
|
|
match := re.FindStringSubmatch(alert) |
|
|
|
|
|
|
|
|
|
|
|
// 如果匹配成功,返回匹配的内容(即方括号内的字符串)
|
|
|
|
|
|
if len(match) > 1 { |
|
|
|
|
|
log.Printf("----- > %s", match[1]) |
|
|
|
|
|
return match[1] |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return "" // 如果没有匹配到,返回空字符串
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (the *consumerSavoirTheme) getEsAlarmValueStr(structId int, alarmCode string) string { |
|
|
|
|
|
|
|
|
|
|
|
esQuery := fmt.Sprintf(` |
|
|
|
|
|
{ |
|
|
|
|
|
"query": { |
|
|
|
|
|
"bool": { |
|
|
|
|
|
"must": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"term": { |
|
|
|
|
|
"structure_id": { |
|
|
|
|
|
"value": %d |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"term": { |
|
|
|
|
|
"alarm_code": { |
|
|
|
|
|
"value": %s |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
`, structId, alarmCode) |
|
|
|
|
|
return esQuery |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (the *consumerSavoirTheme) getESOfflineAlarmQueryStr(structId, factorId int) string { |
|
|
func (the *consumerSavoirTheme) getESOfflineAlarmQueryStr(structId, factorId int) string { |
|
|