fwhTaskShutdownStatistics.go 3.0 KB

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