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.
173 lines
4.9 KiB
173 lines
4.9 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
"fmt" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/admin/main/reply/model" |
|
accmdl "go-common/app/service/main/account/api" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
"go-common/library/queue/databus/report" |
|
) |
|
|
|
// MonitorStats return monitor stats. |
|
func (s *Service) MonitorStats(c context.Context, mode, page, pageSize int64, adminIDs, sort, order, startTime, endTime string) (res *model.StatsMonitorResult, err error) { |
|
return s.dao.MonitorStats(c, mode, page, pageSize, adminIDs, sort, order, startTime, endTime) |
|
} |
|
|
|
// MonitorSearch return monitor result from search. |
|
func (s *Service) MonitorSearch(c context.Context, sp *model.SearchMonitorParams, page, pageSize int64) (res *model.SearchMonitorResult, err error) { |
|
if res, err = s.dao.SearchMonitor(c, sp, page, pageSize); err != nil { |
|
log.Error("s.dao.SearchMonitor(%v,%d,%d) error(%v)", sp, page, pageSize, err) |
|
} |
|
return |
|
} |
|
|
|
// UpMonitorState set monitor state into subject attr. |
|
func (s *Service) UpMonitorState(c context.Context, adminID int64, adName string, oid int64, typ, state int32, remark string) (err error) { |
|
sub, err := s.dao.Subject(c, oid, typ) |
|
if err != nil { |
|
return |
|
} |
|
if sub == nil { |
|
err = ecode.NothingFound |
|
return |
|
} |
|
var logState int32 |
|
switch state { |
|
case model.MonitorClose: |
|
if sub.AttrVal(model.SubAttrMonitor) == model.AttrYes { |
|
logState = model.AdminOperSubMonitorClose |
|
} else if sub.AttrVal(model.SubAttrAudit) == model.AttrYes { |
|
logState = model.AdminOperSubAuditClose |
|
} else { |
|
err = ecode.ReplyIllegalSubState |
|
return |
|
} |
|
sub.AttrSet(model.AttrNo, model.SubAttrMonitor) |
|
sub.AttrSet(model.AttrNo, model.SubAttrAudit) |
|
case model.MonitorOpen: |
|
sub.AttrSet(model.AttrYes, model.SubAttrMonitor) |
|
sub.AttrSet(model.AttrNo, model.SubAttrAudit) |
|
logState = model.AdminOperSubMonitorOpen |
|
case model.MonitorAudit: |
|
sub.AttrSet(model.AttrNo, model.SubAttrMonitor) |
|
sub.AttrSet(model.AttrYes, model.SubAttrAudit) |
|
logState = model.AdminOperSubAuditOpen |
|
default: |
|
err = ecode.RequestErr |
|
return |
|
} |
|
// update attr |
|
now := time.Now() |
|
if _, err = s.dao.UpSubjectAttr(c, oid, typ, sub.Attr, now); err != nil { |
|
log.Error("s.dao.UpSubjectAttr(%d,%d,%d,%d) state:%d error(%v)", typ, oid, sub.Attr, state, err) |
|
return |
|
} |
|
if err = s.dao.DelSubjectCache(c, oid, typ); err != nil { |
|
log.Error("MonitorState del subject cache error(%v)", err) |
|
} |
|
// update search index |
|
if err = s.dao.UpSearchMonitor(c, sub, remark); err != nil { |
|
log.Error("s.dao.UpdateMonitor(%v) error(%v)", sub, err) |
|
return |
|
} |
|
s.dao.AddAdminLog(c, []int64{oid}, []int64{0}, adminID, typ, model.AdminIsNew, model.AdminIsNotReport, logState, fmt.Sprintf("修改监控状态为: %d", state), remark, now) |
|
report.Manager(&report.ManagerInfo{ |
|
UID: adminID, |
|
Uname: adName, |
|
Business: 41, |
|
Type: int(typ), |
|
Oid: oid, |
|
Ctime: now, |
|
Action: model.ReportActionReplyMonitor, |
|
Content: map[string]interface{}{ |
|
"remark": remark, |
|
}, |
|
Index: []interface{}{sub.Mid, logState, state}, |
|
}) |
|
return |
|
} |
|
|
|
// MointorLog MointorLog |
|
func (s *Service) MointorLog(c context.Context, sp model.LogSearchParam) (result *model.MonitorLogResult, err error) { |
|
var ( |
|
mids []int64 |
|
userInfo map[int64]*accmdl.Info |
|
) |
|
adNames := map[int64]string{} |
|
|
|
result = &model.MonitorLogResult{ |
|
Logs: []*model.MonitorLog{}, |
|
} |
|
|
|
sp.Action = "monitor" |
|
reportData, err := s.dao.ReportLog(c, sp) |
|
if err != nil { |
|
return |
|
} |
|
result.Page = reportData.Page |
|
result.Sort = reportData.Sort |
|
result.Order = reportData.Order |
|
|
|
for i, data := range reportData.Result { |
|
mid := data.Index0 |
|
reportData.Result[i].OidStr = strconv.FormatInt(reportData.Result[i].Oid, 10) |
|
logState := data.Index1 |
|
state := data.Index2 |
|
title, link, _ := s.TitleLink(c, data.Oid, data.Type) |
|
var extra map[string]string |
|
if data.Content != "" { |
|
err = json.Unmarshal([]byte(data.Content), &extra) |
|
if err != nil { |
|
log.Error("MointorLog unmarshal failed!err:=%v", err) |
|
return |
|
} |
|
} |
|
if data.AdminName == "" { |
|
adNames[data.AdminID] = "" |
|
} |
|
result.Logs = append(result.Logs, &model.MonitorLog{ |
|
Mid: mid, |
|
AdminID: data.AdminID, |
|
AdminName: data.AdminName, |
|
Oid: data.Oid, |
|
OidStr: data.OidStr, |
|
Type: data.Type, |
|
Remark: extra["remark"], |
|
CTime: data.Ctime, |
|
LogState: logState, |
|
State: state, |
|
Title: title, |
|
RedirectURL: link, |
|
}) |
|
mids = append(mids, mid) |
|
} |
|
if len(adNames) > 0 { |
|
s.dao.AdminName(c, adNames) |
|
} |
|
if len(mids) > 0 { |
|
var infosReply *accmdl.InfosReply |
|
infosReply, err = s.accSrv.Infos3(c, &accmdl.MidsReq{Mids: mids}) |
|
if err != nil { |
|
log.Error(" s.accSrv.Infos3 (%v) error(%v)", mids, err) |
|
err = nil |
|
return |
|
} |
|
userInfo = infosReply.Infos |
|
} |
|
|
|
for _, log := range result.Logs { |
|
if user, ok := userInfo[log.Mid]; ok { |
|
log.UserName = user.GetName() |
|
} |
|
if log.AdminName == "" { |
|
log.AdminName = adNames[log.AdminID] |
|
} |
|
} |
|
return |
|
}
|
|
|