| 1 | from fastapi import APIRouter |
| 2 | from fastapi import Body |
| 3 | from fastapi import Security |
| 4 | from loguru import logger |
| 5 | |
| 6 | from app.auth.utils import AuthHandler |
| 7 | from app.connectors.grafana.schema.dashboards import DashboardProvisionRequest |
| 8 | from app.connectors.grafana.schema.dashboards import GrafanaDashboardResponse |
| 9 | from app.connectors.grafana.services.dashboards import provision_dashboards |
| 10 | |
| 11 | # App specific imports |
| 12 | |
| 13 | |
| 14 | grafana_dashboards_router = APIRouter() |
| 15 | |
| 16 | |
| 17 | @grafana_dashboards_router.post( |
| 18 | "/dashboards", |
| 19 | response_model=GrafanaDashboardResponse, |
| 20 | description="Provision Grafana dashboards", |
| 21 | dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))], |
| 22 | ) |
| 23 | async def provision_dashboards_route(request: DashboardProvisionRequest = Body(...)): |
| 24 | """ |
| 25 | Endpoint to provision Grafana dashboards. |
| 26 | |
| 27 | Args: |
| 28 | request (DashboardProvisionRequest): The request body containing the dashboard provisioning data. |
| 29 | |
| 30 | Returns: |
| 31 | GrafanaDashboardResponse: The response containing the result of the dashboard provisioning. |
| 32 | """ |
| 33 | logger.info("Provisioning Grafana dashboards") |
| 34 | provision = await provision_dashboards(request) |
| 35 | return provision |