Files
nbi_alarm/handle/service/sysn_alarm_file.go
2023-08-24 17:01:39 +08:00

140 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package service
import (
"bytes"
"encoding/binary"
"encoding/json"
"errors"
"omc/core"
"omc/core/db"
"omc/core/file"
"omc/handle/model"
"time"
"github.com/aceld/zinx/ziface"
)
var AckSyncAlarmFileResultMsgID uint32 = 9
func GenFile(request ziface.IRequest, meta *file.FileMeta, data []model.OmcAlarm) {
//生成文件内容
dataBuff := bytes.NewBuffer([]byte{})
for _, v := range data {
b, _ := json.Marshal(v)
binary.Write(dataBuff, binary.BigEndian, b)
binary.Write(dataBuff, binary.BigEndian, '\r')
binary.Write(dataBuff, binary.BigEndian, '\n')
}
file, err := file.GenFile(meta, dataBuff.Bytes())
if err != nil {
return
}
//发送文件同步信息
msgData := core.Result("ackSyncOmcAlarmFileResult", map[string]string{
"reqId": meta.ReqId,
"result": "succ",
"fileName": file,
"resDesc": "",
})
request.GetConnection().SendMsg(AckSyncAlarmFileResultMsgID, msgData)
}
// GetAlarmOfAlarmSeq 获取告警信息
func GetAlarmOfAlarmSeq(neType, neId string, alarmSeq int) ([]model.OmcAlarm, error) {
var alarms []model.Alarm
query := db.Client.Model(&model.Alarm{}).Where("ne_type = ? and ne_id = ? and alarm_seq > ?", neType, neId, alarmSeq)
if err := query.Order("alarm_seq asc").Find(&alarms).Error; err != nil {
return nil, err
}
return ConvertOMCAlarm(alarms), nil
}
//GetAlarm
/*
1 如果syncSource=1 && alarmSeq 为空: 从北向告警上报日志中(nbi_alarm_log)取数据ID然后反查告警信息表(alarm)取出告警日志
2 其他情况: 从告警信息表中取数据, 数据来源为设备告警事件
*/
func GetAlarm(neType, neId, startTime, endTime, syncSource string, alarmSeq int) ([]model.OmcAlarm, error) {
if syncSource == "0" {
return GetAlarmOfEventTime(neType, neId, startTime, endTime)
} else {
if alarmSeq > 0 {
return GetAlarmOfAlarmSeq(neType, neId, alarmSeq)
} else {
return GetAlarmOfLog(neType, neId, startTime, endTime)
}
}
}
// GetAlarmOfEventTime 获取告警信息
func GetAlarmOfEventTime(neType, neId, startTime, endTime string) ([]model.OmcAlarm, error) {
var alarms []model.Alarm
var result []model.OmcAlarm
if startTime == "" && endTime == "" {
return result, nil
}
query := db.Client.Model(&model.Alarm{}).Where("ne_type = ? and ne_id = ?", neType, neId)
if startTime != "" {
t1, err := time.Parse("2006-01-02 15:04:05", startTime)
if err != nil {
return nil, errors.New("startTime invalid")
}
query = query.Where("event_time > ?", t1)
}
if endTime != "" {
t2, err := time.Parse("2006-01-02 15:04:05", endTime)
if err != nil {
return nil, errors.New("endTime invalid")
}
query = query.Where("event_time < ?", t2)
}
if err := query.Order("alarm_seq asc").Find(&alarms).Error; err != nil {
return nil, err
}
return ConvertOMCAlarm(alarms), nil
}
// GetAlarmOfLog 获取告警信息
func GetAlarmOfLog(neType, neId, startTime, endTime string) ([]model.OmcAlarm, error) {
var alarms []model.Alarm
if startTime == "" && endTime == "" {
return []model.OmcAlarm{}, nil
}
var aIDs []int64
query := db.Client.Model(&model.NbiAlarmLog{}).Select("distinct a_id").Where("ne_type = ? and ne_id = ?", neType, neId)
if startTime != "" {
t1, err := time.Parse("2006-01-02 15:04:05", startTime)
if err != nil {
return nil, errors.New("startTime invalid")
}
query = query.Where("log_time >= ?", t1)
}
if endTime != "" {
t2, err := time.Parse("2006-01-02 15:04:05", endTime)
if err != nil {
return nil, errors.New("endTime invalid")
}
query = query.Where("log_time <= ?", t2)
}
if err := query.Order("alarm_seq asc").Find(&aIDs).Error; err != nil {
return nil, err
}
if err := db.Client.Model(&model.Alarm{}).Where("id in (?)", aIDs).Find(&alarms).Error; err != nil {
return nil, err
}
return ConvertOMCAlarm(alarms), nil
}