GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — [profiler-app] Header, theme and missing-data handling by Karakatiza666 · Pull Request #7949 · feldera/feldera

Conversation

@Karakatiza666

@Karakatiza666 Karakatiza666 commented Nov 12, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

profiler-app UX changes

  • Updated the Feldera icon in the header.
  • Dark mode switch at the top right. It follows the system setting by default and does not store the choice.
  • The scroll-down button icon loads.
  • If the bundle has no pipeline code, the code panel is hidden and the header says so. If the circuit profile is missing, the header says so. If both are missing, the header shows one combined message.
  • The Metrics tab is disabled when the bundle has no metrics.
  • The code panel cannot be resized below 10% of the window.
  • Scrollbar styles of web-console apply to plain containers and Monaco.

The performance work moved to #7951, which is stacked on this PR.

Testing

  • Manual testing
  • New component tests for the hidden code panel, the disabled Metrics tab and the missing-data messages.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
mythical-fred-oss[bot]
mythical-fred-oss Bot reviewed Nov 12, 2026
View reviewed changes
Comment thread js-packages/profiler-layout/src/lib/functions/processZipBundle.ts Resolved

Uh oh!

There was an error while loading. Please reload this page.

@mythical-fred-oss

mythical-fred-oss Bot commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

What I ran

Check Result
profiler-lib: tsc --noEmit + vitest ✅ 349/349
profiler-layout: bun run test-unit (browser mode), 4 runs ✅ 294/294 each run, no flakes seen
pre-commit run --files <changed> ✅
QA: circuit profile that is not valid JSON ❌ the whole bundle load fails (see inline comment)

The perf suite (test-perf) runs outside CI and makes no timing assertions, so it adds no flakiness risk.

Findings

  • bug (medium): an unreadable profile is handled only when the model build throws, not when the JSON is corrupt or truncated. Details and a test diff are in the inline comment.
  • missing (medium), commit hygiene: 8be1827d8 "Start the diagram on the metric the layout selects" is undone by 074e6cfdf "Revert the start on the selected metric". 53a10f39a "Clean up the comments…" is a fixup. Main has a linear history, so please squash these away with git rebase -i before merge.
  • missing (low-medium), test coverage: nothing tests the layout-cache race in runLayout, where an ELK layout is still running when a cache hit arrives (elkLayoutsRunning > 0 → skip the cache). Nothing tests that the cache stays unused when a stale layoutKey finishes after a newer layout. A unit test with two back-to-back updateGraph calls would lock this down.

Other gates pass. All dependencies are MIT (tailwind-scrollbar). There is no Rust, unsafe code, CI or docs surface. The UX changes are covered by the new component tests.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Karakatiza666
Karakatiza666 marked this pull request as ready for review November 12, 2026 16:49
Karakatiza666 added 2 commits November 12, 2026 16:56
@Karakatiza666
[profiler-app] Improve the header, theme and missing-data handling
4c019f4
profiler-app:
- Use the new Feldera logo and logomark. They turn white in dark mode.
- Add a light/dark switch at the top right. It follows the system
  setting until the user clicks it, and does not save the choice.
- Show the thin loading strip while a bundle or timestamp loads and
  while the diagram is laid out, like web-console.
- Load the `fd-*` icon font. Before, all of these icons were missing,
  for example the arrow on the scroll-down button.
- Use the web-console scrollbar styles, also in the Monaco editor.

profiler-layout (SupportBundleViewerLayout):
- When the bundle has no pipeline code, do not show the code panel.
- Disable the Metrics tab when there is no profile and no global stats.
- Show one header message for each combination of missing profile,
  metrics and code.
- Do not let the resizers collapse the code panel (min. 15%).
- Add an optional `headerEnd` snippet for controls at the end of the
  header.

Shared: move the generated `fd.css` and the scrollbar styles to
feldera-theme, so that web-console and profiler-app use the same files.
@Karakatiza666
[profiler-layout] Test the layout without parts of the bundle
bddb222
Test that SupportBundleViewerLayout:
- hides the code panel when the bundle has no code or only empty files,
- disables the Metrics tab without a profile and global metrics, and
  selects the first enabled tab instead,
- shows one header notice for each combination of missing profile,
  metrics and code.

