Add web auth, infinite-scroll, agent admission and review fixes across agent/server/web

This commit is contained in:
Stanislav Rossovskii
2026-05-28 23:45:12 +04:00
parent 37b1a1d6d6
commit 1026e9ebbe
75 changed files with 3021 additions and 916 deletions

View File

@@ -7,8 +7,10 @@ from fastapi import APIRouter, Depends, HTTPException, Query, status
from sqlalchemy import and_, or_, select
from sqlalchemy.ext.asyncio import AsyncSession
from .. import metrics
from ..agent_auth import AgentCredential, get_agent_credential
from ..db import get_session
from ..logging_config import get_logger
from ..models import Event
from ..schemas import (
ID_PATTERN,
@@ -22,6 +24,8 @@ from ..timeutil import to_utc
router = APIRouter()
log = get_logger("monlet.events")
def _encode_cursor(received_at: datetime, event_id) -> str:
raw = f"{to_utc(received_at).isoformat()}|{event_id}".encode()
@@ -52,12 +56,24 @@ async def events(
) -> EventBatchAcceptedResponse:
agent = await accepted_agent_for_key(session, credential)
if agent is None:
await session.commit()
return EventBatchAcceptedResponse(accepted=0, deduplicated=0)
raise HTTPException(status_code=403, detail="agent not accepted")
accepted = 0
deduplicated = 0
for ev in body.events:
ok = await ingest_event(session, agent.agent_id, ev)
try:
async with session.begin_nested():
ok = await ingest_event(session, agent.agent_id, ev)
except HTTPException as exc:
if exc.status_code != 400:
raise
log.warning(
"event_rejected",
check_id=ev.check_id,
agent_id=agent.agent_id,
code=exc.detail,
)
metrics.events_total.labels(result="rejected").inc()
continue
if ok:
accepted += 1
else: