首页 > 其他分享 >gopsutil使用样例

gopsutil使用样例

时间:2023-01-05 17:59:01浏览次数:38  
标签:err fmt 样例 send Sprintf 使用 Println recv gopsutil

==目的==

增加对服务器使用情况的监控。

 

==引入==

go get github.com/shirou/gopsutil
go get github.com/yusufpapurcu/wmi

 

==代码==

package main

import (
    "fmt"
    "github.com/shirou/gopsutil/cpu"
    "github.com/shirou/gopsutil/disk"
    "github.com/shirou/gopsutil/host"
    "github.com/shirou/gopsutil/load"
    "github.com/shirou/gopsutil/mem"
    "github.com/shirou/gopsutil/net"
    "time"
)

func main() {
    getCpuInfo()
    getCpuLoad()
    fmt.Println("----------")
    getMemInfo()
    fmt.Println("----------")
    getHostInfo()
    fmt.Println("----------")
    getDiskInfo()
    fmt.Println("----------")
    getNetInfo()
}

func getCpuInfo() {
    cpuNumber, err := cpu.Counts(true)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(fmt.Sprintf("CPU核心数: %v", cpuNumber))

    cpuPercent, err := cpu.Percent(time.Second, true)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(fmt.Sprintf("CPU使用率: %.1f%%", cpuPercent[0]))
}

func getCpuLoad() {
    loadInfo, err := load.Avg()
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(fmt.Sprintf("CPU平均负载: %v", loadInfo))
}

func getMemInfo() {
    memInfo, err := mem.VirtualMemory()
    if err != nil {
        fmt.Println(err.Error())
    }

    // 总内存(GB)
    memTotal := memInfo.Total / 1024 / 1024 / 1024
    fmt.Println(fmt.Sprintf("总内存: %v GB", memTotal))

    // 已用内存(MB)
    memUsed := memInfo.Used / 1024 / 1024
    fmt.Println(fmt.Sprintf("已用内存: %v MB", memUsed))

    // 可用内存(MB)
    memAva := memInfo.Available / 1024 / 1024
    fmt.Println(fmt.Sprintf("可用内存: %v MB", memAva))

    // 内存使用率
    memUsedPercent := memInfo.UsedPercent
    fmt.Println(fmt.Sprintf("内存使用率: %.1f%%", memUsedPercent))
}

func getHostInfo() {
    hostInfo, err := host.Info()
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(fmt.Sprintf("主机名: %v", hostInfo.Hostname))
    fmt.Println(fmt.Sprintf("操作系统: %v", hostInfo.Platform))
}

func getDiskInfo() {
    diskPart, err := disk.Partitions(false)
    if err != nil {
        fmt.Println(err)
    }
    for _, dp := range diskPart {
        fmt.Println(dp)
        diskUsed, _ := disk.Usage(dp.Mountpoint)
        fmt.Println(fmt.Sprintf("分区总大小: %d MB", diskUsed.Total/1024/1024))
        fmt.Println(fmt.Sprintf("分区使用率: %.1f%%", diskUsed.UsedPercent))
        fmt.Println(fmt.Sprintf("分区inode使用率: %.1f%%", diskUsed.InodesUsedPercent))
    }
}

func getNetInfo() {
    info, _ := net.IOCounters(true)
    for index, v := range info {
        fmt.Println(fmt.Sprintf("%v:%v send:%v recv:%v", index, v, v.BytesSent, v.BytesRecv))
    }
}

 

==结果==

