velxio/backend/app/api/routes/metrics.py

36 lines
961 B
Python

"""Public metrics endpoints — receives client-side telemetry pings."""
from fastapi import APIRouter, Depends, Request
from pydantic import BaseModel
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.dependencies import get_current_user
from app.database.session import get_db
from app.models.user import User
from app.services.metrics import record_run
router = APIRouter()
class RunEventRequest(BaseModel):
project_id: str | None = None
board_fqbn: str | None = None
@router.post("/run", status_code=204)
async def report_run(
body: RunEventRequest,
request: Request,
db: AsyncSession = Depends(get_db),
current_user: User | None = Depends(get_current_user),
):
"""Fire-and-forget: client calls this when the user presses Run."""
await record_run(
db,
user=current_user,
project_id=body.project_id,
board_fqbn=body.board_fqbn,
request=request,
)
return None