golang 获取系统的主机 CPU 内存 磁盘等信息

news/2024/7/7 19:17:14 标签: golang, 开发语言

golang__CPU___0">golang 获取系统的主机 CPU 内存 磁盘等信息

要求

需要go1.18或更高版本

官方地址:https://github.com/shirou/gopsutil

使用

#下载包
go get github.com/shirou/gopsutil/v3/cpu
go get github.com/shirou/gopsutil/v3/disk
go get github.com/shirou/gopsutil/v3/host
go get github.com/shirou/gopsutil/v3/mem
go get github.com/shirou/gopsutil/v3/net

使用gin定义接口

golang">hostRouters := r.Group("/host", func(context *gin.Context) {})
	{
		hostRouters.GET("stats", func(c *gin.Context) {
			statMap := make(map[string]interface{})
			// 获取主机相关信息
			hostInfo, _ := host.Info()
			hostMap := make(map[string]interface{})
			hostMap["uptime"] = hostInfo.Uptime                   //运行时间
			hostMap["bootTime"] = hostInfo.BootTime               //启动时间
			hostMap["procs"] = hostInfo.Procs                     //进程数
			hostMap["os"] = hostInfo.OS                           //操作系统
			hostMap["platform"] = hostInfo.Platform               //平台
			hostMap["platformVersion"] = hostInfo.PlatformVersion //平台版本
			hostMap["kernelArch"] = hostInfo.KernelArch           //内核
			hostMap["kernelVersion"] = hostInfo.KernelVersion     //内核版本
			statMap["hosts"] = hostMap

			// 获取内存信息
			memInfo, _ := mem.VirtualMemory()
			memMap := make(map[string]interface{})
			memMap["total"] = memInfo.Total             //总内存
			memMap["available"] = memInfo.Available     //可用内存
			memMap["used"] = memInfo.Used               //已使用内存
			memMap["free"] = memInfo.Free               //剩余内存
			memMap["usedPercent"] = memInfo.UsedPercent //百分比
			memMap["buffers"] = memInfo.Buffers         //缓存
			memMap["shared"] = memInfo.Shared           //共享内存
			memMap["cached"] = memInfo.Cached           //缓冲区
			statMap["mems"] = memMap

			// 获取CPU信息
			cpuInfo, _ := cpu.Info()
			var cpuMapArr []map[string]interface{}
			for _, c := range cpuInfo {
				cpuMap := make(map[string]interface{})
				cpuMap["cpu"] = c.CPU + 1         //第几个CPU 从0开始的
				cpuMap["cores"] = c.Cores         //CPU的核数
				cpuMap["modelName"] = c.ModelName //CPU类型
				cpuMapArr = append(cpuMapArr, cpuMap)
			}
			statMap["cpus"] = cpuMapArr

			// 获取IO信息
			ioInfo, _ := net.IOCounters(false)
			var ioMapArr []map[string]interface{}
			for _, i := range ioInfo {
				ioMap := make(map[string]interface{})
				ioMap["ioName"] = i.Name             //网口名
				ioMap["bytesSent"] = i.BytesSent     //发送字节数
				ioMap["bytesRecv"] = i.BytesRecv     //接收字节数
				ioMap["packetsSent"] = i.PacketsSent //发送的数据包数
				ioMap["packetsRecv"] = i.PacketsRecv //接收的数据包数
				ioMapArr = append(ioMapArr, ioMap)
			}
			statMap["ios"] = ioMapArr

			// 获取磁盘信息
			partitions, _ := disk.Partitions(false)
			var diskMapArr []map[string]interface{}
			for _, partition := range partitions {
				diskMap := make(map[string]interface{})
				usage, _ := disk.Usage(partition.Mountpoint)
				diskMap["disk"] = partition.Mountpoint     //第几块磁盘
				diskMap["total"] = usage.Total             //总大小
				diskMap["free"] = usage.Free               //剩余空间
				diskMap["used"] = usage.Used               //已使用空间
				diskMap["usedPercent"] = usage.UsedPercent //百分比
				diskMapArr = append(diskMapArr, diskMap)
			}
			statMap["disks"] = diskMapArr

			util.R(c, nil, statMap)
		})
	}

调用接口,查看接口响应数据

