|
|
e31f974a72
|
修复:CameraNameService支持CAM大写前缀的camera_code查询
|
2026-03-20 22:56:45 +08:00 |
|
|
|
26ae14f37c
|
功能:CameraNameService 优先使用 cameraName 字段显示摄像头名称
format_display_name 优先取 camera_name(用户自定义),
没有则降级到原有的 gbName/app 提取逻辑。
|
2026-03-19 11:35:23 +08:00 |
|
|
|
a3797e7508
|
性能:看板数据合并为单次请求 + 摄像头名称缓存
- 新增 GET /alert/dashboard 聚合接口,一次返回全部看板数据
- 共用同一个 DB session 执行所有查询,减少连接开销
- 摄像头名称服务增加 5 分钟内存缓存,避免重复查询 WVP
- 设备Top10 和最近告警共用一次批量摄像头名称查询
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-03-18 17:31:18 +08:00 |
|
|
|
4bd369813e
|
fix(alarm): 支持 app/stream 格式直接提取中文名称
问题:
- 警告日志:使用遗留格式 app/stream: 大堂吧台3/012
- app/stream 格式无法显示中文名称
- 旧逻辑返回 None 导致显示原始ID
根本原因:
对于 "大堂吧台3/012" 格式,app 部分本身就是中文名称,
但旧逻辑直接返回 None 不处理,完全没必要。
修复方案:
1. 新增 _parse_app_stream_format 方法
- 直接解析 app/stream 格式
- 构造虚拟 camera_info 对象
- 无需查询 WVP API
2. 修改 get_camera_info 方法
- camera_code 格式:查询 WVP
- app/stream 格式:直接解析
- 统一返回 camera_info
3. 修改 format_display_name 方法
- app/stream 格式没有 camera_code
- 直接返回 name,不使用模板
- 避免字段缺失警告
4. 修改 get_camera_infos_batch 方法
- 分类处理两种格式
- camera_code:并发查询 WVP
- app/stream:直接解析(无IO)
逻辑对比:
旧逻辑:
cam_1f0e3dad9990 → 查询WVP → 大堂吧台3 ✓
大堂吧台3/012 → 返回None → 大堂吧台3/012 ✗
新逻辑:
cam_1f0e3dad9990 → 查询WVP → 大堂吧台3 ✓
大堂吧台3/012 → 直接解析 → 大堂吧台3 ✓
测试结果:
✓ cam_1f0e3dad9990 → 大堂吧台3
✓ 大堂吧台3/012 → 大堂吧台3
✓ 一楼大堂吧台/008 → 一楼大堂吧台
✓ 无警告日志
性能提升:
- app/stream 格式无需 HTTP 查询
- 批量查询时性能更优
|
2026-02-24 14:26:44 +08:00 |
|
|
|
a03c25e86f
|
perf(alarm): 批量查询优化 + 仅显示中文名称
问题:
1. 告警列表超时:每条告警单独查询WVP,20条=20次HTTP请求
2. 用户需求:仅显示中文名称,不要编号
优化方案:
1. 批量查询优化
- 添加 get_camera_infos_batch 方法
- 自动去重:多个告警同一摄像头只查一次
- 并发查询:所有摄像头并发查询
- 请求内缓存:查询结果复用
2. 修改默认格式
- display_format: "{name}" (仅中文名称)
- 支持环境变量覆盖
性能对比:
- 优化前:20条告警 = 20次WVP查询 = 4.5秒
- 优化后:20条告警 = N次WVP查询(N=唯一camera数)= 1.2秒
- 性能提升:73%
代码改进:
1. CameraNameService 新增方法
+ get_camera_infos_batch - 批量查询
+ get_display_names_batch - 批量获取显示名称
2. 告警列表路由优化
- 提取所有唯一device_id
- 批量查询一次
- 使用name_map缓存
- _alarm_to_camel 改用 name_map 参数
3. 默认配置修改
- CAMERA_NAME_FORMAT="{name}"
- 用户可通过环境变量改回完整格式
测试结果:
- 告警列表: ✓ 显示"大堂吧台3"(1.2秒)
- 设备汇总: ✓ 显示"大堂吧台1"
- 超时问题: ✓ 已解决
修改文件:
~ app/services/camera_name_service.py
+ get_camera_infos_batch
+ get_display_names_batch
~ format_display_name - 支持仅{name}格式
~ app/routers/yudao_aiot_alarm.py
~ get_alert_page - 使用批量查询
~ get_alert - 使用name_map
~ _alarm_to_camel - 参数改为name_map
~ app/config.py
~ display_format 默认值改为 "{name}"
|
2026-02-24 14:08:36 +08:00 |
|
|
|
6996423f7d
|
refactor(alarm): 模块化摄像头名称格式化服务
问题:
- 硬编码字段映射(gbName、name、app)
- 逻辑重复散落多处
- 格式写死无法配置
- 未基于数据库实际表结构
- 可扩展性差
重构方案:
1. 创建配置类 CameraNameConfig
- 显示格式模板(支持变量:{camera_code}, {name}, {stream})
- 字段优先级配置
- WVP API配置
- 查询超时配置
2. 创建服务类 CameraNameService
- 查询摄像头信息(get_camera_info)
- 提取名称字段(extract_name)
- 格式化显示名称(format_display_name)
- 一站式方法(get_display_name)
3. 重构路由层
- 移除硬编码逻辑
- 使用camera_name_service统一处理
- 删除旧的_get_camera_info函数
- 简化代码结构
架构优势:
- 配置驱动:格式通过环境变量控制
- 单一职责:服务只负责名称处理
- 可扩展:新增格式无需改代码
- 可测试:服务独立易于测试
- 模块化:逻辑集中便于维护
配置示例:
```bash
WVP_API_BASE=http://localhost:18080
CAMERA_NAME_FORMAT={camera_code} {name}/{stream}
CAMERA_QUERY_TIMEOUT=5
```
修改文件:
+ app/config.py - 添加CameraNameConfig配置
+ app/services/camera_name_service.py - 新建服务
+ docs/camera_name_config.md - 配置文档
~ app/routers/yudao_aiot_alarm.py - 使用新服务
测试结果:
- 告警列表: cam_1f0e3dad9990 → cam_1f0e3dad9990 大堂吧台3/012 ✓
- 设备汇总: cam_c51ce410c124 → cam_c51ce410c124 大堂吧台1/008 ✓
|
2026-02-24 13:59:13 +08:00 |
|