|
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": "[email protected]", |
|
}, |
|
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": "[email protected]", |
|
}, |
|
"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() |
|
|