# -*- coding: utf-8 -*- """Dedicated runtime service FastAPI surface.""" from __future__ import annotations from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from backend.api import runtime_router from backend.api.runtime import get_runtime_state from backend.config.env_config import get_cors_origins def create_app() -> FastAPI: """Create the runtime service app.""" app = FastAPI( title="EvoTraders Runtime Service", description="Runtime lifecycle and gateway service surface extracted from the monolith", version="0.1.0", ) app.add_middleware( CORSMiddleware, allow_origins=get_cors_origins(), allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/health") async def health_check() -> dict[str, object]: """Health check for the runtime service.""" runtime_state = get_runtime_state() process = runtime_state.gateway_process is_running = process is not None and process.poll() is None return { "status": "healthy", "service": "runtime-service", "gateway_running": is_running, "gateway_port": runtime_state.gateway_port, } @app.get("/api/status") async def api_status() -> dict[str, object]: """Service-level status payload for runtime orchestration.""" runtime_state = get_runtime_state() process = runtime_state.gateway_process is_running = process is not None and process.poll() is None return { "status": "operational", "service": "runtime-service", "runtime": { "gateway_running": is_running, "gateway_port": runtime_state.gateway_port, "has_runtime_manager": runtime_state.runtime_manager is not None, }, } app.include_router(runtime_router) return app app = create_app() if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8003)