Repository navigation
feat(web): built-in operator dashboard #236
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 18 commits
Commits
Show all changes
128 commits
Select commit
Hold shift + click to select a range
e8d7547
docs: brainstorming spec for web UI
c69fbd2
docs: web UI design package — spec, design system, phase 1 plan
b24082f
refactor(web): rename [prometheus] config section to [web] in prepara…
34bd426
docs(spec): frontend dist commits to git, no npm in release pipeline
633df32
feat(web): add HTTP mux with basic-auth and default-password gate
14ca557
feat(web): land /api/version, /api/overview, /api/pools endpoints
e1999c2
feat(web): land /api/clients and /api/servers with filter, sort, pagi…
509e876
feat(web): land /api/connections /api/stats /api/databases /api/users
5b31a69
feat(web): land /api/config /api/log_level /api/auth_query /api/pool_…
a18b8da
feat(web): land /api/prepared /api/interner + admin /api/prepared/tex…
6adf610
feat(web): land /api/top/clients and /api/apps
e31d570
feat(web): land /api/top/queries with interner-entry instrumentation
809e8d9
feat(web): land /api/top/prepared with per-CacheEntry hit/miss instru…
de78dc4
feat(web): land /api/events with admin command ring buffer
47a3d5d
feat(web): land /api/logs with lock-free LogTap
b98ef81
docs(web): add phase 5 design spec for frontend skeleton
801d843
feat(web): land frontend skeleton (phase 5)
77f715e
ci(web): relax frontend dist check to existence
1f45741
feat(web): wire overview page to real data (phase 6a MVP)
0899ef1
feat(web): add connection breakdown + pool heatmap to overview (phase…
44801d6
feat(web): dual-axis wait + top-5 errors per pool on overview (phase …
e4d56f1
feat(web): collapsed resource detail on overview (phase 6a-4)
16f1ba8
feat(web): real pools page with sort, filter, and severity column (ph…
df9ebbf
feat(web): real clients page with server-side filter, sort, paginate …
a9e0027
feat(web): real caches page with prepared and query-cache tabs (phase…
fadf8cd
feat(web): live log stream on /logs (phase 6e)
a33330f
feat(web): real /config page with eight collapsible sections (phase 6f)
6a4a39c
feat(web): refined chrome and global auth recovery (phase 6g)
8ef5415
fix(web): split 401 response and add tooltip help (phase 6h)
ab40128
feat(web): tailored config panels (phase 6g-2)
cd6dda7
feat(web): compact health bar + adaptive overview layout (phase 6h-2 …
198d9ad
feat(web): embed SPA bundle into the binary (phase 7)
c9c79b5
docs(web): web UI guide + BDD scenarios for the listener
f1c0fb7
fix(web): tighten default visibility and close LogTap public surface
ba02fb5
fix(web): gzip static assets and deduplicate the 401 picker
acfd50a
refactor(web): split routes/collect.rs into per-domain submodules
e0b6275
docs(web): handoff document for the next session
b5e191b
ci(web): hard-fail frontend dist sync drift via source-hash
93a09f7
feat(web): wire reconnect/gate-budget/coordinator/auth-failure thresh…
b397a4b
feat(web): per-pool error breakdown by SQLSTATE
e9e4c70
ci(packaging): include frontend/dist in SRPM and DEB tarballs
cb2cdf2
demo(grafana): turn on Web UI and add a session-mode listener
8f8c142
docs(web): remove internal planning artifacts from the PR
986e84e
chore(web): trim IBM Plex bundle to latin+cyrillic woff2 + OFL notice
c1ba373
fix(web): stop overview sparkline qps/tps zero-peak square wave
920154f
feat(web): batch UX fixes from live demo feedback
7c8dd06
fix(web): hot UX batch — full-text logs, addr filter, stale-tab gap, …
ed6968e
fix(demo): rename session pool user to app_session and grant pgbench …
ec26f43
feat(web): bloomberg-terminal skin foundation
a7b364f
feat(web): backend P0 metrics + Bloomberg polish + sawtooth + remembe…
1bd70a2
feat(web): pool detail as a full route /pools/:id
7004ff9
feat(web): /api/process + Overview process bar (RSS, CPU, threads, FDs)
868f169
feat(web): pool fallback_active + TLS counters in JSON DTO
e5e7e32
feat(web): apps page on /apps
8e29976
feat(web): events overlay (RELOAD/PAUSE/RESUME/RECONNECT) on Overview
2588db1
feat(web): hover readout on Overview sparklines
24881e7
feat(web): combined per-thread CPU tile (max/avg/min) on Overview
7ae0751
feat(web): hover/events on AreaChart + DualAxisChart, pretty SQL, ope…
381680c
feat(web): heatmap hover overlay + human-friendly latency formatting
6c83e39
fix(web): LogTap idle window 30 s -> 2 min, cache process tile across…
91ebd92
fix(web): compact threads tile, FD limit abbrev, drop incident.md, gi…
31e9eed
fix(web): compact tile values — fmtMs / fmtRate fit any tile width
4bf76b9
feat(web): write actions — POST /api/admin/{pause,resume,reconnect,re…
f768a54
feat(web): PanelView modal — Grafana-style full-screen drill-down
07250ce
feat(web): /wall war-room route + URL-state on Pools filters
6894e52
chore(web): bloomberg-style favicon
30e8794
feat(web): expandable Card click + per-thread CPU panel + RSS panel
f5cc61f
feat(web): RSS tile drill-down — memory breakdown panel
f8ec039
chore(web): rewrite operator-language copy across all UI pages
819b59a
fix(web): sticky sidebar — no more empty void on long pages
54b43c7
fix(web): codex review critical — sockets DTO, AuthGate re-prompt, sc…
5b7aedb
fix(web): codex review P2 — usePoll race + Pools URL state desync
b78728f
docs: ui_anonymous default, credentials persistence, scrape race duri…
d5ea91c
fix(web): ArcSwap for WebServerOptions — RELOAD now propagates auth/g…
8893390
fix(admin): unified pause/resume/reconnect semantics across PG and web
8daef85
perf(web): /api/overview snapshots client/server stats once per request
7f264c1
fix: codex critical batch — admin-gate /api/top/queries, fail-fast li…
cf79e6b
docs(ru): finish ui_anonymous default reconciliation in example block
89f8918
fix: codex DBA important — TLS/fallback label sync, reload changed fl…
2037e4e
docs+pkg: codex DevOps P2#4/P2#5 — opt-in install-hooks, /metrics dep…
a3911d7
feat(admin): pool-level scoping — ?pool=user@db on REST, affected lis…
7607ce3
chore: drop .local/handoff/ from the PR
0d5c334
chore: gitignore .local/ so handoff drafts cannot slip in again
3810c80
feat(web): pool detail — Coordinator + Pool scaling sections
b619085
docs+web: codex P3 batch — Web UI under Observability, prometheus ref…
0e06738
perf+web: codex perf P1#1/P1#4 + tooltip dictionary on Pool detail
b965f29
feat(web): tooltip dictionary applied to Pools / Clients / Apps headers
017701c
perf(web): HTTP keep-alive — reuse TCP connection across requests
58e38d1
perf(web): codex perf P2#5/P2#7/P2#8 + build.rs to invalidate stale e…
5e25213
perf+arch: codex P3#9 micro-allocs + P2#4 typed admin DTO
5c77225
feat(web): styled tooltips + Config page shows Default→Current with f…
a080fc1
perf+arch: codex Perf P2#6 + Arch P2#6 — shared 250 ms snapshot for /…
140a0a6
arch(web): split server.rs into focused submodules (codex Arch P2#5)
c270923
feat(web): truncate long config values in the Config table
872f2a8
feat(web): client-side sort on Prepared statements table
44ea647
feat(web): two-column grid layout on Pool detail
8e6faf4
feat(web): live qps / tx-per-sec on Apps table
f0dc1ba
perf(server): incremental memory counter on prepared statement cache
69c365b
perf(server): direct hash lookup in prepared statement cache
f37c1f8
feat(web): filters on Prepared statements table
a80852c
feat(web): rich tooltips on Process memory breakdown
066ba12
feat(web): live Q/s + T/s and labelled filters on Clients
26fb311
feat(web): operator tooltips on every Caches column header
751d508
feat(web): page-scoped sort on Q/s and T/s columns
2670284
release: 3.8.0 — built-in admin web UI
22f2ffa
docs: reposition Web UI as headline diagnostic dashboard
7cb2660
perf(web): embed only gzipped frontend assets
cf26b20
ci(frontend): assert pre-gzipped dist artifacts
57b8b2c
docs(changelog): rewrite 3.8.0 around what the dashboard reveals
39a8818
docs(ru): fix P0 facts and clean up reference triad
9e20854
docs(ru): rewrite guides/web-ui.md without dev jargon
3ed107d
docs(ru): replace double-dash with em-dash in tutorials
0461d2c
docs(ru): finish corpus cleanup — anglicisms, anthropomorphisms, typo…
c80c240
docs(ru): close re-audit residuals
7ec87ba
fix(web): stacked-area top series no longer paints over lower bands
0f521a2
fix(web): tooltips on Caches column headers no longer clipped
f5a97c7
feat(web): live Refs/s column on Prepared statements
5bdb13b
fix(web): kill page-wide jitter on Overview sparkline hover
4e94e2a
feat(web): tooltips on Overview Golden-signals tiles
2dc78e8
fix(web): keep the value visible on narrow Sparkline tiles
334338c
fix(web): close rust-architect review nits
955a740
perf(stats+web): kill String clones on the dashboard hot path
c1567be
fix(web): query / xact p95 / p99 reported in microseconds, not ms
a835ff7
fix(web): RSS reading wrong /proc/self/statm column + bar tooltip clip
0cbedaa
fix(web): preserve sub-millisecond precision in p95 / p99 / wait
c8dc694
fix(web): memory breakdown bar scales to RSS, not category sum
1cd1eb2
fix(web): memory bar tooltip flips to right anchor on right-half segm…
b634cdd
fix(web): saturation = active/max, demote backend signals from CRITICAL
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| name: Frontend lint, typecheck, dist sync | ||
|
|
||
| on: | ||
| push: | ||
| branches: [master] | ||
| paths: | ||
| - "frontend/**" | ||
| - ".github/workflows/frontend.yml" | ||
| pull_request: | ||
| paths: | ||
| - "frontend/**" | ||
| - ".github/workflows/frontend.yml" | ||
|
|
||
| jobs: | ||
| lint-typecheck-build: | ||
| name: lint + typecheck + dist sync | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: "20" | ||
| cache: npm | ||
| cache-dependency-path: frontend/package-lock.json | ||
|
|
||
| - name: Install | ||
| run: npm ci | ||
| working-directory: frontend | ||
|
|
||
| - name: Lint | ||
| run: npm run lint | ||
| working-directory: frontend | ||
|
|
||
| - name: Typecheck | ||
| run: npm run typecheck | ||
| working-directory: frontend | ||
|
|
||
| - name: Build | ||
| run: npm run build | ||
| working-directory: frontend | ||
|
|
||
| - name: Verify dist exists and is non-empty | ||
| run: | | ||
| test -s frontend/dist/index.html | ||
| test -d frontend/dist/assets | ||
| test "$(ls frontend/dist/assets/*.js 2>/dev/null | wc -l)" -ge 1 | ||
| echo "frontend/dist/ shipped with $(ls frontend/dist/assets | wc -l) assets" | ||
| # Strict diff-against-rebuild was attempted but vite/esbuild output is | ||
| # not byte-stable across local and CI runners (different esbuild native | ||
| # binaries despite identical package-lock). Treat the committed | ||
| # frontend/dist/ as the source of truth; phase 7 will revisit with a | ||
| # reproducible-build approach (esbuild pin or build-once-in-CI). | ||
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
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
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
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.