Skip to content

refactor(web): let hosts handle request logging - #844

Merged
mnoah1 merged 1 commit into
mnoah1/stovepipe-web-e2efrom
mnoah1/web-logging-cleanup
Oct 14, 2026
Merged

mnoah1 merged 1 commit into
mnoah1/stovepipe-web-e2efrom
mnoah1/web-logging-cleanup

Conversation

@mnoah1

@mnoah1 mnoah1 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Why?

The reusable web libraries currently require Pino and receive one logger when the module is constructed. A host with a different logger must adapt that dependency, and a shared module cannot bind logging directly to each viewer's request context. The host should own logging integration.

What?

SubmitQueue and Stovepipe now receive an optional synchronous onLog(level, message, metadata) callback on each handle request. Logs preserve severity, the original error under error, correlation IDs, and page paths. Missing callbacks are silent; a throwing callback cannot change page results or replace the original failure.

Pino imports, package requirements, silent logger construction, and test logger casts are removed from the reusable libraries. The Next.js reference hosts keep Pino through one shared adapter, which maps error to Pino's serialized err field. Page loads and readiness checks use the callback. Stovepipe also reports unexpected page failures before rethrowing them.

Test Plan

Latest validation passed all 32 targets with ./tool/bazel test //web:check //web/test/e2e/submitqueue:web_test //web/test/e2e/stovepipe:web_test --test_output=errors, including both browser suites and image builds. make lint check-tidy check-gazelle also passed.

Earlier validation:

  • ./tool/bazel test //web:check --test_output=errors — all 30 targets passed, including package boundaries, React 18 consumption, log severity/error serialization, overlapping request isolation, and failing logging sinks.
  • ./tool/bazel test //web/test/e2e/submitqueue:web_test //web/test/e2e/stovepipe:web_test --test_output=errors — both real-stack browser suites passed (five SubmitQueue scenarios and one Stovepipe scenario).
  • ./tool/bazel build //web/service/submitqueue:image //web/service/stovepipe:image — both deployment images built.
  • make lint check-tidy check-gazelle — passed without unrelated file changes.

@mnoah1
mnoah1 added this pull request to stack #843 October 12, 2026 18:42
@mnoah1
mnoah1 force-pushed the mnoah1/web-logging-cleanup branch from 91147a3 to 2c2b73b Compare October 12, 2026 18:48
@mnoah1 mnoah1 changed the title Draft: refactor(web): let hosts handle request diagnostics Draft: refactor(web): let hosts handle request logging Oct 12, 2026
@mnoah1
mnoah1 removed this pull request from stack #843 October 12, 2026 20:08
@mnoah1
mnoah1 added this pull request to stack #847 October 12, 2026 20:08
@mnoah1
mnoah1 force-pushed the mnoah1/web-logging-cleanup branch from 2c2b73b to 4f7c843 Compare October 13, 2026 13:41
@mnoah1
mnoah1 force-pushed the mnoah1/web-logging-cleanup branch from 4f7c843 to b0e942e Compare October 13, 2026 17:10
@mnoah1
mnoah1 force-pushed the mnoah1/web-logging-cleanup branch from b0e942e to c1c65fb Compare October 13, 2026 17:24
@mnoah1 mnoah1 changed the title Draft: refactor(web): let hosts handle request logging refactor(web): let hosts handle request logging Oct 13, 2026
@mnoah1
mnoah1 marked this pull request as ready for review October 13, 2026 19:24
@mnoah1
mnoah1 requested review from a team and sbalabanov as code owners October 13, 2026 19:24
@mnoah1
mnoah1 force-pushed the mnoah1/web-logging-cleanup branch from c1c65fb to 0ff9f70 Compare October 13, 2026 19:31
Send web logs through per-request callbacks so hosts can use their own logging context. Keep Pino in the reference hosts, preserve original errors and structured fields, and isolate callback failures from page results.

Builds on the web E2E layer in #838.
@mnoah1
mnoah1 force-pushed the mnoah1/web-logging-cleanup branch from 0ff9f70 to d45b877 Compare October 14, 2026 15:21
@mnoah1
mnoah1 added this pull request to the merge queue Oct 14, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue because a pull request earlier in the stack was removed Oct 14, 2026
@mnoah1
mnoah1 added this pull request to the merge queue Oct 14, 2026
Merged via the queue into main with commit 5f8e463 Oct 14, 2026
21 checks passed
@mnoah1
mnoah1 deleted the mnoah1/web-logging-cleanup branch October 14, 2026 16:00
DivyanshGarg380 pushed a commit to DivyanshGarg380/submitqueue that referenced this pull request Oct 14, 2026
## Why?

Much of the structure around the new SubmitQueue UI is reusable for a
Stovepipe UI as well. This PR pulls out common components into shared
packages that can be used across both services to minimize duplication.

## What?

- Move shared React navigation, polling, timestamp formatting,
path-segment helpers, and styles into `web/platform`
(`@submitqueue/web-platform`).
- Move common Basic auth, Node gRPC transport, Next.js navigation, and
readiness checks into `web/service/shared`
(`@submitqueue/web-service-shared`). Service-specific configuration
stays in the host.
- Update SubmitQueue to import the shared implementations directly,
preserving its public exports and existing behavior.
- Share the Bazel library build, packaging, and lint setup, and update
workspace and package-consumer checks.

## Test Plan

Shared-package checks and the existing SubmitQueue browser suite passed;
the latest rebased stack passed all 32 targets with `./tool/bazel test
//web:check //web/test/e2e/submitqueue:web_test
//web/test/e2e/stovepipe:web_test --test_output=errors`. To validate
this PR independently:

```sh
./tool/bazel test //web:check //web/test/e2e:web_test --test_output=errors
```

Repository formatting, lint, module tidy, and Gazelle checks also
passed.

## Revert Plan

Revert dependent PRs uber#844, uber#838, and uber#837 first if merged, then revert
this PR to restore the original SubmitQueue package layout.

## Stack

1. uber#842 — shared-package refactoring 
2. uber#837 — Stovepipe frontend 
3. uber#838 — browser coverage and E2E organization 
4. uber#844 — host logging integration
DivyanshGarg380 pushed a commit to DivyanshGarg380/submitqueue that referenced this pull request Oct 14, 2026
## Why?

Stovepipe exposes request lists, status summaries, and history through
RPCs, but has no browser view for inspecting them. Add a basic UI
mirroring the same structure as the SubmitQueue UI: a core component
that can be deployed internally via FusionJS that includes the pages /
contents, and a NextJS wrapper for external use.



https://github.com/user-attachments/assets/0bdf1fd9-36ea-4bea-b540-826d8047e6a2



## What?

- Add `web/stovepipe`, a React library with a request list for each
configured queue and a request page showing the backend status summary
followed by request history.
- Load the summary and events together through `GetRequestHistoryByID`.
Request IDs link to `/<queue>/request/<id>`; change URIs remain
displayed as text. Display the backend summary directly, including
state, change and baseline URIs, timestamps, and outcome reason.
- Provide manual refresh and optional polling, retaining successful
sections when a refresh fails on the same page.
- Add a thin Next.js host under `web/service/stovepipe` for
authentication, configuration, server-side RPC transport, and logging,
plus TypeScript bindings for the existing API and Bazel build/image
targets.
- Add the local Compose overlay and `make local-stovepipe-web-start`,
along with library, component, host, and package tests.

## Test Plan

Latest validation passed all 32 targets with `./tool/bazel test
//web:check //web/test/e2e/submitqueue:web_test
//web/test/e2e/stovepipe:web_test --test_output=errors`, including
real-backend coverage of request-ID navigation, status summaries,
history, and refresh.

Frontend and package checks passed as part of the validation above,
which also built the Stovepipe image. On this PR:

```sh
./tool/bazel test //web:check --test_output=errors
./tool/bazel build //web/service/stovepipe:image
```

For manual review, run `make local-stovepipe-web-start`, open the
printed URL, and sign in with username `test` and password `test` (or
the configured `STOVEPIPE_WEB_TOKEN`).

## Stack

1. uber#842 — shared-package refactoring
2. uber#837 — Stovepipe frontend 
3. uber#838 — browser coverage and E2E organization
4. uber#844 — host logging integration

This PR's diff contains the Stovepipe additions; review the preparatory
refactoring in uber#842. Merge in this order.
DivyanshGarg380 pushed a commit to DivyanshGarg380/submitqueue that referenced this pull request Oct 14, 2026
## Why?

The new Stovepipe UI needs browser coverage against a real backend, in
addition to its unit and component tests. Align both services' browser
suites under `web/test/e2e/<domain>` so they follow the repository
layout and reuse stack setup helpers.

## What?

- Move the existing SubmitQueue browser suite into
`web/test/e2e/submitqueue`, preserving its browser spec and Compose
overlay.
- Add `web/test/e2e/stovepipe` with real ingestion and seeded pagination
data. Cover queue navigation and cursors, request-ID links and reloads,
backend status summaries above history, refresh, empty queues, and
accessibility. A summary with a newer state than the history verifies
that the UI does not reconstruct status from events.
- Share image loading, schema application, and port lookup helpers. Both
browser runners use the Bazel-pinned Compose executable from uber#830.
- Update Bazel targets and visibility, workspace entries, runner
commands, and test documentation for the new layout. Tests emit queue
and request-page screenshots as Bazel test outputs.

## Test Plan

Latest validation passed all 32 targets, including both services'
real-stack browser suites:

```sh
./tool/bazel test //web:check //web/test/e2e/submitqueue:web_test //web/test/e2e/stovepipe:web_test --test_output=errors
```

Repository formatting, lint, module tidy, and Gazelle checks also
passed. Browser tests require a running Docker daemon; Bazel supplies
Compose and the browser.

## Stack

1. uber#842 — shared-package refactoring 
2. uber#837 — Stovepipe frontend
3. uber#838 — browser coverage and E2E organization
4. uber#844 — host logging integration
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