added troub

This commit is contained in:
2025-02-07 20:31:56 -05:00
parent 7b70f4a980
commit 112838d33a
5 changed files with 81 additions and 15 deletions

31
app.py
View File

@ -17,14 +17,41 @@ def load_config():
return json.load(f) return json.load(f)
device_status = {} device_status = {}
def update_status(): def update_status():
while True: while True:
config = load_config() config = load_config()
for device in config['devices']: for device in config['devices']:
device_status[device['name']] = ping(device['ip']) current_status = ping(device['ip'])
previous_status = device_status.get(device['name'], True)
if current_status != previous_status:
diagnostics = run_diagnostics(device)
send_webhook(device, current_status, diagnostics)
device_status[device['name']] = current_status
time.sleep(config['check_interval']) time.sleep(config['check_interval'])
def send_webhook(device, status, diagnostics):
config = load_config()
webhook_data = {
"device": device,
"status": status,
"timestamp": datetime.now().isoformat(),
"diagnostics": diagnostics
}
requests.post(config['webhook_url'], json=webhook_data)
def run_diagnostics(device):
diagnostics = {}
if device['connection_type'] == 'fiber':
# Add your fiber diagnostic commands here
diagnostics['optical_power'] = subprocess.getoutput('optical-power-check ' + device['ip'])
diagnostics['light_levels'] = subprocess.getoutput('light-level-check ' + device['ip'])
else:
# Add your copper diagnostic commands here
diagnostics['cable_test'] = subprocess.getoutput('ethtool ' + device['ip'])
diagnostics['signal_quality'] = subprocess.getoutput('signal-quality-check ' + device['ip'])
return diagnostics
@app.route('/') @app.route('/')
def home(): def home():
return render_template('index.html') return render_template('index.html')

View File

@ -3,12 +3,14 @@
{ {
"name": "UniFi Dream Machine Pro", "name": "UniFi Dream Machine Pro",
"ip": "192.168.1.1", "ip": "192.168.1.1",
"type": "router" "type": "router",
"connection_type": "copper"
}, },
{ {
"name": "UniFi Switch 24 PoE", "name": "UniFi Switch 24 PoE",
"ip": "192.168.1.2", "ip": "192.168.1.2",
"type": "switch" "type": "switch",
"connection_type": "fiber"
}, },
{ {
"name": "AP Living Room", "name": "AP Living Room",
@ -21,5 +23,10 @@
"type": "access_point" "type": "access_point"
} }
], ],
"check_interval": 30 "check_interval": 30,
"webhook_url": "https://your-webhook-url",
"troubleshooting": {
"fiber_tests": ["optical_power", "light_levels", "error_rate"],
"copper_tests": ["cable_length", "crosstalk", "signal_quality"]
}
} }

View File

@ -51,6 +51,14 @@
<h2>Connected Clients</h2> <h2>Connected Clients</h2>
<div id="client-count"></div> <div id="client-count"></div>
</div> </div>
<div class="metric-card">
<h2>Diagnostics</h2>
<div id="diagnostics-panel">
<div class="diagnostics-content"></div>
</div>
</div>
</div> </div>
</div> </div>
<script src="{{ url_for('static', filename='app.js') }}"></script> <script src="{{ url_for('static', filename='app.js') }}"></script>

View File

@ -1,18 +1,23 @@
function updateDeviceStatus() { function updateDiagnostics() {
fetch('/api/status') fetch('/api/diagnostics')
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
Object.entries(data).forEach(([deviceName, isUp]) => { const diagnosticsPanel = document.querySelector('.diagnostics-content');
const deviceElement = document.querySelector(`.device-status:has(span:contains("${deviceName}"))`); diagnosticsPanel.innerHTML = '';
if (deviceElement) {
const indicator = deviceElement.querySelector('.status-indicator'); Object.entries(data).forEach(([device, diagnostics]) => {
indicator.className = `status-indicator status-${isUp ? 'up' : 'down'}`; const diagElement = document.createElement('div');
} diagElement.className = `diagnostic-item ${diagnostics.type}-diagnostic`;
diagElement.innerHTML = `
<h3>${device}</h3>
<pre>${JSON.stringify(diagnostics.results, null, 2)}</pre>
`;
diagnosticsPanel.appendChild(diagElement);
}); });
}); });
} }
// Update every 30 seconds // Update diagnostics every minute
setInterval(updateDeviceStatus, 30000); setInterval(updateDiagnostics, 60000);
// Initial update // Initial update
updateDeviceStatus(); updateDeviceStatus();

View File

@ -67,4 +67,23 @@ body {
.status-down { .status-down {
background-color: #EF4444; background-color: #EF4444;
}
.diagnostics-panel {
margin-top: 15px;
}
.diagnostic-item {
padding: 10px;
border-left: 4px solid var(--primary-color);
margin: 10px 0;
background: rgba(0,111,255,0.1);
}
.fiber-diagnostic {
border-color: #10B981;
}
.copper-diagnostic {
border-color: #F59E0B;
} }