Add 8-hour default window for legacy-meter deploy monitoring
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 5s
Build and Publish Multi-Context Image / build-and-push (push) Failing after 1m15s

Expose hours query param on /legacy-meter/summary and weekly-review;
capture_legacy_meter_evidence.py defaults to --hours 8 (--days 7 for
weekly retirement gate). Re-capture post-deploy evidence with tighter window.
This commit is contained in:
tegwick 2026-07-09 01:35:51 +02:00
parent 674479dcc7
commit e302ca9f59
7 changed files with 252 additions and 90 deletions

View file

@ -28,6 +28,21 @@ from api.services.legacy_meter import (
router = APIRouter(prefix="/legacy-meter", tags=["legacy-meter"])
def _review_window(
*,
days: int | None,
hours: int | None,
window_start: datetime | None,
window_end: datetime | None,
) -> tuple[datetime, datetime]:
end = window_end or datetime.now(tz=timezone.utc)
if window_start is not None:
return window_start, end
if hours is not None:
return end - timedelta(hours=hours), end
return end - timedelta(days=days or 7), end
@router.post(
"/interfaces",
response_model=LegacyInterfaceRead,
@ -107,23 +122,43 @@ async def record_usage(
@router.get("/summary", response_model=LegacyUsageSummary)
async def usage_summary(
days: int = Query(7, ge=1, le=366),
days: int | None = Query(None, ge=1, le=366),
hours: int | None = Query(None, ge=1, le=8784),
window_start: datetime | None = None,
window_end: datetime | None = None,
session: AsyncSession = Depends(get_session),
) -> LegacyUsageSummary:
end = window_end or datetime.now(tz=timezone.utc)
start = window_start or (end - timedelta(days=days))
if days is not None and hours is not None:
raise HTTPException(
status_code=422,
detail="Pass either days or hours, not both",
)
start, end = _review_window(
days=days,
hours=hours,
window_start=window_start,
window_end=window_end,
)
return await legacy_usage_summary(session, window_start=start, window_end=end)
@router.get("/weekly-review", response_model=LegacyWeeklyReview)
async def weekly_review(
days: int = Query(7, ge=1, le=366),
days: int | None = Query(None, ge=1, le=366),
hours: int | None = Query(None, ge=1, le=8784),
window_start: datetime | None = None,
window_end: datetime | None = None,
session: AsyncSession = Depends(get_session),
) -> LegacyWeeklyReview:
end = window_end or datetime.now(tz=timezone.utc)
start = window_start or (end - timedelta(days=days))
if days is not None and hours is not None:
raise HTTPException(
status_code=422,
detail="Pass either days or hours, not both",
)
start, end = _review_window(
days=days,
hours=hours,
window_start=window_start,
window_end=window_end,
)
return await legacy_weekly_review(session, window_start=start, window_end=end)