Skip to content

Instantly share code, notes, and snippets.

@habibiefaried
Last active June 15, 2024 11:15
Show Gist options
  • Save habibiefaried/0f779d1aba1882ba9ec613334d61ba58 to your computer and use it in GitHub Desktop.
Save habibiefaried/0f779d1aba1882ba9ec613334d61ba58 to your computer and use it in GitHub Desktop.
basic monitoring golang
package main
import (
"fmt"
"sort"
"time"
"github.com/shirou/gopsutil/disk"
"github.com/shirou/gopsutil/host"
"github.com/shirou/gopsutil/process"
)
func GetStatsD() (string, error) {
ret := ""
// Uptime
uptime, err := host.Uptime()
if err != nil {
return ret, err
}
ret = ret + fmt.Sprintf("System Uptime: %v seconds\n", uptime)
// Time
ret = ret + fmt.Sprintf("Current Date and Time: %v\n", time.Now().Format("2006-01-02 15:04:05"))
// Disk usage
usage, err := disk.Usage("/")
if err != nil {
return ret, err
}
ret = ret + fmt.Sprintf("Total Disk: %v bytes\n", usage.Total)
ret = ret + fmt.Sprintf("Used Disk: %v bytes\n", usage.Used)
ret = ret + fmt.Sprintf("Free Disk: %v bytes\n", usage.Free)
// Top 10 heavy-ram processes
processes, err := process.Processes()
if err != nil {
return ret, err
}
type ProcessRAM struct {
Pid int32
Name string
RAM uint64
}
var procRAMs []ProcessRAM
for _, proc := range processes {
memInfo, err := proc.MemoryInfo()
if err != nil {
continue
}
name, err := proc.Name()
if err != nil {
continue
}
procRAMs = append(procRAMs, ProcessRAM{
Pid: proc.Pid,
Name: name,
RAM: memInfo.RSS,
})
}
sort.Slice(procRAMs, func(i, j int) bool {
return procRAMs[i].RAM > procRAMs[j].RAM
})
ret = ret + fmt.Sprintf("Top 10 RAM Consuming Processes:\n")
for i, proc := range procRAMs {
if i >= 10 {
break
}
ret = ret + fmt.Sprintf("%d. PID: %d, Name: %s, RAM: %d bytes\n", i+1, proc.Pid, proc.Name, proc.RAM)
}
return ret, nil
}
func main() {
s, err := GetStatsD()
fmt.Println(err)
fmt.Println(s)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment