sitesAnalysisControllers.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package controllers
  2. import (
  3. "context"
  4. "fwh-toolbox-server/database"
  5. taskqueue "fwh-toolbox-server/taskQueue"
  6. "fwh-toolbox-server/types"
  7. "time"
  8. "go.mongodb.org/mongo-driver/bson"
  9. "go.mongodb.org/mongo-driver/bson/primitive"
  10. "go.mongodb.org/mongo-driver/mongo/options"
  11. )
  12. type SiteAnalysisInfo = types.SiteAnalysisInfo
  13. type SiteAnalysisOptions = types.SiteAnalysisOptions
  14. type SiteAnalysisConfig = types.SiteAnalysisConfig
  15. type SiteAnalysisConfigWrite = types.SiteAnalysisConfigWrite
  16. // 从数据库获取站点分析列表
  17. func GetSiteAnalysisManageList(page, size uint, sn, progress *string) (*ResPage[SiteAnalysisInfo], error) {
  18. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  19. defer cancel()
  20. collection := database.GetCollection("SiteAnalysisConfig")
  21. filter := bson.M{}
  22. // 条件
  23. if sn != nil {
  24. filter["sn"] = *sn
  25. }
  26. if progress != nil {
  27. filter["progress"] = *progress
  28. }
  29. findOptions := options.Find().
  30. SetProjection(bson.M{
  31. "_id": 1,
  32. "sn": 1,
  33. "description": 1,
  34. "item": 1,
  35. "progress": 1,
  36. }).
  37. SetSkip(int64((page - 1) * size)).
  38. SetLimit(int64(size))
  39. cursor, err := collection.Find(ctx, filter, findOptions)
  40. if err != nil {
  41. return nil, err
  42. }
  43. defer cursor.Close(ctx)
  44. var configList []SiteAnalysisInfo
  45. for cursor.Next(ctx) {
  46. var cfg SiteAnalysisInfo
  47. if err := cursor.Decode(&cfg); err != nil {
  48. return nil, err
  49. }
  50. configList = append(configList, cfg)
  51. }
  52. // 查询总数
  53. total, err := collection.CountDocuments(ctx, filter)
  54. if err != nil {
  55. return nil, err
  56. }
  57. res := ResPage[SiteAnalysisInfo]{
  58. Data: configList,
  59. PageSize: size,
  60. PageNum: page,
  61. Total: uint(total),
  62. }
  63. return &res, nil
  64. }
  65. // 从数据库获取一条站点分析配置
  66. func GetSiteAnalysisConfig(id primitive.ObjectID) (*SitesMonitorConfig, error) {
  67. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  68. defer cancel()
  69. collection := database.GetCollection("SiteMonitorConfig")
  70. var cfg SitesMonitorConfig
  71. err := collection.FindOne(ctx, bson.M{"_id": id}).Decode(&cfg)
  72. if err != nil {
  73. return nil, err
  74. }
  75. return &cfg, nil
  76. }
  77. // 插入一条站点分析配置到数据库
  78. func InsertSiteAnalysisConfig(writeConfig SiteAnalysisConfigWrite) error {
  79. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  80. defer cancel()
  81. config := SiteAnalysisConfig{
  82. SiteAnalysisConfigWrite: writeConfig,
  83. Item: []string{},
  84. Progress: "pending",
  85. }
  86. // 生成Item标签
  87. if writeConfig.EnableTimeline {
  88. config.Item = append(config.Item, "时间线")
  89. }
  90. collection := database.GetCollection("SiteMonitorConfig")
  91. res, err := collection.InsertOne(ctx, config)
  92. if err != nil {
  93. return err
  94. }
  95. taskqueue.EnqueueSiteAnalysisTask(taskqueue.TaskSiteAnalysis{
  96. Id: res.InsertedID.(primitive.ObjectID),
  97. Sn: writeConfig.Sn,
  98. TimePeriod: writeConfig.TimePeriod,
  99. SiteAnalysisOptions: SiteAnalysisOptions{
  100. EnableTimeline: writeConfig.EnableTimeline,
  101. },
  102. })
  103. return nil
  104. }
  105. // 更新一条站点分析配置到数据库
  106. func UpdateSiteAnalysisConfig(id primitive.ObjectID, writeConfig SiteAnalysisConfigWrite) error {
  107. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  108. defer cancel()
  109. config := SiteAnalysisConfig{
  110. SiteAnalysisConfigWrite: writeConfig,
  111. Item: []string{},
  112. Progress: "pending",
  113. }
  114. // 生成Item标签
  115. if writeConfig.EnableTimeline {
  116. config.Item = append(config.Item, "时间线")
  117. }
  118. collection := database.GetCollection("SiteMonitorConfig")
  119. // _, err := collection.InsertOne(ctx, config)
  120. filter := bson.M{"_id": id} // 按ID匹配
  121. update := bson.M{
  122. "$set": config, // 如果存在就更新所有字段
  123. }
  124. opts := options.Update().SetUpsert(true)
  125. _, err := collection.UpdateOne(ctx, filter, update, opts)
  126. if err != nil {
  127. return err
  128. }
  129. taskqueue.EnqueueSiteAnalysisTask(taskqueue.TaskSiteAnalysis{
  130. Id: writeConfig.Id,
  131. Sn: writeConfig.Sn,
  132. TimePeriod: writeConfig.TimePeriod,
  133. SiteAnalysisOptions: SiteAnalysisOptions{
  134. EnableTimeline: writeConfig.EnableTimeline,
  135. },
  136. })
  137. return nil
  138. }
  139. // 删除一条站点分析配置
  140. func DeleteSiteAnalysisConfig(id primitive.ObjectID) error {
  141. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  142. defer cancel()
  143. filter := bson.M{"_id": id} // 删除条件
  144. collection := database.GetCollection("SiteMonitorConfig")
  145. _, err := collection.DeleteOne(ctx, filter)
  146. if err != nil {
  147. return err
  148. }
  149. // TODO 需删除相关数据
  150. return nil
  151. }