marge: 合并11.2版本

This commit is contained in:
TsMask
2024-11-22 10:06:51 +08:00
parent 86ba2fb4a6
commit 1bdb13a2ab
67 changed files with 3536 additions and 3765 deletions

View File

@@ -435,7 +435,7 @@ func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) {
SetAlarmAckInfo(valueJson, &alarmData)
}
log.Trace("alarmData:", alarmData)
if alarmData.OrigSeverity == "Event" && config.GetYamlConfig().Alarm.SplitEventAlarm {
if (alarmData.OrigSeverity == "Event" || alarmData.OrigSeverity == "5") && config.GetYamlConfig().Alarm.SplitEventAlarm {
affected, err := xEngine.Table("alarm_event").InsertOne(alarmData)
if err != nil && affected <= 0 {
log.Error("Failed to insert alarm_event:", err)
@@ -466,10 +466,12 @@ func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) {
}
session.Commit()
}
if config.GetYamlConfig().Alarm.ForwardAlarm {
if config.GetYamlConfig().Alarm.EmailForward.Enable {
if err = AlarmEmailForward(&alarmData); err != nil {
log.Error("Failed to AlarmEmailForward:", err)
}
}
if config.GetYamlConfig().Alarm.SMSCForward.Enable {
if err = AlarmSMSForward(&alarmData); err != nil {
log.Error("Failed to AlarmSMSForward:", err)
}
@@ -593,7 +595,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
exist, err := session.Table("alarm").
Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
Exist()
if err == nil || !exist {
if err != nil || !exist {
log.Infof("Not found active alarm: ne_id=%s, alarm_id=%s", alarmData.NeId, alarmData.AlarmId)
continue
}
@@ -737,9 +739,10 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
}
}
evenTime := global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
alarmData.ObjectUid = alarmData.NeId
alarmData.ObjectType = "VNFM"
alarmData.EventTime = global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
alarmData.EventTime = evenTime
if IsNeedToAckAlarm(valueJson, &alarmData) {
SetAlarmAckInfo(valueJson, &alarmData)
}
@@ -766,8 +769,8 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
alarmLog.AlarmId = alarmData.AlarmId
alarmLog.AlarmCode = alarmData.AlarmCode
alarmLog.AlarmStatus = alarmData.AlarmStatus
alarmLog.EventTime = global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
log.Debug("alarmLog:", alarmLog)
alarmLog.EventTime = evenTime
log.Trace("alarmLog:", alarmLog)
affected, err = session.Insert(alarmLog)
if err != nil && affected <= 0 {
log.Error("Failed to insert data:", err)
@@ -775,10 +778,12 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
continue
}
session.Commit()
if config.GetYamlConfig().Alarm.ForwardAlarm {
if config.GetYamlConfig().Alarm.EmailForward.Enable {
if err = AlarmEmailForward(&alarmData); err != nil {
log.Error("Failed to AlarmEmailForward:", err)
}
}
if config.GetYamlConfig().Alarm.SMSCForward.Enable {
if err = AlarmSMSForward(&alarmData); err != nil {
log.Error("Failed to AlarmSMSForward:", err)
}

View File

@@ -2,7 +2,6 @@ package fm
import (
"crypto/tls"
"errors"
"fmt"
"strings"
@@ -48,25 +47,25 @@ func AlarmEmailForward(alarmData *Alarm) error {
// userName := "smtpext@agrandtech.com"
// password := "1000smtp@omc!"
host := config.GetYamlConfig().Alarm.Email.Smtp
port := int(config.GetYamlConfig().Alarm.Email.Port)
userName := config.GetYamlConfig().Alarm.Email.User
password := config.GetYamlConfig().Alarm.Email.Password
host := config.GetYamlConfig().Alarm.EmailForward.SMTP
port := int(config.GetYamlConfig().Alarm.EmailForward.Port)
userName := config.GetYamlConfig().Alarm.EmailForward.User
password := config.GetYamlConfig().Alarm.EmailForward.Password
m := gomail.NewMessage()
m.SetHeader("From", userName) // 发件人
//m.SetHeader("From", "alias"+"<"+"aliastest"+">") // 增加发件人别名
emails, err := dborm.XormGetAlarmForward("Email")
if err != nil {
log.Error("Failed to XormGetAlarmForward:", err)
return err
} else if emails == nil || len(*emails) == 0 {
err := errors.New("not found forward email list")
log.Error(err)
return err
}
// emails, err := dborm.XormGetAlarmForward("Email")
// if err != nil {
// log.Error("Failed to XormGetAlarmForward:", err)
// return err
// } else if emails == nil || len(*emails) == 0 {
// err := errors.New("not found forward email list")
// log.Error(err)
// return err
// }
emails := strings.Split(config.GetYamlConfig().Alarm.EmailForward.EmailList, ",")
forwardLog := &dborm.AlarmForwardLog{
NeType: alarmData.NeType,
NeID: alarmData.NeId,
@@ -74,10 +73,10 @@ func AlarmEmailForward(alarmData *Alarm) error {
AlarmTitle: alarmData.AlarmTitle,
AlarmSeq: alarmData.AlarmSeq,
EventTime: alarmData.EventTime,
ToUser: strings.Join(*emails, ","),
ToUser: config.GetYamlConfig().Alarm.EmailForward.EmailList,
}
m.SetHeader("To", *emails...) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
m.SetHeader("To", emails...) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
//m.SetHeader("To", strings.Join(*emails, " ")) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
//m.SetHeader("To", "zhangshuzhong@agrandtech.com", "simonzhangsz@outlook.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
//m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个
@@ -103,7 +102,7 @@ func AlarmEmailForward(alarmData *Alarm) error {
)
// 关闭SSL协议认证
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
if !config.GetYamlConfig().Alarm.Email.TlsSkipVerify {
if !config.GetYamlConfig().Alarm.EmailForward.TLSSkipVerify {
// 打开SSL协议认证
d.TLSConfig = &tls.Config{InsecureSkipVerify: false}
}

View File

@@ -90,36 +90,24 @@ func AlarmForwardBySMS(alarmData *Alarm) (string, error) {
case http.StatusOK, http.StatusAccepted, http.StatusNoContent, http.StatusCreated:
return userList, nil
default:
err := fmt.Errorf("Failed to send SMS: %s(Code=%d)", resp.Status, resp.StatusCode)
log.Error(err)
log.Error(fmt.Errorf("failed to send SMS: %s(Code=%d)", resp.Status, resp.StatusCode))
return userList, err
}
}
var smsForward = &(config.GetYamlConfig().Alarm.SMSCForward)
func AlarmForwardBySMPP(alarmData *Alarm) (string, error) {
log.Info("AlarmForwardBySMPP processing... ")
toUsers, err := dborm.XormGetAlarmForward("SMS")
if err != nil {
log.Error("Failed to XormGetAlarmForward:", err)
return "", err
} else if toUsers == nil {
err := errors.New("not found forward phone number")
log.Error(err)
return "", err
}
userList := strings.Join(*toUsers, ",")
userList := smsForward.MobileList
auth := gosmpp.Auth{
SMSC: config.GetYamlConfig().Alarm.SMSC.Addr,
SystemID: config.GetYamlConfig().Alarm.SMSC.SystemID,
Password: config.GetYamlConfig().Alarm.SMSC.Password,
SystemType: config.GetYamlConfig().Alarm.SMSC.SystemType,
SMSC: smsForward.SMSCAddr,
SystemID: smsForward.SystemID,
Password: smsForward.Password,
SystemType: smsForward.SystemType,
}
// conn, err := gosmpp.NonTLSDialer(auth.SMSC)
// connection := gosmpp.NewConnection(conn)
trans, err := gosmpp.NewSession(
gosmpp.TXConnector(gosmpp.NonTLSDialer, auth),
gosmpp.Settings{
@@ -149,17 +137,22 @@ func AlarmForwardBySMPP(alarmData *Alarm) (string, error) {
_ = trans.Close()
}()
// sending SMS(s)
// var results []string
// for _, toUser := range *toUsers {
message := "Alarm Notification: " + alarmData.AlarmTitle + " from " + alarmData.NeType + " " + alarmData.NeId + " at " + alarmData.EventTime
if err = trans.Transceiver().Submit(newSubmitSM(userList, message)); err != nil {
// result := fmt.Sprintf("Failed to submit %s hort message:%s", toUser, err.Error())
// results = append(results, result)
log.Error("Failed to submit hort message:", err)
return userList, err
message := "Alarm Notification: " + alarmData.AlarmTitle + " from " + alarmData.NeType + "_" + alarmData.NeId + " at " + alarmData.EventTime
for _, user := range strings.Split(userList, ",") {
sm, err := newSubmitSM(user, message)
if err != nil {
log.Errorf("Failed to newSubmitSM %s short message: %v", user, err)
writeLog(alarmData, user, "SMS", err)
continue
}
if err = trans.Transceiver().Submit(sm); err != nil {
log.Errorf("Failed to Submit %s short message: %v", user, err)
writeLog(alarmData, user, "SMS", err)
continue
}
writeLog(alarmData, user, "SMS", nil)
}
// }
return userList, nil
}
@@ -190,61 +183,58 @@ func writeLog(alarmData *Alarm, toUser, forwardBy string, err error) error {
return nil
}
func handlePDU() func(pdu.PDU) (pdu.PDU, bool) {
return func(p pdu.PDU) (pdu.PDU, bool) {
switch pd := p.(type) {
case *pdu.Unbind:
log.Trace("Unbind Received")
return pd.GetResponse(), true
case *pdu.UnbindResp:
log.Trace("UnbindResp Received")
case *pdu.SubmitSMResp:
log.Trace("SubmitSMResp Received")
case *pdu.GenericNack:
log.Trace("GenericNack Received")
case *pdu.EnquireLinkResp:
fmt.Println("EnquireLinkResp Received")
case *pdu.EnquireLink:
log.Trace("EnquireLink Received")
return pd.GetResponse(), false
case *pdu.DataSM:
log.Trace("DataSM receiver")
return pd.GetResponse(), false
case *pdu.DeliverSM:
log.Trace("DeliverSM receiver")
return pd.GetResponse(), false
}
return nil, false
}
}
func newSubmitSM(phoneNumber string, message string) *pdu.SubmitSM {
func newSubmitSM(phoneNumber string, message string) (*pdu.SubmitSM, error) {
// build up submitSM
srcAddr := pdu.NewAddress()
srcAddr.SetTon(5)
srcAddr.SetNpi(0)
_ = srcAddr.SetAddress("alarm notification:")
err := srcAddr.SetAddress(smsForward.ServiceNumber)
if err != nil {
return nil, err
}
destAddr := pdu.NewAddress()
destAddr.SetTon(1)
destAddr.SetNpi(1)
_ = destAddr.SetAddress(phoneNumber)
err = destAddr.SetAddress(phoneNumber)
if err != nil {
return nil, err
}
submitSM := pdu.NewSubmitSM().(*pdu.SubmitSM)
submitSM.SourceAddr = srcAddr
submitSM.DestAddr = destAddr
_ = submitSM.Message.SetMessageWithEncoding(message, data.UCS2)
dataCoding := data.FromDataCoding(smsForward.DataCoding)
err = submitSM.Message.SetMessageWithEncoding(message, dataCoding)
if err != nil {
return nil, err
}
submitSM.ProtocolID = 0
submitSM.RegisteredDelivery = 1
submitSM.ReplaceIfPresentFlag = 0
submitSM.EsmClass = 0
return submitSM
return submitSM, nil
}
// const (
// // Short message data coding type
// SMS_CODING_GSM7BIT byte = iota
// SMS_CODING_ASCII
// SMS_CODING_BINARY8BIT1
// SMS_CODING_LATIN1
// SMS_CODING_BINARY8BIT2
// SMS_CODING_NODEF
// SMS_CODING_CYRILLIC
// SMS_CODING_HEBREW
// SMS_CODING_UCS2
// )
// var codingMap = map[byte]data.Encoding{
// SMS_CODING_GSM7BIT: data.GSM7BIT,
// SMS_CODING_ASCII: data.ASCII,
// SMS_CODING_BINARY8BIT1: data.BINARY8BIT1,
// SMS_CODING_LATIN1: data.LATIN1,
// SMS_CODING_BINARY8BIT2: data.BINARY8BIT2,
// SMS_CODING_CYRILLIC: data.CYRILLIC,
// SMS_CODING_HEBREW: data.HEBREW,
// SMS_CODING_UCS2: data.UCS2,
// }