[Agent] [Status] agent metric accomplish

This commit is contained in:
zeaslity
2023-12-21 11:39:19 +08:00
parent 8becc27472
commit 53f4f526cf
9 changed files with 246 additions and 49 deletions

View File

@@ -1,12 +1,14 @@
package status
import (
"agent-go/g"
logger2 "agent-go/logger"
"fmt"
"time"
)
var log = logger2.Log
var pool = g.G.P
type StatusMessage struct {
/**
@@ -20,11 +22,107 @@ type StatusMessage struct {
metricRepeatPinch int `json:"metricRepeatPinch,omitempty"`
}
type AgentStatus struct {
CPUStatus *CPUMetric
MemoryStatus *MemoryMetric
NetworkStatus *NetworkStatus
DiskStatus *DiskStatus
type AgentMetric struct {
CPUMetric *CPUMetric
MemoryMetric *MemoryMetric
NetworkMetric []NetworkMetric
DiskInfo []DiskInfo
DockerMetric *DockerMetric
}
func Ping() string {
return "PONG"
}
func ReportAgentMetric() *AgentMetric {
lenOfAgentMetric := 5
waitResultChan := make(chan string, lenOfAgentMetric)
timeout := time.After(5 * time.Second)
var err error
var cpuMetric *CPUMetric
err = pool.Submit(func() {
cpuMetric, err = GetCPUMetric()
if err != nil {
log.ErrorF("获取Agent的状态出现错误 请检查 => %v", err)
waitResultChan <- "GetCPUMetric error !"
}
waitResultChan <- "GetCPUMetric success !"
})
if err != nil {
log.ErrorF("[ReportAgentMetric] - GetCPUMetric exec error => %v", err)
}
var memoryMetric *MemoryMetric
err = pool.Submit(func() {
memoryMetric, err = GetMemoryMetric()
if err != nil {
log.ErrorF("获取Agent的状态出现错误 请检查 => %v", err)
waitResultChan <- "GetMemoryMetric error !"
}
waitResultChan <- "GetMemoryMetric success !"
})
if err != nil {
log.ErrorF("[ReportAgentMetric] - GetMemoryMetric exec error => %v", err)
}
var diskInfoList []DiskInfo
err = pool.Submit(func() {
diskInfoList, err = GetDiskInfo()
if err != nil {
log.ErrorF("获取Agent的状态出现错误 请检查 => %v", err)
waitResultChan <- "GetDiskInfo error !"
}
waitResultChan <- "GetDiskInfo success !"
})
if err != nil {
log.ErrorF("[ReportAgentMetric] - GetDiskInfo exec error => %v", err)
}
var networkMetric []NetworkMetric
err = pool.Submit(func() {
networkMetric, err = GetNetworkMetric()
if err != nil {
log.ErrorF("获取Agent的状态出现错误 请检查 => %v", err)
waitResultChan <- "GetNetworkMetric error !"
}
waitResultChan <- "GetNetworkMetric success !"
})
if err != nil {
log.ErrorF("[ReportAgentMetric] - GetNetworkMetric exec error => %v", err)
}
var dockerMetric *DockerMetric
err = pool.Submit(func() {
dockerMetric, err = GetDockerMetric()
if err != nil {
log.ErrorF("获取Agent的状态出现错误 请检查 => %v", err)
waitResultChan <- "GetDockerMetric error !"
}
waitResultChan <- "GetDockerMetric success !"
})
if err != nil {
log.ErrorF("[ReportAgentMetric] - GetDockerMetric exec error => %v", err)
}
for i := 0; i < lenOfAgentMetric; i++ {
select {
case result := <-waitResultChan:
log.DebugF("[ReportAgentMetric] - metric received => %s", result)
case <-timeout:
fmt.Println("[ReportAgentMetric] - Timeout! Not all results received.")
break
}
}
return &AgentMetric{
CPUMetric: cpuMetric,
MemoryMetric: memoryMetric,
NetworkMetric: networkMetric,
DiskInfo: diskInfoList,
DockerMetric: dockerMetric,
}
}
func ConvertToFormat(eventData float64) string {
@@ -38,26 +136,3 @@ func ConvertToFormat(eventData float64) string {
milliseconds := duration.Milliseconds() % 1000
return fmt.Sprintf("%02d:%02d:%02d,%03d", hours, minutes, seconds, milliseconds)
}
func Ping() string {
return "PONG"
}
func ReportAppStatus() *AgentStatus {
cpuStatus, cpuerr := GetCPUMetric()
memoryStatus, memerr := GetMemoryStatus()
networkStatus, neterr := GetNetworkStatus()
if cpuerr != nil || memerr != nil || neterr != nil {
log.ErrorF("获取Agent的状态出现错误 请检查")
return nil
}
diskStatus := GetDiskStatus()
return &AgentStatus{
CPUStatus: cpuStatus,
MemoryStatus: memoryStatus,
NetworkStatus: networkStatus,
DiskStatus: diskStatus,
}
}