monitor.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "os/exec"
  6. "path/filepath"
  7. "strings"
  8. "sync"
  9. "time"
  10. "github.com/sirupsen/logrus"
  11. )
  12. const (
  13. diffTime = 3600 * 24 * 3
  14. MaxErrorMinutes = 20
  15. )
  16. type MonitorStatus struct {
  17. MQTTMessageHandle time.Time
  18. MQTTConnectMgr time.Time
  19. }
  20. var mypath = [...]string{"/usr/app/ipole/log/", "/usr/app/camera/log/", "/usr/app/its/log/"}
  21. var _once1 sync.Once
  22. var _single1 *MonitorStatus
  23. func GetMonitorStatus() *MonitorStatus {
  24. _once1.Do(func() {
  25. _single1 = &MonitorStatus{
  26. MQTTMessageHandle: time.Now(),
  27. MQTTConnectMgr: time.Now(),
  28. }
  29. })
  30. return _single1
  31. }
  32. func (o *MonitorStatus) GetMonitorRunStatus() bool {
  33. t1 := time.Since(o.MQTTConnectMgr).Minutes()
  34. t2 := time.Since(o.MQTTMessageHandle).Minutes()
  35. return int(t1) < MaxErrorMinutes && int(t2) < MaxErrorMinutes
  36. }
  37. func runInLinux(cmd string) (string, error) {
  38. result, err := exec.Command("/bin/sh", "-c", cmd).Output()
  39. if err != nil {
  40. return "", err
  41. }
  42. return strings.TrimSpace(string(result)), err
  43. }
  44. // CheckProRunning 根据进程名判断进程是否运行
  45. func CheckProRunning(serverName string) (bool, error) {
  46. a := "ps |grep " + serverName
  47. str, err := runInLinux(a)
  48. if err != nil {
  49. return false, err
  50. }
  51. logrus.Info("ps len", len(str), str)
  52. return len(str) > 30, nil
  53. }
  54. func CheckAndDeleteLogfile() {
  55. for _, v := range mypath {
  56. getFilelist(v)
  57. }
  58. }
  59. func getFilelist(path string) {
  60. nowTime := time.Now().Unix()
  61. err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error {
  62. if f == nil {
  63. return err
  64. }
  65. fileTime := f.ModTime().Unix()
  66. if (nowTime-fileTime) > diffTime && !strings.ContainsAny(strings.TrimSuffix(f.Name(), ".log"), "abcdefghijkmlnopqrstuvwxyz") { //判断文件是否超过3天
  67. fmt.Printf("Delete file %v !\r\n", path)
  68. os.RemoveAll(path + "/" + f.Name())
  69. }
  70. return nil
  71. })
  72. if err != nil {
  73. logrus.Infof("filepath.Walk() returned %v\r\n", err)
  74. }
  75. }