123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package cmd
- import (
- "fmt"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gcmd"
- "github.com/gogf/gf/v2/os/gcron"
- "github.com/gogf/gf/v2/os/glog"
- "golang.org/x/net/context"
- "log"
- "nodeMonitor/internal/service"
- "nodeMonitor/internal/task"
- "time"
- )
- var (
- TaskMain = gcmd.Command{
- Name: "main",
- Usage: "main",
- Brief: "PingStatus",
- Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
- err = StartPingStart(ctx)
- if err != nil {
- return err
- }
- return nil
- },
- }
- )
- func StartPingStart(ctx context.Context) error {
- //go syslog.NotificationLog(ctx)
- clearLongTime := fmt.Sprintf("0 0 0 * * *")
- t, err := task.GetCronNextTime(clearLongTime, time.Now())
- if err != nil {
- glog.Error(ctx, err.Error())
- return err
- }
- glog.Info(ctx, "ClearLogTime:", t, err)
- _, err = gcron.AddSingleton(ctx, clearLongTime, func(ctx context.Context) {
- go task.ClearLog(ctx)
- }, "ClearLog")
- //_, err = gcron.AddSingleton(ctx, "* * * * * *", func(ctx context.Context) {
- // s := fmt.Sprintf("url_log ---- 开始请求\n")
- // websocket.SendToAll(&websocket.WResponse{
- // Event: "sys_log",
- // Data: g.Map{
- // "msg": s,
- // },
- // })
- //}, "test_weboscket_send")
- nodePing, err := g.Cfg().Get(ctx, "node.nodePing")
- if err != nil {
- glog.Debug(ctx, err.Error())
- return err
- }
- pingconfig, err := service.PingConfig().Get(ctx)
- if err != nil {
- glog.Debug(ctx, err.Error())
- return err
- }
- if nodePing.Int() == 1 {
- s := fmt.Sprintf("0 */%d * * * *", pingconfig.PingTime)
- _, err = gcron.AddSingleton(ctx, s, func(ctx context.Context) {
- go task.Ping(ctx)
- }, "ping_status")
- } else if nodePing.Int() == 0 {
- err := startPingStatus(ctx)
- if err != nil {
- glog.Error(ctx, err.Error())
- return err
- }
- }
- return nil
- }
- func startPingStatus(ctx context.Context) error {
- taskStatusTime, err := g.Cfg().Get(ctx, "node.taskStatusTime")
- if err != nil {
- glog.Error(ctx, err.Error())
- return err
- }
- interval := taskStatusTime.Duration() * time.Minute
- go startScheduler(ctx, interval, func(ctx context.Context) {
- s := fmt.Sprintf("0 */%d * * * *", taskStatusTime.Int())
- t, err := task.GetCronNextTime(s, time.Now())
- if err != nil {
- glog.Error(ctx, err.Error())
- return
- }
- glog.Info(ctx, "NextTime:", t, err)
- logMsg := "NextTime:" + t.String()
- service.TaskLog().Create(ctx, "ping_status", logMsg)
- task.PingStatus(ctx, t)
- })
- //_, err = gcron.AddSingleton(ctx, s, func(ctx context.Context) {
- //
- // glog.Info(ctx, "NextTime:", t, err)
- // logMsg := "PingStatus NextTime:" + t.String()
- // service.TaskLog().Create(ctx, "gcron", logMsg)
- // go task.PingStatus(ctx, t)
- //}, taskName.String())
- return nil
- }
- func startScheduler(ctx context.Context, interval time.Duration, task func(ctx context.Context)) {
- ticker := time.NewTicker(interval)
- defer ticker.Stop()
- for {
- select {
- case <-ticker.C:
- task(ctx)
- case <-ctx.Done():
- log.Println("Scheduler stopped.")
- return
- }
- }
- }
|