monitor.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package redis
  2. import (
  3. "context"
  4. "fmt"
  5. "go-common/app/admin/main/aegis/model/monitor"
  6. "go-common/library/cache/redis"
  7. "go-common/library/log"
  8. "strconv"
  9. "time"
  10. )
  11. // MoniRuleStats 获取监控统计
  12. func (d *Dao) MoniRuleStats(c context.Context, id, min, max int64) (stats *monitor.Stats, err error) {
  13. var (
  14. conn = d.cluster.Get(c)
  15. key = fmt.Sprintf(monitor.RedisPrefix, id)
  16. now = time.Now().Unix()
  17. )
  18. stats = &monitor.Stats{}
  19. defer conn.Close()
  20. if stats.TotalCount, err = redis.Int(conn.Do("ZCOUNT", key, 0, now)); err != nil {
  21. log.Error("conn.Do(ZCOUNT,%s,0,%d) error(%v)", key, now, err)
  22. return
  23. }
  24. if stats.MoniCount, err = redis.Int(conn.Do("ZCOUNT", key, min, max)); err != nil {
  25. log.Error("conn.Do(ZCOUNT,%s,%d,%d) error(%v)", key, min, max, err)
  26. return
  27. }
  28. var oldest map[string]string //进入列表最久的项
  29. oldest, err = redis.StringMap(conn.Do("ZRANGE", key, 0, 0, "WITHSCORES"))
  30. for _, t := range oldest {
  31. var i int
  32. if i, err = strconv.Atoi(t); err != nil {
  33. return
  34. }
  35. stats.MaxTime = int(now) - i
  36. }
  37. return
  38. }
  39. // MoniRuleOids 获取监控符合报警时长的
  40. func (d *Dao) MoniRuleOids(c context.Context, id, min, max int64) (oidMap map[int64]int, err error) {
  41. var (
  42. key = fmt.Sprintf(monitor.RedisPrefix, id)
  43. conn = d.cluster.Get(c)
  44. strMap map[string]int
  45. )
  46. oidMap = make(map[int64]int)
  47. strMap = make(map[string]int)
  48. defer conn.Close()
  49. if strMap, err = redis.IntMap(conn.Do("ZRANGEBYSCORE", key, min, max, "WITHSCORES")); err != nil {
  50. log.Error("redis.IntMap(conn.Do(\"ZRANGEBYSCORE\", %s, %d, %d, \"WITHSCORES\")) error(%v)", key, min, max, err)
  51. return
  52. }
  53. for k, v := range strMap {
  54. oid := 0
  55. if oid, err = strconv.Atoi(k); err != nil {
  56. log.Error("strconv.Atoi(%s) error(%v)", k, err)
  57. }
  58. oidMap[int64(oid)] = v
  59. }
  60. return
  61. }