monitor.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/admin/main/dm/model"
  5. "go-common/library/ecode"
  6. "go-common/library/log"
  7. "go-common/library/sync/errgroup"
  8. )
  9. // MonitorList get monitor list
  10. func (s *Service) MonitorList(c context.Context, tp int32, pid, oid, mid int64, state int32, kw, sort, order string, page, size int64) (res *model.MonitorResult, err error) {
  11. var attr int32
  12. if state > 0 {
  13. if state == model.MonitorBefore {
  14. attr = int32(model.AttrSubMonitorBefore) + 1
  15. } else {
  16. attr = int32(model.AttrSubMonitorAfter) + 1
  17. }
  18. }
  19. data, err := s.dao.SearchMonitor(c, tp, pid, oid, mid, attr, kw, sort, order, page, size)
  20. if err != nil {
  21. log.Error("dao.SearchMonitor(pid:%d,oid:%d) error(%v)", pid, oid, err)
  22. return
  23. }
  24. res = &model.MonitorResult{
  25. Order: data.Order,
  26. Sort: data.Sort,
  27. Page: data.Page.Num,
  28. PageSize: data.Page.Size,
  29. Total: data.Page.Total,
  30. Result: make([]*model.Monitor, 0, len(data.Result)),
  31. }
  32. for _, v := range data.Result {
  33. m := &model.Monitor{
  34. ID: v.ID,
  35. Type: v.Type,
  36. Pid: v.Pid,
  37. Oid: v.Oid,
  38. MCount: v.MCount,
  39. Ctime: v.Ctime,
  40. Mtime: v.Mtime,
  41. Mid: v.Mid,
  42. Title: v.Title,
  43. Author: v.Author,
  44. }
  45. if v.Attr>>model.AttrSubMonitorBefore&1 == model.AttrYes {
  46. m.State = model.MonitorBefore
  47. } else {
  48. m.State = model.MonitorAfter
  49. }
  50. res.Result = append(res.Result, m)
  51. }
  52. return
  53. }
  54. // UpdateMonitor update monitor state of dm subject.
  55. func (s *Service) UpdateMonitor(c context.Context, tp int32, oids []int64, state int32) (affect int64, err error) {
  56. var wg errgroup.Group
  57. subs, err := s.dao.Subjects(c, tp, oids)
  58. if err != nil {
  59. return
  60. }
  61. for _, v := range subs {
  62. sub := v
  63. switch state {
  64. case model.MonitorClosed:
  65. sub.AttrSet(model.AttrNo, model.AttrSubMonitorBefore)
  66. sub.AttrSet(model.AttrNo, model.AttrSubMonitorAfter)
  67. case model.MonitorBefore:
  68. sub.AttrSet(model.AttrYes, model.AttrSubMonitorBefore)
  69. sub.AttrSet(model.AttrNo, model.AttrSubMonitorAfter)
  70. case model.MonitorAfter:
  71. sub.AttrSet(model.AttrNo, model.AttrSubMonitorBefore)
  72. sub.AttrSet(model.AttrYes, model.AttrSubMonitorAfter)
  73. default:
  74. err = ecode.RequestErr
  75. return
  76. }
  77. wg.Go(func() (err error) {
  78. aft, err := s.dao.UpSubjectAttr(context.TODO(), tp, sub.Oid, sub.Attr)
  79. if err != nil {
  80. return
  81. }
  82. affect = affect + aft
  83. return
  84. })
  85. }
  86. err = wg.Wait()
  87. return
  88. }
  89. // updateMonitorCnt update mcount of subject.
  90. func (s *Service) updateMonitorCnt(c context.Context, sub *model.Subject) (err error) {
  91. var state, mcount int64
  92. if sub.AttrVal(model.AttrSubMonitorBefore) == model.AttrYes {
  93. state = int64(model.StateMonitorBefore)
  94. } else if sub.AttrVal(model.AttrSubMonitorAfter) == model.AttrYes {
  95. state = int64(model.StateMonitorAfter)
  96. } else {
  97. return
  98. }
  99. if mcount, err = s.dao.DMCount(c, sub.Type, sub.Oid, []int64{state}); err != nil {
  100. return
  101. }
  102. _, err = s.dao.UpSubjectMCount(c, sub.Type, sub.Oid, mcount)
  103. return
  104. }