Files
pig-farm-controller/design/exceeding-threshold-alarm/task_list.md

3.7 KiB

阈值告警功能 - 任务清单

本清单按照从底层到上层的依赖关系排序,建议按此顺序进行开发。

1. 基础设施层 (internal/infra)

  • 数据库模型 (models):

    • internal/infra/models/ 下创建 alarm.go 文件,定义 ActiveAlarmHistoricalAlarm 两个结构体,包含 status, ignored_until, last_notified_at 等字段。
    • internal/infra/models/schedule.go 中,为 TaskType 新增三个常量:TaskTypeAreaControllerThresholdAlarm, TaskTypeDeviceThresholdAlarm, TaskTypeAlarmNotificationSender
  • 数据库仓库 (repository):

    • internal/infra/repository/ 下创建 alarm_repository.go,实现对 active_alarmshistorical_alarms 表的增删改查操作,并提供 MoveToHistorical 等方法。
    • internal/infra/repository/device_repository.go 中,为 DeviceRepository 接口及其实现增加 FindByAreaControllerID 方法。
  • 配置 (config):

    • config.yml 文件中,新增告警相关的配置项,如 re_notification_interval (重复通知间隔)。
    • internal/infra/config/config.go 中,添加对应的字段来加载该配置。

2. 领域层 (internal/domain)

  • 告警领域服务 (alarm):

    • 创建 internal/domain/alarm/ 目录。
    • 在该目录下创建 alarm_service.go,定义 AlarmService 接口及其实现。
    • 实现核心业务逻辑:ReportStatus (处理告警创建/解决) 和 GetAndProcessPendingNotifications (获取待发送通知)。该服务将注入 AlarmRepositoryNotifyService
  • 任务实现 (task):

    • 创建 area_controller_threshold_alarm_task.go,实现 plan.Task 接口,其 Execute 方法调用 alarmService.ReportStatus
    • 创建 device_threshold_alarm_task.go,实现逻辑同上。
    • 创建 alarm_notification_sender_task.go,实现 plan.Task 接口,其 Execute 方法调用 alarmService.GetAndProcessPendingNotifications

3. 应用层 (internal/app)

  • 告警配置服务 (service):

    • 创建 alarm_config_service.go,定义 AlarmConfigService,负责告警 配置 的增删改查。
    • 实现 ExcludeDeviceIDs 的计算和更新逻辑。
    • 注入 DeviceRepositoryAreaControllerRepository
  • 服务集成:

    • plan_service.go (或任务工厂) 中,注册上述三种新的任务类型。
    • 修改 device_service.go,在处理设备更新(更换区域)和删除的方法中,调用 AlarmConfigService 的接口来刷新 ExcludeDeviceIDs
  • 告警配置控制器 (controller):

    • 创建 internal/app/controller/alarm/ 目录及 alarm_controller.go 文件。
    • 实现 Create/Update/Delete/Get 告警配置的 HTTP 接口,调用 AlarmConfigService
  • API 路由 (api):

    • internal/app/api/router.go 中,注册 /api/v1/alarm/region-config/api/v1/alarm/device-config 相关路由,并绑定到 AlarmController 的方法。

4. 核心初始化层 (internal/core)

  • 系统计划初始化 (data_initializer.go):
    • 修改 getPredefinedSystemPlans 函数。
    • 将 "定时全量数据采集" 计划重命名为 "周期性系统健康检查"。
    • 在该计划中,于 "全量采集" 任务之后,添加 TaskTypeAreaControllerThresholdAlarmTaskTypeDeviceThresholdAlarm 任务。
    • 新增一个 "告警通知发送" 计划,并为其添加 TaskTypeAlarmNotificationSender 任务。