alarmStatisticsServices.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package services
  2. import (
  3. "context"
  4. "fwh-toolbox-server/cache"
  5. "fwh-toolbox-server/domain"
  6. "fwh-toolbox-server/repositories"
  7. "time"
  8. )
  9. // 从数据库获取告警统计
  10. func GetAlarmStatistics(date *string) (*domain.AlarmStatisticsDashboard, error) {
  11. currDate, err := getDashboardAlarmDate()
  12. if err != nil {
  13. return nil, err
  14. }
  15. if date == nil {
  16. date = currDate
  17. }
  18. infoMap, err := GetAlarmStatisticsInfoMap(date)
  19. if err != nil {
  20. return nil, err
  21. }
  22. codeStatistics := infoMap.CodeStatistics
  23. siteStatistics := len(infoMap.SiteMap)
  24. return &domain.AlarmStatisticsDashboard{
  25. Date: *date,
  26. CodeStatistics: codeStatistics,
  27. SiteStatistics: uint(siteStatistics),
  28. }, nil
  29. }
  30. // 从数据库获取告警统计信息详细数据
  31. func GetAlarmStatisticsInfoMap(date *string) (*domain.AlarmStatisticsItem, error) {
  32. currDate, err := getDashboardAlarmDate()
  33. if err != nil {
  34. return nil, err
  35. }
  36. if date == nil {
  37. date = currDate
  38. }
  39. return repositories.GetStatisticsAlarm(*date)
  40. }
  41. // 对Dashboard常规数据做缓存
  42. const (
  43. RedisKeyDashboardAlarmDate = "fwhtoolbox:dashboard:alarmDate"
  44. RedisKeyDashboardAlarmWeekly = "fwhtoolbox:dashboard:alarmWeekly"
  45. RedisKeyDashboardAlarmYearly = "fwhtoolbox:dashboard:alarmYearly"
  46. )
  47. func getDashboardAlarmDate() (*string, error) {
  48. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  49. defer cancel()
  50. var date string
  51. err := cache.GetJSON(ctx, RedisKeyDashboardAlarmDate, &date)
  52. if err == nil {
  53. return &date, nil // 命中缓存
  54. }
  55. // 未命中缓存 → 查询数据库
  56. alarmData, err := repositories.GetLatestStatisticsAlarm()
  57. if err != nil {
  58. return nil, err
  59. }
  60. date = alarmData.Date
  61. // 缓存结果 24h
  62. cache.SetJSON(ctx, RedisKeyDashboardAlarmDate, date, time.Hour*24)
  63. return &date, nil
  64. }