Batch API endpoints, reduce frontend polling by ~75%, fix resource leaks
Backend: add batch endpoints for target states, metrics, and device health to replace O(N) individual API calls per poll cycle. Frontend: use batch endpoints in dashboard/targets/profiles tabs, fix Chart.js instance leaks, debounce server event reloads, add i18n active-tab guards, clean up ResizeObserver on pattern editor close, cache uptime timer DOM refs, increase KC auto-refresh to 2s. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -202,6 +202,15 @@ async def discover_devices(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/v1/devices/batch/states", tags=["Devices"])
|
||||
async def batch_device_states(
|
||||
_auth: AuthRequired,
|
||||
manager: ProcessorManager = Depends(get_processor_manager),
|
||||
):
|
||||
"""Get health/connection state for all devices in a single request."""
|
||||
return {"states": manager.get_all_device_health_dicts()}
|
||||
|
||||
|
||||
@router.get("/api/v1/devices/{device_id}", response_model=DeviceResponse, tags=["Devices"])
|
||||
async def get_device(
|
||||
device_id: str,
|
||||
|
||||
@@ -185,6 +185,24 @@ async def list_targets(
|
||||
return PictureTargetListResponse(targets=responses, count=len(responses))
|
||||
|
||||
|
||||
@router.get("/api/v1/picture-targets/batch/states", tags=["Processing"])
|
||||
async def batch_target_states(
|
||||
_auth: AuthRequired,
|
||||
manager: ProcessorManager = Depends(get_processor_manager),
|
||||
):
|
||||
"""Get processing state for all targets in a single request."""
|
||||
return {"states": manager.get_all_target_states()}
|
||||
|
||||
|
||||
@router.get("/api/v1/picture-targets/batch/metrics", tags=["Metrics"])
|
||||
async def batch_target_metrics(
|
||||
_auth: AuthRequired,
|
||||
manager: ProcessorManager = Depends(get_processor_manager),
|
||||
):
|
||||
"""Get metrics for all targets in a single request."""
|
||||
return {"metrics": manager.get_all_target_metrics()}
|
||||
|
||||
|
||||
@router.get("/api/v1/picture-targets/{target_id}", response_model=PictureTargetResponse, tags=["Targets"])
|
||||
async def get_target(
|
||||
target_id: str,
|
||||
|
||||
Reference in New Issue
Block a user