import textwrap from datetime import datetime, timezone from typing import Optional import psutil from fastapi import Depends, Query from core.base import R2RException, RunType from core.base.api.models import ( GenericMessageResponse, WrappedGenericMessageResponse, WrappedLogsResponse, WrappedServerStatsResponse, WrappedSettingsResponse, ) from core.providers import ( HatchetOrchestrationProvider, SimpleOrchestrationProvider, ) from .base_router import BaseRouterV3 class SystemRouter(BaseRouterV3): def __init__( self, providers, services, orchestration_provider: ( HatchetOrchestrationProvider | SimpleOrchestrationProvider ), run_type: RunType = RunType.MANAGEMENT, ): super().__init__(providers, services, orchestration_provider, run_type) self.start_time = datetime.now(timezone.utc) def _setup_routes(self): @self.router.get( "/health", openapi_extra={ "x-codeSamples": [ { "lang": "Python", "source": textwrap.dedent( """ from r2r import R2RClient client = R2RClient("http://localhost:7272") # when using auth, do client.login(...) result = client.system.health() """ ), }, { "lang": "JavaScript", "source": textwrap.dedent( """ const { r2rClient } = require("r2r-js"); const client = new r2rClient("http://localhost:7272"); function main() { const response = await client.system.health(); } main(); """ ), }, { "lang": "CLI", "source": textwrap.dedent( """ r2r health """ ), }, { "lang": "cURL", "source": textwrap.dedent( """ curl -X POST "https://api.example.com/v3/health"\\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ """ ), }, ] }, ) @self.base_endpoint async def health_check() -> WrappedGenericMessageResponse: return GenericMessageResponse(message="ok") # type: ignore @self.router.get( "/system/settings", openapi_extra={ "x-codeSamples": [ { "lang": "Python", "source": textwrap.dedent( """ from r2r import R2RClient client = R2RClient("http://localhost:7272") # when using auth, do client.login(...) result = client.system.settings() """ ), }, { "lang": "JavaScript", "source": textwrap.dedent( """ const { r2rClient } = require("r2r-js"); const client = new r2rClient("http://localhost:7272"); function main() { const response = await client.system.settings(); } main(); """ ), }, { "lang": "CLI", "source": textwrap.dedent( """ r2r system settings """ ), }, { "lang": "cURL", "source": textwrap.dedent( """ curl -X POST "https://api.example.com/v3/system/settings" \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ """ ), }, ] }, ) @self.base_endpoint async def app_settings( auth_user=Depends(self.providers.auth.auth_wrapper), ) -> WrappedSettingsResponse: if not auth_user.is_superuser: raise R2RException( "Only a superuser can call the `system/settings` endpoint.", 403, ) return await self.services["management"].app_settings() @self.router.get( "/system/status", openapi_extra={ "x-codeSamples": [ { "lang": "Python", "source": textwrap.dedent( """ from r2r import R2RClient client = R2RClient("http://localhost:7272") # when using auth, do client.login(...) result = client.system.status() """ ), }, { "lang": "JavaScript", "source": textwrap.dedent( """ const { r2rClient } = require("r2r-js"); const client = new r2rClient("http://localhost:7272"); function main() { const response = await client.system.status(); } main(); """ ), }, { "lang": "CLI", "source": textwrap.dedent( """ r2r system status """ ), }, { "lang": "cURL", "source": textwrap.dedent( """ curl -X POST "https://api.example.com/v3/system/status" \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ """ ), }, ] }, ) @self.base_endpoint async def server_stats( auth_user=Depends(self.providers.auth.auth_wrapper), ) -> WrappedServerStatsResponse: if not auth_user.is_superuser: raise R2RException( "Only an authorized user can call the `system/status` endpoint.", 403, ) return { # type: ignore "start_time": self.start_time.isoformat(), "uptime_seconds": ( datetime.now(timezone.utc) - self.start_time ).total_seconds(), "cpu_usage": psutil.cpu_percent(), "memory_usage": psutil.virtual_memory().percent, } @self.router.get( "/system/logs", openapi_extra={ "x-codeSamples": [ { "lang": "Python", "source": textwrap.dedent( """ from r2r import R2RClient client = R2RClient("http://localhost:7272") # when using auth, do client.login(...) result = client.system.logs() """ ), }, { "lang": "JavaScript", "source": textwrap.dedent( """ const { r2rClient } = require("r2r-js"); const client = new r2rClient("http://localhost:7272"); function main() { const response = await client.system.logs({}); } main(); """ ), }, { "lang": "CLI", "source": textwrap.dedent( """ r2r system logs """ ), }, { "lang": "cURL", "source": textwrap.dedent( """ curl -X POST "https://api.example.com/v3/system/logs" \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ """ ), }, ] }, ) @self.base_endpoint async def logs( run_type_filter: Optional[str] = Query(""), offset: int = Query( 0, ge=0, description="Specifies the number of objects to skip. Defaults to 0.", ), limit: int = Query( 100, ge=1, le=1000, description="Specifies a limit on the number of objects to return, ranging between 1 and 100. Defaults to 100.", ), auth_user=Depends(self.providers.auth.auth_wrapper), ) -> WrappedLogsResponse: if not auth_user.is_superuser: raise R2RException( "Only a superuser can call the `system/logs` endpoint.", 403, ) return await self.services["management"].logs( run_type_filter=run_type_filter, offset=offset, limit=limit, )