Add 8-hour default window for legacy-meter deploy monitoring
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:
parent
674479dcc7
commit
e302ca9f59
7 changed files with 252 additions and 90 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue