Lint / Python (flake8) (pull_request) Successful in 2m6s
Lint / JS (eslint) (pull_request) Successful in 18s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (pull_request) Successful in 2m11s
Test / Python Tests (pytest) (pull_request) Successful in 2m20s
Lint / JS (eslint) (push) Successful in 10s
Lint / Python (flake8) (push) Successful in 1m58s
Lint / Notify on failure (push) Skipped
Security / Python Security (bandit) (push) Successful in 1m58s
Lint / Deploy (push) Successful in 4s
Test / Python Tests (pytest) (push) Successful in 58s
Modem and WAN: - Poll the BGW320 status pages read-only for light levels, PON and WAN state, with a WAN / Fiber panel, 7-day Rx trend, and alerts on WAN down, optical limits, and Rx drift - Read WAN outages and Smart Power restarts from the UniFi system log, since outages can be over between 5 minute polls Device pages: - Add device search to the dashboard and a page per host, switch, router, AP, PDU, or modem - Move all Link Debug data into expandable rows there; /links redirects - Collect UDM ports and UniFi device details (firmware, load, WAN, outlets) - Reorder the dashboard Monitoring fixes: - Alert when a configured host stops reporting: its series disappear rather than reporting down, so a dead host never raised an alert - Alert on Prometheus outages instead of blanking the dashboard - Treat a failed Pulse ping as unknown rather than host unreachable - Stop new switch ports reporting lifetime bytes as one interval's rate - Run database sessions in UTC: other server time zones shifted displayed ages and timed suppression expiries Also log every avatar 404 reason, add a favicon, and correct the WAN link labels (1G on Port 9, not 10G SFP+). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26 lines
795 B
HTML
26 lines
795 B
HTML
{% extends "base.html" %}
|
||
{% block title %}{{ device_name }} – GANDALF{% endblock %}
|
||
|
||
{% block content %}
|
||
<div class="lt-page-header">
|
||
<div>
|
||
<p class="g-page-sub"><a href="{{ url_for('index') }}">← Dashboard</a></p>
|
||
<h1 class="lt-page-title device-title">
|
||
<span id="device-dot" class="dot-unknown"></span>
|
||
<span>{{ device_name }}</span>
|
||
</h1>
|
||
<p class="g-page-sub" id="device-subtitle"></p>
|
||
</div>
|
||
<div id="device-actions" class="device-actions"></div>
|
||
</div>
|
||
|
||
<div id="device-root"><div class="link-loading">Loading device</div></div>
|
||
|
||
{% include "_modem_panel.html" %}
|
||
{% endblock %}
|
||
|
||
{% block scripts %}
|
||
<script>const DEVICE_NAME = {{ device_name | tojson }};</script>
|
||
<script src="{{ url_for('static', filename='device.js') }}"></script>
|
||
{% endblock %}
|