package fwhQueue import ( "context" "fmt" "fwh-toolbox-server/domain" "fwh-toolbox-server/jobs" "fwh-toolbox-server/logger" "fwh-toolbox-server/repositories" "time" "go.mongodb.org/mongo-driver/bson/primitive" "go.uber.org/zap" ) var ( TaskTypeAlarmStatistics = "task_AlarmStatistics" ) func handleTaskAlarmStatistics(ctx context.Context, payload domain.TaskAlarmStatistics) error { fmt.Printf("开始执行任务 %v\n", payload) err := executeTaskAlarmStatistics(ctx, payload) // 记录任务执行结果 if err != nil { fmt.Printf("任务执行失败 %s\n", err.Error()) } else { fmt.Println("任务执行成功") } return err } func analysisAlarmSite(sn string, date string) (*primitive.ObjectID, error) { // 读取已完成或正在进行的站点分析 queryTimePeriod := [2]string{date, date} queryTrigger := domain.TriggerAuto res, err := repositories.GetSiteAnalysisManageList(1, 1000, &sn, &queryTimePeriod, nil, &queryTrigger) if err != nil { return nil, err } if res == nil { return nil, fmt.Errorf("GetSiteAnalysisManageList查询结过为空") } queryInfoList := res.Data // 判断是否有相同的分析数据 if len(queryInfoList) > 0 { // 站点分析已存在,返回第一个数据的ID return &queryInfoList[0].Id, nil } writeConfig := domain.SiteAnalysisConfigWrite{ Sn: sn, Description: fmt.Sprintf("告警站点分析 %s", date), TimePeriod: [2]string{date, date}, Options: domain.SiteAnalysisOptions{ EnableTimeline: true, EnableRuntime: true, }, } id, err := repositories.InsertSiteAnalysisConfig(writeConfig, true) if err != nil { return nil, err } EnqueueSiteAnalysisTask(domain.TaskSiteAnalysis{ Id: id, Sn: writeConfig.Sn, TimePeriod: writeConfig.TimePeriod, Options: domain.SiteAnalysisOptions{ EnableTimeline: writeConfig.Options.EnableTimeline, EnableRuntime: writeConfig.Options.EnableRuntime, }, }, true) return &id, nil } var executeTaskAlarmStatistics = func(ctx context.Context, payload domain.TaskAlarmStatistics) error { // 分析告警统计数据,并将结果写入数据库 fmt.Println("分析告警统计数据,并将结果写入数据库") err := jobs.StatisticsAlarm(analysisAlarmSite) if err != nil { zap.L().Error("告警统计数据分析失败", zap.String("date", time.Now().Format(time.DateTime))) return err } return nil } func EnqueueAlarmStatisticsTask(payload domain.TaskAlarmStatistics) error { p := TaskPayload[domain.TaskAlarmStatistics]{ TaskPayloadBase: TaskPayloadBase{ Type: TaskTypeAlarmStatistics, }, Payload: payload, } if err := EnqueueTask[domain.TaskAlarmStatistics](p); err != nil { logger.Std.Printf("EnqueueAlarmStatisticsTask - %s : %s\n", payload.Id, err.Error()) return err } return nil }