Node.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package controller
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/errors/gcode"
  5. "github.com/gogf/gf/v2/errors/gerror"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "github.com/gogf/gf/v2/os/gcron"
  8. "github.com/gogf/gf/v2/os/glog"
  9. "golang.org/x/net/context"
  10. v1 "nodeMonitor/api/v1"
  11. "nodeMonitor/internal/model"
  12. "nodeMonitor/internal/service"
  13. "nodeMonitor/internal/task"
  14. )
  15. var Node = sNode{}
  16. type sNode struct {
  17. }
  18. func (c *sNode) Add(ctx context.Context, req *v1.NodeReq) (res *v1.NodeRes, err error) {
  19. exist, err := service.Node().IsExist(ctx, model.NodeDelInput{
  20. Host: req.Host,
  21. })
  22. if err != nil {
  23. return
  24. }
  25. if !exist {
  26. err = gerror.NewCode(gcode.New(401, "", nil), "数据已经存在")
  27. return
  28. }
  29. err = service.Node().Create(ctx, model.NodeCreateInput{
  30. Name: req.Name,
  31. Host: req.Host,
  32. Port: req.Port,
  33. Url: req.Url,
  34. PingType: req.PingType,
  35. })
  36. return
  37. }
  38. func (c *sNode) Del(ctx context.Context, req *v1.NodeDelReq) (res *v1.NodeDelRes, err error) {
  39. err = service.Node().Del(ctx, model.NodeDelInput{
  40. Host: req.Host,
  41. })
  42. return
  43. }
  44. func (c *sNode) All(ctx context.Context, req *v1.NodeAllReq) (res *v1.NodeALlRes, err error) {
  45. res = new(v1.NodeALlRes)
  46. res.NodeList, err = service.Node().GetNode(ctx)
  47. return
  48. }
  49. func (c *sNode) Start(ctx context.Context, req *v1.NodeCronStartReq) (res *v1.NodeCronStartRes, err error) {
  50. res = new(v1.NodeCronStartRes)
  51. StartTime := req.StartTime
  52. taskName, err := g.Cfg().Get(ctx, "node.taskName")
  53. if err != nil {
  54. glog.Debug(ctx, err.Error())
  55. return
  56. }
  57. search := gcron.Search(taskName.String())
  58. if search != nil {
  59. gcron.Stop(taskName.String())
  60. gcron.Start(taskName.String())
  61. res.RetEntry = gcron.Entries()
  62. res.RetCronCount = gcron.Size()
  63. res.Status = true
  64. glog.Debug(ctx, "task -- ", gcron.Size())
  65. } else {
  66. s := fmt.Sprintf("*/%d * * * * *", StartTime)
  67. _, err = gcron.AddSingleton(ctx, s, func(ctx context.Context) {
  68. go task.Ping(ctx)
  69. }, taskName.String())
  70. res.RetEntry = gcron.Entries()
  71. res.RetCronCount = gcron.Size()
  72. res.Status = true
  73. }
  74. return
  75. }
  76. func (c *sNode) Stop(ctx context.Context, req *v1.NodeCronStopReq) (res *v1.NodeCronStopRes, err error) {
  77. res = new(v1.NodeCronStopRes)
  78. remove := req.Remove
  79. taskName, err := g.Cfg().Get(ctx, "node.taskName")
  80. if err != nil {
  81. glog.Debug(ctx, err.Error())
  82. return
  83. }
  84. gcron.Stop(taskName.String())
  85. if remove {
  86. gcron.Remove(taskName.String())
  87. }
  88. search := gcron.Search(taskName.String())
  89. if search == nil {
  90. res.Status = false
  91. }
  92. res.RetCronCount = gcron.Size()
  93. return
  94. }
  95. func (c *sNode) Task(ctx context.Context, req *v1.NodeCronStatusReq) (res *v1.NodeCronStatusRes, err error) {
  96. res = new(v1.NodeCronStatusRes)
  97. res.RetEntry = gcron.Entries()
  98. res.RetCronCount = gcron.Size()
  99. return
  100. }