refactor(fam-core): 重构第二阶段 - img_proxy 收尾 + 稳定性小修 + 工程质量
img_proxy 收尾: 提交此前未提交的图片代理蓝图(app.py 注册),改为复用 oracle_sync
已解析好的 base_url/token/timeout,不再独立读一份配置(避免配置改动时两处不同步)。
稳定性/正确性: chat_handler 问答失败时不再把 Oracle 内部 HTTP 状态码等细节透传给
客户端,改为通用错误信息(详细原因仍记服务端日志); 删除 logger.py 里旧任务架构
遗留的死函数 log_task; 更新 config.yaml.example 到当前 v2 架构(原文件还是重构前
的 scheduler/dispatcher/video_server 旧结构,当前代码完全不读这些字段)。
工程质量: 新增 fam-core/tests(9 个单元测试,覆盖 _format_events 上下文格式化和
config_loader 的 ${ENV_VAR} 解析)。
部署时发现并修复一个和这次改动无关的运维问题: NAS .env 文件缺 export 关键字,
plain source 只在当前 shell 生效不会被子进程(gunicorn)继承,导致 Oracle-Sync
token 校验失败;用 set -a/set +a 强制导出重启,非代码改动。
已部署 NAS 并验证:/health、/api/status、/api/proxy/frame、/api/proxy/avatar
全部通过;浏览器实测事件时间轴、人物管理页正常渲染。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
# FAM-Core 配置文件 (NAS 端)
|
||||
# FAM-Core 配置文件 (NAS 端) - 新架构 v2
|
||||
# 复制此文件为 config.yaml 并修改实际值
|
||||
#
|
||||
# NAS 仅作管理后台,不再处理视频。唯一后台线程 Oracle-Sync 每 30 分钟
|
||||
# 从甲骨文 FAM-Edge 拉取增量镜像到本地 MariaDB(sync_videos/events/people)。
|
||||
# 所有视频分析在 Oracle 完成。
|
||||
|
||||
server:
|
||||
host: "0.0.0.0"
|
||||
@@ -11,32 +15,18 @@ database:
|
||||
user: "root"
|
||||
password: ""
|
||||
database: "sentinel_home_ai"
|
||||
unix_socket: "/run/mysqld/mysqld10.sock"
|
||||
|
||||
scheduler:
|
||||
scan_interval: 60 # 扫描间隔(秒)
|
||||
video_dir: "/volume1/surveillance" # 视频录制目录
|
||||
video_extensions: [".mp4", ".mkv", ".avi"]
|
||||
file_stable_seconds: 60 # 文件稳定判定秒数
|
||||
camera_name: "默认摄像头"
|
||||
|
||||
dispatcher:
|
||||
poll_interval: 30 # 轮询间隔(秒)
|
||||
edge_url: "http://100.x.x.20:5000/api/edge/video/enqueue" # 异步队列端点(上传入队,Poller 拉取结果)
|
||||
max_retries: 5 # 文件级重试次数(分块级重试另计,每块3次)
|
||||
stale_timeout: 1800 # PROCESSING 僵尸回收(秒),需大于压缩+上传+Edge队列积压总时长
|
||||
# ffmpeg_path: "/var/packages/CodecPack/target/bin/ffmpeg41" # 可选,默认自动探测(Synology 需 CodecPack 版,系统版无 h264 编码)
|
||||
compress_timeout: 3600 # 单个视频预压缩超时(秒)
|
||||
|
||||
video_server:
|
||||
base_url: "http://100.x.x.10:8000/media"
|
||||
token: "your-secret-token-here" # 视频访问 token
|
||||
video_dir: "/volume1/surveillance"
|
||||
# 甲骨文同步(每 30 分钟拉增量镜像)
|
||||
oracle_sync:
|
||||
# FAM-Edge 对外同步接口地址(端口同其 server.port=5000)
|
||||
base_url: "http://<oracle-public-ip>:5000"
|
||||
# 与 Oracle 端 sync_api.token 一致
|
||||
token: ""
|
||||
interval_sec: 1800 # 拉取间隔(秒),默认 30 分钟
|
||||
timeout: 120 # 单次拉取超时(秒)
|
||||
|
||||
chat_handler:
|
||||
ollama_url: "http://100.x.x.20:11434/api/generate"
|
||||
model_name: "llava-phi3"
|
||||
# 智能问答统一走 FAM-Edge 编排端点(Gemini → NVIDIA → 本地 Ollama 兜底)
|
||||
qa_url: "http://<oracle-public-ip>:5000/api/edge/chat/ask"
|
||||
timeout: 120
|
||||
|
||||
storage:
|
||||
# 关键帧落盘目录(event_receiver 写入,fam-ui 读取展示时间轴)
|
||||
frame_image_dir: "/volume1/web/sentinel-home-ai/fam-ui/static/frames"
|
||||
|
||||
Reference in New Issue
Block a user