Update core scanner, parser, SSH client, and UI
This commit is contained in:
+25
-1
@@ -169,6 +169,9 @@ var Xr=function(e){if(!(this instanceof Xr))return new Xr(e);this.id="Thenable/1
|
||||
}
|
||||
.btn-primary:hover { background: #3a7de8; }
|
||||
.btn-primary:disabled { background: var(--surface2); color: var(--text-dim); cursor: not-allowed; }
|
||||
.btn-danger { background: #c0392b; color: white; }
|
||||
.btn-danger:hover { background: #e74c3c; }
|
||||
.btn-danger:disabled { background: var(--surface2); color: var(--text-dim); cursor: not-allowed; }
|
||||
|
||||
.btn-sm {
|
||||
padding: 5px 10px;
|
||||
@@ -435,6 +438,12 @@ var Xr=function(e){if(!(this instanceof Xr))return new Xr(e);this.id="Thenable/1
|
||||
<svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24"><path d="M12 2C6 2 2 7 2 12s4 10 10 10 10-4.5 10-10S18 2 12 2zm0 4c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm4 12H8v-1c0-2.7 5.3-4 8-4v5z"/></svg>
|
||||
Scan GW
|
||||
</button>
|
||||
<button class="btn btn-danger" id="clearScanBtn" onclick="clearAndRescan()">
|
||||
<svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24">
|
||||
<polyline points="3 6 5 6 21 6"/><path d="M19 6l-1 14H6L5 6"/><path d="M10 11v6m4-6v6"/><path d="M9 6V4h6v2"/>
|
||||
</svg>
|
||||
Clear & Rescan
|
||||
</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@@ -724,9 +733,13 @@ function showNodeDetail(data) {
|
||||
<span class="detail-val">${data.chassis_id || '—'}</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-key">Description</span>
|
||||
<span class="detail-key">Model</span>
|
||||
<span class="detail-val">${data.description || '—'}</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-key">Firmware</span>
|
||||
<span class="detail-val">${data.firmware || '—'}</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-key">Last Seen</span>
|
||||
<span class="detail-val">${data.last_seen || '—'}</span>
|
||||
@@ -793,6 +806,15 @@ async function clearLayout() {
|
||||
await fetch('/api/layout', { method: 'DELETE' });
|
||||
alert('Layout cleared.');
|
||||
}
|
||||
async function clearAndRescan() {
|
||||
if (!confirm('This will delete all switch and link data, then run a full scan. Continue?')) return;
|
||||
const btn = document.getElementById('clearScanBtn');
|
||||
btn.disabled = true;
|
||||
const res = await fetch('/api/scan/clear', { method: 'POST' });
|
||||
if (res.status === 409) { alert('Scan already running'); btn.disabled = false; return; }
|
||||
startPolling();
|
||||
}
|
||||
|
||||
async function triggerScan(dept) {
|
||||
const url = dept === 'elec' ? '/api/scan/elec'
|
||||
: dept === 'gw' ? '/api/scan/gw'
|
||||
@@ -823,6 +845,7 @@ async function pollStatus() {
|
||||
scanBtn.disabled = true;
|
||||
document.getElementById('scanElecBtn').disabled = true;
|
||||
document.getElementById('scanGwBtn').disabled = true;
|
||||
document.getElementById('clearScanBtn').disabled = true;
|
||||
progressWrap.classList.add('visible');
|
||||
statusBar.classList.add('visible');
|
||||
|
||||
@@ -848,6 +871,7 @@ async function pollStatus() {
|
||||
scanBtn.disabled = false;
|
||||
document.getElementById('scanElecBtn').disabled = false;
|
||||
document.getElementById('scanGwBtn').disabled = false;
|
||||
document.getElementById('clearScanBtn').disabled = false;
|
||||
progressBar.style.width = '100%';
|
||||
setTimeout(() => {
|
||||
progressWrap.classList.remove('visible');
|
||||
|
||||
Reference in New Issue
Block a user