feat: 新增设备 API 拉取采集及配套处理能力

- 接入 NDRServer 告警和流量日志,支持凭据与任务管理
- 支持分页拉取、窗口拆分、调度优先级及 WAL 持久化后推进断点
- 增加迟到告警规则重放,优化多条泛化规则选择和事件时间处理
- 补充回归测试、数据库升级脚本及部署文档
This commit is contained in:
王绍宏
2026-09-06 16:46:21 +08:00
parent b61ec2e37c
commit 00c0a1fb7f
141 changed files with 11318 additions and 467 deletions
@@ -0,0 +1,61 @@
-- =============================================================================
-- 脚本:80-late-replay-backfill-template.sql
-- 用途:为升级前已经进入 SYSLOG_NORMAL_ALARM、但错过实时规则窗口的历史告警,
-- 补建迟到告警分钟桶,之后由新版规则服务进行重放。
-- 性质:可选的数据修复模板,会写入或更新 ANALYSIS_LATE_ALARM_BUCKET。
-- 执行时机:05、06 已成功执行且确实需要补处理历史告警时。
--
-- 重要:本文件包含占位符,不得原样执行。
-- 执行前必须完成:
-- 1. 将 DEVICE_ID 替换为一个明确的数字,例如 126;
-- 2. 将 START_TIME、END_TIME 替换为明确时间,采用左闭右开范围;
-- 3. 先执行下面 USING 括号中的 SELECT,核对设备、时间和分钟数量;
-- 4. 一次最多按一小时处理,大范围应分成多个小时依次执行;
-- 5. 确认没有选中其他设备的数据。
--
-- 示例范围:
-- log_time >= TIMESTAMP '2026-09-06 00:00:00'
-- log_time < TIMESTAMP '2026-09-06 01:00:00'
-- 表示只处理 00:00:00(含)到 01:00:00(不含)的数据。
--
-- 成功后,受影响分钟在 ANALYSIS_LATE_ALARM_BUCKET 中为 PENDING,或在原任务
-- 正在运行时保持 RUNNING 并增加 requested_generation。随后由规则服务处理。
-- =============================================================================
-- 按“设备 + 事件分钟”合并:已有分钟增加请求代数,新分钟插入一条待处理记录。
MERGE INTO analysis_late_alarm_bucket t
USING (
SELECT
device_id,
TO_TIMESTAMP(
TO_CHAR(log_time,'YYYY-MM-DD HH24:MI') || ':00',
'YYYY-MM-DD HH24:MI:SS'
) AS bucket_start
FROM syslog_normal_alarm
WHERE device_id = DEVICE_ID
AND log_time >= TIMESTAMP 'START_TIME'
AND log_time < TIMESTAMP 'END_TIME'
GROUP BY
device_id,
TO_TIMESTAMP(
TO_CHAR(log_time,'YYYY-MM-DD HH24:MI') || ':00',
'YYYY-MM-DD HH24:MI:SS'
)
) s
ON (t.device_id=s.device_id AND t.bucket_start=s.bucket_start)
WHEN MATCHED THEN UPDATE SET
t.requested_generation=t.requested_generation+1,
t.last_observed_at=SYSDATE,
t.status=CASE WHEN t.status='RUNNING' THEN 'RUNNING' ELSE 'PENDING' END,
t.updated_at=SYSDATE
WHEN NOT MATCHED THEN INSERT (
id,device_id,bucket_start,bucket_end,last_observed_at,
requested_generation,claimed_generation,processed_generation,
status,attempt_count,fencing_token,created_at,updated_at
) VALUES (
SYS_GUID(),s.device_id,s.bucket_start,s.bucket_start+(1.0/1440),SYSDATE,
1,0,0,'PENDING',0,0,SYSDATE,SYSDATE
);
-- 提交本次历史补数。
COMMIT;