Fucius's picture
Upload 422 files
df6c67d verified
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()