feat(api): Add named events totals endpoint and deprecate raw version

This commit is contained in:
Adam Outler
2026-02-03 18:32:35 +01:00
parent a1a6c7e1cf
commit 7caa6a1949
2 changed files with 50 additions and 0 deletions

View File

@@ -73,6 +73,7 @@ from .openapi.schemas import ( # noqa: E402 [flake8 lint suppression]
DeviceInfo,
BaseResponse, DeviceTotalsResponse,
DeviceTotalsNamedResponse,
EventsTotalsNamedResponse,
DeleteDevicesRequest, DeviceImportRequest,
DeviceImportResponse, UpdateDeviceColumnRequest,
LockDeviceFieldRequest, UnlockDeviceFieldsRequest,
@@ -1527,6 +1528,37 @@ def api_get_events_totals(payload=None):
return jsonify(totals)
@app.route("/sessions/totals/named", methods=["GET"])
@validate_request(
operation_id="get_events_totals_named",
summary="Get Named Event Totals",
description="Retrieve event/session totals with named fields for a specified period.",
query_params=[{
"name": "period",
"description": "Time period (e.g., '7 days')",
"required": False,
"schema": {"type": "string", "default": "7 days"}
}],
response_model=EventsTotalsNamedResponse,
tags=["events"],
auth_callable=is_authorized
)
def api_get_events_totals_named(payload=None):
period = request.args.get("period", "7 days")
event_handler = EventInstance()
totals = event_handler.getEventsTotals(period)
# totals order: [all_events, sessions, missing, voided, new, down]
totals_dict = {
"total": totals[0] if len(totals) > 0 else 0,
"sessions": totals[1] if len(totals) > 1 else 0,
"missing": totals[2] if len(totals) > 2 else 0,
"voided": totals[3] if len(totals) > 3 else 0,
"new": totals[4] if len(totals) > 4 else 0,
"down": totals[5] if len(totals) > 5 else 0
}
return jsonify({"success": True, "totals": totals_dict})
@app.route('/events/recent', methods=['GET', 'POST'])
@validate_request(
operation_id="get_recent_events",

View File

@@ -318,6 +318,24 @@ class DeviceTotalsNamedResponse(BaseResponse):
)
class EventsTotalsNamedResponse(BaseResponse):
"""Response with named event/session statistics."""
totals: Dict[str, int] = Field(
...,
description="Dictionary of counts: total, sessions, missing, voided, new, down",
json_schema_extra={
"examples": [{
"total": 100,
"sessions": 50,
"missing": 0,
"voided": 0,
"new": 5,
"down": 2
}]
}
)
class DeviceExportRequest(BaseModel):
"""Request for exporting devices."""
format: Literal["csv", "json"] = Field(