保留连续性过滤,新增可审计补档工具与备份步骤;周末/节假日与真缺档分开处理,支持重复执行与部分失败续跑。 Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: multica-agent <github@multica.ai>
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from http import HTTPStatus
|
|
|
|
|
|
class SystemRoutesMixin:
|
|
def _handle_system_public_get(self, parsed) -> bool:
|
|
if parsed.path == "/api/health":
|
|
self.send_json(
|
|
{
|
|
"ok": True,
|
|
"storage": "sqlite",
|
|
"account_required": True,
|
|
"time": datetime.now().astimezone().isoformat(timespec="seconds"),
|
|
}
|
|
)
|
|
return True
|
|
return False
|
|
|
|
def _handle_system_get(self, parsed) -> bool:
|
|
if parsed.path == "/api/admin/settings":
|
|
self.send_json(
|
|
{"ok": True, **self.application_service.system_status(), "users": self.application_service.admin_users()}
|
|
)
|
|
return True
|
|
return False
|
|
|
|
def backfill_data(self) -> None:
|
|
try:
|
|
body = self.read_json_body()
|
|
lookback_raw = body.get("lookback")
|
|
lookback = int(lookback_raw) if lookback_raw not in (None, "") else None
|
|
audit = self.application_service.backfill(
|
|
str(body.get("start_date") or ""),
|
|
str(body.get("end_date") or ""),
|
|
lookback=lookback,
|
|
dry_run=bool(body.get("dry_run")),
|
|
force=bool(body.get("force")),
|
|
create_backup=body.get("create_backup", True) is not False,
|
|
)
|
|
self.send_json({"ok": True, **audit, "results": audit.get("results") or []})
|
|
except ValueError as exc:
|
|
self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
|
|
except Exception as exc:
|
|
self.send_json({"error": f"历史回补失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR)
|