feat(ingestion): improve control plane UI for large deployments - #71033
Merged
Conversation
Add search and pagination to the consumer groups and partitions tables so topics with 1000 partitions stay navigable. Group consumer debug pods by namespace, one section per ingestion lane. Auto-size the pod debug iframe to its content so the page scrolls instead of nesting scrollbars.
jose-sequeira
marked this pull request as ready for review
July 15, 2026 11:26
pl
approved these changes
Jul 15, 2026
Contributor
|
Reviews (1): Last reviewed commit: "feat(ingestion): improve control plane U..." | Re-trigger Greptile |
jose-sequeira
enabled auto-merge (squash)
July 15, 2026 11:38
2 tasks
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.
Problem
The control plane UI doesn't scale to our larger deployments. Some topics have 1000 partitions, so the lagging partitions table becomes one giant unnavigable list, and the consumer groups table is heading the same way. The consumer debug pod list mixes pods from every ingestion lane into one flat table. And the per-pod debug view (batches, commits) is squeezed into a fixed-height iframe with nested scrollbars instead of the page expanding to fit the data.
Changes
listView) to the lag section. The consumer groups table filters by group or topic (25 per page), the partitions table filters by partition number (100 per page). The search input survives refreshes, and lag heat bars stay scaled against the full result set so paging doesn't recalibrate the colors.ResizeObserver(same origin through the control plane's proxy), so the outer page scrolls naturally instead of nesting scrollbars.100vh(which inside an iframe is the iframe's height, hence the squeeze). The live feed keeps a bounded 600px tail, decoupled fromvhso it can't feed back into the iframe auto-sizing.How did you test this code?
This is browser-only vanilla JS with no test harness, so I verified it by extracting the inline script and running
node --checkfor syntax, plus a DOM-stub unit test exercisinglistViewend to end (paging through 1000 partitions, substring search, empty states, page clamping when the row set shrinks, filter reset). I was not able to run the UI against a live control plane in this session.Automatic notifications
Docs update
Internal debug tooling, no user-facing docs affected.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Authored with Claude Code. José described the three pain points (huge partition lists, lanes mixed together, the batches view fitting its container instead of the container expanding) and I (Claude) implemented them. Notable decisions: heat bars scale against the full dataset rather than the visible page; the iframe auto-size measures
body.scrollHeightrather thandocumentElement.scrollHeightbecause the latter is floored at the iframe's own height and would let the frame grow but never shrink; the live feed got a fixed pixel height instead of growing unbounded, since avh-based clamp inside an auto-sizing iframe is a feedback loop.