[ Cmii ] [ Octopus ] - reformat agent-go - 1
This commit is contained in:
308
agent-go/a_status/Status.go
Normal file
308
agent-go/a_status/Status.go
Normal file
@@ -0,0 +1,308 @@
|
||||
package a_status
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
"wdd.io/agent-common/logger"
|
||||
"wdd.io/agent-go/g"
|
||||
)
|
||||
|
||||
var log = logger.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
|
||||
DiskMetric []DiskInfo
|
||||
DockerMetric *DockerMetric
|
||||
}
|
||||
|
||||
type AgentInfo struct {
|
||||
CPUInfo *CPUInfo
|
||||
MemoryInfo *MemoryInfo
|
||||
NetworkInfo []NetworkInfo
|
||||
DiskInfo []DiskInfo
|
||||
HostInfo *HostInfo
|
||||
DockerInfo *DockerMetric
|
||||
}
|
||||
|
||||
func Activate() {
|
||||
log.Info("Module [ STATUS ] activated !")
|
||||
//v, ok := (octopusMessage.Content).(string)
|
||||
//if !ok {
|
||||
// log.ErrorF("convert to string is wrong %s", v)
|
||||
//}
|
||||
//
|
||||
//statusMsgString := octopusMessage.Content.(string)
|
||||
//
|
||||
//var statusMessage *a_status.StatusMessage
|
||||
//err := json.Unmarshal([]byte(statusMsgString), &statusMessage)
|
||||
//if err != nil {
|
||||
// fmt.Println(err.Error())
|
||||
// log.Error(fmt.Sprintf("status message convert to json is wrong! msg is => %s", octopusMessage))
|
||||
// return
|
||||
//}
|
||||
//
|
||||
//// OMessageStatusTypeEnum
|
||||
//var statusRes string
|
||||
//if strings.HasPrefix(statusMessage.StatusType, "PING") {
|
||||
// // ping info
|
||||
// statusRes = a_status.Ping()
|
||||
//} else if strings.HasPrefix(statusMessage.StatusType, "METRIC") {
|
||||
// // metric info
|
||||
// agentStatusString, _ := json.Marshal(a_status.ReportAgentMetric())
|
||||
// statusRes = string(agentStatusString)
|
||||
//} else if strings.HasPrefix(statusMessage.StatusType, "INFO") {
|
||||
// log.InfoF("[statusOMHandler] - call for agent info !")
|
||||
//} else {
|
||||
// log.WarnF("[statusOMHandler] - error octopus status message type of %s", statusMessage.StatusType)
|
||||
//}
|
||||
//
|
||||
//// 返回消息
|
||||
//// 组装消息
|
||||
//octopusMessage.ACTime = utils.ParseDateTimeTime()
|
||||
//octopusMessage.Result = statusRes
|
||||
//// 发送回去
|
||||
//statusOctopusReplayMessage, _ := json.Marshal(octopusMessage)
|
||||
//OctopusToServerQueue.Send(statusOctopusReplayMessage)
|
||||
//
|
||||
//// 输出日志
|
||||
//log.InfoF("接收到查询Agent状态的请求,结果为 => %s", statusRes)
|
||||
}
|
||||
|
||||
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 !"
|
||||
return
|
||||
}
|
||||
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 !"
|
||||
return
|
||||
}
|
||||
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 !"
|
||||
return
|
||||
}
|
||||
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 !"
|
||||
return
|
||||
}
|
||||
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 !"
|
||||
return
|
||||
}
|
||||
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,
|
||||
DiskMetric: diskInfoList,
|
||||
DockerMetric: dockerMetric,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func ReportAgentInfo() *AgentInfo {
|
||||
|
||||
lenOfAgentMetric := 6
|
||||
waitResultChan := make(chan string, lenOfAgentMetric)
|
||||
timeout := time.After(5 * time.Second)
|
||||
var err error
|
||||
|
||||
var cpuInfo *CPUInfo
|
||||
err = pool.Submit(func() {
|
||||
cpuInfo, err = GetCPUInfo()
|
||||
if err != nil {
|
||||
log.ErrorF("获取Agent的状态出现错误! 请检查 => %v", err)
|
||||
waitResultChan <- "GetCPUInfo error !"
|
||||
return
|
||||
}
|
||||
waitResultChan <- "GetCPUInfo success !"
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorF("[ReportAgentInfo] - GetCPUInfo exec error => %v", err)
|
||||
}
|
||||
|
||||
var memoryInfo *MemoryInfo
|
||||
err = pool.Submit(func() {
|
||||
memoryInfo, err = GetMemoryInfo()
|
||||
if err != nil {
|
||||
log.ErrorF("获取Agent的状态出现错误! 请检查 => %v", err)
|
||||
waitResultChan <- "GetMemoryInfo error !"
|
||||
return
|
||||
}
|
||||
waitResultChan <- "GetMemoryInfo success !"
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorF("[ReportAgentInfo] - GetMemoryInfo 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 !"
|
||||
return
|
||||
}
|
||||
waitResultChan <- "GetDiskInfo success !"
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorF("[ReportAgentInfo] - 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 !"
|
||||
return
|
||||
}
|
||||
waitResultChan <- "hostInfo success !"
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorF("[ReportAgentInfo] - hostInfo exec error => %v", err)
|
||||
}
|
||||
|
||||
var networkInfo []NetworkInfo
|
||||
err = pool.Submit(func() {
|
||||
networkInfo, err = GetNetworkInfo()
|
||||
if err != nil {
|
||||
log.ErrorF("获取Agent的状态出现错误! 请检查 => %v", err)
|
||||
waitResultChan <- "GetNetworkInfo error !"
|
||||
return
|
||||
}
|
||||
waitResultChan <- "GetNetworkInfo success !"
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorF("[ReportAgentInfo] - GetNetworkInfo 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 !"
|
||||
return
|
||||
}
|
||||
waitResultChan <- "GetDockerMetric success !"
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorF("[ReportAgentInfo] - GetDockerMetric exec error => %v", err)
|
||||
}
|
||||
|
||||
for i := 0; i < lenOfAgentMetric; i++ {
|
||||
select {
|
||||
case result := <-waitResultChan:
|
||||
log.DebugF("[ReportAgentInfo] - metric received => %s", result)
|
||||
case <-timeout:
|
||||
fmt.Println("[ReportAgentInfo] - Timeout! Not all results received.")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return &AgentInfo{
|
||||
CPUInfo: cpuInfo,
|
||||
MemoryInfo: memoryInfo,
|
||||
NetworkInfo: networkInfo,
|
||||
DiskInfo: diskInfoList,
|
||||
HostInfo: hostInfo,
|
||||
DockerInfo: 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)
|
||||
}
|
||||
Reference in New Issue
Block a user