go 统计资源消耗

import (
    "runtime"
    "time"

    "github.com/shirou/gopsutil/v3/cpu"
    "github.com/shirou/gopsutil/v3/disk"
    "github.com/shirou/gopsutil/v3/mem"
)

const (
    B  = 1
    KB = 1024 * B
    MB = 1024 * KB
    GB = 1024 * MB
)

type Server struct {
    Os   Os   `json:"os"`
    Cpu  Cpu  `json:"cpu"`
    Ram  Ram  `json:"ram"`
    Disk Disk `json:"disk"`
}

type Os struct {
    GOOS         string `json:"goos"`
    NumCPU       int    `json:"numCpu"`
    Compiler     string `json:"compiler"`
    GoVersion    string `json:"goVersion"`
    NumGoroutine int    `json:"numGoroutine"`
}

type Cpu struct {
    Cpus  []float64 `json:"cpus"`
    Cores int       `json:"cores"`
}

type Ram struct {
    UsedMB      int `json:"usedMb"`
    TotalMB     int `json:"totalMb"`
    UsedPercent int `json:"usedPercent"`
}

type Disk struct {
    UsedMB      int `json:"usedMb"`
    UsedGB      int `json:"usedGb"`
    TotalMB     int `json:"totalMb"`
    TotalGB     int `json:"totalGb"`
    UsedPercent int `json:"usedPercent"`
}

//@author: [SliverHorn](https://github.com/SliverHorn)
//@function: InitCPU
//@description: OS信息
//@return: o Os, err error

func InitOS() (o Os) {
    o.GOOS = runtime.GOOS
    o.NumCPU = runtime.NumCPU()
    o.Compiler = runtime.Compiler
    o.GoVersion = runtime.Version()
    o.NumGoroutine = runtime.NumGoroutine()
    return o
}

//@author: [SliverHorn](https://github.com/SliverHorn)
//@function: InitCPU
//@description: CPU信息
//@return: c Cpu, err error

func InitCPU() (c Cpu, err error) {
    if cores, err := cpu.Counts(false); err != nil {
        return c, err
    } else {
        c.Cores = cores
    }
    if cpus, err := cpu.Percent(time.Duration(200)*time.Millisecond, true); err != nil {
        return c, err
    } else {
        c.Cpus = cpus
    }
    return c, nil
}

//@author: [SliverHorn](https://github.com/SliverHorn)
//@function: InitRAM
//@description: RAM信息
//@return: r Ram, err error

func InitRAM() (r Ram, err error) {
    if u, err := mem.VirtualMemory(); err != nil {
        return r, err
    } else {
        r.UsedMB = int(u.Used) / MB
        r.TotalMB = int(u.Total) / MB
        r.UsedPercent = int(u.UsedPercent)
    }
    return r, nil
}

//@author: [SliverHorn](https://github.com/SliverHorn)
//@function: InitDisk
//@description: 硬盘信息
//@return: d Disk, err error

func InitDisk() (d Disk, err error) {
    if u, err := disk.Usage("/"); err != nil {
        return d, err
    } else {
        d.UsedMB = int(u.Used) / MB
        d.UsedGB = int(u.Used) / GB
        d.TotalMB = int(u.Total) / MB
        d.TotalGB = int(u.Total) / GB
        d.UsedPercent = int(u.UsedPercent)
    }
    return d, nil
}

 

 

posted @   papering  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2022-11-14 bug修复 双指针 跳出循环中的循环
2022-11-14 携程国际化进程中,是怎么做站点多语言处理的
2019-11-14 内存保护机制及绕过方案——通过覆盖虚函数表绕过/GS机制
2019-11-14 The Art of Picking Intel Registers Intel寄存器的艺术
2018-11-14 Netty in action—Netty中的ByteBuf
2018-11-14 netty/example/src/main/java/io/netty/example/http/snoop/
2018-11-14 页面加载异常 清除浏览器静态文件 js css 缓存 js动态加载js css文件,可以配置文件后辍,防止浏览器缓存
点击右上角即可分享
微信分享提示