3e2cbcab88
tracker-policy-pr / check-pr (pull_request) Successful in 8s
test / integration-docker (pull_request) Successful in 12s
test / unit (pull_request) Successful in 43s
lint / lint (push) Failing after 59s
test / integration-firecracker (pull_request) Successful in 3m16s
test / coverage (pull_request) Successful in 16s
test / publish-infra (pull_request) Has been skipped
Move the `Supervise` lifecycle out of its own `orchestrator/supervisor/ supervise.py` and into the package `__init__`, renaming the class to `Supervisor`. Callers now import it from `bot_bottle.orchestrator.supervisor` alongside the queue surface it belongs with. Remove the dead `try/except ImportError` flat-import fallbacks from the package-only store modules (db_store, audit_store, config_store, queue_store) and image_cache. Those fallbacks existed for when the store files were flat-copied into the gateway; post-PRD-0070 the data plane never opens the DB, so these modules are only ever imported as part of the package. The two gateway data-plane files that may still be loaded flat (egress_addon_core, git_gate_render) keep their fallbacks. Full unit suite green (2251). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""Shared helpers for cached-image quickstart stale checks."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime, timezone
|
|
from pathlib import Path
|
|
|
|
from .store.config_store import ConfigStore
|
|
|
|
|
|
class StaleImageError(Exception):
|
|
"""Raised when a cached image or artifact exceeds the configured staleness
|
|
threshold. Callers can catch this to prompt interactively; headless paths
|
|
let it propagate as a fatal error."""
|
|
|
|
|
|
def check_stale(label: str, created_at: datetime) -> None:
|
|
"""Raise StaleImageError if `created_at` is older than the configured
|
|
stale-warning threshold. Negative threshold disables the check."""
|
|
threshold_days = ConfigStore().cached_image_stale_warning_days()
|
|
if threshold_days < 0:
|
|
return
|
|
now = datetime.now(timezone.utc)
|
|
created = created_at.astimezone(timezone.utc)
|
|
age = now - created
|
|
if age.total_seconds() <= threshold_days * 86400:
|
|
return
|
|
raise StaleImageError(
|
|
f"cached {label} is {age.days} day(s) old; "
|
|
"quickstart does not verify it matches the current Dockerfile/context"
|
|
)
|
|
|
|
|
|
def check_stale_path(label: str, path: Path) -> None:
|
|
"""Raise StaleImageError if `path`'s mtime exceeds the staleness threshold."""
|
|
check_stale(label, datetime.fromtimestamp(path.stat().st_mtime, tz=timezone.utc))
|
|
|
|
|
|
__all__ = ["StaleImageError", "check_stale", "check_stale_path"]
|