154 lines
3.9 KiB
Go
154 lines
3.9 KiB
Go
package status
|
||
|
||
import (
|
||
"agent-go/g"
|
||
logger2 "agent-go/logger"
|
||
"fmt"
|
||
"time"
|
||
)
|
||
|
||
var log = logger2.Log
|
||
var pool = g.G.P
|
||
|
||
type StatusMessage struct {
|
||
/**
|
||
* which kind of status should be return
|
||
"PING";
|
||
* METRIC => short time message
|
||
* ALL => all agent status message
|
||
* */
|
||
StatusType string `json:"statusType,omitempty"`
|
||
MetricRepeatCount int `json:"metricRepeatCount,omitempty"`
|
||
metricRepeatPinch int `json:"metricRepeatPinch,omitempty"`
|
||
}
|
||
|
||
type AgentMetric struct {
|
||
CPUMetric *CPUMetric
|
||
MemoryMetric *MemoryMetric
|
||
NetworkMetric []NetworkMetric
|
||
DiskInfo []DiskInfo
|
||
HostInfo *HostInfo
|
||
DockerMetric *DockerMetric
|
||
}
|
||
|
||
func Ping() string {
|
||
return "PONG"
|
||
}
|
||
|
||
func ReportAgentMetric() *AgentMetric {
|
||
|
||
lenOfAgentMetric := 6
|
||
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 hostInfo *HostInfo
|
||
err = pool.Submit(func() {
|
||
hostInfo, err = GetHostInfo()
|
||
if err != nil {
|
||
log.ErrorF("获取Agent的状态出现错误! 请检查 => %v", err)
|
||
waitResultChan <- "GetHostInfo error !"
|
||
}
|
||
waitResultChan <- "hostInfo success !"
|
||
})
|
||
if err != nil {
|
||
log.ErrorF("[ReportAgentMetric] - hostInfo 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,
|
||
HostInfo: hostInfo,
|
||
DockerMetric: dockerMetric,
|
||
}
|
||
|
||
}
|
||
|
||
func ConvertToFormat(eventData float64) string {
|
||
duration := time.Duration(eventData) * time.Second
|
||
|
||
fmt.Println(duration)
|
||
|
||
hours := int(duration.Hours())
|
||
minutes := int(duration.Minutes()) % 60
|
||
seconds := int(duration.Seconds()) % 60
|
||
milliseconds := duration.Milliseconds() % 1000
|
||
return fmt.Sprintf("%02d:%02d:%02d,%03d", hours, minutes, seconds, milliseconds)
|
||
}
|