158 lines
3.7 KiB
Go
158 lines
3.7 KiB
Go
package getStateFromNE
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
|
|
"ems.agt/lib/dborm"
|
|
"ems.agt/lib/log"
|
|
"ems.agt/restagent/config"
|
|
"ems.agt/src/framework/cron"
|
|
"github.com/go-resty/resty/v2"
|
|
)
|
|
|
|
var NewProcessor = &BarProcessor{
|
|
progress: 0,
|
|
count: 0,
|
|
}
|
|
|
|
// bar 队列任务处理
|
|
type BarProcessor struct {
|
|
// 任务进度
|
|
progress int
|
|
// 执行次数
|
|
count int
|
|
}
|
|
|
|
type BarParams struct {
|
|
Duration int `json:"duration"`
|
|
}
|
|
|
|
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 SystemState struct {
|
|
Version string `json:"version"`
|
|
Capability uint32 `json:"capability"`
|
|
SerialNum string `json:"serialNum"`
|
|
ExpiryDate string `json:"expiryDate"`
|
|
//Timestamp string `json:"timestamp"`
|
|
|
|
CpuUsage CpuUsage `json:"cpuUsage"`
|
|
MemUsage MemUsage `json:"memUsage"`
|
|
|
|
DiskSpace DiskSpace `json:"diskSpace"`
|
|
}
|
|
|
|
var client = resty.New()
|
|
|
|
func init() {
|
|
client.
|
|
SetTimeout(time.Duration(400 * time.Millisecond))
|
|
}
|
|
|
|
func (s *BarProcessor) Execute(data any) (any, error) {
|
|
var err error
|
|
|
|
s.count++
|
|
options := data.(cron.JobData)
|
|
sysJob := options.SysJob
|
|
var params BarParams
|
|
|
|
_ = json.Unmarshal([]byte(sysJob.TargetParams), ¶ms)
|
|
// if err == nil {
|
|
// duration = params.Duration
|
|
// }
|
|
|
|
var nes []dborm.NeInfo
|
|
_, err = dborm.XormGetAllNeInfo(&nes)
|
|
if err != nil {
|
|
log.Error("Failed to get all ne info:", err)
|
|
return nil, err
|
|
}
|
|
|
|
failNum := 0
|
|
succNum := 0
|
|
for _, ne := range nes {
|
|
requestURI := fmt.Sprintf("/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", strings.ToLower(ne.NeType))
|
|
requestURL := fmt.Sprintf("http://%s:%s%s", ne.Ip, ne.Port, requestURI)
|
|
log.Debug("requestURL: Get", requestURL)
|
|
response, err := client.R().
|
|
EnableTrace().
|
|
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
|
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
|
Get(requestURL)
|
|
if err != nil {
|
|
log.Error("Failed to Get:", err)
|
|
failNum++
|
|
continue
|
|
}
|
|
|
|
log.Debug("StatusCode: ", response.StatusCode())
|
|
switch response.StatusCode() {
|
|
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
|
log.Trace("response body:", string(response.Body()))
|
|
state := new(SystemState)
|
|
_ = json.Unmarshal(response.Body(), &state)
|
|
var dateStr *string = nil
|
|
if state.ExpiryDate != "" && state.ExpiryDate != "-" {
|
|
dateStr = &state.ExpiryDate
|
|
}
|
|
neState := new(dborm.NeState)
|
|
neState.NeType = ne.NeType
|
|
neState.NeId = ne.NeId
|
|
neState.Version = state.Version
|
|
neState.Capability = state.Capability
|
|
neState.SerialNum = state.SerialNum
|
|
neState.ExpiryDate = *dateStr
|
|
cu, _ := json.Marshal(state.CpuUsage)
|
|
neState.CpuUsage = string(cu)
|
|
mu, _ := json.Marshal(state.MemUsage)
|
|
neState.MemUsage = string(mu)
|
|
ds, _ := json.Marshal(state.DiskSpace)
|
|
neState.DiskSpace = string(ds)
|
|
log.Trace("neState:", neState)
|
|
_, err := dborm.XormInsertNeState(neState)
|
|
if err != nil {
|
|
log.Error("Failed to insert ne_state:", err)
|
|
failNum++
|
|
continue
|
|
}
|
|
succNum++
|
|
default:
|
|
log.Trace("response body:", string(response.Body()))
|
|
body := new(map[string]interface{})
|
|
_ = json.Unmarshal(response.Body(), &body)
|
|
failNum++
|
|
}
|
|
}
|
|
|
|
// 返回结果,用于记录执行结果
|
|
return map[string]any{
|
|
"succNum": succNum,
|
|
"failNum": failNum,
|
|
}, nil
|
|
}
|