[Golang] 纯文本查看 复制代码
package main
import (
"fmt"
"os"
"time"
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/disk"
"github.com/shirou/gopsutil/v3/mem"
"github.com/spf13/viper"
"github.com/wanghuiyt/ding"
)
// [url=https://github.com/wanghuiyt/ding]https://github.com/wanghuiyt/ding[/url]
// 全局配置变量
var config *viper.Viper
func GetCpuPercent() float64 {
percent, _ := cpu.Percent(time.Second, false)
return percent[0]
}
func GetMemPercent() float64 {
memInfo, _ := mem.VirtualMemory()
return memInfo.UsedPercent
}
func GetDiskPercent() float64 {
parts, _ := disk.Partitions(true)
diskInfo, _ := disk.Usage(parts[1].Mountpoint)
return diskInfo.UsedPercent
}
func sendToDingDing(sendContent string) {
// 接收string类型并发送内容
d := ding.Webhook{
AccessToken: config.GetString("dingding.AccessToken"),
Secret: config.GetString("dingding.Secret"),
EnableAt: true, // 开启艾特
AtAll: true, // 艾特所有人
}
err := d.SendMessage(sendContent)
if err != nil {
fmt.Println(err)
}
}
func checkItem() {
checkItems := config.GetStringMapString("checkItems")
// fmt.Println(checkItems)
for item, _ := range checkItems {
cpuPercent := int32(GetCpuPercent())
memPercent := int32(GetMemPercent())
diskPercent := int32(GetDiskPercent())
if item == "cpu" && cpuPercent > config.GetInt32(fmt.Sprintf("checkItems.%s", item)) {
timeStr := time.Now().Format("2006-01-02 15:04:05")
sendMessageContent := fmt.Sprintf("[%v] %v 使用率超过设定的[%v%%],当前使用率[%v%%]\n", timeStr, item, config.GetString(fmt.Sprintf("checkItems.%s", item)), cpuPercent)
sendToDingDing(sendMessageContent)
fmt.Printf("[%v] %v 使用率超过设定的[%v%%] ,当前使用率[%v%%]\n", timeStr, item, config.GetString(fmt.Sprintf("checkItems.%s", item)), cpuPercent)
}
if item == "mem" && memPercent > config.GetInt32(fmt.Sprintf("checkItems.%s", item)) {
timeStr := time.Now().Format("2006-01-02 15:04:05")
sendMessageContent := fmt.Sprintf("[%v] %v 使用率超过设定的[%v%%],当前使用率[%v%%] \n", timeStr, item, config.GetString(fmt.Sprintf("checkItems.%s", item)), memPercent)
sendToDingDing(sendMessageContent)
fmt.Printf("[%v] %v 使用率超过设定的[%v%%],当前使用率[%v%%] \n", timeStr, item, config.GetString(fmt.Sprintf("checkItems.%s", item)), memPercent)
}
if item == "disk" && diskPercent > config.GetInt32(fmt.Sprintf("checkItems.%s", item)) {
timeStr := time.Now().Format("2006-01-02 15:04:05")
sendMessageContent := fmt.Sprintf("[%v] %v 使用率超过设定的[%v%%],当前使用率[%v%%] \n", timeStr, item, config.GetString(fmt.Sprintf("checkItems.%s", item)), diskPercent)
sendToDingDing(sendMessageContent)
fmt.Printf("[%v] %v 使用率超过设定的[%v%%],当前使用率[%v%%] \n", timeStr, item, config.GetString(fmt.Sprintf("checkItems.%s", item)), diskPercent)
}
}
}
func main() {
//获取项目的执行路径
path, err := os.Getwd()
if err != nil {
panic(err)
}
config = viper.New()
config.AddConfigPath(path) //设置读取的文件路径
config.SetConfigName("config") //设置读取的文件名
config.SetConfigType("yaml") //设置文件的类型
//尝试进行配置读取
if err := config.ReadInConfig(); err != nil {
panic(err)
}
sleepTime := config.GetInt32("checkTime")
fmt.Printf("循环间隔:%v秒\n", sleepTime)
for {
checkItem()
timeStr := time.Now().Format("2006-01-02 15:04:05")
fmt.Printf("[%v] 52pojie_vsyour提醒: 本次检测已完成, [%v秒] 后再次检测!\n", timeStr, sleepTime)
time.Sleep(time.Duration(sleepTime) * time.Second)
}
}