From d92ca5f2e409593be50ca21608e8609640147099 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 25 Jun 2024 15:43:58 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E7=BD=91=E5=85=83=E7=9B=B4=E8=BF=9E?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_info.go | 11 +-- .../network_element/controller/ne_license.go | 3 +- .../network_element/fetch_link/ne_config.go | 70 +++++++++++++++++++ .../network_element/fetch_link/ne_state.go | 56 +++++++++++++++ .../network_element/service/ne_info.impl.go | 5 +- 5 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 src/modules/network_element/fetch_link/ne_config.go create mode 100644 src/modules/network_element/fetch_link/ne_state.go diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 177a19b2..ea0ded6e 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -9,6 +9,7 @@ import ( "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" + neFetchlink "be.ems/src/modules/network_element/fetch_link" "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" @@ -60,7 +61,7 @@ func (s *NeInfoController) State(c *gin.Context) { neKey := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId) // 网元直连 - resData, err := neService.NeState(neInfo) + resData, err := neFetchlink.NeState(neInfo) if err != nil { mutex.Lock() // 异常取上次缓存 @@ -287,12 +288,12 @@ func (s *NeInfoController) Add(c *gin.Context) { } // 获取网元状态是否正常 - body.ServerState, err = neService.NeState(body) + body.ServerState, err = neFetchlink.NeState(body) if err != nil { body.Status = "0" } else { // 下发网管配置信息给网元 - _, err = neService.NeConfigOMC(body) + _, err = neFetchlink.NeConfigOMC(body) if err == nil { body.Status = "1" } else { @@ -376,12 +377,12 @@ func (s *NeInfoController) Edit(c *gin.Context) { } // 获取网元状态是否正常 - body.ServerState, err = neService.NeState(body) + body.ServerState, err = neFetchlink.NeState(body) if err != nil { body.Status = "0" } else { // 下发网管配置信息给网元 - _, err = neService.NeConfigOMC(body) + _, err = neFetchlink.NeConfigOMC(body) if err == nil { body.Status = "1" } else { diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index fad2e0c4..3b4dd4ce 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -6,6 +6,7 @@ import ( "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/vo/result" + neFetchlink "be.ems/src/modules/network_element/fetch_link" "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" @@ -198,7 +199,7 @@ func (s *NeLicenseController) State(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } - if neState, err := neService.NeState(neInfo); err == nil && neState["sn"] != nil { + if neState, err := neFetchlink.NeState(neInfo); err == nil && neState["sn"] != nil { neLicense.Status = "1" neLicense.SerialNum = fmt.Sprint(neState["sn"]) neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) diff --git a/src/modules/network_element/fetch_link/ne_config.go b/src/modules/network_element/fetch_link/ne_config.go new file mode 100644 index 00000000..2b19c44e --- /dev/null +++ b/src/modules/network_element/fetch_link/ne_config.go @@ -0,0 +1,70 @@ +package fetchlink + +import ( + "encoding/json" + "fmt" + "strings" + + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/fetch" + "be.ems/src/modules/network_element/model" +) + +// NeConfigOMC 网元配置对端网管信息 +func NeConfigOMC(neInfo model.NeInfo) (map[string]any, error) { + // 网元配置对端网管信息 + neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType)) + resBytes, err := fetch.PutJSON(neUrl, map[string]any{ + "neId": neInfo.NeId, + "neName": neInfo.NeName, + "port": neInfo.Port, + "province": neInfo.Province, + "pvFlag": neInfo.PvFlag, + "rmUID": neInfo.RmUID, + "vendorName": neInfo.VendorName, + "dn": neInfo.Dn, + }, nil) + var resData map[string]any + if err != nil { + status := err.Error() + logger.Warnf("NeConfigOMC %s Put \"%s\"", status, neUrl) + if strings.HasPrefix(status, "201") || strings.HasPrefix(status, "204") { + return resData, nil + } + return nil, err + } + + // 200 成功无数据时 + if len(resBytes) == 0 { + return resData, nil + } + + // 序列化结果 + err = json.Unmarshal(resBytes, &resData) + if err != nil { + logger.Warnf("NeConfigOMC Unmarshal %s", err.Error()) + return nil, err + } + + return resData, nil +} + +// NeConfigInfo 网元配置信息 +func NeConfigInfo(neInfo model.NeInfo, name string) (map[string]any, error) { + // 网元配置对端网管信息 + neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType), name) + resBytes, err := fetch.Get(neUrl, nil, 1000) + if err != nil { + logger.Warnf("NeConfigInfo %s", err.Error()) + return nil, err + } + + // 序列化结果 + var resData map[string]any + err = json.Unmarshal(resBytes, &resData) + if err != nil { + logger.Warnf("NeConfigInfo Unmarshal %s", err.Error()) + return nil, err + } + return resData, nil +} diff --git a/src/modules/network_element/fetch_link/ne_state.go b/src/modules/network_element/fetch_link/ne_state.go new file mode 100644 index 00000000..4ed27aa3 --- /dev/null +++ b/src/modules/network_element/fetch_link/ne_state.go @@ -0,0 +1,56 @@ +package fetchlink + +import ( + "encoding/json" + "fmt" + "strings" + "time" + + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/fetch" + "be.ems/src/modules/network_element/model" +) + +// NeState 获取网元端服务状态 +func NeState(neInfo model.NeInfo) (map[string]any, error) { + // 网元状态 + neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType)) + resBytes, err := fetch.Get(neUrl, nil, 1000) + if err != nil { + logger.Warnf("NeState %s", err.Error()) + return nil, err + } + + // 序列化结果 + var resData map[string]any + err = json.Unmarshal(resBytes, &resData) + if err != nil { + logger.Warnf("NeState Unmarshal %s", err.Error()) + return nil, err + } + + // 检查是否有许可时间 + if v, ok := resData["expiryDate"]; ok && v != nil { + expiryDate := v.(string) + // UPF存在2000的许可时间,MME会有空字符 + if strings.HasPrefix(expiryDate, "2000") || expiryDate == "" { + logger.Warnf("NeState %s License Expiration Aanomaly. Get \"%s\"", neInfo.NeType, neUrl) + return nil, fmt.Errorf("%s License Expiration Aanomaly", neInfo.NeType) + } + } + + return map[string]any{ + "neType": neInfo.NeType, + "neId": neInfo.NeId, + "neName": neInfo.NeName, + "neIP": neInfo.IP, + "refreshTime": time.Now().UnixMilli(), // 获取时间 + "version": resData["version"], + "capability": resData["capability"], + "sn": resData["serialNum"], + "expire": resData["expiryDate"], + "cpu": resData["cpuUsage"], + "mem": resData["memUsage"], + "disk": resData["diskSpace"], + }, nil +} diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index c69eb183..8909a85b 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -14,6 +14,7 @@ import ( "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/ssh" "be.ems/src/framework/utils/telnet" + neFetchlink "be.ems/src/modules/network_element/fetch_link" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -149,7 +150,7 @@ func (r *NeInfoImpl) SelectList(ne model.NeInfo, bandStatus bool, bandHost bool) func (r *NeInfoImpl) bandNeStatus(arr *[]model.NeInfo) { for i := range *arr { v := (*arr)[i] - result, err := NeState(v) + result, err := neFetchlink.NeState(v) if err != nil { (*arr)[i].ServerState = map[string]any{ "online": false, @@ -167,7 +168,7 @@ func (r *NeInfoImpl) bandNeStatus(arr *[]model.NeInfo) { // 网元状态设置为在线 if v.Status != "1" { // 下发网管配置信息给网元 - _, err = NeConfigOMC(v) + _, err = neFetchlink.NeConfigOMC(v) if err == nil { v.Status = "1" } else {