Files
Dashboard-CAS/backend/routers/network.py

37 lines
1.2 KiB
Python

from fastapi import APIRouter, Depends
from modules.config_manager import ConfigManager
from modules.network_scanner import NetworkScanner
router = APIRouter(prefix="/api/network", tags=["network"])
def get_config() -> ConfigManager:
from main import app_config
return app_config
@router.get("/topology")
async def get_topology(config: ConfigManager = Depends(get_config)):
scan_config = config.get_network_scan_config()
configured_nodes = config.get_nodes()
scanner = NetworkScanner(subnet=scan_config.get("subnet", "192.168.1.0/24"))
if scan_config.get("enabled", False):
try:
scan_data = scanner.scan()
discovered = scanner.parse_scan_results(scan_data)
nodes = scanner.merge_with_config(discovered, configured_nodes)
except Exception:
nodes = [{**n, "status": "unknown"} for n in configured_nodes]
else:
nodes = [{**n, "status": "unknown"} for n in configured_nodes]
# Ping all nodes for current status
ips = [n["ip"] for n in nodes]
statuses = await scanner.ping_all(ips)
for node in nodes:
node["status"] = "up" if statuses.get(node["ip"], False) else "down"
return {"nodes": nodes, "scan_enabled": scan_config.get("enabled", False)}