mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-09-21 18:56:39 +08:00
80 lines
2.0 KiB
Go
80 lines
2.0 KiB
Go
// Package crons
|
|
// @Link https://github.com/bufanyun/hotgo
|
|
// @Copyright Copyright (c) 2022 HotGo CLI
|
|
// @Author Ms <133814250@qq.com>
|
|
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
|
//
|
|
package crons
|
|
|
|
import (
|
|
"context"
|
|
"github.com/gogf/gf/v2/os/gtime"
|
|
"github.com/shirou/gopsutil/load"
|
|
"github.com/shirou/gopsutil/net"
|
|
"hotgo/internal/global"
|
|
"hotgo/internal/model"
|
|
"hotgo/utility/format"
|
|
"runtime"
|
|
"sync"
|
|
)
|
|
|
|
func init() {
|
|
cronList = append(cronList, Monitor)
|
|
}
|
|
|
|
// Monitor 监控
|
|
var Monitor = &cMonitor{name: "monitor"}
|
|
|
|
type cMonitor struct {
|
|
name string
|
|
sync.RWMutex
|
|
}
|
|
|
|
func (c *cMonitor) GetName() string {
|
|
return c.name
|
|
}
|
|
|
|
// Execute 执行任务
|
|
func (c *cMonitor) Execute(ctx context.Context) {
|
|
c.Lock()
|
|
defer c.Unlock()
|
|
c.NetIO()
|
|
c.loadAvg()
|
|
}
|
|
|
|
func (c *cMonitor) loadAvg() {
|
|
pl, _ := load.Avg()
|
|
counter := model.LoadAvgStats{
|
|
Time: gtime.Now(),
|
|
Avg: pl.Load1,
|
|
Ratio: pl.Load1 / (float64(runtime.NumCPU()) * 2) * 100,
|
|
}
|
|
|
|
global.MonitorData.LoadAvg = append(global.MonitorData.LoadAvg, &counter)
|
|
if len(global.MonitorData.LoadAvg) > 10 {
|
|
global.MonitorData.LoadAvg = append(global.MonitorData.LoadAvg[:0], global.MonitorData.LoadAvg[(1):]...)
|
|
}
|
|
}
|
|
|
|
func (c *cMonitor) NetIO() {
|
|
var counter model.NetIOCounters
|
|
ni, _ := net.IOCounters(true)
|
|
counter.Time = gtime.Now()
|
|
for _, v := range ni {
|
|
counter.BytesSent += v.BytesSent
|
|
counter.BytesRecv += v.BytesRecv
|
|
}
|
|
|
|
if len(global.MonitorData.NetIO) > 0 {
|
|
lastNetIO := global.MonitorData.NetIO[len(global.MonitorData.NetIO)-1]
|
|
sub := counter.Time.Sub(lastNetIO.Time).Seconds()
|
|
counter.Down = format.Round2Float64((float64(counter.BytesRecv - lastNetIO.BytesRecv)) / sub)
|
|
counter.UP = format.Round2Float64((float64(counter.BytesSent - lastNetIO.BytesSent)) / sub)
|
|
}
|
|
|
|
global.MonitorData.NetIO = append(global.MonitorData.NetIO, &counter)
|
|
if len(global.MonitorData.NetIO) > 10 {
|
|
global.MonitorData.NetIO = append(global.MonitorData.NetIO[:0], global.MonitorData.NetIO[(1):]...)
|
|
}
|
|
}
|