From 18e71c847e634256bee9cf492e8a0409e5c0a6be Mon Sep 17 00:00:00 2001 From: Adam Outler Date: Mon, 8 Dec 2025 22:32:16 +0000 Subject: [PATCH] Increase devices, add root --- .devcontainer/scripts/load-devices.sh | 4 ++-- scripts/generate-device-inventory.py | 30 +++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/.devcontainer/scripts/load-devices.sh b/.devcontainer/scripts/load-devices.sh index a6fde84d..a9581ce5 100755 --- a/.devcontainer/scripts/load-devices.sh +++ b/.devcontainer/scripts/load-devices.sh @@ -13,8 +13,8 @@ else CSV_PATH="$(mktemp -t netalertx-devices.XXXXXX 2>/dev/null || mktemp /tmp/netalertx-devices-XXXXXX.csv)" fi fi -DEVICE_COUNT="${DEVICE_COUNT:-40}" -SEED="${SEED:-42}" +DEVICE_COUNT="${DEVICE_COUNT:-255}" +SEED="${SEED:-20211}" NETWORK_CIDR="${NETWORK_CIDR:-192.168.50.0/22}" DB_DIR="${NETALERTX_DB:-/data/db}" DB_FILE="${DB_DIR%/}/app.db" diff --git a/scripts/generate-device-inventory.py b/scripts/generate-device-inventory.py index 62f7c4c7..e0f612cb 100644 --- a/scripts/generate-device-inventory.py +++ b/scripts/generate-device-inventory.py @@ -162,8 +162,9 @@ def build_row( now: dt.datetime, ) -> dict[str, str]: comments = "Synthetic device generated for testing." - first_seen = random_time(now) - last_seen = random_time(now) + t1 = random_time(now) + t2 = random_time(now) + first_seen, last_seen = (t1, t2) if t1 <= t2 else (t2, t1) fqdn = f"{name.lower().replace(' ', '-')}.{site}" if name else "" # Minimal fields set; missing ones default to empty string for CSV compatibility. @@ -215,6 +216,7 @@ def generate_rows(args: argparse.Namespace, header: list[str]) -> list[dict[str, rows: list[dict[str, str]] = [] + # Include one Internet root device that anchors the tree; it does not consume an IP. required_devices = 1 + args.switches + args.aps + args.devices if required_devices > len(ip_pool): raise ValueError( @@ -227,6 +229,30 @@ def generate_rows(args: argparse.Namespace, header: list[str]) -> list[dict[str, ip_pool.remove(choice) return choice + # Root "Internet" device (no parent, no IP) so the topology has a defined root. + root_row = build_row( + name="Internet", + dev_type="Gateway", + vendor="NetAlertX", + mac="Internet", + parent_mac="", + ip="", + header=header, + owner=args.owner, + site=args.site, + ssid=args.ssid, + now=now, + ) + root_row["devComments"] = "Synthetic root device representing the Internet." + root_row["devParentRelType"] = "Root" + root_row["devStaticIP"] = "0" + root_row["devScan"] = "0" + root_row["devAlertEvents"] = "0" + root_row["devAlertDown"] = "0" + root_row["devLogEvents"] = "0" + root_row["devPresentLastScan"] = "0" + rows.append(root_row) + router_mac = random_mac(macs) router_ip = take_ip() rows.append(