Remove the test for the "Profile does not contain the source code"
fallback, which the layout does not show any more. Also clean up the
comments of the previous commit.
mythical-fred-oss[bot]
mythical-fred-oss Bot reviewed Nov 12, 2026
View reviewed changes
Comment thread js-packages/profiler-layout/src/lib/functions/processZipBundle.ts Outdated
file: ZipItem,
dataflow: Dataflow | undefined,
programCode: string[] | undefined
): Promise<{ profile?: CircuitProfile; profileError?: string }> {

@mythical-fred-oss mythical-fred-oss Bot Nov 12, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bug (medium): JSON.parse runs outside the try. If circuit_profile.json is truncated or malformed, processProfileFiles throws and the whole bundle fails to load: logs, config, metrics and code are all lost. The PR says an unreadable profile collapses the graph panel and keeps the rest, but that only holds when fromJson throws. A truncated file in a support bundle is a realistic case. I checked this with a browser test that passes '{"nodes": [' and fails with SyntaxError: Unexpected end of JSON input. Move the parse into the try, and add a test like this:

it('gives profileError, and keeps the other files, when circuit_profile.json is truncated', async () => {
  const result = await processProfileFiles([
    file(`${TIMESTAMP}/circuit_profile.json`, '{"nodes": ['),
    logs()
  ])
  expect(result.profile).toBeUndefined()
  expect(result.profileError).toMatch(/^Failed to read the circuit profile: /)
  expect(result.logText).toBe('starting up\n')
})

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
mythical-fred-oss[bot]
mythical-fred-oss Bot reviewed Nov 12, 2026
View reviewed changes
Comment thread js-packages/profiler-layout/src/lib/functions/loadGuard.ts Outdated
try {
// The work can block the main thread for seconds, so the browser must paint the loading
// state first.
await afterNextPaint()

@mythical-fred-oss mythical-fred-oss Bot Nov 12, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pitfall (medium): requestAnimationFrame does not fire in a hidden tab. The guard wraps every load, including the remote support bundle download in web-console's handleLoadRemote. If a user clicks "Load", then switches tabs while the bundle is collected, the download does not start until they come back. The progress strip shows the whole time. Consider racing the rAF against a short timeout, or skipping the wait when document.visibilityState === 'hidden'. You could also move the wait to after the download, just before the CPU-heavy parse.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@mythical-fred-oss

mythical-fred-oss Bot commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

What I ran

Check Result
profiler-lib tsc --noEmit + vitest --run ✅ 349 passed
profiler-layout test-unit (unit, component, browser) ✅ 294 passed. Ran the browser project 3 more times: no flakes
profiler-app svelte-check + tsc ✅ 0 errors
web-console profile-viewer + ProfileButton specs ✅ 36 passed. ❌ 3 ProfileButton screenshot tests failed with "No existing reference screenshot found": an environment issue, not this PR
pre-commit run on the changed files ✅
QA: truncated circuit_profile.json ❌ the whole bundle fails to load (see inline comment)

Gates: Tests and manual testing are documented, and the new browser tests passed 3 of 3 runs with no timing assertions. The one new dependency, tailwind-scrollbar in profiler-app, is MIT and web-console already uses it. No breaking changes to REST, SQL or storage.

Missing tests (medium):

  • A malformed or truncated profile JSON. It currently fails the whole load. The inline comment has a test diff.
  • Parallel edges with mixed back flags between the same two drawn nodes. These should give two drawn edges, a->b and a->b:back, and edgeMap should map both to the hover trace. cytograph.test.ts covers only same-flag merging.
  • The load guard when the tab is hidden (see the inline comment).
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Karakatiza666
Karakatiza666 force-pushed the profiler-app-ux branch from b559509 to 8cc1688 Compare November 12, 2026 17:00
@Karakatiza666
Karakatiza666 requested a review from mihaibudiu November 12, 2026 17:00
@Karakatiza666
Karakatiza666 force-pushed the profiler-app-ux branch from 8cc1688 to bddb222 Compare November 12, 2026 18:03
@Karakatiza666 Karakatiza666 mentioned this pull request Nov 12, 2026
[profiler] Faster profile load, smaller heap #7951
Open
@Karakatiza666 Karakatiza666 changed the title [profiler] Faster profile load, smaller heap, UX fixes [profiler-app] Header, theme and missing-data handling Nov 12, 2026

This branch has not been deployed

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

Reviewers

@mythical-fred-oss mythical-fred-oss[bot] mythical-fred-oss[bot] left review comments
@mihaibudiu mihaibudiu Awaiting requested review from mihaibudiu

At least 1 approving review is required to merge this pull request.

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@Karakatiza666
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.