123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package service
- import (
- "context"
- "errors"
- "go-common/app/admin/main/aegis/model/monitor"
- "go-common/library/log"
- "time"
- )
- // MonitorBuzResult 获取业务的监控结果
- func (s *Service) MonitorBuzResult(c context.Context, bid int64) (res []*monitor.RuleResultData, err error) {
- var (
- rules []*monitor.Rule
- uids []int64
- uNames map[int64]string
- statsMap map[int64]*monitor.Stats
- min, max int64
- )
- statsMap = make(map[int64]*monitor.Stats)
- if rules, err = s.mysql.MoniBizRules(c, bid); err != nil {
- log.Error("s.MonitorResult(%d) error:%v", bid, err)
- return
- }
- for _, rule := range rules {
- uids = append(uids, rule.UID)
- if min, max, err = s.monitorNotifyTime(rule.RuleConf); err != nil {
- log.Error("s.MonitorBuzResult(%d) s.monitorNotifyTime(%+v) error:%v", bid, rule.RuleConf, err)
- continue
- }
- if statsMap[rule.ID], err = s.redis.MoniRuleStats(c, rule.ID, min, max); err != nil {
- log.Error("s.redis.MoniRuleStats(%d,%+v) error:%v", rule.ID, rule.RuleConf, err)
- err = nil
- statsMap[rule.ID] = &monitor.Stats{}
- }
- }
- if uNames, err = s.http.GetUnames(c, uids); err != nil {
- log.Error("s.MonitorResult(%d) s.http.ManagerUNames(%v) error:%v", bid, uids, err)
- err = nil
- }
- for _, rule := range rules {
- var (
- uName string
- stats *monitor.Stats
- )
- if _, ok := uNames[rule.UID]; ok {
- uName = uNames[rule.UID]
- }
- if _, ok := statsMap[rule.ID]; ok {
- stats = statsMap[rule.ID]
- }
- data := &monitor.RuleResultData{
- Rule: rule,
- User: &monitor.User{
- ID: rule.UID,
- UserName: uName,
- NickName: uName,
- },
- Stats: stats,
- }
- res = append(res, data)
- }
- return
- }
- // MonitorResultOids 获取
- func (s *Service) MonitorResultOids(c context.Context, rid int64) (res map[int64]int, err error) {
- var (
- min, max int64
- rule *monitor.Rule
- )
- if rule, err = s.mysql.MoniRule(c, rid); err != nil {
- log.Error("s.MonitorResultOids(%d) error:%v", rid, err)
- return
- }
- if min, max, err = s.monitorNotifyTime(rule.RuleConf); err != nil {
- log.Error("s.MonitorResultOids(%d) s.monitorNotifyTime() error:%v", rid, err)
- return
- }
- return s.redis.MoniRuleOids(c, rid, min, max)
- }
- // monitorNotifyTime 计算监控报警的score区间
- func (s *Service) monitorNotifyTime(conf *monitor.RuleConf) (tFrom, tTo int64, err error) {
- now := time.Now().Unix()
- if _, ok := conf.NotifyCdt["time"]; !ok {
- err = errors.New("配置的 NotifyCdt 中不存在 time")
- return
- }
- timeCdt := conf.NotifyCdt["time"].Value
- compCdt := conf.NotifyCdt["time"].Comp
- switch compCdt {
- case monitor.CompGT:
- tFrom = 0
- tTo = now - timeCdt
- case monitor.CompLT:
- tFrom = now - timeCdt
- tTo = now
- default:
- err = errors.New("配置的 NotifyCdt 中 comparison 不合法: " + compCdt)
- return
- }
- return
- }
|