package main
import (
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/disk"
"github.com/shirou/gopsutil/v3/host"
"github.com/shirou/gopsutil/v3/mem"
"github.com/shirou/gopsutil/v3/net"
"github.com/shirou/gopsutil/v3/process"
)
func host_info() {
println("---------- host start ----------\n")
defer println("\n---------- host end ----------\n\n\n")
if infoStat, err := host.Info(); err != nil {
panic(err)
} else {
println(infoStat.String())
}
println()
if userStats, err := host.Users(); err != nil {
panic(err)
} else {
for _, userStat := range userStats {
println(userStat.String())
}
}
}
func cpu_info() {
println("---------- cpu start ----------\n")
defer println("\n---------- cpu end ----------\n\n\n")
if count, err := cpu.Counts(false); err != nil {
panic(err)
} else {
println("number of physical cores", ":", count)
}
println("")
if infoStats, err := cpu.Info(); err != nil {
panic(err)
} else {
for _, infoStat := range infoStats {
println(infoStat.String())
}
}
println("")
if timesStats, err := cpu.Times(true); err != nil {
panic(err)
} else {
for _, timesStat := range timesStats {
println(timesStat.String())
}
}
}
func memory_info() {
println("---------- memory start ----------\n")
defer println("\n---------- memory end ----------\n\n")
if virtualMemoryStat, err := mem.VirtualMemory(); err != nil {
panic(err)
} else {
println(virtualMemoryStat.String())
}
}
func disk_info() {
println("---------- disk start ----------\n")
defer println("\n---------- disk end ----------\n\n")
if partitionStats, err := disk.Partitions(false); err != nil {
panic(err)
} else {
for _, partitionStat := range partitionStats {
println(partitionStat.String())
if usageStat, err := disk.Usage(partitionStat.Device); err != nil {
panic(err)
} else {
println(usageStat.String())
}
}
}
}
func network_info() {
println("---------- network start ----------\n")
defer println("\n---------- network end ----------\n\n")
if interfaceStatList, err := net.Interfaces(); err != nil {
panic(err)
} else {
for _, interfaceStat := range interfaceStatList {
println(interfaceStat.String())
}
}
}
func process_info() {
println("---------- process start ----------\n")
defer println("\n---------- process end ----------\n\n")
if processList, err := process.Processes(); err != nil {
panic(err)
} else {
for _, p := range processList {
if name, err := p.Name(); err != nil {
panic(err)
} else {
println(p.Pid, ", ", name)
}
}
}
}
func main() {
host_info()
cpu_info()
memory_info()
disk_info()
network_info()
process_info()
}