fix: 优化获取获取网元状态
This commit is contained in:
@@ -9,6 +9,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/shirou/gopsutil/v3/net"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
@@ -726,6 +728,112 @@ func GetAllSysinfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
func GetStateFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetStateFromNF processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
neType = strings.ToLower(neType)
|
||||
|
||||
if neType == "" {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
if neType == "all" {
|
||||
var neList []dborm.NeInfo
|
||||
_, err := dborm.XormGetAllNeInfo(&neList)
|
||||
if err != nil {
|
||||
log.Error("Failed to get all ne info:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
data := make([]map[string]interface{}, 0)
|
||||
for _, ne := range neList {
|
||||
result := make(map[string]interface{})
|
||||
hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(ne.NeType))
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
result["ipAddress"] = ne.Ip
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
errorMessage := services.ErrorMessage{
|
||||
ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused",
|
||||
}
|
||||
result["error"] = errorMessage
|
||||
SN, Version, _ := dborm.XormGetNEStateInfo(ne.NeType, ne.NeId)
|
||||
result["serialNum"] = SN
|
||||
result["version"] = Version
|
||||
} else {
|
||||
systemState := make(map[string]interface{})
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
result["systemState"] = systemState
|
||||
}
|
||||
|
||||
neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
mapState := make(map[string]interface{})
|
||||
mapState[neItem] = result
|
||||
data = append(data, mapState)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
}
|
||||
|
||||
if neType == "omc" {
|
||||
emsState := GetEMSState("127.0.0.1")
|
||||
services.ResponseWithJson(w, http.StatusOK, emsState)
|
||||
return
|
||||
}
|
||||
|
||||
var neList []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType(neType, &neList)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
data := make([]map[string]interface{}, 0)
|
||||
for _, ne := range neList {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(ne.NeType))
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
} else {
|
||||
systemState := make(map[string]interface{})
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
data = append(data, systemState)
|
||||
}
|
||||
}
|
||||
|
||||
if len(data) == 1 {
|
||||
services.ResponseWithJson(w, http.StatusOK, data[0])
|
||||
return
|
||||
}
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// GetStateFromNF 旧函数
|
||||
// Get system state from NF/NFs
|
||||
func GetStateFromNFOld(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetStateFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
vars := mux.Vars(r)
|
||||
@@ -876,6 +984,35 @@ func GetEMSState(ip string) *SysState {
|
||||
PartitionInfo: sysInfo.PartitionInfo,
|
||||
}
|
||||
|
||||
// 获取主机的 IP 地址列表
|
||||
ipAddrs := []string{ip}
|
||||
if ip == "" || ip == "127.0.0.1" {
|
||||
ipAddrs = []string{}
|
||||
interfaces, err := net.Interfaces()
|
||||
if err == nil {
|
||||
for _, iface := range interfaces {
|
||||
for _, v := range iface.Addrs {
|
||||
name := iface.Name
|
||||
if name[len(name)-1] == '0' {
|
||||
name = name[0 : len(name)-1]
|
||||
name = strings.Trim(name, "")
|
||||
}
|
||||
// ignore localhost
|
||||
if name == "lo" {
|
||||
continue
|
||||
}
|
||||
prefix := strings.Split(v.Addr, "/")[0]
|
||||
if strings.Contains(prefix, "::") {
|
||||
ipAddrs = append(ipAddrs, prefix)
|
||||
}
|
||||
if strings.Contains(prefix, ".") {
|
||||
ipAddrs = append(ipAddrs, prefix)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
version := "16.1.1"
|
||||
if global.Version != "" {
|
||||
version = global.Version
|
||||
@@ -886,7 +1023,7 @@ func GetEMSState(ip string) *SysState {
|
||||
HostName: hostName,
|
||||
OsInfo: getUnameStr(),
|
||||
DbInfo: dbInfo,
|
||||
IpAddr: []string{ip},
|
||||
IpAddr: ipAddrs,
|
||||
Port: config.GetYamlConfig().Rest[0].Port,
|
||||
Version: version,
|
||||
Capability: 9999999,
|
||||
|
||||
Reference in New Issue
Block a user