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

56 lines
3.7 KiB
Markdown
Raw Normal View History

2025-11-07 18:54:02 +08:00
# 阈值告警功能 - 任务清单
本清单按照从底层到上层的依赖关系排序,建议按此顺序进行开发。
## 1. 基础设施层 (`internal/infra`)
- [ ] **数据库模型 (`models`)**:
- [ ] 在 `internal/infra/models/` 下创建 `alarm.go` 文件,定义 `ActiveAlarm``HistoricalAlarm` 两个结构体,包含 `status`, `ignored_until`, `last_notified_at` 等字段。
- [ ] 在 `internal/infra/models/schedule.go` 中,为 `TaskType` 新增三个常量:`TaskTypeAreaControllerThresholdAlarm`, `TaskTypeDeviceThresholdAlarm`, `TaskTypeAlarmNotificationSender`
- [ ] **数据库仓库 (`repository`)**:
- [ ] 在 `internal/infra/repository/` 下创建 `alarm_repository.go`,实现对 `active_alarms``historical_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` (获取待发送通知)。该服务将注入 `AlarmRepository``NotifyService`
- [ ] **任务实现 (`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` 的计算和更新逻辑。
* [ ] 注入 `DeviceRepository``AreaControllerRepository`
- [ ] **服务集成**:
- [ ] 在 `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` 函数。
- [ ] 将 "定时全量数据采集" 计划重命名为 "周期性系统健康检查"。
- [ ] 在该计划中,于 "全量采集" 任务之后,添加 `TaskTypeAreaControllerThresholdAlarm``TaskTypeDeviceThresholdAlarm` 任务。
- [ ] 新增一个 "告警通知发送" 计划,并为其添加 `TaskTypeAlarmNotificationSender` 任务。