system.go 1.4 KB

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