You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.9 KiB
109 lines
2.9 KiB
package service |
|
|
|
import ( |
|
"context" |
|
|
|
"go-common/app/admin/main/dm/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
"go-common/library/sync/errgroup" |
|
) |
|
|
|
// MonitorList get monitor list |
|
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) { |
|
var attr int32 |
|
if state > 0 { |
|
if state == model.MonitorBefore { |
|
attr = int32(model.AttrSubMonitorBefore) + 1 |
|
} else { |
|
attr = int32(model.AttrSubMonitorAfter) + 1 |
|
} |
|
} |
|
data, err := s.dao.SearchMonitor(c, tp, pid, oid, mid, attr, kw, sort, order, page, size) |
|
if err != nil { |
|
log.Error("dao.SearchMonitor(pid:%d,oid:%d) error(%v)", pid, oid, err) |
|
return |
|
} |
|
res = &model.MonitorResult{ |
|
Order: data.Order, |
|
Sort: data.Sort, |
|
Page: data.Page.Num, |
|
PageSize: data.Page.Size, |
|
Total: data.Page.Total, |
|
Result: make([]*model.Monitor, 0, len(data.Result)), |
|
} |
|
for _, v := range data.Result { |
|
m := &model.Monitor{ |
|
ID: v.ID, |
|
Type: v.Type, |
|
Pid: v.Pid, |
|
Oid: v.Oid, |
|
MCount: v.MCount, |
|
Ctime: v.Ctime, |
|
Mtime: v.Mtime, |
|
Mid: v.Mid, |
|
Title: v.Title, |
|
Author: v.Author, |
|
} |
|
if v.Attr>>model.AttrSubMonitorBefore&1 == model.AttrYes { |
|
m.State = model.MonitorBefore |
|
} else { |
|
m.State = model.MonitorAfter |
|
} |
|
res.Result = append(res.Result, m) |
|
} |
|
return |
|
} |
|
|
|
// UpdateMonitor update monitor state of dm subject. |
|
func (s *Service) UpdateMonitor(c context.Context, tp int32, oids []int64, state int32) (affect int64, err error) { |
|
var wg errgroup.Group |
|
subs, err := s.dao.Subjects(c, tp, oids) |
|
if err != nil { |
|
return |
|
} |
|
for _, v := range subs { |
|
sub := v |
|
switch state { |
|
case model.MonitorClosed: |
|
sub.AttrSet(model.AttrNo, model.AttrSubMonitorBefore) |
|
sub.AttrSet(model.AttrNo, model.AttrSubMonitorAfter) |
|
case model.MonitorBefore: |
|
sub.AttrSet(model.AttrYes, model.AttrSubMonitorBefore) |
|
sub.AttrSet(model.AttrNo, model.AttrSubMonitorAfter) |
|
case model.MonitorAfter: |
|
sub.AttrSet(model.AttrNo, model.AttrSubMonitorBefore) |
|
sub.AttrSet(model.AttrYes, model.AttrSubMonitorAfter) |
|
default: |
|
err = ecode.RequestErr |
|
return |
|
} |
|
wg.Go(func() (err error) { |
|
aft, err := s.dao.UpSubjectAttr(context.TODO(), tp, sub.Oid, sub.Attr) |
|
if err != nil { |
|
return |
|
} |
|
affect = affect + aft |
|
return |
|
}) |
|
} |
|
err = wg.Wait() |
|
return |
|
} |
|
|
|
// updateMonitorCnt update mcount of subject. |
|
func (s *Service) updateMonitorCnt(c context.Context, sub *model.Subject) (err error) { |
|
var state, mcount int64 |
|
if sub.AttrVal(model.AttrSubMonitorBefore) == model.AttrYes { |
|
state = int64(model.StateMonitorBefore) |
|
} else if sub.AttrVal(model.AttrSubMonitorAfter) == model.AttrYes { |
|
state = int64(model.StateMonitorAfter) |
|
} else { |
|
return |
|
} |
|
if mcount, err = s.dao.DMCount(c, sub.Type, sub.Oid, []int64{state}); err != nil { |
|
return |
|
} |
|
_, err = s.dao.UpSubjectMCount(c, sub.Type, sub.Oid, mcount) |
|
return |
|
}
|
|
|