| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- package fwhQueueOld
- import (
- "context"
- "fmt"
- "fwh-toolbox-server/domain"
- "fwh-toolbox-server/jobs"
- "fwh-toolbox-server/logger"
- "fwh-toolbox-server/repositories"
- "time"
- "go.uber.org/zap"
- )
- var (
- TaskTypeSiteAnalysis = "task_SiteAnalysis"
- )
- // type TaskSiteAnalysis = types.TaskSiteAnalysis
- func handleTaskSiteAnalysis(ctx context.Context, payload domain.TaskSiteAnalysis) error {
- // 更新运行状态
- fmt.Println("更新任务运行状态")
- if repoErr := repositories.UpdateSiteAnalysisResult(payload.Id, domain.ProgressRunning); repoErr != nil {
- zap.L().Error("更新站点分析结果状态失败(Running)", zap.String("id", payload.Id.String()))
- return repoErr
- }
- fmt.Printf("开始执行任务 %v\n", payload)
- err := executeTaskSiteAnalysis(ctx, payload)
- // 记录任务执行结果
- if err != nil {
- fmt.Printf("任务执行失败 %s\n", err.Error())
- if repoErr := repositories.UpdateSiteAnalysisResult(payload.Id, domain.ProgressError); repoErr != nil {
- zap.L().Error("更新站点分析结果状态失败(Error)", zap.String("id", payload.Id.String()))
- return repoErr
- }
- } else {
- fmt.Println("任务执行成功")
- if repoErr := repositories.UpdateSiteAnalysisResult(payload.Id, domain.ProgressComplete); repoErr != nil {
- zap.L().Error("更新站点分析结果状态失败(Complete)", zap.String("id", payload.Id.String()), zap.String("err", repoErr.Error()))
- return repoErr
- }
- }
- return err
- }
- var executeTaskSiteAnalysis = func(ctx context.Context, payload domain.TaskSiteAnalysis) error {
- // 转换时间范围,只取用日期部分
- startTime, err := time.Parse(time.DateOnly, payload.TimePeriod[0])
- if err != nil {
- zap.L().Error("StartTime 格式错误", zap.String("time", payload.TimePeriod[0]), zap.String("err", err.Error()))
- return err
- }
- endTime, err := time.Parse(time.DateOnly, payload.TimePeriod[1])
- if err != nil {
- zap.L().Error("EndTime 格式错误", zap.String("time", payload.TimePeriod[1]), zap.String("err", err.Error()))
- return err
- }
- // 将 endTime 调整到当天的 23:59:59
- endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
- fmt.Println(payload.Options)
- // 创建记录数据库用于存储原始MQTT日志请求数据
- queryRecord, err := repositories.CreateSitesAnalysisRecordTable(string(payload.Id.Hex()))
- if err != nil {
- return err
- }
- if payload.Options.EnableTimeline {
- // 时间线展示功能
- // Site 时间线生成逻辑:
- // 1、分析MQTT日志0和101,获取离线上线状态
- // 2、分析事件日志,获取站点的事件触发记录
- // 3、分析告警日志,获取站点的告警开始-结束触发记录
- // 4、分析MQTT日志357,获取站点模式切换记录
- // 最终处理:获取事件时间点的MQTT日志201数据,关联到事件点。
- // if payload.SiteAnalysisOptions.EnableTimeline
- // 查询MQTT日志0和101
- fmt.Println("查询MQTT日志0")
- logList_0, err := repositories.QueryMqttLogListOnTimeRange(payload.Sn, domain.MQTT_LOG_0, startTime, endTime)
- if err != nil {
- zap.L().Error("查询MQTT日志0失败", zap.String("err", err.Error()))
- return err
- }
- for _, l := range logList_0 {
- if err := queryRecord.InsertSitesAnalysisRecord(l); err != nil {
- return err
- }
- }
- fmt.Println("查询MQTT日志101")
- logList_101, err := repositories.QueryMqttLogListOnTimeRange(payload.Sn, domain.MQTT_LOG_101, startTime, endTime)
- if err != nil {
- zap.L().Error("查询MQTT日志101失败", zap.String("err", err.Error()))
- return err
- }
- for _, l := range logList_101 {
- if err := queryRecord.InsertSitesAnalysisRecord(l); err != nil {
- return err
- }
- }
- // 查询站点的事件触发记录
- fmt.Println("查询站点的事件触发记录")
- eventLog, err := repositories.QueryEventOrAlarmListOnTimeRange(payload.Sn, startTime, endTime, repositories.Event)
- if err != nil {
- zap.L().Error("查询事件日志失败", zap.String("err", err.Error()))
- return err
- }
- time.Sleep(time.Second) // 延时1s
- // 查询站点的告警开始-结束触发记录
- fmt.Println("查询站点的告警开始-结束触发记录")
- alarmLog, err := repositories.QueryEventOrAlarmListOnTimeRange(payload.Sn, startTime, endTime, repositories.Alarm)
- if err != nil {
- zap.L().Error("查询事件日志失败", zap.String("err", err.Error()))
- return err
- }
- time.Sleep(time.Second) // 延时1s
- // 查询MQTT日志357
- logList_357, err := repositories.QueryMqttLogListOnTimeRange(payload.Sn, domain.MQTT_LOG_357, startTime, endTime)
- if err != nil {
- zap.L().Error("查询MQTT日志357失败", zap.String("err", err.Error()))
- return err
- }
- for _, l := range logList_357 {
- if err := queryRecord.InsertSitesAnalysisRecord(l); err != nil {
- return err
- }
- }
- // 分析数据,并将结果写入数据库
- fmt.Println("分析数据,并将结果写入数据库")
- err = jobs.AnalysisSiteTimeline(payload.Id, jobs.SiteDataSet{
- Log_0: logList_0,
- Log_101: logList_101,
- Log_357: logList_357,
- EventLog: eventLog,
- AlarmLog: alarmLog,
- })
- if err != nil {
- zap.L().Error("站点时间线数据分析失败", zap.String("sn", payload.Sn), zap.String("err", err.Error()))
- return err
- }
- }
- if payload.Options.EnableRuntime {
- // 实时数据展示
- // 查询MQTT日志201
- fmt.Println("查询MQTT日志201")
- logList_201, err := repositories.QueryMqttLogListOnTimeRange(payload.Sn, domain.MQTT_LOG_201, startTime, endTime)
- if err != nil {
- zap.L().Error("查询MQTT日志201失败", zap.String("err", err.Error()))
- return err
- }
- for _, l := range logList_201 {
- if err := queryRecord.InsertSitesAnalysisRecord(l); err != nil {
- return err
- }
- }
- // 分析数据,并将结果写入数据库
- fmt.Println("分析数据,并将结果写入数据库")
- err = jobs.AnalysisSiteRuntime(payload.Id, jobs.SiteDataSet{
- Log_201: logList_201,
- })
- if err != nil {
- zap.L().Error("站点运行时数据分析失败", zap.String("sn", payload.Sn), zap.String("err", err.Error()))
- return err
- }
- }
- return nil
- }
- // 插入站点分析队列
- // payload - 任务参数
- // auto - 是否是自动插入
- func EnqueueSiteAnalysisTask(payload domain.TaskSiteAnalysis, auto bool) error {
- p := TaskPayload[domain.TaskSiteAnalysis]{
- TaskPayloadBase: TaskPayloadBase{
- Type: TaskTypeSiteAnalysis,
- },
- Payload: payload,
- }
- if err := EnqueueTask[domain.TaskSiteAnalysis](p); err != nil {
- logger.Std.Printf("EnqueueSiteAnalysisTask - %s : %s\n", payload.Id, err.Error())
- return err
- }
- return nil
- }
|