bilibili-backup/app/admin/main/dm/service/monitor.go
2019-04-22 02:59:20 +00:00

110 lines
2.9 KiB
Go

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
}