Files
esp32-web/src/esp32_web/api/events.py
user c1f580ba16 feat: pagination totals, request logging, data retention
Add shared paginate() helper with total count to all list endpoints.
Add request logging middleware (method, path, status, duration, IP).
Add data retention service with configurable thresholds and CLI command.
2026-02-06 09:58:20 +01:00

27 lines
881 B
Python

"""Event endpoints."""
from datetime import datetime, timedelta, UTC
from flask import request
from . import bp, paginate
from ..models import Event
from ..extensions import db
@bp.route('/events')
def list_events():
"""List sensor events."""
event_type = request.args.get('type')
sensor_id = request.args.get('sensor_id', type=int)
hours = request.args.get('hours', 24, type=int)
since = datetime.now(UTC) - timedelta(hours=hours)
query = db.select(Event).where(Event.timestamp >= since).order_by(Event.timestamp.desc())
if event_type:
query = query.where(Event.event_type == event_type)
if sensor_id:
query = query.where(Event.sensor_id == sensor_id)
result = paginate(query, Event.to_dict)
return {'events': result['items'], 'total': result['total'],
'limit': result['limit'], 'offset': result['offset']}