statisticsAlarmRepo.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package mongo
  2. import (
  3. "context"
  4. "fwh-toolbox-server/database"
  5. "fwh-toolbox-server/domain"
  6. "time"
  7. "go.mongodb.org/mongo-driver/bson"
  8. "go.mongodb.org/mongo-driver/mongo"
  9. "go.mongodb.org/mongo-driver/mongo/options"
  10. )
  11. const (
  12. CollectionName_StatisticsAlarm = "StatisticsAlarm"
  13. )
  14. // 从数据库获取告警统计数据
  15. func GetStatisticsAlarm(date string) (*domain.AlarmStatisticsItem, error) {
  16. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  17. defer cancel()
  18. collection := database.GetCollection(CollectionName_StatisticsAlarm)
  19. filter := bson.M{}
  20. // 条件
  21. if date != "" {
  22. filter["date"] = date
  23. }
  24. var item domain.AlarmStatisticsItem
  25. err := collection.FindOne(ctx, filter).Decode(&item)
  26. if err != nil {
  27. return nil, err
  28. }
  29. return &item, nil
  30. }
  31. // 从数据库获取最新告警统计数据
  32. func GetLatestStatisticsAlarm() (*domain.AlarmStatisticsItem, error) {
  33. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  34. defer cancel()
  35. collection := database.GetCollection(CollectionName_StatisticsAlarm)
  36. // 按 date 字段倒序排序(最新日期在最前)
  37. opts := options.FindOne().SetSort(bson.D{{Key: "date", Value: -1}})
  38. var result domain.AlarmStatisticsItem
  39. err := collection.FindOne(ctx, bson.D{}, opts).Decode(&result)
  40. if err != nil {
  41. return nil, err
  42. }
  43. return &result, nil
  44. }
  45. // 从数据库获取指定时间范围内的告警统计数据
  46. func GetStatisticsAlarmByDateRange(startDate, endDate string) ([]domain.AlarmStatisticsItem, error) {
  47. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  48. defer cancel()
  49. collection := database.GetCollection(CollectionName_StatisticsAlarm)
  50. var results []domain.AlarmStatisticsItem
  51. findOptions := options.Find().SetSort(bson.D{{Key: "date", Value: 1}})
  52. filter := bson.M{
  53. "date": bson.M{
  54. "$gte": startDate, // 起始日期 >= startDate
  55. "$lte": endDate, // 结束日期 <= endDate
  56. },
  57. }
  58. cursor, err := collection.Find(ctx, filter, findOptions) // 按日期升序
  59. if err != nil {
  60. return nil, err
  61. }
  62. defer cursor.Close(ctx)
  63. if err = cursor.All(ctx, &results); err != nil {
  64. return nil, err
  65. }
  66. return results, nil
  67. }
  68. // 插入或更新一条告警统计数据到数据库
  69. func InsertStatisticsAlarm(data domain.AlarmStatisticsItem) error {
  70. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  71. defer cancel()
  72. collection := database.GetCollection(CollectionName_StatisticsAlarm)
  73. // 创建日期字段唯一索引
  74. collection.Indexes().CreateOne(ctx, mongo.IndexModel{
  75. Keys: bson.M{"date": 1},
  76. Options: options.Index().SetUnique(true),
  77. })
  78. filter := bson.M{"date": data.Date}
  79. update := bson.M{"$set": bson.M{
  80. "status": data.Status,
  81. "codeStatistics": data.CodeStatistics,
  82. "siteMap": data.SiteMap,
  83. }}
  84. opts := options.Update().SetUpsert(true)
  85. _, err := collection.UpdateOne(ctx, filter, update, opts)
  86. if err != nil {
  87. return err
  88. }
  89. return nil
  90. }