cmd.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package cmd
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/gcmd"
  6. "github.com/gogf/gf/v2/os/gcron"
  7. "github.com/gogf/gf/v2/os/glog"
  8. "golang.org/x/net/context"
  9. "log"
  10. "nodeMonitor/internal/service"
  11. "nodeMonitor/internal/task"
  12. "time"
  13. )
  14. var (
  15. TaskMain = gcmd.Command{
  16. Name: "main",
  17. Usage: "main",
  18. Brief: "PingStatus",
  19. Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
  20. err = StartPingStart(ctx)
  21. if err != nil {
  22. return err
  23. }
  24. return nil
  25. },
  26. }
  27. )
  28. func StartPingStart(ctx context.Context) error {
  29. //go syslog.NotificationLog(ctx)
  30. clearLongTime := fmt.Sprintf("0 0 0 * * *")
  31. t, err := task.GetCronNextTime(clearLongTime, time.Now())
  32. if err != nil {
  33. glog.Error(ctx, err.Error())
  34. return err
  35. }
  36. glog.Info(ctx, "ClearLogTime:", t, err)
  37. _, err = gcron.AddSingleton(ctx, clearLongTime, func(ctx context.Context) {
  38. go task.ClearLog(ctx)
  39. }, "ClearLog")
  40. //_, err = gcron.AddSingleton(ctx, "* * * * * *", func(ctx context.Context) {
  41. // s := fmt.Sprintf("url_log ---- 开始请求\n")
  42. // websocket.SendToAll(&websocket.WResponse{
  43. // Event: "sys_log",
  44. // Data: g.Map{
  45. // "msg": s,
  46. // },
  47. // })
  48. //}, "test_weboscket_send")
  49. nodePing, err := g.Cfg().Get(ctx, "node.nodePing")
  50. if err != nil {
  51. glog.Debug(ctx, err.Error())
  52. return err
  53. }
  54. pingconfig, err := service.PingConfig().Get(ctx)
  55. if err != nil {
  56. glog.Debug(ctx, err.Error())
  57. return err
  58. }
  59. if nodePing.Int() == 1 {
  60. s := fmt.Sprintf("0 */%d * * * *", pingconfig.PingTime)
  61. _, err = gcron.AddSingleton(ctx, s, func(ctx context.Context) {
  62. go task.Ping(ctx)
  63. }, "ping_status")
  64. } else if nodePing.Int() == 0 {
  65. err := startPingStatus(ctx)
  66. if err != nil {
  67. glog.Error(ctx, err.Error())
  68. return err
  69. }
  70. }
  71. return nil
  72. }
  73. func startPingStatus(ctx context.Context) error {
  74. taskStatusTime, err := g.Cfg().Get(ctx, "node.taskStatusTime")
  75. if err != nil {
  76. glog.Error(ctx, err.Error())
  77. return err
  78. }
  79. interval := taskStatusTime.Duration() * time.Minute
  80. go startScheduler(ctx, interval, func(ctx context.Context) {
  81. s := fmt.Sprintf("0 */%d * * * *", taskStatusTime.Int())
  82. t, err := task.GetCronNextTime(s, time.Now())
  83. if err != nil {
  84. glog.Error(ctx, err.Error())
  85. return
  86. }
  87. glog.Info(ctx, "NextTime:", t, err)
  88. logMsg := "NextTime:" + t.String()
  89. service.TaskLog().Create(ctx, "ping_status", logMsg)
  90. task.PingStatus(ctx, t)
  91. })
  92. //_, err = gcron.AddSingleton(ctx, s, func(ctx context.Context) {
  93. //
  94. // glog.Info(ctx, "NextTime:", t, err)
  95. // logMsg := "PingStatus NextTime:" + t.String()
  96. // service.TaskLog().Create(ctx, "gcron", logMsg)
  97. // go task.PingStatus(ctx, t)
  98. //}, taskName.String())
  99. return nil
  100. }
  101. func startScheduler(ctx context.Context, interval time.Duration, task func(ctx context.Context)) {
  102. ticker := time.NewTicker(interval)
  103. defer ticker.Stop()
  104. for {
  105. select {
  106. case <-ticker.C:
  107. task(ctx)
  108. case <-ctx.Done():
  109. log.Println("Scheduler stopped.")
  110. return
  111. }
  112. }
  113. }