package service 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 } // 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 }