NMS-20125: Node List parity enhancements - #8736
Draft
synqotik wants to merge 11 commits into
Draft
Conversation
Adds the nodesWithOutages virtual FIQL search key to NodeRestService, replacing legacy DefaultNodeListService.addCriteriaForCurrentOutages with corrected operator precedence (suppresstime disjunction is now parenthesized so it no longer defeats "ifregainedservice is null"). Also adds testNodesWithOutagesSearch and testNodeTypeSearch ITs to NodeRestServiceIT, both passing locally (2/2, mvn failsafe against local PostgreSQL).
- Gate the SNMP interface fetch in NodesTable.vue on nodes/showInterfaces changing rather than interfaceListMode, so it can no longer fire with the new filter mode paired against stale (pre-refetch) page node ids racing the correct, later fetch. Add a dedupe key as a secondary safeguard. - Omit the snmpParm attribute narrowing entirely when the value contains SQL-LIKE wildcards (%/_), since the server matches them literally while the client-side matcher treats them as wildcards; keeps the fetch a proper superset of the client-side match. - Add NodesTable.test.ts coverage for the narrowing FIQL, default-mode no-fetch, wildcard omission, and fetch dedupe.
…et-column filtering
Fixes five Important issues from the whole-branch review:
1. Invert the snmpMatchType-undefined default in getInterfaceListMode
(useInterfaceListing.ts) so undefined resolves to 'equals', matching
buildSnmpQuery and parseSnmpParmParams. Previously undefined defaulted to
'contains' display while the filter narrowed by exact match, so expanded
interface panels could show interfaces that didn't qualify the node.
2. Extract one shared, exported normalizeMacSearch() (useInterfaceListing.ts)
that strips all non-hex characters and lowercases, and use it in
useInterfaceListing's maclike match, NodesTable.vue's buildSnmpNarrowing,
and useNodeQuery.ts's buildMaclikeQuery. Previously two of the three only
stripped ':' and '-', so a Cisco-style dotted MAC (aabb.ccdd) filtered
nodes correctly but the expanded panel/narrowing fetch found nothing.
3. Widen NodesTable.vue's buildSnmpNarrowing under-fetch guard from just
'%'/'_' to also cover ','/';'/'('/')'. Those characters previously either
got silently replaced with spaces (making the server narrowing no longer
a superset of the client match) or passed through raw and could unbalance
the FIQL expression, causing a server-side parse error that surfaced as
"No interfaces" client-side.
4. Add server-side IT coverage locking in the composed FIQL wire shapes the
Vue page emits: NodeRestServiceIT#testComposedFiqlWireShapes (grouped
label OR, grouped nodesWithOutages, and the searchTerm-as-IP union, all
intersected with the node.type!=D guard) and
SnmpInterfaceRestServiceIT#testGroupedNodeIdAndPhysAddrFiqlParses (the
"(ids);(narrowing)" shape used by the interfaces-narrowing fetch).
5. Add a useNodeQuery.test.ts case asserting the exact _s produced for a
searchTerm that looks like an IP (with no explicit ipAddress filter),
locking in the label/ipInterface.ipAddress union shape inside the
node.type!=D guard.
Also (freebie): Nodes.vue's legacy ?nodeId=<n> redirect now uses
window.location.replace instead of .assign, so Back doesn't return to the
bookmark URL and immediately re-redirect.
…nly for expandable nodes
…lves in maclike/snmpParm mode The auto-expand watcher evaluated isRowExpandable synchronously against nodeToSnmpInterfaceMap before the lazy SNMP fetch (kicked off only once Show Interfaces is on, in maclike/snmpParm mode) had resolved, so qualifying rows were never auto-expanded on first entry to those modes. Add a generation-guarded catch-up watcher on nodeToSnmpInterfaceMap that merges in newly-qualifying rows once the fetch resolves, without reverting a manual collapse on a later redundant map replacement for the same fetch generation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
We want to remove the legacy JSP Node List code, but we identified some more functionality that was not fully ported to the Vue Node List page. This PR fixes those gaps in both the Vue Node List as well as the v2 Node Rest Service, and should achieve feature parity.
Removal of the JSP node list will be in a separate PR.
REST (v2):
nodesWithOutagesFIQL search key: nodes with ≥1 current (unresolved, unsuppressed, non-perspective) outage.DefaultNodeListServiceSQL.node.typeFIQL filteringVue UI:
?listInterfaces=true): expandable rows listing each node's interfaces, replicating the three legacy display modes: Default IP interface list, MAC-search mode, and SNMP-attribute mode. Also adds an "N Nodes, M Interfaces on this page" footer.?nodeId=<n>URLs now redirect to the node detail page.assetRecordstring properties (incl. geolocation-backed city/state/zip/country/address), so site-status-view drill-downs can no longer silently render an unfiltered list.orderBy=flowssort.External References