ericwyuan
|
9aba71c8ed
|
fix: Edge队列时间戳根治 — INSERT显式北京时间 + 存量表schema迁移
795e8ac 只改了 CREATE TABLE 的 DEFAULT,但 DEFAULT 固化在已存在表的
schema 中,IF NOT EXISTS 不会更新旧表——新行 created_at 仍走旧
DEFAULT(localtime)=UTC。三处修复:
1. enqueue INSERT 显式写 created_at/updated_at (+8 hours),不再依赖 schema DEFAULT
2. _init_db 检测旧 schema 含 localtime 时重建表迁移(数据保留,幂等)
3. 存量数据修正: 行16/19 created_at +8h
验证: 本地迁移单测3例通过;线上行20(task 44) created_at=18:43:35
为北京时间(UTC机器当时10:43)。
|
2026-08-20 18:50:59 +08:00 |
|
ericwyuan
|
795e8acc6c
|
fix: 时区统一北京时区 — Edge(UTC机器)三处时间处理修复
背景: Oracle Edge 机器为 UTC 时区,NAS 与视频均为北京时间,
网页要求统一北京时区。排查结论: NAS 端(北京时间)与 UI(直读
MariaDB)均正确,问题集中在 Edge 端三处。
1. queue_manager: 7 处 datetime('now','localtime') 在 UTC 机器上
写入 UTC 时间(比北京慢8h),全部改为 datetime('now','+8 hours')
2. preprocessor.compute_timestamps: event_start_time 缺失时 fallback
datetime.now() 用了 Edge 本地时间(UTC),改为北京时间
datetime.now(timezone(+8h));带时区的 ISO 输入统一转北京时间
3. nvidia_adapter._ts_to_seconds: 不支持生产格式
'YYYY-MM-DD HH:MM:SS'(split后int抛ValueError全部返回-1),
导致集锦视频永远为空、视频模式永远降级逐帧——上一轮引入的
bug,测试用 HH:MM:SS 格式未暴露。现支持两种格式;drawtext
标签与提示词同步为完整时间戳说明
数据修正: event 17(task 298 手动测试缺 event_start_time)的
frame_timestamp 全为 UTC,按视频文件名真实时间(04:34:10)重算;
Edge 队列存量时间戳 +8h。
验证: 单测三例通过(生产格式解析/fallback北京时间/ISO带时区转换);
task 41 新代码正确写入北京时间 17:36:52。
|
2026-08-20 17:41:59 +08:00 |
|
ericwyuan
|
8cb5553beb
|
fix: Edge端三处修复 — API key丢失致全模型失败 + 失败结果黑洞 + 重派发死锁
根因: Edge服务手动重启未source .env,GEMINI/NVIDIA key丢失,
所有视觉模型调用失败("All models failed"),且失败结果永不回传NAS。
1. config_loader: 启动时自动加载.env(export KEY=VALUE),已存在环境变量不覆盖
2. queue_manager.enqueue: FAILED(或已交付SUCCESS)行重置为PENDING复用重跑,
修复 INSERT OR IGNORE + UNIQUE(nas_task_id) 导致的静默忽略死锁
3. get_undelivered_results: 包含FAILED状态,/results构造failed负载,
NAS Poller可感知失败避免僵尸循环空转重传
4. ddl.sql: failure_stage ENUM 增加 'process'(与db_layer valid_stages对齐),
修复 pymysql DataError 1265
验证: task 293(压缩后22MB) NVIDIA降级分析成功→event_id=13;
task 295 全链路成功→event_id=14;NAS端ENUM已同步ALTER
|
2026-08-20 15:35:40 +08:00 |
|
ericwyuan
|
02da23ef42
|
feat: 异步任务队列架构 - SQLite队列 + 速率限制 + NAS Poller
Edge端:
- 新增 SQLite 异步任务队列 (queue_manager + consumer)
- 新增 TokenBucket 速率限制器 (Gemini 1000 RPM, NVIDIA 40 RPM, burst 2x)
- 新增 /api/edge/video/enqueue + /api/edge/results 端点
- 消费者线程从队列消费任务,按速率限制调用AI模型
- orchestrator 集成 rate_limiter,Gemini优先→NVIDIA兜底
NAS端:
- Dispatcher 重构为 enqueue 模式(上传后立即返回,不等结果)
- 新增 Poller 线程(定期从Edge拉取结果写 MariaDB)
- app.py 启动 Poller,config.yaml 新增 poller 配置
- db_layer 更新 valid_stages 添加 'process'
|
2026-08-20 12:07:09 +08:00 |
|