Files
gandalf/config.json
Jared Vititoe fa7512a2c2 feat: terminal aesthetic rewrite + link debug page
- Full dark terminal aesthetic (Pulse/TinkerTickets style):
  - #0a0a0a background, #00ff41 green, #ffb000 amber, #00ffff cyan
  - CRT scanline overlay, phosphor glow, ASCII corner pseudoelements
  - Bracket-notation badges [CRITICAL], monospace font throughout
  - style.css, base.html, index.html, suppressions.html all rewritten

- New Link Debug page (/links, /api/links):
  - Per-host, per-interface cards with speed/duplex/port type/auto-neg
  - Traffic bars (TX cyan, RX green) with rate labels
  - Error/drop counters, carrier change history
  - SFP/DOM optical panel: vendor, temp, voltage, bias, TX/RX power dBm bars
  - RX-TX delta shown; color-coded warn/crit thresholds
  - Auto-refresh every 60s, anchor-jump to #hostname

- LinkStatsCollector in monitor.py:
  - SSHes to each host (one connection, all ifaces batched)
  - Parses ethtool + ethtool -m (SFP DOM) output
  - Merges with Prometheus traffic/error/carrier metrics
  - Stores as link_stats in monitor_state table

- config.json: added ssh section for ethtool collection
- app.js: terminal chip style consistency (uppercase, ● bullet)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 12:43:11 -05:00

71 lines
1.5 KiB
JSON

{
"ssh": {
"user": "root",
"password": "Server#980000Panda",
"connect_timeout": 5,
"timeout": 20
},
"unifi": {
"controller": "https://10.10.10.1",
"api_key": "kyPfIsAVie3hwMD4Bc1MjAu8N7HVPIb8",
"site_id": "default"
},
"prometheus": {
"url": "http://10.10.10.48:9090"
},
"database": {
"host": "10.10.10.50",
"port": 3306,
"user": "gandalf",
"password": "Gandalf2026Lotus",
"name": "gandalf"
},
"ticket_api": {
"url": "http://10.10.10.45/create_ticket_api.php",
"api_key": "5acc5d3c647b84f7c6f59082ce4450ee772e2d1633238b960136f653d20c93af"
},
"auth": {
"allowed_groups": ["admin"]
},
"monitor": {
"poll_interval": 120,
"failure_threshold": 2,
"cluster_threshold": 3,
"ping_hosts": [
{"name": "pbs", "ip": "10.10.10.3"}
]
},
"hosts": [
{
"name": "large1",
"ip": "10.10.10.2",
"prometheus_instance": "10.10.10.2:9100"
},
{
"name": "compute-storage-01",
"ip": "10.10.10.4",
"prometheus_instance": "10.10.10.4:9100"
},
{
"name": "micro1",
"ip": "10.10.10.8",
"prometheus_instance": "10.10.10.8:9100"
},
{
"name": "monitor-02",
"ip": "10.10.10.9",
"prometheus_instance": "10.10.10.9:9100"
},
{
"name": "compute-storage-gpu-01",
"ip": "10.10.10.10",
"prometheus_instance": "10.10.10.10:9100"
},
{
"name": "storage-01",
"ip": "10.10.10.11",
"prometheus_instance": "10.10.10.11:9100"
}
]
}