periodical.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //go:build !darwin
  2. // +build !darwin
  3. /*
  4. * @Author: LinkLeong link@icewhale.com
  5. * @Date: 2022-07-01 15:11:36
  6. * @LastEditors: LinkLeong
  7. * @LastEditTime: 2022-09-05 16:28:46
  8. * @FilePath: /CasaOS/route/periodical.go
  9. * @Description:
  10. * @Website: https://www.casaos.io
  11. * Copyright (c) 2022 by icewhale, All Rights Reserved.
  12. */
  13. package route
  14. import (
  15. "strings"
  16. "time"
  17. "unsafe"
  18. "github.com/IceWhaleTech/CasaOS/model"
  19. "github.com/IceWhaleTech/CasaOS/service"
  20. )
  21. func SendAllHardwareStatusBySocket() {
  22. netList := service.MyService.System().GetNetInfo()
  23. newNet := []model.IOCountersStat{}
  24. nets := service.MyService.System().GetNet(true)
  25. for _, n := range netList {
  26. for _, netCardName := range nets {
  27. if n.Name == netCardName {
  28. item := *(*model.IOCountersStat)(unsafe.Pointer(&n))
  29. item.State = strings.TrimSpace(service.MyService.System().GetNetState(n.Name))
  30. item.Time = time.Now().Unix()
  31. newNet = append(newNet, item)
  32. break
  33. }
  34. }
  35. }
  36. cpu := service.MyService.System().GetCpuPercent()
  37. var cpuModel = "arm"
  38. if cpu := service.MyService.System().GetCpuInfo(); len(cpu) > 0 {
  39. if strings.Count(strings.ToLower(strings.TrimSpace(cpu[0].ModelName)), "intel") > 0 {
  40. cpuModel = "intel"
  41. } else if strings.Count(strings.ToLower(strings.TrimSpace(cpu[0].ModelName)), "amd") > 0 {
  42. cpuModel = "amd"
  43. }
  44. }
  45. num := service.MyService.System().GetCpuCoreNum()
  46. cpuData := make(map[string]interface{})
  47. cpuData["percent"] = cpu
  48. cpuData["num"] = num
  49. cpuData["temperature"] = service.MyService.System().GetCPUTemperature()
  50. cpuData["power"] = service.MyService.System().GetCPUPower()
  51. cpuData["model"] = cpuModel
  52. memInfo := service.MyService.System().GetMemInfo()
  53. body := make(map[string]interface{})
  54. body["sys_mem"] = memInfo
  55. body["sys_cpu"] = cpuData
  56. body["sys_net"] = newNet
  57. systemTempMap := service.MyService.Notify().GetSystemTempMap()
  58. systemTempMap.Range(func(key, value interface{}) bool {
  59. body[key.(string)] = value
  60. return true
  61. })
  62. service.MyService.Notify().SendNotify("casaos:system:utilization", body)
  63. }
  64. // func MonitoryUSB() {
  65. // var matcher netlink.Matcher
  66. // conn := new(netlink.UEventConn)
  67. // if err := conn.Connect(netlink.UdevEvent); err != nil {
  68. // logger.Error("udev err", zap.Any("Unable to connect to Netlink Kobject UEvent socket", err))
  69. // }
  70. // defer conn.Close()
  71. // queue := make(chan netlink.UEvent)
  72. // errors := make(chan error)
  73. // quit := conn.Monitor(queue, errors, matcher)
  74. // signals := make(chan os.Signal, 1)
  75. // signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
  76. // go func() {
  77. // <-signals
  78. // close(quit)
  79. // os.Exit(0)
  80. // }()
  81. // for {
  82. // select {
  83. // case uevent := <-queue:
  84. // if uevent.Env["DEVTYPE"] == "disk" {
  85. // time.Sleep(time.Microsecond * 500)
  86. // SendUSBBySocket()
  87. // continue
  88. // }
  89. // case err := <-errors:
  90. // logger.Error("udev err", zap.Any("err", err))
  91. // }
  92. // }
  93. // }