- Consolidated API route definitions by registering routes from separate modules for better organization and maintainability. - Removed redundant route definitions from the APIServer class, improving code clarity. - Updated camera monitoring and recording modules to utilize a shared context manager for suppressing camera SDK errors, enhancing error handling. - Adjusted timeout settings in camera operations for improved reliability during frame capture. - Enhanced logging and error handling across camera operations to facilitate better debugging and monitoring.
63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
"""
|
|
Storage-related API routes.
|
|
"""
|
|
|
|
import logging
|
|
from datetime import datetime
|
|
from fastapi import FastAPI, HTTPException
|
|
from ...storage.manager import StorageManager
|
|
from ..models import StorageStatsResponse, FileListResponse, CleanupResponse, FileListRequest, CleanupRequest
|
|
|
|
|
|
def register_storage_routes(
|
|
app: FastAPI,
|
|
storage_manager: StorageManager,
|
|
logger: logging.Logger
|
|
):
|
|
"""Register storage-related routes"""
|
|
|
|
@app.get("/storage/stats", response_model=StorageStatsResponse)
|
|
async def get_storage_stats():
|
|
"""Get storage statistics"""
|
|
try:
|
|
stats = storage_manager.get_storage_statistics()
|
|
return StorageStatsResponse(**stats)
|
|
except Exception as e:
|
|
logger.error(f"Error getting storage stats: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@app.post("/storage/files", response_model=FileListResponse)
|
|
async def get_files(request: FileListRequest):
|
|
"""Get list of recording files"""
|
|
try:
|
|
start_date = None
|
|
end_date = None
|
|
|
|
if request.start_date:
|
|
start_date = datetime.fromisoformat(request.start_date)
|
|
if request.end_date:
|
|
end_date = datetime.fromisoformat(request.end_date)
|
|
|
|
files = storage_manager.get_recording_files(
|
|
camera_name=request.camera_name,
|
|
start_date=start_date,
|
|
end_date=end_date,
|
|
limit=request.limit
|
|
)
|
|
|
|
return FileListResponse(files=files, total_count=len(files))
|
|
except Exception as e:
|
|
logger.error(f"Error getting files: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@app.post("/storage/cleanup", response_model=CleanupResponse)
|
|
async def cleanup_storage(request: CleanupRequest):
|
|
"""Clean up old storage files"""
|
|
try:
|
|
result = storage_manager.cleanup_old_files(request.max_age_days)
|
|
return CleanupResponse(**result)
|
|
except Exception as e:
|
|
logger.error(f"Error during cleanup: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|