Bibliothèque d'informations système gopsutils
Dépôt : shirou/gopsutil: psutil for golang (github.com)
Documentation : gopsutil package - github.com/shirou/gopsutil/v3 - Go Packages
Lors du développement, il est souvent nécessaire d'obtenir les informations système de la plateforme sur laquelle le programme s'exécute. Ce processus implique des appels système pour différents systèmes d'exploitation, et l'adaptation nécessite beaucoup de travail et de temps. gopsutils est une bibliothèque d'informations système développée en Go, compatible avec de nombreux systèmes d'exploitation mainstream. Elle supporte actuellement les architectures suivantes :
- FreeBSD i386/amd64/arm
- Linux i386/amd64/arm(raspberry pi)
- Windows i386/amd64/arm/arm64
- Darwin amd64/arm64
- OpenBSD amd64 (Merci @mpfz0r!)
- Solaris amd64 (développé et testé sur SmartOS/Illumos, Merci @jen20!)
Support partiel:
- CPU sur DragonFly BSD
- host sur Linux RISC-V
Cet outil supporte également l'obtention d'informations système des conteneurs Docker.
Installation
Utiliser la commande go get
go get github.com/shirou/gopsutil/v3TIP
Cet article a été écrit sur Windows 10, les résultats peuvent varier selon les systèmes.
Hôte
Les API liées à l'hôte sont fournies par le package host, adaptées pour différents systèmes d'exploitation.
Informations
func Info() (*InfoStat, error)func main() {
info, _ := host.Info()
JsonPrint(info)
}{
"hostname": "LAPTOP-8C92S0HL",
"uptime": 490854,
"bootTime": 1683909241,
"procs": 195,
"os": "windows",
"platform": "Microsoft Windows 10 Home China",
"platformFamily": "Standalone Workstation",
"platformVersion": "10.0.19044.2251 Build 19044.2251",
"kernelVersion": "10.0.19044.2251 Build 19044.2251",
"kernelArch": "x86_64",
"virtualizationSystem": "",
"virtualizationRole": "",
"hostId": "ba697a8c-c555-4329-905c-adc6cb650dde"
}Les autres API de ce package sont des décompositions de Info(), elles ne seront pas démontrées ici.
CPU
Les informations CPU sont fournies par le package cpu, qui propose principalement 4 fonctions pour obtenir les informations CPU, le nombre de cœurs, le taux d'utilisation et les time slices.
Informations
func Info() ([]InfoStat, error)func main() {
info, _ := cpu.Info()
JsonPrint(info)
}[
{
"cpu": 0,
"vendorId": "GenuineIntel",
"family": "198",
"model": "",
"stepping": 0,
"physicalId": "BFEBFBFF000806EC",
"coreId": "",
"cores": 8,
"modelName": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz",
"mhz": 1992,
"cacheSize": 0,
"flags": [],
"microcode": ""
}
]Nombre de cœurs
func Counts(logical bool) (int, error)func main() {
cores, _ := cpu.Counts(true)
JsonPrint(cores)
}8Taux d'utilisation
func Percent(interval time.Duration, percpu bool) ([]float64, error)func main() {
percents, _ := cpu.Percent(time.Second*5, true)
JsonPrint(percents)
}[
4.643962848297214, 4.049844236760125, 5.607476635514018, 5.29595015576324,
3.115264797507788, 2.803738317757009, 3.115264797507788, 2.1806853582554515
]Time slices
func Times(percpu bool) ([]TimesStat, error)func main() {
times, _ := cpu.Times(true)
JsonPrint(times)
}Disque
Les fonctions liées au disque sont fournies par le package disk, certaines sont conçues pour Linux.
Taux d'utilisation
func Usage(path string) (*UsageStat, error)func main() {
use, _ := disk.Usage("/")
JsonPrint(use)
}{
"path": "/",
"fstype": "",
"total": 274152288256,
"free": 251611193344,
"used": 22541094912,
"usedPercent": 8.22210715635224,
"inodesTotal": 0,
"inodesUsed": 0,
"inodesFree": 0,
"inodesUsedPercent": 0
}Partitions
func Partitions(all bool) ([]PartitionStat, error)func main() {
part, _ := disk.Partitions(true)
JsonPrint(part)
}[
{
"device": "C:",
"mountpoint": "C:",
"fstype": "NTFS",
"opts": ["rw", "compress"]
},
{
"device": "D:",
"mountpoint": "D:",
"fstype": "NTFS",
"opts": ["rw", "compress"]
}
]IO
func IOCounters(names ...string) (map[string]IOCountersStat, error)func main() {
part, _ := disk.IOCounters("/")
JsonPrint(part)
}Mémoire
Les API liées à la mémoire sont fournies par le package mem
Informations
func VirtualMemory() (*VirtualMemoryStat, error)func main() {
memory, _ := mem.VirtualMemory()
JsonPrint(memory)
}Mémoire d'échange
func SwapMemory() (*SwapMemoryStat, error)func main() {
memory, _ := mem.SwapMemory()
JsonPrint(memory)
}Périphériques d'échange
func SwapDevices() ([]*SwapDevice, error)func main() {
devices, _ := mem.SwapDevices()
JsonPrint(devices)
}