feat: OMC配置修改通知参数

This commit is contained in:
TsMask
2025-07-15 15:14:05 +08:00
parent 88a6375b18
commit 9f6a7f3bb7
3 changed files with 153 additions and 44 deletions

View File

@@ -0,0 +1,30 @@
package config
import (
"fmt"
"os"
"regexp"
)
// SedReplace 替换文件内容文件来自外部文件配置config传入
//
// sed 's/port: [0-9]\+ # trace port/port: 6964 # trace port/' /usr/local/etc/omc/omc.yaml
func SedReplace(pattern, replacement string) error {
// 外部文件配置
externalConfig := conf.GetString("config")
if externalConfig == "" {
return fmt.Errorf("config file path not found")
}
// 读取文件内容
data, err := os.ReadFile(externalConfig)
if err != nil {
return err
}
// 定义正则表达式
re := regexp.MustCompile(pattern)
// 使用正则替换,将匹配到的部分替换为新的内容
replacedData := re.ReplaceAll(data, []byte(replacement))
// 写回文件
return os.WriteFile(externalConfig, replacedData, 0644)
}

View File

@@ -4,7 +4,6 @@ import (
"encoding/json"
"fmt"
cm_omc "be.ems/features/cm/omc"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
@@ -215,16 +214,6 @@ func (s NeConfigController) DataInfo(c *gin.Context) {
}
if query.NeType == "OMC" {
if query.ParamName == "alarmEmailForward" || query.ParamName == "alarmSMSForward" {
var o *cm_omc.ConfigOMC
resData, err := o.Query(query.ParamName)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
c.JSON(200, resp.OkData(resData))
return
}
resData := s.neConfigService.GetOMCYaml(query.ParamName)
c.JSON(200, resp.OkData(resData))
return
@@ -274,16 +263,6 @@ func (s NeConfigController) DataEdit(c *gin.Context) {
return
}
if body.NeType == "OMC" {
if body.ParamName == "alarmEmailForward" || body.ParamName == "alarmSMSForward" {
var o *cm_omc.ConfigOMC
resData, err := o.Modify(body.ParamName, body.ParamData)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
c.JSON(200, resp.OkData(resData))
return
}
err := s.neConfigService.ModifyOMCYaml(body.ParamName, body.Loc, body.ParamData)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))

View File

@@ -2,15 +2,32 @@ package service
import (
"fmt"
"runtime"
"strings"
"be.ems/src/framework/cmd"
"be.ems/src/framework/config"
"github.com/tsmask/go-oam/src/framework/utils/parse"
)
// GetOMCYaml 获取OMC网元配置文件 /usr/local/etc/omc/omc.yaml
// GetOMCYaml 获取OMC网元配置文件
func (r NeConfig) GetOMCYaml(paramName string) []map[string]any {
if paramName == "notificationEmail" {
notificationEmailData := config.Get("notification.email").(map[string]any)
for k, v := range notificationEmailData {
if k == "password" && v != nil {
notificationEmailData[k] = parse.SafeContent(fmt.Sprint(v))
}
}
return []map[string]any{notificationEmailData}
}
if paramName == "notificationSMSC" {
notificationSMSCData := config.Get("notification.smsc").(map[string]any)
for k, v := range notificationSMSCData {
if k == "password" && v != nil {
notificationSMSCData[k] = parse.SafeContent(fmt.Sprint(v))
}
}
return []map[string]any{notificationSMSCData}
}
if paramName == "trace" {
traceData := config.Get("trace").(map[string]any)
return []map[string]any{traceData}
@@ -18,30 +35,113 @@ func (r NeConfig) GetOMCYaml(paramName string) []map[string]any {
return []map[string]any{}
}
// ModifyOMCYaml 修改OMC网元配置文件 /usr/local/etc/omc/omc.yaml
// ModifyOMCYaml 修改OMC网元配置文件
func (r NeConfig) ModifyOMCYaml(paramName, loc string, paramData any) error {
neConfig := r.FindByNeTypeAndParamName("OMC", paramName)
if neConfig.ParamType == "list" {
if paramName == "notificationEmail" {
notificationEmailData := config.Get("notification.email").(map[string]any)
for k, v := range paramData.(map[string]any) {
keyLower := strings.ToLower(k)
// 改程序内
notificationEmailData[keyLower] = v
// 改文件
switch keyLower {
case "enabled":
pattern := `enabled: (true|false) # email enable`
replacement := fmt.Sprintf(`enabled: %v # email enable`, v)
return config.SedReplace(pattern, replacement)
case "list":
pattern := `list: ".*" # toEmail`
replacement := fmt.Sprintf(`list: "%v" # toEmail`, v)
return config.SedReplace(pattern, replacement)
case "title":
pattern := `title: ".*" # email title`
replacement := fmt.Sprintf(`title: "%v" # email title`, v)
return config.SedReplace(pattern, replacement)
case "smtp":
pattern := `smtp: ".*" # email smtp`
replacement := fmt.Sprintf(`smtp: "%v" # email smtp`, v)
return config.SedReplace(pattern, replacement)
case "port":
pattern := `port: [0-9]+ # email port`
replacement := fmt.Sprintf(`port: %v # email port`, v)
return config.SedReplace(pattern, replacement)
case "user":
pattern := `user: ".*" # email user`
replacement := fmt.Sprintf(`user: "%v" # email user`, v)
return config.SedReplace(pattern, replacement)
case "password":
pattern := `password: ".*" # email password`
replacement := fmt.Sprintf(`password: "%v" # email password`, v)
return config.SedReplace(pattern, replacement)
}
}
}
if paramName == "notificationSMSC" {
notificationSMSCData := config.Get("notification.smsc").(map[string]any)
for k, v := range paramData.(map[string]any) {
keyLower := strings.ToLower(k)
// 改程序内
notificationSMSCData[keyLower] = v
// 改文件
switch keyLower {
case "enabled":
pattern := `enabled: (true|false) # smsc enable`
replacement := fmt.Sprintf(`enabled: %v # smsc enable`, v)
return config.SedReplace(pattern, replacement)
case "list":
pattern := `list: ".*" # toMobile`
replacement := fmt.Sprintf(`list: "%v" # toMobile`, v)
return config.SedReplace(pattern, replacement)
case "addr":
pattern := `addr: ".*" # smsc addr`
replacement := fmt.Sprintf(`addr: "%v" # smsc addr`, v)
return config.SedReplace(pattern, replacement)
case "systemid":
pattern := `systemid: ".*" # smsc system id`
replacement := fmt.Sprintf(`systemid: "%v" # smsc system id`, v)
return config.SedReplace(pattern, replacement)
case "systemtype":
pattern := `systemtype: ".*" # smsc system type`
replacement := fmt.Sprintf(`systemtype: "%v" # smsc system type`, v)
return config.SedReplace(pattern, replacement)
case "password":
pattern := `password: ".*" # smsc password`
replacement := fmt.Sprintf(`password: "%v" # smsc password`, v)
return config.SedReplace(pattern, replacement)
case "coding":
pattern := `coding: [0-9]+ # smsc codingMap`
replacement := fmt.Sprintf(`coding: %v # smsc codingMap`, v)
return config.SedReplace(pattern, replacement)
case "servicenumber":
pattern := `servicenumber: ".*" # smsc service number`
replacement := fmt.Sprintf(`servicenumber: "%v" # smsc service number`, v)
return config.SedReplace(pattern, replacement)
}
}
}
if paramName == "trace" {
configPath := fmt.Sprint(config.Get("config")) // 获取配置文件路径
paramDataMap := paramData.(map[string]any)
for k, v := range paramDataMap {
config.Set(fmt.Sprintf("trace.%s", strings.ToLower(k)), v)
if runtime.GOOS == "windows" {
continue // Windows系统不支持sed命令
}
// 修改参数较少,直接命令改文件内容
if k == "enabled" {
// sed 's/enabled: \(true\|false\) # trace enabled/enabled: true # trace enabled/' /usr/local/etc/omc/omc.yaml
cmd.Execf("sed -i 's/enabled: \\(true\\|false\\) # trace enabled/enabled: %v # trace enabled/' %s", v, configPath)
}
if k == "host" {
// sed 's/host: ".*" # trace host/host: "127.2.2.2" # trace host/' /usr/local/etc/omc/omc.yaml
cmd.Execf("sed -i 's/host: \".*\" # trace host/host: \"%v\" # trace host/' %s", v, configPath)
}
if k == "port" {
// sed 's/port: [0-9]\+ # trace port/port: 6964 # trace port/' /usr/local/etc/omc/omc.yaml
cmd.Execf("sed -i 's/port: [0-9]\\+ # trace port/port: %v # trace port/' %s", v, configPath)
traceData := config.Get("trace").(map[string]any)
for k, v := range paramData.(map[string]any) {
keyLower := strings.ToLower(k)
// 改程序内
traceData[keyLower] = v
// 改文件
switch keyLower {
case "enabled":
pattern := `enabled: (true|false) # trace enabled`
replacement := fmt.Sprintf(`enabled: %v # trace enabled`, v)
return config.SedReplace(pattern, replacement)
case "host":
pattern := `host: ".*" # trace host`
replacement := fmt.Sprintf(`host: "%v" # trace host`, v)
return config.SedReplace(pattern, replacement)
case "port":
pattern := `port: [0-9]+ # trace port`
replacement := fmt.Sprintf(`port: %v # trace port`, v)
return config.SedReplace(pattern, replacement)
}
}
// 重开跟踪任务信令数据通道UDP