fwhTaskAlarmStatistics.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package fwhQueue
  2. import (
  3. "context"
  4. "fmt"
  5. "fwh-toolbox-server/domain"
  6. "fwh-toolbox-server/jobs"
  7. "fwh-toolbox-server/logger"
  8. "fwh-toolbox-server/repositories"
  9. "time"
  10. "go.mongodb.org/mongo-driver/bson/primitive"
  11. "go.uber.org/zap"
  12. )
  13. var (
  14. TaskTypeAlarmStatistics = "task_AlarmStatistics"
  15. )
  16. func handleTaskAlarmStatistics(ctx context.Context, payload domain.TaskAlarmStatistics) error {
  17. fmt.Printf("开始执行任务 %v\n", payload)
  18. err := executeTaskAlarmStatistics(ctx, payload)
  19. // 记录任务执行结果
  20. if err != nil {
  21. fmt.Printf("任务执行失败 %s\n", err.Error())
  22. } else {
  23. fmt.Println("任务执行成功")
  24. }
  25. return err
  26. }
  27. func analysisAlarmSite(sn string, date string) (*primitive.ObjectID, error) {
  28. // 读取已完成或正在进行的站点分析
  29. queryTimePeriod := [2]string{date, date}
  30. queryTrigger := domain.TriggerAuto
  31. res, err := repositories.GetSiteAnalysisManageList(1, 1000, &sn, &queryTimePeriod, nil, &queryTrigger)
  32. if err != nil {
  33. return nil, err
  34. }
  35. if res == nil {
  36. return nil, fmt.Errorf("GetSiteAnalysisManageList查询结过为空")
  37. }
  38. queryInfoList := res.Data
  39. // 判断是否有相同的分析数据
  40. if len(queryInfoList) > 0 {
  41. // 站点分析已存在,返回第一个数据的ID
  42. return &queryInfoList[0].Id, nil
  43. }
  44. writeConfig := domain.SiteAnalysisConfigWrite{
  45. Sn: sn,
  46. Description: fmt.Sprintf("告警站点分析 %s", date),
  47. TimePeriod: [2]string{date, date},
  48. Options: domain.SiteAnalysisOptions{
  49. EnableTimeline: true,
  50. EnableRuntime: true,
  51. },
  52. }
  53. id, err := repositories.InsertSiteAnalysisConfig(writeConfig, true)
  54. if err != nil {
  55. return nil, err
  56. }
  57. EnqueueSiteAnalysisTask(domain.TaskSiteAnalysis{
  58. Id: id,
  59. Sn: writeConfig.Sn,
  60. TimePeriod: writeConfig.TimePeriod,
  61. Options: domain.SiteAnalysisOptions{
  62. EnableTimeline: writeConfig.Options.EnableTimeline,
  63. EnableRuntime: writeConfig.Options.EnableRuntime,
  64. },
  65. }, true)
  66. return &id, nil
  67. }
  68. var executeTaskAlarmStatistics = func(ctx context.Context, payload domain.TaskAlarmStatistics) error {
  69. // 分析告警统计数据,并将结果写入数据库
  70. fmt.Println("分析告警统计数据,并将结果写入数据库")
  71. err := jobs.StatisticsAlarm(analysisAlarmSite)
  72. if err != nil {
  73. zap.L().Error("告警统计数据分析失败", zap.String("date", time.Now().Format(time.DateTime)))
  74. return err
  75. }
  76. return nil
  77. }
  78. func EnqueueAlarmStatisticsTask(payload domain.TaskAlarmStatistics) error {
  79. p := TaskPayload[domain.TaskAlarmStatistics]{
  80. TaskPayloadBase: TaskPayloadBase{
  81. Type: TaskTypeAlarmStatistics,
  82. },
  83. Payload: payload,
  84. }
  85. if err := EnqueueTask[domain.TaskAlarmStatistics](p); err != nil {
  86. logger.Std.Printf("EnqueueAlarmStatisticsTask - %s : %s\n", payload.Id, err.Error())
  87. return err
  88. }
  89. return nil
  90. }