3248607790
Backend polls each registered service's /health endpoint every 30 s via a background asyncio task. GET /api/services exposes the live status snapshot. The Apps page now renders from this endpoint — showing "Unavailable" (dimmed, non-clickable) when a service is registered but its container is unreachable. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 lines
699 B
Python
23 lines
699 B
Python
"""
|
|
GET /api/services — returns health status for all registered feature services.
|
|
Available to any authenticated user so the frontend can drive app visibility.
|
|
"""
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from app.deps import get_current_user
|
|
from app.models.user import User
|
|
from app.services.service_health import get_all_statuses
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("")
|
|
async def list_services(_: User = Depends(get_current_user)) -> list[dict]:
|
|
"""
|
|
Returns each registered service with its current health status.
|
|
|
|
healthy=true → service responded 200 on its last /health poll
|
|
healthy=false → unreachable, timed out, or not yet polled
|
|
"""
|
|
return get_all_statuses()
|