- Add get_vlans tool to filter interfaces by type=vlan - Add get_gateway_interfaces tool to identify gateway interfaces from routes - Add fallback to billing-mcp/config.json when router not in devices.json - Update .gitignore to exclude venv, pycache, snapshots
80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
import requests
|
|
import json
|
|
import sys
|
|
import os
|
|
|
|
# Import from our existing app
|
|
from app.update_data import get_base_url
|
|
|
|
DEVICES_FILE = "devices.json"
|
|
|
|
def test_router(router):
|
|
name = router["name"]
|
|
host = router["host"]
|
|
port = router["port"]
|
|
user = router["user"]
|
|
password = router["pass"]
|
|
|
|
base_url = get_base_url(host, port)
|
|
auth = (user, password)
|
|
|
|
print(f"\n{'='*60}")
|
|
print(f"TESTING ROUTER: {name} ({host})")
|
|
print(f"{'='*60}")
|
|
|
|
endpoints = ["system/identity", "system/resource", "interface"]
|
|
|
|
for ep in endpoints:
|
|
url = f"{base_url}/{ep}"
|
|
print(f"\n📡 Requesting: {url}")
|
|
|
|
try:
|
|
response = requests.get(
|
|
url,
|
|
auth=auth,
|
|
headers={"Accept": "application/json"},
|
|
timeout=15
|
|
)
|
|
|
|
print(f"✅ Status Code: {response.status_code}")
|
|
# print(f"Headers: {dict(response.headers)}")
|
|
|
|
if response.status_code == 200:
|
|
try:
|
|
data = response.json()
|
|
print(f"🟢 Success! Received {len(str(data))} bytes of JSON data.")
|
|
if isinstance(data, list) and len(data) > 0:
|
|
print(f"Sample data keys: {list(data[0].keys()) if isinstance(data[0], dict) else 'not a dict'}")
|
|
except Exception as e:
|
|
print(f"🟡 Status 200 but JSON Parse Error: {e}")
|
|
print(f"Raw Content (First 200 chars): {response.text[:200]}")
|
|
else:
|
|
print(f"🔴 Failed with status {response.status_code}")
|
|
print(f"Error Body: {response.text}")
|
|
|
|
except requests.exceptions.ConnectTimeout:
|
|
print("❌ Connection Timeout: Could not reach the router.")
|
|
except requests.exceptions.ConnectionError as e:
|
|
print(f"❌ Connection Error: {e}")
|
|
except Exception as e:
|
|
print(f"❌ Unexpected Error ({type(e).__name__}): {e}")
|
|
|
|
if __name__ == "__main__":
|
|
if not os.path.exists(DEVICES_FILE):
|
|
print(f"Error: {DEVICES_FILE} not found.")
|
|
sys.exit(1)
|
|
|
|
with open(DEVICES_FILE, 'r') as f:
|
|
devices = json.load(f)
|
|
|
|
if len(sys.argv) > 1:
|
|
target = sys.argv[1].lower()
|
|
devices = [d for d in devices if target in d["name"].lower() or target in d["host"]]
|
|
if not devices:
|
|
print(f"No router found matching '{target}'")
|
|
sys.exit(1)
|
|
|
|
for device in devices:
|
|
test_router(device)
|