Compare commits

..

2 Commits

Author SHA1 Message Date
Josh Finlay ef770dde37 fix: change default log level to INFO
- Changed fallback log level from WARNING to INFO
- Ensures we get more detailed logging by default
2025-01-08 09:19:38 +10:00
Josh Finlay db6430e115 fix: recursive call in get_events route
- Separated route handler from database function
- Fixed infinite recursion
- Improved error handling
2025-01-08 09:18:05 +10:00
1 changed files with 32 additions and 26 deletions

View File

@ -94,7 +94,7 @@ gate_status = GateStatus()
# Configure logging # Configure logging
def setup_logging(settings: Settings): def setup_logging(settings: Settings):
"""Configure logging based on settings""" """Configure logging based on settings"""
log_level = getattr(logging, settings.logging.level.upper(), logging.WARNING) log_level = getattr(logging, settings.logging.level.upper(), logging.INFO)
logger.setLevel(log_level) logger.setLevel(log_level)
# Remove existing handlers # Remove existing handlers
@ -197,30 +197,36 @@ async def get_settings():
return settings return settings
async def get_events(limit: int = 10, offset: int = 0): async def get_events(limit: int = 10, offset: int = 0):
"""Get recent gate events with pagination""" """Get events from database with pagination"""
async with get_db() as db: try:
db.row_factory = aiosqlite.Row async with aiosqlite.connect(DB_PATH) as db:
# Get total count
async with db.execute("SELECT COUNT(*) FROM events") as cursor:
total = (await cursor.fetchone())[0]
# Get total count # Get paginated events
cursor = await db.execute("SELECT COUNT(*) as count FROM events") async with db.execute(
row = await cursor.fetchone() "SELECT timestamp, action, source, success FROM events ORDER BY timestamp DESC LIMIT ? OFFSET ?",
total_count = row['count'] (limit, offset)
) as cursor:
events = [
{
"timestamp": row[0],
"action": row[1],
"source": row[2],
"success": bool(row[3])
}
for row in await cursor.fetchall()
]
# Get paginated events return {
cursor = await db.execute( "events": events,
""" "total": total,
SELECT * FROM events "hasMore": total > (offset + limit)
ORDER BY timestamp DESC }
LIMIT ? OFFSET ? except Exception as e:
""", logger.error(f"Failed to get events: {e}", exc_info=True)
(limit, offset) raise HTTPException(status_code=500, detail="Failed to get events")
)
events = await cursor.fetchall()
return {
"events": [dict(event) for event in events],
"total": total_count,
"hasMore": (offset + limit) < total_count
}
# Set up MQTT event logging # Set up MQTT event logging
async def log_mqtt_event(action: str, success: bool = True): async def log_mqtt_event(action: str, success: bool = True):
@ -441,7 +447,7 @@ async def get_status():
raise HTTPException(status_code=500, detail="Failed to get gate status") raise HTTPException(status_code=500, detail="Failed to get gate status")
@app.get("/api/events") @app.get("/api/events")
async def get_events(limit: int = 10, offset: int = 0): async def get_events_route(limit: int = 10, offset: int = 0):
"""Get recent gate events with pagination""" """Get recent gate events with pagination"""
return await get_events(limit, offset) return await get_events(limit, offset)