36 lines
961 B
Python
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
|