[重构] 运动监测恢复轮询主路径(简单稳定) - poll_enabled 默认开启;修复3隐患: 推送失败批次不前进游标(下轮重试不丢事件)、重启优先续用DB游标(停机期间事件补推)、fetch limit 提到1000;Webhook降级为可选补充

This commit is contained in:
ericwyuan
2026-08-22 12:00:03 +08:00
parent b2b537dde5
commit 7adc32486a
3 changed files with 129 additions and 37 deletions

View File

@@ -33,26 +33,35 @@ chat_handler:
qa_url: "http://129.146.203.203:5000/api/edge/chat/ask"
timeout: 120
# 运动监测通知服务2026-08-22 重构为 Webhook 驱动,不轮询
# SS 配置 Webhook 把运动事件 POST 到 NAS /api/ss/webhook本服务映射字段后
# 推送甲骨文 FAM-Edge单向 NAS -> Oracle甲骨文不再反向访问 NAS
# SS Webhook 不提供 event_id / camera_id由本服务合成 event_id、把摄像头名映射成
# camera_id启动一次性从 SS 拉取 + 以下静态映射兜底),并把 EVENT_TIME 解析成 epoch。
# 运动监测通知服务2026-08-22 定稿:轮询主路径
# NAS 本机轮询 SS EventCenter.Event.List真实 event_id/start_time/duration
# 增量推送甲骨文 FAM-Edge单向 NAS -> Oracle甲骨文不再反向访问 NAS
# Webhook/api/ss/webhook保留为可选低延迟补充SS 行动规则未配置则不触发。
# SS 凭据走环境变量(${DSM_ACCOUNT}/${DSM_PASSWORD}),由启动脚本 source 的 .env 提供。
motion_notifier:
enabled: true
poll_enabled: false # 关闭轮询,改用 SS Webhook 推送
dsm_host: "192.168.50.64" # Surveillance Station 所在地址NAS 本机,用于一次性拉摄像头映射
poll_enabled: true # 轮询主路径(默认开启)
dsm_host: "192.168.50.64" # Surveillance Station 所在地址NAS 本机)
dsm_port: 5000
dsm_account: "${DSM_ACCOUNT}"
dsm_password: "${DSM_PASSWORD}"
# 摄像头名 -> camera_id 静态映射(优先);启动时还会从 SS 拉一份补全
camera_ids: [2] # 轮询关注的摄像头Generic_ONVIF-001
# 摄像头名 -> camera_id 静态映射Webhook 路径用;启动时还会从 SS 拉一份补全)
camera_name_to_id:
"Generic_ONVIF-001": 2
oracle_base_url: "http://129.146.203.203:5000" # 与 oracle_sync.base_url 一致
oracle_token: "${ORACLE_SYNC_TOKEN}" # 与 oracle_sync.token 一致
timeout_sec: 10 # 单次 SS 请求超时(摄像头映射拉取用)
# 以下为可选轮询参数poll_enabled=true 时才生效,当前默认关闭)
poll_interval_sec: 60
poll_window_hours: 2
batch_size: 100
timeout_sec: 10 # 单次 SS 请求超时
# 心跳:跟轮询 SS 无关,只是定期空 POST 一下甲骨文的 /api/ss/motion证明
# NAS->Oracle 这条推送链路本身还活着enabled=true 就跑,不受 poll_enabled 影响)。
# 甲骨文侧 dsm_motion_prefilter.max_heartbeat_age_sec默认 900s据此判断"无运动"
# 结论是否可信——这个心跳间隔要明显小于那个阈值,否则会被误判成链路已死。
heartbeat_interval_sec: 300
# 轮询参数
poll_interval_sec: 60 # 轮询间隔
poll_window_hours: 2 # 每轮回看窗口(小时),覆盖轮询间隔内的新事件
batch_size: 100 # 单批推送上限
# Webhook 可选补全(仅 webhook 路径用):收到 webhook 后,以 camera_id+触发时刻
# 为中心开此时间窗(秒)回头查 SS 事件列表,匹配最接近的运动事件回填真实
# start_time/duration/event_idWebhook 本身不提供这些字段)。
enrich_window_sec: 120