Skip to content

net-controller: expose authorized asynchronous node diagnostics - #761

Closed
Patrick W. Healy (phealy) wants to merge 17 commits into
phealy/lightweight-status-detail-requestsfrom
phealy/lightweight-status-detail-api
Closed

Patrick W. Healy (phealy) wants to merge 17 commits into
phealy/lightweight-status-detail-requestsfrom
phealy/lightweight-status-detail-api

Conversation

@phealy

@phealy Patrick W. Healy (phealy) commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Scope

Stacked on #760. Adds authorized POST/GET /status/node/{name}/details with explicit pending/complete/expired/unavailable/retryable results, configurable leader-local lifecycle, and node UID invalidation. Without an active command dispatcher, explicit requests immediately use informer-resolved HTTP pull regardless of background-pull/publication mode; failures remain pending for status-POST command delivery in the transport layer.

Preserves existing HTTP GET response behavior; the status POST wire limit is not incorrectly imposed on decoded GET data. Existing transport limits remain unchanged. Ordinary bulk endpoints and node publishing defaults are unchanged.

Validation

Controller package race tests, scoped formatting/lint including actionlint, config/lifecycle/API auth/HTTP tests passed. Includes >1 MiB explicit pull, disabled background pull, wrong-node/failure handling, coalescing, expiry, and leadership invalidation. Diff is below 1,000 additions-plus-deletions.

Lightweight status draft stack

Base: #745. Each layer targets the preceding branch and remains draft.

#746 -> #747 -> #748 -> #750 -> #751 -> #752 -> #753 -> #754 -> #755 -> #756 -> #757 -> #758 -> #759 -> #760 -> #761 -> #762 -> #763 -> #764 -> #765 -> #766 -> #767 -> #768 -> #769 -> #770 -> #771 -> #772 -> #773 -> #774 -> #775 -> #776 -> #777 -> #778 -> #779 -> #780 -> #781 -> #782 -> #783 -> #784 -> #785 -> #786 -> #787 -> #788 -> #789 -> #790 -> #791 -> #792 -> #793 -> #794 -> #795 -> #796 -> #797 -> #798 -> #799

Remove the Network card and heatmap navigation without changing Site summaries, node filtering, or per-node diagnostics. Remove unused graph edge-health derivation. Retain the detached topology implementation for an isolated follow-up deletion.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Isolate the 949-line deletion of the topology component after its render paths were removed. No remaining imports reference it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Remove matrix construction and broadcast fields, obsolete matrix-only coverage, and detached graph helpers. Preserve node overview and resource summaries and unrelated status tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Preserve full publication by default until the later runtime activation layer.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Keep detailed snapshots in one immutable shallow-owned TTL store. Add read-time and proactive deadline expiry, lifecycle cancellation and restart, and deterministic ownership and concurrency tests. Leave existing status ingestion and broadcasts unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Factor legacy peer health and observed-route mismatch calculations into reusable status helpers. Preserve lightweight metadata without carrying peer, route, or BPF arrays. Reuse the calculations for existing controller summaries without changing their output.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Keep explicit node-reported counts separate from lightweight metadata and reject legacy deltas against summary bases. Preserve enrichment and summary health indicators, and snapshot mutable cluster containers so concurrent patches cannot change a returned overview. Existing legacy full publication and bulk behavior remain unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Accept summary-only protobuf and JSON over WebSocket and HTTP, validate nested identity and observed counts, reject mixed detail payloads, and advertise summary capability in acknowledgments. Patch overview cache and notify viewers without retaining diagnostic arrays. Preserve legacy publication formats.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Separate detail snapshot construction from peer visitation and kernel route filtering so summary collection can reuse inspection without retaining detail arrays.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Reuse kernel inspection and expected-route planning while preserving legacy missing-route and unbounded0 annotation semantics. Add table, family, missing, mismatch, and multipath parity fixtures.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Collect shared metadata, bootstrap errors, aggregate health and exact peer/route summary facts without BPF traversal or outbound detail arrays. Add /status/summary using the existing local status policy and an additive protobuf converter. Leave all publishers and full endpoints unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Use PeerHealthyForOverview during streamed summary collection and shared legacy projection/mismatch helpers in parity tests. Do not collect full snapshots in the production summary path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Coalesce per-node requests, reuse UID-bound cached details, dispatch through a WebSocket hook or bounded HTTP pull, and expose POST polling fallback. Keep only request metadata outside the TTL detail cache; reject stale or mismatched replies and proactively retire requests. Add shared detail result JSON types and deterministic lifecycle tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Add per-node POST and GET detail APIs using existing viewer and aggregated authorization. Start request and cache lifecycles with the leader context and configured durations, invalidate replaced or deleted node UIDs, and use informer-resolved HTTP pulls regardless of background pull settings. Reject oversized decoded HTTP detail payloads without imposing a cache or WebSocket cap. Preserve legacy status routes and publication behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
Do not apply the status POST wire-size limit to an uncompressed HTTP GET response. Preserve existing explicit-pull behavior, avoid an extra full JSON allocation, and cover a response larger than one MiB. WebSocket and status POST frame limits are unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459
This was referenced Sep 16, 2026
@phealy
Patrick W. Healy (phealy) force-pushed the phealy/lightweight-status-detail-requests branch from b714aa4 to 4896fa5 Compare September 17, 2026 14:46
@phealy

Copy link
Copy Markdown
Contributor Author

This PR was mistaken churn from splitting the lightweight-status work into unnecessarily small PRs. That was my mistake, not a requirement from the user.

Its changes are preserved in #760 within the user-approved, consolidated 12-PR draft stack. Closing this superseded PR; the implementation is not being discarded, and nothing has been merged into main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant