system.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. func GetMemory() (uint64, uint64) {
  18. v, _ := mem.VirtualMemory()
  19. return v.Used, v.Total
  20. }
  21. func GetCPU() int {
  22. percent, _ := cpu.Percent(time.Second, false)
  23. return int(percent[0])
  24. }
  25. func GetDisk() (uint64, uint64) {
  26. d, _ := disk.Usage("/")
  27. return d.Used, d.Free
  28. }
  29. func GetTemp() float64 {
  30. data, err := ioutil.ReadFile("/sys/class/thermal/thermal_zone0/temp")
  31. if err != nil {
  32. errmsg := fmt.Sprintf("Error reading temperature:", err)
  33. logger.Error(errmsg)
  34. return 0
  35. }
  36. tempStr := strings.TrimSpace(string(data))
  37. temp, err := strconv.Atoi(tempStr)
  38. if err != nil {
  39. errmsg := fmt.Sprintf("Error converting temperature to integer:", err)
  40. logger.Error(errmsg)
  41. return 0
  42. }
  43. return float64(temp) / 1000.0
  44. }
  45. func HasSwap() int {
  46. data, err := ioutil.ReadFile("/proc/swaps")
  47. if err != nil {
  48. errmsg := fmt.Sprintf("Error reading swap status:", err)
  49. logger.Error(errmsg)
  50. return 0
  51. }
  52. lines := strings.Split(string(data), "\n")
  53. if len(lines) > 1 {
  54. return 1
  55. } else {
  56. return 0
  57. }
  58. }