add: parameter config support alarm forward config

This commit is contained in:
2024-09-06 10:49:22 +08:00
parent 86ae0779ef
commit 388729bf09
13 changed files with 497 additions and 77 deletions

View File

@@ -0,0 +1,46 @@
package cm_omc
import (
"fmt"
"net/http"
"be.ems/lib/services"
"github.com/gin-gonic/gin"
)
func (o *ConfigOMC) Get(c *gin.Context) {
paramName := c.Param("paramName")
results, err := o.Query(paramName)
if err != nil {
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
return
}
c.JSON(http.StatusOK, services.DataResp(results))
}
func (o *ConfigOMC) Post(c *gin.Context) {
err := fmt.Errorf("method not allowed")
c.JSON(http.StatusMethodNotAllowed, services.ErrResp(err.Error()))
}
func (o *ConfigOMC) Put(c *gin.Context) {
paramName := c.Param("paramName")
var paramData map[string]any
if err := c.ShouldBindJSON(&paramData); err != nil {
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
return
}
result, err := o.Modify(paramName, paramData)
if err != nil {
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
return
}
c.JSON(http.StatusOK, services.DataResp(result))
}
func (o *ConfigOMC) Delete(c *gin.Context) {
err := fmt.Errorf("method not allowed")
c.JSON(http.StatusMethodNotAllowed, services.ErrResp(err.Error()))
}

View File

@@ -0,0 +1,69 @@
package cm_omc
import (
"fmt"
"be.ems/restagent/config"
)
const (
PASSWORD_MASK = "********"
)
func (o *ConfigOMC) Query(paramName string) (any, error) {
var results []any
switch paramName {
case "alarmEmailForward":
result := config.GetYamlConfig().Alarm.EmailForward
result.Password = PASSWORD_MASK
results = append(results, result)
case "alarmSMSForward":
result := config.GetYamlConfig().Alarm.SMSCForward
result.Password = PASSWORD_MASK
results = append(results, result)
default:
return nil, fmt.Errorf("invalid source parameter")
}
return results, nil
}
func (o *ConfigOMC) Add() {
}
func (o *ConfigOMC) Modify(paramName string, paramData map[string]any) (any, error) {
var results []any
switch paramName {
case "alarmEmailForward":
param := &(config.GetYamlConfig().Alarm.EmailForward)
config.UpdateStructFromMap(param, paramData)
result := *param
results = append(results, result)
err := config.WriteOrignalConfig(config.YamlConfigInfo.FilePath, paramName, paramData)
if err != nil {
fmt.Println("failed to write config yaml file:", err)
return results, err
}
case "alarmSMSForward":
param := &(config.GetYamlConfig().Alarm.SMSCForward)
config.UpdateStructFromMap(param, paramData)
result := *param
results = append(results, result)
err := config.WriteOrignalConfig(config.YamlConfigInfo.FilePath, paramName, paramData)
if err != nil {
fmt.Println("failed to write config yaml file:", err)
return results, err
}
default:
return nil, fmt.Errorf("invalid source parameter")
}
return results, nil
}
func (o *ConfigOMC) Remove() {
}

26
features/cm/omc/model.go Normal file
View File

@@ -0,0 +1,26 @@
package cm_omc
type ConfigOMC struct{}
type SystemConfig struct {
ForwardFlag bool `json:"forwardFlag"`
}
type AlarmEmailForward struct {
Enable bool `json:"enable"`
EmailList string `json:"emailList"`
SMTP string `json:"smtp"`
Port uint16 `json:"port"`
User string `json:"user"`
Password string `json:"password"`
TLSSkipVerify bool `json:"tlsSkipVerify"`
}
type AlarmSMSForward struct {
Enable bool `json:"enable"`
MobileList string `json:"mobileList"`
SMSCAddr string `json:"smscAddr"`
SystemID string `json:"systemID"`
Password string `json:"password"`
SystemType string `json:"systemType"`
}

30
features/cm/omc/route.go Normal file
View File

@@ -0,0 +1,30 @@
package cm_omc
import (
"be.ems/src/framework/middleware"
"github.com/gin-gonic/gin"
)
// Register Routes for file_export
func Register(r *gin.RouterGroup) {
cmOMC := r.Group("/omc")
{
var o *ConfigOMC
cmOMC.GET("/config/:paramName",
middleware.PreAuthorize(nil),
o.Get,
)
cmOMC.POST("/config/:paramName",
middleware.PreAuthorize(nil),
o.Post,
)
cmOMC.PUT("/config/:paramName",
middleware.PreAuthorize(nil),
o.Put,
)
cmOMC.DELETE("/config/:paramName",
middleware.PreAuthorize(nil),
o.Delete,
)
}
}

17
features/cm/service.go Normal file
View File

@@ -0,0 +1,17 @@
package cm
import (
cm_omc "be.ems/features/cm/omc"
"be.ems/lib/log"
"github.com/gin-gonic/gin"
)
func InitSubServiceRoute(r *gin.Engine) {
log.Info("======init PM group gin.Engine")
cmGroup := r.Group("/cm")
// register sub modules routes
cm_omc.Register(cmGroup)
// return featuresGroup
}

View File

@@ -1,6 +1,7 @@
package features
import (
"be.ems/features/cm"
"be.ems/features/lm"
"be.ems/features/pm"
"be.ems/lib/log"
@@ -14,6 +15,7 @@ func InitServiceEngine(r *gin.Engine) {
// 注册 各个features 模块的路由
pm.InitSubServiceRoute(r)
lm.InitSubServiceRoute(r)
cm.InitSubServiceRoute(r)
// return featuresGroup
}

View File

@@ -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)
}
@@ -776,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

@@ -99,22 +99,23 @@ func AlarmForwardBySMS(alarmData *Alarm) (string, error) {
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, ",")
// 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 := config.GetYamlConfig().Alarm.SMSCForward.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: config.GetYamlConfig().Alarm.SMSCForward.SMSCAddr,
SystemID: config.GetYamlConfig().Alarm.SMSCForward.SystemID,
Password: config.GetYamlConfig().Alarm.SMSCForward.Password,
SystemType: config.GetYamlConfig().Alarm.SMSCForward.SystemType,
}
// conn, err := gosmpp.NonTLSDialer(auth.SMSC)