26 lines
888 B
Python
26 lines
888 B
Python
from fastapi import APIRouter
|
|
from pydantic import BaseModel
|
|
from app.services import cluster_inventory, alertmanager, ai, log_ingest
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class QueryRequest(BaseModel):
|
|
query: str
|
|
|
|
|
|
@router.post("/query")
|
|
async def query(req: QueryRequest):
|
|
network_state, alerts, logs = await _gather(req.query)
|
|
response = await ai.answer(req.query, network_state, alerts, logs)
|
|
return {"response": response, "network_state": network_state, "alerts": alerts, "logs": logs}
|
|
|
|
|
|
async def _gather(query_text: str):
|
|
import asyncio
|
|
nfs_task = asyncio.create_task(cluster_inventory.get_network_status())
|
|
alerts_task = asyncio.create_task(alertmanager.get_alerts())
|
|
logs_task = asyncio.to_thread(log_ingest.get_events, 200)
|
|
network_state, alerts, logs = await asyncio.gather(nfs_task, alerts_task, logs_task)
|
|
return network_state, alerts, logs
|