Add bulk OLT PON flooding-mode tool; restore README; docs
Adds a second bulk workflow alongside the firmware upgrader: changing PON flooding mode (private<->auto) on OLT NNI services across many OLTs. Flooding mode is encoded by the presence of the "PON FLOOD ID" key on each OLT-CFG["NNI Networks"] entry (present = private, absent = auto). private->auto deletes the key; auto->private sets it to 0. The rest of the OLT-CFG is preserved (PUT-as-replace, same as ONU-CFG). - src/mcms-api.js: listAllOltConfigs / getOltConfig / putOltConfig, plus pure helpers floodModeOfNni, summarizeOltNniNetworks, planFloodChange (planFloodChange clones and never mutates its input) - main.js: api:listOlts + api:executeFloodChange IPC handlers (concurrency 3, GET->plan->PUT, streams olt-flood:progress) - preload.js: expose both channels + onFloodProgress - renderer: OLT inspector view (#view-olts), two-step APPLY confirm, auto-saved pon-olt-flood-*.csv result report - Restore README.md (lost to a filesystem error) and document the new feature in README.md and CLAUDE.md (new section 14) Verified: npm run check passes; pure helpers unit-tested for the no-mutation, idempotency, and rollback invariants. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
0eb9b55717
commit
80fd7e8d37
7 changed files with 612 additions and 7 deletions
|
|
@ -100,6 +100,10 @@
|
|||
<h2>After-upgrade verification</h2>
|
||||
<p class="muted small">Open a saved <code>pon-upgrade-*.csv</code> to compare the recorded FEC + optical readings against the current state of those ONUs.</p>
|
||||
<button id="btn-to-verify" class="ghost">Verify previous upgrade…</button>
|
||||
|
||||
<h2>OLT flooding mode</h2>
|
||||
<p class="muted small">Bulk-check or fix PON flooding mode on OLT NNI services. Default rule: match <code>s0.c76.c0</code> with mode <code>private</code> and switch to <code>auto</code>.</p>
|
||||
<button id="btn-to-olts" class="ghost">Open OLT inspector…</button>
|
||||
</div>
|
||||
|
||||
<div class="panel-main">
|
||||
|
|
@ -246,6 +250,75 @@
|
|||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ================= OLT inspector view ================= -->
|
||||
<section id="view-olts" class="view hidden">
|
||||
<div class="panel-left">
|
||||
<h2>Filters</h2>
|
||||
<label>NNI TAG MATCH pattern
|
||||
<input id="olt-tag-pattern" type="text" value="s0.c76.c0" placeholder="e.g. s0.c76.c0 or s0.c76.*" />
|
||||
</label>
|
||||
<label>Current mode
|
||||
<select id="olt-mode-filter">
|
||||
<option value="private" selected>Private (PON FLOOD ID set)</option>
|
||||
<option value="auto">Auto (no PON FLOOD ID)</option>
|
||||
<option value="any">Any</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>OLT name contains
|
||||
<input id="olt-name-filter" type="search" placeholder="e.g. OLT5" />
|
||||
</label>
|
||||
<button id="btn-load-olts" class="primary">Load OLTs</button>
|
||||
<p class="muted small" id="olt-status"></p>
|
||||
|
||||
<h2>Selection</h2>
|
||||
<div class="selected-summary">
|
||||
<div><strong id="olt-sel-count">0</strong> OLT(s) selected · <strong id="olt-svc-count">0</strong> service slot(s) will change</div>
|
||||
<div class="row">
|
||||
<button id="btn-olt-select-all">Select all matching</button>
|
||||
<button id="btn-olt-select-none" class="ghost">Clear</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Action</h2>
|
||||
<label>Change matching services
|
||||
<select id="olt-action">
|
||||
<option value="private2auto" selected>Private → Auto (remove PON FLOOD ID)</option>
|
||||
<option value="auto2private">Auto → Private (set PON FLOOD ID = 0)</option>
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<div class="row">
|
||||
<button id="btn-olts-back" class="ghost">← Back to fleet</button>
|
||||
<button id="btn-olt-execute" class="danger" disabled>Execute change…</button>
|
||||
</div>
|
||||
<p id="olt-exec-status" class="small muted"></p>
|
||||
</div>
|
||||
|
||||
<div class="panel-main">
|
||||
<div class="fleet-head">
|
||||
<h2>OLTs (<span id="olt-count">0</span> shown, <span id="olt-total">0</span> total)</h2>
|
||||
<div class="row small muted">
|
||||
<span>Each row shows the matching NNI services. Selecting an OLT queues every matching service on it for change.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fleet-table-wrap">
|
||||
<table class="fleet-table" id="olt-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><input type="checkbox" id="olt-th-check" /></th>
|
||||
<th>OLT MAC</th>
|
||||
<th>Name</th>
|
||||
<th>PON mode</th>
|
||||
<th>FW</th>
|
||||
<th>Matching NNI services</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="olt-tbody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script src="app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue