| from apscheduler.schedulers.background import BackgroundScheduler |
| from fastapi import FastAPI |
|
|
| from inference.core.env import METRICS_INTERVAL |
| from inference.core.version import __version__ |
| from inference.enterprise.device_manager.command_handler import ( |
| Command, |
| fetch_commands, |
| handle_command, |
| ) |
| from inference.enterprise.device_manager.metrics_service import ( |
| report_metrics_and_handle_commands, |
| ) |
|
|
| app = FastAPI( |
| title="Roboflow Device Manager", |
| description="The device manager enables remote control and monitoring of Roboflow inference server containers", |
| version=__version__, |
| terms_of_service="https://roboflow.com/terms", |
| contact={ |
| "name": "Roboflow Inc.", |
| "url": "https://roboflow.com/contact", |
| "email": "help@roboflow.com", |
| }, |
| license_info={ |
| "name": "Apache 2.0", |
| "url": "https://www.apache.org/licenses/LICENSE-2.0.html", |
| }, |
| root_path="/", |
| ) |
|
|
|
|
| @app.get("/") |
| def root(): |
| return { |
| "name": "Roboflow Device Manager", |
| "version": __version__, |
| "terms_of_service": "https://roboflow.com/terms", |
| "contact": { |
| "name": "Roboflow Inc.", |
| "url": "https://roboflow.com/contact", |
| "email": "help@roboflow.com", |
| }, |
| "license_info": { |
| "name": "Apache 2.0", |
| "url": "https://www.apache.org/licenses/LICENSE-2.0.html", |
| }, |
| } |
|
|
|
|
| @app.post("/exec_command") |
| async def exec_command(command: Command): |
| handle_command(command.dict()) |
| return {"status": "ok"} |
|
|
|
|
| scheduler = BackgroundScheduler(job_defaults={"coalesce": True, "max_instances": 3}) |
| scheduler.add_job( |
| report_metrics_and_handle_commands, "interval", seconds=METRICS_INTERVAL |
| ) |
| scheduler.add_job(fetch_commands, "interval", seconds=3) |
| scheduler.start() |
|
|