feat(ets): add ETS pillar with gated content previews; System as default page#53
Merged
Conversation
…ult page Adds a new ETS pillar: every table on a selected node with its owner (labeled with the registered name when there is one), protection, type, object count and memory footprint - searchable, sortable and collected in a single RPC round trip via :observer_backend.get_table_list/2 (runtime_tools, present on every node). System and private tables are included: their metadata is exactly what an operator needs, even when contents are unreadable. Table contents are live production data, so the DETAILS preview is disabled by default and gated behind an explicit opt-in (ets_content_inspection, documented with a warning in the installation guide). Even enabled, previews are read-only and bounded: at most 50 objects per request, each rendered with inspect limits; private or vanished tables report as not accessible instead of crashing. Also makes the System page the default landing page (and the logo link target) now that it leads the nav - a node snapshot is a better entry point than an armed tracing page.
Same pattern as the scheduler utilization toggle - enabled by default for development (the flag is read at request time, so put_env after boot is enough here), disabled with OBSERVER_WEB_ETS_CONTENT_INSPECTION=false.
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.
Summary
PR 3 of the observer_cli / OTP-observer gap-closing plan: an ETS table browser, plus the agreed follow-up making System the default landing page.
ETS pillar (new page)
:observer_backend.get_table_list/2(runtime_tools) - same stdlib-only convention as the Processes and System pillars, no observer_web version coupling.Content previews - safe by default
DETAILS always shows metadata. Previewing contents is a different risk class (live production data), so it's:
config :observer_web, ets_content_inspection: true(documented in the installation guide with an explicit warning about dashboard access).inspectlimits.System as default landing page
/observer(and the logo link) now lands on the System page instead of Tracing - a read-only node snapshot is a better entry point than an armed tracing page, and System already leads the nav.Risk assessment
/observernow lands on System, not Tracing/observer/tracingURLs unaffected; agreed follow-up from the nav reordering; test updatedget_table_list/2couplingetop_collect(PR #50); defensive decode skips unexpected entries:not_accessible, tested with a real private table owned by another processChecklist
mix format,credo --strict,dialyzer,sobelowcleanguides/static/ets_dash.pngscreenshot (needs a capture from a dev node before merge)🤖 Generated with Claude Code