Files
2023-10-03 15:57:52 +08:00

74 lines
2.5 KiB
Go
Raw Permalink 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 server_utils
import (
"context"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gcache"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/gconv"
"home-network-watcher/manifest"
"math"
)
type uNezha struct{}
var Nezha = &uNezha{}
// GetAllServerInfo
//
// @dc: 获取所有服务器信息
// @author: hamster @date:2023/9/18 14:37:42
func (u *uNezha) GetAllServerInfo(ctx context.Context) (err error) {
// 1. 获取所有服务器信息
//TODO (hamster) 2023/10/3: 优化获取服务器列表序号的方式
serverList := []int{1, 2, 3, 4}
nezhaClient := g.Client().SetHeader("Authorization", manifest.NezhaApiKey)
serverDataList := make([]g.Map, 0)
for _, value := range serverList {
nezhaApi := manifest.NezhaApiUrl + gconv.String(value)
response, err := nezhaClient.Get(ctx, nezhaApi)
if err != nil {
return err
}
// 整理数据
cacheJson := g.Map{}
resJsonData := gjson.New(response.ReadAllString()).Get("result.0").Map()
serverJsonData := gjson.New(resJsonData)
cacheJson["id"] = serverJsonData.Get("id").Int()
cacheJson["name"] = serverJsonData.Get("name").String()
// CPU 占用率保留两位小数
cpuValue := serverJsonData.Get("status.CPU").Float64()
roundedValue := math.Round(cpuValue*100) / 100
cacheJson["cpu"] = roundedValue
// 内存占用率保留两位小数
memoryValue := serverJsonData.Get("host.MemTotal").Float64()
memoryUsedValue := serverJsonData.Get("status.MemUsed").Float64()
memoryUsedPercent := math.Round(memoryUsedValue/memoryValue*10000) / 100
cacheJson["memory"] = memoryUsedPercent
// 磁盘占用率保留两位小数
diskValue := serverJsonData.Get("host.DiskTotal").Float64()
diskUsedValue := serverJsonData.Get("status.DiskUsed").Float64()
diskUsedPercent := math.Round(diskUsedValue/diskValue*10000) / 100
cacheJson["disk"] = diskUsedPercent
// 在线时长,转换为天
uptimeValue := serverJsonData.Get("status.Uptime").Float64()
uptimeDay := math.Round(uptimeValue/86400*100) / 100
cacheJson["uptime"] = uptimeDay
serverDataList = append(serverDataList, cacheJson)
_ = response.Close()
// 在线状态通过last_active判断
lastActiveValue := serverJsonData.Get("last_active").Int64()
if gtime.Now().Unix()-lastActiveValue > 300 {
cacheJson["status"] = "offline"
} else {
cacheJson["status"] = "online"
}
}
err = gcache.Set(ctx, manifest.ServerDataCacheKey, serverDataList, 0)
if err != nil {
return err
}
return
}