Files
ProjectOctopus/agent-go/status/Status.go
2024-01-18 15:32:50 +08:00

154 lines
3.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}