"""Linkage scan endpoints.""" from __future__ import annotations import threading from fastapi import APIRouter, Depends, HTTPException, status from pydantic import BaseModel from triagelib import linkage as linkage_mod from ..auth import current_user from ..config import get_settings from ..models import User from ..routers.alerts_router import engine router = APIRouter(prefix="/api/linkage", tags=["linkage"]) settings = get_settings() class EnrichBody(BaseModel): region: str openstack_id: str @router.get("") def scan_state(user: User = Depends(current_user)): return engine.scan.to_json() @router.post("/scan") def start_scan(user: User = Depends(current_user)): if not settings.feature_linkage_scan: raise HTTPException(status.HTTP_403_FORBIDDEN, "The linkage scan is disabled on this instance.") if engine.scan.state == "running": return {"started": False, "reason": "already running"} threading.Thread(target=engine.scan.run, args=(engine.snapshot.get(),), daemon=True).start() return {"started": True} @router.post("/enrich") def enrich(body: EnrichBody, user: User = Depends(current_user)): return linkage_mod.enrich(body.region, body.openstack_id)