system.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package system
  2. // for retrieving hw info and managing host
  3. import (
  4. "fmt"
  5. "github.com/shirou/gopsutil/cpu"
  6. "github.com/shirou/gopsutil/disk"
  7. "github.com/shirou/gopsutil/mem"
  8. "io/ioutil"
  9. "log/slog"
  10. "os"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. var (
  16. logger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
  17. )
  18. // get memory used/avail in bytes
  19. func GetMemory() (uint64, uint64) {
  20. v, _ := mem.VirtualMemory()
  21. return v.Used, v.Total
  22. }
  23. // get cpu usage as %
  24. func GetCPU() int {
  25. percent, _ := cpu.Percent(time.Second, false)
  26. return int(percent[0])
  27. }
  28. // get used/avail disk in bytes
  29. func GetDisk() (uint64, uint64) {
  30. d, _ := disk.Usage("/")
  31. return d.Used, d.Free
  32. }
  33. // get cpu temp (may not work on some devices)
  34. func GetTemp() float64 {
  35. data, err := ioutil.ReadFile("/sys/class/thermal/thermal_zone0/temp")
  36. if err != nil {
  37. errmsg := fmt.Sprintf("Error reading temperature:", err)
  38. logger.Error(errmsg)
  39. return 0
  40. }
  41. tempStr := strings.TrimSpace(string(data))
  42. temp, err := strconv.Atoi(tempStr)
  43. if err != nil {
  44. errmsg := fmt.Sprintf("Error converting temperature to integer:", err)
  45. logger.Error(errmsg)
  46. return 0
  47. }
  48. return float64(temp) / 1000.0
  49. }
  50. // return 0 for no 1 for yes(?)
  51. func HasSwap() int {
  52. data, err := ioutil.ReadFile("/proc/swaps")
  53. if err != nil {
  54. errmsg := fmt.Sprintf("Error reading swap status:", err)
  55. logger.Error(errmsg)
  56. return 0
  57. }
  58. lines := strings.Split(string(data), "\n")
  59. if len(lines) > 1 {
  60. return 1
  61. } else {
  62. return 0
  63. }
  64. }