golang 获取系统的主机 CPU 内存 磁盘等信息
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定义接口
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"] = diskMapArrutil.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}}
}
最后图表显示

相关文章:
golang 获取系统的主机 CPU 内存 磁盘等信息
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/gopsuti…...
Infinitar链游新发展新机遇
区块链游戏市场在近年来经历了显著增长,吸引了大量的投资和关注。随着加密货币和NFT(非同质化代币)概念的普及,越来越多的投资者、游戏开发者和看到了区块链技术在游戏领域的应用潜力,纷纷涌入市场。区块链游戏的用户量…...
Figma 被爆出它剽窃了苹果的设计后撤下了AI工具Make Designs
Figma是一款流行的界面设计工具,最近它推出了一个名为Make Designs的新功能,这个功能利用人工智能帮助用户快速设计应用程序界面。但是,这个工具生成的设计竟然和苹果公司的iOS天气应用非常相似,这让外界怀疑Figma是否剽窃了苹果的…...
ERROR | Web server failed to start. Port 8080 was already in use.
错误提示: *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process thats listening on port 8080 or configure thi…...
C++ 类和对象 构造函数
一 类的6个默认成员函数: 如果一个类中什么成员都没有,简称为空类。 例: #include <iostream> class Empty {// 空类,什么成员都没有 }; 空类中真的什么都没有吗?并不是,任何类在什么都不写时&a…...
纯javascript实现图片批量压缩打包zip下载后端ThinkPHP多国语言切换国际站
最近在做一个多国语言的工具站,需要实现多国语言切换,说到多国语言站,肯定是有2种方式,第一是子域名,第二就是子目录。根据自己的需要来确定。 后台配置如下: 前台显示: 前端纯javascript实现…...
使用ChatGPT写论文,只需四步突破论文写作瓶颈!
欢迎关注,为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流 地表最强大的高级学术AI专业版已经开放,拥有全球领先的GPT学术科研应用,有兴趣的朋友可…...
神领物流项目第一天
文章目录 聚焦快递领域首先第一个是验证码模块流程登录接口权限管家 聚焦快递领域 首先第一个是验证码模块流程 首先生成验证码的流程 可以使用工具类去生成验证码 LineCaptcha lineCaptcha CaptchaUtil.createLineCaptcha(160, 60, 4, 26);// 获取值然后存入redis中 strin…...
[作业]10 枚举-排列类
作业: 已做: #include <iostream> using namespace std; int n; int a[100]; void func(int ,int); int main(){cin>>n;func(0,n);return 0; } void func(int k,int m){if(k>m-1){for(int i0;i<m;i){cout<<a[i];}cout<<en…...
vue2(vue-cli3x[vue.config.js])使用cesium新版(1.117.0)配置过程
看来很多解决方法都没有办法,最后终于。呜呜呜呜 这里我用的是vue-cli去搭建的项目的vue2 项目,其实不建议用vue2搭配cesium。因为目前cesium停止了对vue2的版本更新,现在默认安装都是vue3版本,因此需要控制版本,否则…...
【深度学习】常用命令行指令汇总
这些指令对于管理深度学习环境、监控资源使用、调试程序等方面 查看显卡使用情况 要实时监控NVIDIA显卡的状态,可以使用命令: nvidia-smi -l 1这条命令会每秒刷新一次显卡的使用情况,包括GPU利用率、显存使用情况等。 查看当前Python环境 查看当前使用的Python环境,可…...
谷粒商城学习-11-docker安装redis
文章目录 一,拉取Redis镜像1,搜索Redis的Docker镜像2,拉取Redis镜像3,查看已经拉取的镜像 二,创建、启动Redis容器1,创建redis配置文件2,创建及运行Redis容器3,使用docker ps查看运行…...
C++:类继承是什么,怎么继承
一、类继承是什么 首先了解什么是基类,什么是派生类 在面向对象编程中,基类(Base Class 或 Superclass)是一个类的模板,它定义了一些通用的属性和行为。子类(Derived Class 或 Inheritance)可…...
期权学习必看圣书:《3小时快学期权》要在哪里看?
今天带你了解期权学习必看圣书:《3小时快学期权》要在哪里看?《3小时快学期权》是一本关于股票期权基础知识的书籍。 它旨在通过简明、易懂的语言和实用的案例,让读者在短时间内掌握股票期权的基本概念、操作方法和投资策略。通过这本书&…...
Keepalived 双机热备
1. Keepalived 双机热备 keepalived主要用来提供故障切换(failover)和健康检查(Health Checking)。 1.2 Keepalived 热备方式 Keepalived 采用VRRP (Virtual Router Redundancy Protocol,虚拟路由冗…...
基于React和TypeScript的开源白板项目(Github项目分享)
在学习前端开发的过程中,有时候我们需要一些有趣的项目来提升我们的技能。今天我要给大家介绍的是一个非常酷的项目——NinjaSketch,这是一个用React和TypeScript构建的简易白板工具。这个项目使用了Rough.js来实现手绘风格的效果。尽管这个应用不是响应…...
1019记录
人瑞 - SDK - 外派米哈游 1,接口测试的工具 回答的是postman, 改进:JMeter 2,接口502,什么问题导致的?如何定位? 参考答案:502错误定义:是网关错误, 通俗…...
详细设计与概要设计区别-慧哥充电桩开源系统
概要设计更侧重于系统的整体构架和模块划分,而详细设计则关注具体模块的实现细节。在软件开发过程中,这两个阶段虽然紧密相关,但它们各自有着不同的目标和方法。以下是具体分析: 目标 概要设计:概要设计关注系统整体架…...
vue3 引入百度地图的三种方式
本次也是正好写了一个基于VUE3和百度地图的设计,但奈何第一次使用百度地图,在学习的途中遇到了很多问题,也发现网上的材料相对较少,因此做出了一些小总结,后续还会更新。 一、直接引入 直接在public中的index.html中进…...
鸿蒙开发设备管理:【@ohos.usb (USB管理)】
USB管理 本模块主要提供管理USB设备的相关功能,包括查询USB设备列表、批量数据传输、控制命令传输、权限控制等。 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import …...
GIS开发必备:5分钟搞定EPSG3857转WGS84坐标转换(附proj4.js完整代码)
GIS开发实战:从原理到代码实现EPSG3857与WGS84的高效坐标转换 刚接触WebGIS开发的工程师们,常常会被各种坐标系搞得晕头转向。为什么高德地图上显示的位置和GPS设备采集的数据对不上?为什么Leaflet、OpenLayers这些库加载的瓦片地图坐标数值大…...
PLCopen运动控制功能块实战:从单轴控制到多轴联动的5个经典案例解析
PLCopen运动控制功能块实战:从单轴控制到多轴联动的5个经典案例解析 在工业自动化领域,精确的运动控制是实现高效生产的关键。无论是简单的传送带定位,还是复杂的多轴协同作业,PLCopen规范提供的标准化功能块都能为工程师提供强大…...
Matlab散点图进阶:如何用颜色、大小和形状搞定六维数据可视化(附完整代码)
Matlab散点图进阶:如何用颜色、大小和形状搞定六维数据可视化(附完整代码) 在数据分析领域,我们常常需要处理包含多个维度的复杂数据集。传统的二维或三维图表已经无法满足这类数据的可视化需求。本文将深入探讨如何利用Matlab的s…...
别再死记硬背了!用Python脚本+Modbus Poll工具,5分钟搞懂Modbus功能码怎么用
用PythonModbus Poll实战:5分钟解锁功能码核心逻辑 第一次接触Modbus协议时,那些晦涩的功能码总让我头疼——01H、03H、05H这些十六进制代码就像天书,文档里的理论描述看完就忘。直到我发现用Python脚本配合Modbus Poll工具进行实操测试&…...
R语言新手必看:如何用pkgbuild和Sys.which检查并安装Rtools(附绑定教程)
R语言开发环境配置全指南:从Rtools安装到编译环境搭建 刚接触R语言的开发者,在尝试从源代码编译安装某些扩展包时,常常会遇到"make not found"之类的错误提示。这通常意味着系统缺少必要的编译工具链。本文将详细介绍如何在Windows…...
微信小程序--动态切换登录注册标签页
1、try.js的 1.1、data函数 添加 activeTab: login, // 当前激活的标签,默认为登录 1.2、添加一个函数 // 切换登录/注册标签switchTab(e) {const tab e.currentTarget.dataset.tab;this.setData({activeTab: tab});}, 2、try.wxml的代码 <!--pages/try/…...
别再只盯着ODD了!从特斯拉FSD和华为ADS的实战,聊聊ODC(设计运行条件)到底怎么落地
从特斯拉FSD到华为ADS:ODC实战落地的工程密码 当特斯拉车主在暴雨天启动FSD时,系统会先检查挡风玻璃上的雨滴传感器数据;而华为ADS用户试图在未系安全带状态下激活系统,仪表盘会立即弹出红色警告——这些看似简单的交互背后&…...
ES启动失败:深入解析No buffer space available错误及连接数优化策略
1. 当ES启动失败时发生了什么 第一次看到"No buffer space available"这个报错时,我也是一头雾水。那天凌晨三点,线上监控突然报警,ES集群集体罢工,整个搜索服务直接瘫痪。查看日志发现满屏都是"java.net.SocketE…...
【路径规划】传统A星+改进A星(star)彩色蔓延路径规划算法Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
解锁自定义键盘体验:用Vial-QMK打造个性化配置指南
解锁自定义键盘体验:用Vial-QMK打造个性化配置指南 【免费下载链接】vial-qmk QMK fork with Vial-specific features. 项目地址: https://gitcode.com/gh_mirrors/vi/vial-qmk 核心价值:为什么选择Vial-QMK定制键盘? 在机械键盘的世…...
