DXC
783c633a15
feat: 时效判定结构化下沉到后端,修复状态映射漏掉 offline
背景:此前「滞后几天」在后端(calculate_offset)和前端(Dashboard.vue 自算
diffDays/diffHours)各有一套实现,阈值与粒度都不同,跨日必然打架 —— 昨天
23:00 的数据在次日 01:00 查看,后端说「滞后 1 天」,前端标「昨日数据」。
services/time_utils.py:
- 新增 staleness_of(),统一返回 {level, days, text},level 分
unknown / ok / yesterday / lagging / severe 五级。
- 日期解析改用正则抠 YYYY-MM-DD,分隔符兼容 - / _,因此 ISO 的
2026-09-15T08:30:00Z、2026/09/15、2026_09_15 都能识别。
原来的 split(' ')[0] + strptime('%Y-%m-%d') 遇到 ISO T 或斜杠会直接返回
「时间解析失败」,而 82 爬虫的 target_time 是原样透传接口返回值的,格式
不可控。
- calculate_offset 保留为兼容入口,内部委托 staleness_of。
models.py:
- to_dict() 新增 stale_level / stale_days。
- 修复状态映射:白名单原来只有 ['离线','异常','已离线'],漏了 'offline',
而 /add_device 创建手动设备写的正是 status='offline',导致手动添加的设备
被映射成 online、在面板上永远显示「在线」。改为大小写归一后比对,并纳入
unknown/未知。
实测:本地库 status 分布由 online:103/offline:2 修正为 online:99/offline:6。
2026-09-15 17:10:53 +08:00
..
2026-01-09 12:48:50 +08:00
2026-02-08 10:53:00 +08:00
2026-09-15 17:05:31 +08:00
2026-09-15 17:05:31 +08:00
2026-09-15 17:05:38 +08:00
2026-01-22 10:55:41 +08:00
2026-09-15 17:10:53 +08:00