Skip to content

feat(oversight): redirect performance timeline dashboard#1072

Closed
ramboz wants to merge 1 commit intomainfrom
redirect-perf-dashboard
Closed

feat(oversight): redirect performance timeline dashboard#1072
ramboz wants to merge 1 commit intomainfrom
redirect-perf-dashboard

Conversation

@ramboz
Copy link
Copy Markdown
Collaborator

@ramboz ramboz commented Apr 15, 2026

Summary

  • Add a dedicated Redirect Performance timeline page (redirectperf.html) showing redirect duration percentiles (p50/p75) over time as a line chart
  • Fix the Redirect Count facet in explorer.html to show clean hop counts (1, 2, 3) instead of raw encoded values (1~53, 1:54) introduced in feat: track external redirect estimates helix-rum-enhancer#516
  • Add a Redirect Type facet (internal/external) to both explorer.html and the new redirectperf page
  • Enable facet-based filtering on the new page — clicking "internal" or "external" in the Redirect Type facet updates the chart and metrics
  • Add drilldown links from explorer Redirect Count and Redirect Type facets to the new redirectperf page

Details

New files

  • tools/oversight/redirectperf.html — Dashboard page with standard + redirect-specific key metric cards, Chart.js time-series chart, and redirect facet sidebar
  • tools/oversight/charts/redirectperf.jsRedirectPerfChart class extending AbstractChart, with groupBy (time bucketing), defineSeries (hasRedirect, noRedirect, internalRedirect, externalRedirect), updateDataFacets (redirect.type, redirect.count, redirect.source), and draw (p50/p75 redirect duration per time bucket)

Modified files

  • tools/oversight/slicer.js:
    • Add redirectDuration series (extracts duration in ms from redirect checkpoint target)
    • Add special handling for cp === 'redirect' in updateDataFacets to override redirect.target with clean hop counts and register redirect.type / redirect.count facets
    • Extend updateFilter to accept dynamically registered facets (key in dataChunks.facetFns) so that redirect.type and redirect.count filtering works — isKnownFacet() from rum-distiller uses a static suffix list that doesn't include type or count
  • tools/oversight/explorer.html:
    • Add redirect.type list-facet after existing redirect.target facet
    • Add drilldown="redirectperf.html" to both redirect facets

Redirect checkpoint encoding

The redirect checkpoint encodes data in the event target field:

  • <count>:<duration> for internal redirects (: separator)
  • <estimate>~<duration> for external redirects (~ separator)

Regex: /^(\d+)([:~])(\d+)$/

Test plan

Tested with www.cox.com (has both internal and external redirects with 1-60+ hops):

  • redirectperf.html renders line chart with p50/p75 redirect duration over time
  • Key metrics show: Redirected PVs (5m), Median Duration (443ms), % Redirected (30%)
  • Redirect Type facet shows "external" (3.6m) and "internal" (1.4m)
  • Clicking "internal" filters data: PVs drop to 1.4m, duration to 279ms, visits to 1m
  • Clicking "external" filters data: PVs 3.6m, duration 604ms
  • Redirect Hops facet shows clean values (1, 2, 3, 4, 5) and filtering works
  • Explorer redirect.target facet shows clean hop counts (not raw encoded values)
  • Explorer redirect.type facet shows external/internal
  • Drilldown arrows on redirect facets navigate to redirectperf.html
  • Dark mode theming works
  • No regression on cwvperf.html (8908 bundles, 12m visits, no filter issues)
  • No console errors

Screenshots

Explorer

Screenshot 2026-04-15 at 10 43 18 Screenshot 2026-04-15 at 10 43 25

Deep Dive

Screenshot 2026-04-15 at 10 43 49

Add a dedicated redirect performance page (redirectperf.html) showing
redirect duration p50/p75 over time, with key metrics and facet-based
filtering by redirect type (internal/external) and hop count.

Changes:
- New RedirectPerfChart class with time-series line chart
- New redirectperf.html dashboard page
- Add redirectDuration series to slicer.js for all pages
- Fix redirect.target facet to show clean hop counts (1, 2, 3)
  instead of raw encoded values (1~53, 1:54)
- Add redirect.type (internal/external) and redirect.count facets
  when checkpoint=redirect is active
- Add redirect.type facet to explorer.html with drilldown to
  redirectperf.html
- Extend updateFilter to accept dynamically registered facets so
  redirect.type and redirect.count filtering works correctly

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@aem-code-sync
Copy link
Copy Markdown

aem-code-sync Bot commented Apr 15, 2026

Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch and validate page speed.
In case there are problems, just click a checkbox below to rerun the respective action.

  • Re-run PSI checks
  • Re-sync branch
Commits

@ramboz ramboz requested review from maxakuru and trieloff April 15, 2026 17:45
@trieloff trieloff closed this Apr 15, 2026
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.

2 participants