fix: 优化获取获取网元状态
This commit is contained in:
@@ -9,6 +9,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/shirou/gopsutil/v3/net"
|
||||||
|
|
||||||
"github.com/go-resty/resty/v2"
|
"github.com/go-resty/resty/v2"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|
||||||
@@ -726,6 +728,112 @@ func GetAllSysinfoFromNF(w http.ResponseWriter, r *http.Request) {
|
|||||||
func GetStateFromNF(w http.ResponseWriter, r *http.Request) {
|
func GetStateFromNF(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Debug("GetStateFromNF processing... ")
|
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)
|
data := make([]map[string]interface{}, 0)
|
||||||
|
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
@@ -876,6 +984,35 @@ func GetEMSState(ip string) *SysState {
|
|||||||
PartitionInfo: sysInfo.PartitionInfo,
|
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"
|
version := "16.1.1"
|
||||||
if global.Version != "" {
|
if global.Version != "" {
|
||||||
version = global.Version
|
version = global.Version
|
||||||
@@ -886,7 +1023,7 @@ func GetEMSState(ip string) *SysState {
|
|||||||
HostName: hostName,
|
HostName: hostName,
|
||||||
OsInfo: getUnameStr(),
|
OsInfo: getUnameStr(),
|
||||||
DbInfo: dbInfo,
|
DbInfo: dbInfo,
|
||||||
IpAddr: []string{ip},
|
IpAddr: ipAddrs,
|
||||||
Port: config.GetYamlConfig().Rest[0].Port,
|
Port: config.GetYamlConfig().Rest[0].Port,
|
||||||
Version: version,
|
Version: version,
|
||||||
Capability: 9999999,
|
Capability: 9999999,
|
||||||
|
|||||||
Reference in New Issue
Block a user