e3efbd4552
Cron matching, audit/alert date filters, and schedule UI align on Asia/Shanghai while JWT/TOTP/heartbeat stay UTC; follow-ups add WS alert timestamps, fixed install timezone copy, and 422 on invalid date filters. Co-authored-by: Cursor <cursoragent@cursor.com>
2.2 KiB
2.2 KiB
运维时区全局北京 — 定向审计(2026-06-09)
范围
本次 diff 约 8 文件 + 3 文档 + 1 新测。非全库 Phase-2 逐行 8 步;按变更面做逻辑/安全/一致性走读。
| 文件 | 行数 | 审计方式 |
|---|---|---|
server/utils/display_time.py |
65 | 全文 + 单测 |
server/background/schedule_runner.py |
293 | cron/next_run/last_run 路径 |
server/infrastructure/database/audit_log_repo.py |
84 | 筛选逻辑 |
server/api/settings.py |
告警 date 片段 | 与 audit 对齐 |
frontend/src/utils/datetime.ts |
beijingWallParts | 与后端对齐 |
frontend/src/utils/scheduleCycle.ts |
cronMatch/computeNext | 与 runner 对齐 |
规则命中与 Closure
| ID | 规则 | 结论 | 说明 |
|---|---|---|---|
| H1 | PY-11 naive/aware 混用 | SAFE | last_run_at 改 to_naive_utc;匹配用 ensure_utc |
| H2 | 调度双触发 | SAFE | 仍 60s 冷却 + last_run_at 防抖 |
| H3 | 日期筛选静默吞错 | RISK-P3 | ValueError: pass 沿用旧模式;非法日期不报错 |
| H4 | 存量 cron 语义变更 | RISK-P2 | 无 DB 迁移;用户确认生产几乎无启用调度,部署后人工核对 |
| H5 | 前后端 cron 不一致 | SAFE | 均用北京墙钟;单测锚点 UTC 18:00 = 北京 02:00 |
| H6 | 审计日界 | SAFE | beijing_day_range_utc;北京 00:00 = UTC 前日 16:00 |
| H7 | SQL 注入 | SAFE | 日期仅 fromisoformat + 固定格式,无拼接 SQL |
| H8 | ruff F401 | FIXED | settings.py 告警列表移除未用 datetime import |
命中 8 条,Closure 8 条。
未覆盖 / 建议跟进
- 无审计
date_from北京边界的集成测(仅test_operator_tz单元级);可补test_alerts_audit带日期参数。 - 未跑
pre_deploy_check.sh全 7 道门控(仅local_verifyL2b)。 - 未浏览器手工验调度页
next_run列(需登录 SPA)。
验证证据
bash scripts/local_verify.sh → All local checks passed
pytest test_operator_tz + schedule_next_run + test_alerts_audit → passed
npm run type-check → passed(前次会话)
结论
定向审计通过,可进入部署前 pre_deploy_check;部署后请人工核对调度列表 next_run。