{
    "code": "0",
    "msg": "成功",
    "data": {
        "cpus": [
            {
                "cores": 1,
                "cpu": 1,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 2,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 3,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 4,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 5,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 6,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 7,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 8,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 9,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 10,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 11,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 12,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 13,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 14,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 15,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 16,
                "modelName": ""
            }
        ],
        "disks": [
            {
                "disk": "/etc/hosts",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            },
            {
                "disk": "/dev/termination-log",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            },
            {
                "disk": "/etc/hostname",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            },
            {
                "disk": "/etc/resolv.conf",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            }
        ],
        "hosts": {
            "bootTime": 1704638867,
            "kernelArch": "aarch64",
            "kernelVersion": "5.10.0-136.40.0.117.oe2203sp1.aarch64",
            "os": "linux",
            "platform": "alpine",
            "platformVersion": "3.19.0",
            "procs": 1,
            "uptime": 14905256
        },
        "ios": [
            {
                "bytesRecv": 111431059,
                "bytesSent": 209346524,
                "ioName": "all",
                "packetsRecv": 1505753,
                "packetsSent": 287887
            }
        ],
        "mems": {
            "available": 48697397248,
            "buffers": 16645812224,
            "cached": 33186672640,
            "free": 2395566080,
            "shared": 2713157632,
            "total": 133410463744,
            "used": 81182412800,
            "usedPercent": 60.85160827847815
        }
    }
}

最后图表显示

在这里插入图片描述


http://www.niftyadmin.cn/n/5534920.html

相关文章

macOS笔记

1、MAC中抹掉就是格式化; 2、MAC中拔出U盘:在桌面找到U盘,点击右键显示“推出***”,点击退出。 3、MAC系统版本: macOS 11: Big Sur macOS 12 Monterey macOS 13 Ventura macOS 14 Sonoma macOS 15 Sequoia 4、通用快捷键&#xf…

P2P文件传输协议介绍

P2P文件传输协议是一种基于对等网络(Peer-to-Peer,简称P2P)的文件共享和传输技术。以下是关于P2P文件传输协议的详细介绍: 一、定义与原理 P2P文件传输协议允许网络中的各个节点(即计算机或其他设备)之间…

Python的Django部署uwsgi后自签名实现的HTTPS

通过SSL/TLS来加密和客户端的通信内容。提高网络安全性,但是会损耗部分的服务器资源。 HTTPS 的原理图。 web.key 是打死也不能给其他人的。一定要保存好。里面主要是私钥。是各种认证的根基。本地测试的话生成1024的即可,如果是生产环境推荐使用2048。…

ChatGPT-5:开创对话式AI的新纪元

随着科技的飞速发展,人工智能(AI)正在迅速改变我们的生活方式。作为AI技术的前沿代表之一,ChatGPT自其初次发布以来,就以其强大的语言理解和生成能力受到了广泛关注和应用。如今,OpenAI推出最新版本——Cha…

EHS是什么意思啊?EHS系统有什么作用?

当你走进一家现代化的工厂或企业,你可能会好奇:这些繁忙的生产线和高效运转的设备背后,是如何确保员工的安全、环境的保护和产品的质量的?答案可能就藏在“EHS系统”这个名词里。 那么,EHS是什么意思啊?它…

不看后悔!国内AI大比拼的精彩看点全汇总

至2022年AI爆发后,在中国已催生了上千个AI产品。 这些产品涵盖了从头部大厂到高等院校,再到初创企业的广泛阵容。 如: 大厂:百度文心、阿里通义、腾讯元宝、字节豆包、讯飞星火等高校:清华大学、北京大学等初创&…

Flutter Navigator.popUntil 参数传递

Flutter 使用页面传参 以下是 在flutter 中页面传参的常用形式,都可以有有直接的传值参数提供。 Navigator.push #跳转到指定页面 压栈路由表Navigator.pushReplacement #关闭当前页面 跳转到指定页面压栈路由表Navigator.pus…

测试Andrew NG的语言翻译Agent

我正在测试 Andrew Ng 的语言翻译 A​​I 代理系统及其在逆变换下的稳定性。 给定源语言的文本,我们应用翻译函数 f,然后应用 f 的逆。它应该是不变的: 但是,数学与语言翻译有什么关系? 在完美的系统中,从…