pinglog.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package pinglog
  2. import (
  3. "github.com/gogf/gf/v2/database/gdb"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/glog"
  6. "golang.org/x/net/context"
  7. "nodeMonitor/internal/dao"
  8. "nodeMonitor/internal/model"
  9. "nodeMonitor/internal/model/do"
  10. "nodeMonitor/internal/service"
  11. "time"
  12. )
  13. type (
  14. sPing struct{}
  15. )
  16. func init() {
  17. service.RegisterPing(New())
  18. }
  19. func New() *sPing {
  20. return &sPing{}
  21. }
  22. // Create 创建延迟日志
  23. func (c *sPing) Create(ctx context.Context, ping model.PingSt, host string) error {
  24. return dao.Pinglog.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
  25. _, err := dao.Pinglog.Ctx(ctx).Data(do.Pinglog{
  26. Maxdelay: ping.MaxDelay,
  27. Mindelay: ping.MinDelay,
  28. Avgdelay: ping.AvgDelay,
  29. Losspk: ping.LossPk,
  30. Host: host,
  31. }).Insert()
  32. return err
  33. })
  34. }
  35. // GetStatus 查询节点状态
  36. // SELECT * FROM pinglog WHERE create_at >= DATE_SUB(NOW(),INTERVAL 10 MINUTE) and avgdelay = 0 and losspk >= 0 and maxdelay = 0 and `host` = 'kdvkr-04.xyz'
  37. func (c *sPing) GetStatus(ctx context.Context, host string) (bool, error) {
  38. //查询的数据超过3次就是不ok了
  39. startTime, err := g.Cfg().Get(ctx, "node.startTime")
  40. if err != nil {
  41. glog.Debug(ctx, err.Error())
  42. return false, err
  43. }
  44. loos, err := g.Cfg().Get(ctx, "node.loos")
  45. if err != nil {
  46. glog.Debug(ctx, err.Error())
  47. return false, err
  48. }
  49. timeStartStr := time.Unix(time.Now().Unix()-startTime.Int64(), 0)
  50. count, err := dao.Pinglog.Ctx(ctx).Where("create_at > ?", timeStartStr).Where("avgdelay = 0").Where("losspk > ?", loos.Int()).Where("maxdelay = 0 ").Where("host = ?", host).Count()
  51. return count >= 3, err
  52. }