feat: 删除不需要文件夹
This commit is contained in:
852
features/state/getstate.go
Normal file
852
features/state/getstate.go
Normal file
@@ -0,0 +1,852 @@
|
||||
package state
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
type CpuUsage struct {
|
||||
NfCpuUsage uint16 `json:"nfCpuUsage"`
|
||||
SysCpuUsage uint16 `json:"sysCpuUsage"`
|
||||
}
|
||||
|
||||
type MemUsage struct {
|
||||
TotalMem uint32 `json:"totalMem"`
|
||||
NfUsedMem uint32 `json:"nfUsedMem"`
|
||||
SysMemUsage uint16 `json:"sysMemUsage"`
|
||||
}
|
||||
|
||||
type PartitionInfo struct {
|
||||
Total uint32 `json:"total"` // MB
|
||||
Used uint32 `json:"used"` // MB
|
||||
}
|
||||
|
||||
type DiskSpace struct {
|
||||
PartitionNum uint8 `json:"partitionNum"`
|
||||
PartitionInfo []PartitionInfo `json:"partitionInfo"`
|
||||
}
|
||||
|
||||
type HardwareInfo struct {
|
||||
CPUs int `json:"cpus"`
|
||||
Memory int `json:"memory"`
|
||||
}
|
||||
|
||||
type SysState struct {
|
||||
HostName string `json:"hostName"` // linux命令: hostname
|
||||
OsInfo string `json:"osInfo"` // linux命令: uname -a
|
||||
DbInfo string `json:"dbInfo"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version
|
||||
Version string `json:"version"` // 软件版本信息: 16.1.1
|
||||
IpAddr []string `json:"ipAddr"` // 网管的ipv4和ipv6列表
|
||||
Port uint16 `json:"port"` // 用于网管的port
|
||||
Capability uint32 `json:"capability"`
|
||||
SerialNum string `json:"serialNum"`
|
||||
ExpiryDate string `json:"expiryDate"`
|
||||
HardwareInfo HardwareInfo `json:"hardwareInfo"`
|
||||
CpuUsage CpuUsage `json:"cpuUsage"`
|
||||
MemUsage MemUsage `json:"memUsage"`
|
||||
DiskSpace DiskSpace `json:"diskSpace"`
|
||||
//Timestamp string `json:"timestamp"`
|
||||
}
|
||||
|
||||
type SystemState struct {
|
||||
HostName string `json:"hostName"` // linux命令: hostname
|
||||
OsInfo string `json:"osInfo"` // linux命令: uname -a
|
||||
DbInfo string `json:"dbInfo"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version
|
||||
Version string `json:"version"` // 软件版本信息: 16.1.1
|
||||
IpAddr []string `json:"ipAddr"` // 网管的ipv4和ipv6列表
|
||||
Port uint16 `json:"port"` // 用于网管的port
|
||||
Capability uint32 `json:"capability"`
|
||||
SerialNum string `json:"serialNum"`
|
||||
ExpiryDate string `json:"expiryDate"`
|
||||
HardwareInfo struct {
|
||||
CPUs int `json:"cpus"` // 主机(裸机/虚拟机)的cpu个数
|
||||
Memory int `json:"memory"` // 主机(裸机/虚拟机): 配置的内存
|
||||
} `json:"hardwareInfo"`
|
||||
CpuUsage struct {
|
||||
NfCpuUsage uint16 `json:"nfCpuUsage"`
|
||||
SysCpuUsage uint16 `json:"sysCpuUsage"`
|
||||
} `json:"cpuUsage"`
|
||||
MemUsage struct {
|
||||
TotalMem uint32 `json:"totalMem"`
|
||||
NfUsedMem uint32 `json:"nfUsedMem"`
|
||||
SysMemUsage uint16 `json:"sysMemUsage"`
|
||||
} `json:"memUsage"`
|
||||
DiskSpace struct {
|
||||
PartitionNum uint8 `json:"partitionNum"`
|
||||
PartitionInfo []struct {
|
||||
Total uint32 `json:"total"` // MB
|
||||
Used uint32 `json:"used"` // MB
|
||||
} `json:"partitionInfo"`
|
||||
} `json:"diskSpace"`
|
||||
//Timestamp string `json:"timestamp"`
|
||||
}
|
||||
|
||||
type SystemInfo struct {
|
||||
NeType string `json:"neType" map:"neType, omitempty"`
|
||||
NeId string `json:"neId" map:"neId, omitempty"`
|
||||
HostName string `json:"hostName" map:"hostName, omitempty"` // linux命令: hostname
|
||||
OsInfo string `json:"osInfo" map:"osInfo, omitempty"` // linux命令: uname -a
|
||||
DbInfo string `json:"dbInfo" map:"dbInfo, omitempty"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version
|
||||
Version string `json:"version" map:"version, omitempty"` // 软件版本信息: 16.1.1
|
||||
IpAddr string `json:"ipAddr" map:"ipAddr, omitempty"` // 网管的ipv4和ipv6列表
|
||||
Port uint16 `json:"port" map:"port, omitempty"` // 用于网管的port
|
||||
CPUs int `json:"cpus" map:"cpus, omitempty"`
|
||||
TotalMem int `json:"totalMem" map:"totalMem, omitempty"`
|
||||
PvFlag string `json:"pvFlag" map:"pvFlag, omitempty"`
|
||||
Status string `json:"status" map:"status, omitempty"`
|
||||
}
|
||||
|
||||
type LicenseInfo struct {
|
||||
NeType string `json:"neType"`
|
||||
NeId string `json:"neId"`
|
||||
SerialNum string `json:"serialNum"`
|
||||
Capability uint32 `json:"capability"`
|
||||
CapUsed uint32 `json:"capUsed"`
|
||||
FeatureEnabled []string `json:"featureEnabled"`
|
||||
ExpiryDate string `json:"expiryDate"`
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
var (
|
||||
UriSysState = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/systemState"
|
||||
UriSysState2 = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/{elementTypeValue}/systemState"
|
||||
UriSysInfoAll = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/sysInfo"
|
||||
UriSysInfoOne = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/sysInfo/{neType}/{neId}"
|
||||
UriLicenseInfoAll = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/licenseInfo"
|
||||
UriLicenseInfoOne = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/licenseInfo/{neType}/{neId}"
|
||||
|
||||
CustomUriSysState = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/systemState"
|
||||
CustomUriSysState2 = config.UriPrefix + "/systemManagement/{apiVersion}/{elementTypeValue}/systemState"
|
||||
CustomUriSysInfoAll = config.UriPrefix + "/systemManagement/{apiVersion}/sysInfo"
|
||||
CustomUriSysInfoOne = config.UriPrefix + "/systemManagement/{apiVersion}/sysInfo/{neType}/{neId}"
|
||||
CustomUriLicenseInfoAll = config.UriPrefix + "/systemManagement/{apiVersion}/licenseInfo"
|
||||
CustomUriLicenseInfoOne = config.UriPrefix + "/systemManagement/{apiVersion}/licenseInfo/{neType}/{neId}"
|
||||
)
|
||||
|
||||
var client = resty.New()
|
||||
|
||||
func init() {
|
||||
/*
|
||||
client.
|
||||
SetTimeout(10 * time.Second).
|
||||
SetRetryCount(1).
|
||||
SetRetryWaitTime(1 * time.Second).
|
||||
SetRetryMaxWaitTime(2 * time.Second).
|
||||
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
|
||||
return 0, errors.New("quota exceeded")
|
||||
})
|
||||
*/
|
||||
client.SetTimeout(3 * time.Second)
|
||||
}
|
||||
|
||||
func NeStatusEnumToStr(intStatus int) string {
|
||||
switch intStatus {
|
||||
case 0:
|
||||
return "active"
|
||||
case 1:
|
||||
return "offline"
|
||||
case 2:
|
||||
return "standby"
|
||||
case 3:
|
||||
return "maintain"
|
||||
default:
|
||||
return "unkown"
|
||||
}
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetOneLicenseInfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetOneLicenseInfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
neId := vars["neId"]
|
||||
if neType == "" || neId == "" {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetNeInfo:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if neInfo == nil {
|
||||
err := global.ErrCMNotFoundTargetNE
|
||||
log.Error(global.ErrCMNotFoundTargetNE)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace("neInfo:", neInfo)
|
||||
|
||||
//systemState := make(map[string]interface{})
|
||||
systemState := &SysState{}
|
||||
result := make(map[string]interface{})
|
||||
//sysInfo := &SystemInfo{}
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
if neType != omcNeTypeLower {
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(neType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(neInfo.NeType))
|
||||
}
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
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)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else {
|
||||
log.Trace("resp.Body():", string(resp.Body()))
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
|
||||
log.Trace("systemState:", systemState)
|
||||
capUsed := config.TDatas[neInfo.NeType].CapUsed
|
||||
log.Tracef("neInfo.NeType:%s capUsed: %v", capUsed)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: capUsed,
|
||||
FeatureEnabled: config.TDatas[neInfo.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
//neItem := strings.ToUpper(neType) + "/" + neId
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
}
|
||||
} else {
|
||||
systemState := GetEMSState(neInfo.Ip)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: config.TDatas[neInfo.NeType].CapUsed,
|
||||
FeatureEnabled: config.TDatas[neInfo.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
// neItem := strings.ToUpper(neType) + "/" + neId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetAllLicenseInfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetAllLicenseInfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
var neList []dborm.NeInfo
|
||||
_, err = dborm.XormGetAllNeInfo(&neList)
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
|
||||
for _, ne := range neList {
|
||||
result := make(map[string]interface{})
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
log.Debug("ne: ", ne)
|
||||
//if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) {
|
||||
if strings.ToLower(ne.NeType) != omcNeTypeLower {
|
||||
// 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))
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(ne.NeType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
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{"accessToken": token}).
|
||||
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
|
||||
continue
|
||||
} else {
|
||||
systemState := &SysState{}
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: config.TDatas[ne.NeType].CapUsed,
|
||||
FeatureEnabled: config.TDatas[ne.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
} else {
|
||||
systemState := GetEMSState(ne.Ip)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: config.TDatas[ne.NeType].CapUsed,
|
||||
FeatureEnabled: config.TDatas[ne.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetOneSysinfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetOneSysinfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
neId := vars["neId"]
|
||||
if neType == "" || neId == "" {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetNeInfo:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if neInfo == nil {
|
||||
err := global.ErrCMNotFoundTargetNE
|
||||
log.Error(global.ErrCMNotFoundTargetNE)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace("neInfo:", neInfo)
|
||||
|
||||
//systemState := make(map[string]interface{})
|
||||
systemState := &SysState{}
|
||||
result := make(map[string]interface{})
|
||||
//sysInfo := &SystemInfo{}
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
if neType != omcNeTypeLower {
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(neType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(neInfo.NeType))
|
||||
}
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
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)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else {
|
||||
log.Trace("resp.Body():", string(resp.Body()))
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
|
||||
log.Trace("systemState:", systemState)
|
||||
hostName := "5gc"
|
||||
if systemState.HostName != "" {
|
||||
hostName = systemState.HostName
|
||||
}
|
||||
osInfo := "Linux 5gc 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 GNU/Linux"
|
||||
if systemState.OsInfo != "" {
|
||||
osInfo = systemState.OsInfo
|
||||
}
|
||||
dbInfo := "adb v1.0.1"
|
||||
if systemState.OsInfo != "" {
|
||||
dbInfo = systemState.DbInfo
|
||||
}
|
||||
port, _ := strconv.Atoi(neInfo.Port)
|
||||
cpus := 4
|
||||
if systemState.HardwareInfo.CPUs != 0 {
|
||||
cpus = systemState.HardwareInfo.CPUs
|
||||
}
|
||||
totalMem := 34029125632
|
||||
if systemState.HardwareInfo.Memory != 0 {
|
||||
totalMem = systemState.HardwareInfo.Memory
|
||||
}
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
HostName: hostName,
|
||||
OsInfo: osInfo,
|
||||
DbInfo: dbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: neInfo.Ip,
|
||||
Port: uint16(port),
|
||||
CPUs: cpus,
|
||||
TotalMem: totalMem,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
Status: NeStatusEnumToStr(neInfo.Status),
|
||||
}
|
||||
//neItem := strings.ToUpper(neType) + "/" + neId
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
}
|
||||
} else {
|
||||
systemState := GetEMSState(neInfo.Ip)
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
HostName: systemState.HostName,
|
||||
OsInfo: systemState.OsInfo,
|
||||
DbInfo: systemState.DbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: neInfo.Ip,
|
||||
Port: systemState.Port,
|
||||
CPUs: systemState.HardwareInfo.CPUs,
|
||||
TotalMem: systemState.HardwareInfo.Memory,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
Status: NeStatusEnumToStr(neInfo.Status),
|
||||
}
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
// neItem := strings.ToUpper(neType) + "/" + neId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetAllSysinfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetAllSysinfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
var neList []dborm.NeInfo
|
||||
_, err = dborm.XormGetAllNeInfo(&neList)
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
|
||||
for _, ne := range neList {
|
||||
result := make(map[string]interface{})
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
log.Debug("ne: ", ne)
|
||||
//if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) {
|
||||
if strings.ToLower(ne.NeType) != omcNeTypeLower {
|
||||
// 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))
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(ne.NeType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
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{"accessToken": token}).
|
||||
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
|
||||
continue
|
||||
} else {
|
||||
systemState := &SysState{}
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
hostName := "5gc"
|
||||
if systemState.HostName != "" {
|
||||
hostName = systemState.HostName
|
||||
}
|
||||
osInfo := "Linux 5gc 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 GNU/Linux"
|
||||
if systemState.OsInfo != "" {
|
||||
osInfo = systemState.OsInfo
|
||||
}
|
||||
dbInfo := "adb v1.0.1"
|
||||
if systemState.OsInfo != "" {
|
||||
dbInfo = systemState.DbInfo
|
||||
}
|
||||
port, _ := strconv.Atoi(ne.Port)
|
||||
cpus := 4
|
||||
if systemState.HardwareInfo.CPUs != 0 {
|
||||
cpus = systemState.HardwareInfo.CPUs
|
||||
}
|
||||
totalMem := 34029125632
|
||||
if systemState.HardwareInfo.Memory != 0 {
|
||||
totalMem = systemState.HardwareInfo.Memory
|
||||
}
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
HostName: hostName,
|
||||
OsInfo: osInfo,
|
||||
DbInfo: dbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: ne.Ip,
|
||||
Port: uint16(port),
|
||||
CPUs: cpus,
|
||||
TotalMem: totalMem,
|
||||
PvFlag: ne.PvFlag,
|
||||
Status: NeStatusEnumToStr(ne.Status),
|
||||
}
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
}
|
||||
} else {
|
||||
port, _ := strconv.Atoi(ne.Port)
|
||||
systemState := GetEMSState(ne.Ip)
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
HostName: systemState.HostName,
|
||||
OsInfo: systemState.OsInfo,
|
||||
DbInfo: systemState.DbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: ne.Ip,
|
||||
Port: (uint16(port)),
|
||||
CPUs: systemState.HardwareInfo.CPUs,
|
||||
TotalMem: systemState.HardwareInfo.Memory,
|
||||
PvFlag: ne.PvFlag,
|
||||
Status: NeStatusEnumToStr(ne.Status),
|
||||
}
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetStateFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetStateFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
|
||||
var neList []dborm.NeInfo
|
||||
if neType == "" {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
switch strings.ToLower(neType) {
|
||||
case "all":
|
||||
// query all NFs
|
||||
// create rest client
|
||||
restHostPort := fmt.Sprintf("http://127.0.0.1:%d", config.GetYamlConfig().Rest[0].Port)
|
||||
getNeInfoPattern := fmt.Sprintf(config.UriPrefix+"/databaseManagement/v1/elementType/%s/objectType/ne_info",
|
||||
config.GetYamlConfig().Database.Name)
|
||||
getNeInfoURI := restHostPort + getNeInfoPattern + "?WHERE=status='0'"
|
||||
log.Debug("getNeInfoPattern:", getNeInfoPattern)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"AccessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(getNeInfoURI)
|
||||
if err != nil {
|
||||
log.Error("Get ne_info from DB is failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
neList, _ = dborm.XormParseResult(resp.Body())
|
||||
default:
|
||||
restHostPort := fmt.Sprintf("http://127.0.0.1:%d", config.GetYamlConfig().Rest[0].Port)
|
||||
getNeInfoPattern := fmt.Sprintf(config.UriPrefix+"/databaseManagement/v1/elementType/%s/objectType/ne_info",
|
||||
config.GetYamlConfig().Database.Name)
|
||||
getNeInfoURI := restHostPort + getNeInfoPattern
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", true, false)
|
||||
if neId == "" {
|
||||
getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%s'", neType)
|
||||
} else {
|
||||
getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%v'+and+ne_id+in+%v", neType, neId)
|
||||
}
|
||||
log.Debug("getNeInfoURI:", getNeInfoURI)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(getNeInfoURI)
|
||||
if err != nil {
|
||||
log.Error("Get ne_info from DB is failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
neList, _ = dborm.XormParseResult(resp.Body())
|
||||
}
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
for _, ne := range neList {
|
||||
result := make(map[string]interface{})
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
log.Debug("ne: ", ne)
|
||||
//if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) {
|
||||
if strings.ToLower(ne.NeType) != omcNeTypeLower {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, ne.NeType)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
result["ipAddress"] = ne.Ip
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
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
|
||||
} else {
|
||||
systemState := make(map[string]interface{})
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
result["systemState"] = systemState
|
||||
}
|
||||
} else {
|
||||
result["ipAddress"] = ne.Ip
|
||||
emsState := GetEMSState(ne.Ip)
|
||||
result["systemState"] = emsState
|
||||
}
|
||||
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)
|
||||
}
|
||||
|
||||
func GetEMSState(ip string) *SysState {
|
||||
log.Debug("GetEMSState processing... ")
|
||||
|
||||
sysInfo := new(SysInfo)
|
||||
err := GetSysInfo(sysInfo)
|
||||
if err != nil {
|
||||
log.Error("Failed to GetSysInfo:", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
cpuUsage := &CpuUsage{
|
||||
NfCpuUsage: sysInfo.MyCpuPercent,
|
||||
SysCpuUsage: sysInfo.SysCpuPercent,
|
||||
}
|
||||
|
||||
memUsage := &MemUsage{
|
||||
TotalMem: sysInfo.SysTotalRam,
|
||||
NfUsedMem: sysInfo.MyUsedRam,
|
||||
SysMemUsage: sysInfo.SysRamUsedPercent,
|
||||
}
|
||||
|
||||
diskSpace := &DiskSpace{
|
||||
PartitionNum: sysInfo.PartitionNum,
|
||||
PartitionInfo: sysInfo.PartitionInfo,
|
||||
}
|
||||
|
||||
version := "16.1.1"
|
||||
if global.Version != "" {
|
||||
version = global.Version
|
||||
}
|
||||
hostName, _ := os.Hostname()
|
||||
emsState := &SysState{
|
||||
HostName: hostName,
|
||||
OsInfo: getUnameStr(),
|
||||
DbInfo: "mysql Ver 15.1 Distrib 10.3.35-MariaDB, for Linux (aarch64) using readline 5.1",
|
||||
IpAddr: []string{ip},
|
||||
Port: 3030,
|
||||
Version: version,
|
||||
Capability: 9999999,
|
||||
SerialNum: config.GetYamlConfig().OMC.Sn,
|
||||
ExpiryDate: "-",
|
||||
HardwareInfo: HardwareInfo{CPUs: getCpuNumber(), Memory: getTotalMemory()},
|
||||
CpuUsage: *cpuUsage,
|
||||
MemUsage: *memUsage,
|
||||
DiskSpace: *diskSpace,
|
||||
}
|
||||
|
||||
//getSystemInfo()
|
||||
return emsState
|
||||
}
|
||||
Reference in New Issue
Block a user