CPU核心数: 8
CPU使用率: 13.8%
CPU平均负载: {"load1":0,"load5":0,"load15":0}
----------
总内存: 31 GB
已用内存: 16078 MB
可用内存: 16462 MB
内存使用率: 49.0%
----------
主机名: RCNL5CG0519B67
操作系统: Microsoft Windows 10 Pro
----------
{"device":"C:","mountpoint":"C:","fstype":"NTFS","opts":"rw.compress"}
分区总大小: 511158 MB
分区使用率: 60.9%
分区inode使用率: 0.0%
{"device":"D:","mountpoint":"D:","fstype":"NTFS","opts":"rw.compress"}
分区总大小: 464131 MB
分区使用率: 20.3%
分区inode使用率: 0.0%
----------
0:{"name":"本地连接 2","bytesSent":5509958,"bytesRecv":21418867,"packetsSent":15311,"packetsRecv":19217,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:5509958 recv:21418867
1:{"name":"本地连接* 9","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0
2:{"name":"本地连接* 10","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0
3:{"name":"以太网 5","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0
4:{"name":"VMware Network Adapter VMnet1","bytesSent":45086,"bytesRecv":229,"packetsSent":220,"packetsRecv":229,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:45086 recv:229
5:{"name":"VMware Network Adapter VMnet8","bytesSent":83522,"bytesRecv":228,"packetsSent":220,"packetsRecv":228,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:83522 recv:228
6:{"name":"WLAN","bytesSent":487797694,"bytesRecv":1544453142,"packetsSent":2882494,"packetsRecv":4818176,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:487797694 recv:1544453142
7:{"name":"以太网 4","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0
8:{"name":"Loopback Pseudo-Interface 1","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0

 

--end--

标签:err,fmt,样例,send,Sprintf,使用,Println,recv,gopsutil
From: https://www.cnblogs.com/quchunhui/p/17028432.html

相关文章

  • 使用嵌套的ScriptableObject及ReorderableList创建习题持久化数据
    使用嵌套的ScriptableObject及ReorderableList创建习题持久化数据效果展示题集持久化数据:存储题目,可以直接在inspector面板上创建对应的问题子项问题持久化数据:源码......
  • static using 与 global using的使用和隐式类型的转换
    Result类型是许多编程语言中处理错误的常用方式,包括C#的dotNext库。在本文中,我们将通过例子回顾C#中using语句和隐式类型转换的使用。预期效果下面是一个示例......
  • Android中RelativeLayout及TableLayout使用说明
    RelativeLayout用到的一些重要的属性:第一类:属性值为true或falseandroid:layout_centerHrizontal水平居中android:layout_centerVertical垂直居中android:layout_centerIn......
  • 使用neo4j建立图形数据库(二)
    使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4jserver)发布时间:2022/6/2513:16:06 目录一、文件准备二、软件准备--(windows)neo4jb......
  • 内存注册机使用
    找到正确注册码在程序中出现位置: 中断地址:访问注册码地址的语句地址。中断次数:有些软件在读取正确注册码前也会访问这个地址,在读取注册码时再度使用此地址。这种情况......
  • QQ提示当前网页非官方页面,请勿输入QQ账号和密码,如需访问,请复制后使用浏览器访问...
    原文链接:https://www.cnblogs.com/xiaohi/p/14807206.html解决方法:关注微信公众号:腾讯安全反诈骗实验室;网址申诉。   ......
  • ABAP基础一:ALV样例
    REPORTzly_report.*********ReportDemo*****************************************本程序主要将普通的ALV报表做拆分讲解*一个简单的ALV包括以下一个部分*1.数据定......
  • 全面使用禅道做敏捷开发的规范化管理分享
    ​作者:李士心 全面采用禅道的敏捷开发模式进行整个软件开发生命周期的管理,需求->设计->编码->测试->交付这四个阶段全部用禅道对应的功能进行规范化管理。岗位划分:1、项目......
  • pytest测试使用
    固件:pytest.fixture()定义固件pytest会在执行测试函数之前(或之后)加载运行它们,最常见的可能就是数据库的初始连接和最后关闭操作标记:pytest.mark.***pytest会在执行......
  • iperf3使用
    一、iperf3介绍iperf3可以测试网络带宽,二、iperf3安装iper3下载地址:https://iperf.fr/iperf-download.php2.1windows下安装iperf3windows下安装iperf3......