Skip to content

feat: universal environment dashboard#2241

Merged
kmendell merged 1 commit intomainfrom
feat/universal-dash
Apr 16, 2026
Merged

feat: universal environment dashboard#2241
kmendell merged 1 commit intomainfrom
feat/universal-dash

Conversation

@kmendell
Copy link
Copy Markdown
Member

@kmendell kmendell commented Apr 6, 2026

Checklist

  • This PR is not opened from my fork’s main branch

What This PR Implements

image

Fixes: #2142

Changes Made

Testing Done

  • Development environment started: ./scripts/development/dev.sh start
  • Frontend verified at http://localhost:3000
  • Backend verified at http://localhost:3552
  • Manual testing completed (describe):
  • No linting errors (e.g., just lint all)
  • Backend tests pass: just test backend

AI Tool Used (if applicable)

AI Tool:
Assistance Level:
What AI helped with:
I reviewed and edited all AI-generated output:
I ran all required tests and manually verified changes:

Additional Context

Disclaimer Greptiles Reviews use AI, make sure to check over its work.

To better help train Greptile on our codebase, if the comment is useful and valid Like the comment, if its not helpful or invalid Dislike

To have Greptile Re-Review the changes, mention greptileai.

Greptile Summary

This PR adds a universal "all environments" dashboard view that aggregates per-environment snapshot data (containers, images, action items) behind a new /dashboard/environments endpoint, alongside live CPU/memory/disk metrics via WebSocket for each reachable environment. The backend fetches snapshots concurrently (4-way limit, 20 s timeout per environment) and gracefully marks unreachable environments as error or skipped rather than failing the whole response.

All five P0/P1 issues from the previous review round have been resolved: the new endpoint now declares both BearerAuth and ApiKeyAuth; summarizeEnvironmentOverviewInternal uses if/else so disabled environments are no longer double-counted; \"0\" is replaced with the localEnvironmentID package-level constant; pruningEnvironmentId is set synchronously before the await gap in confirmPrune; and void reloadVersion is read before the first await in overviewSummaryPromise, keeping the summary tiles reactive to manual refreshes.

Confidence Score: 5/5

Safe to merge — all previously flagged P0/P1 issues are resolved and no new blocking issues were found.

Every critical concern from the last review round (auth scheme, double-counting, magic string, prune race condition, stale summary tiles) is addressed in this version. The implementation is thorough, well-tested (service + handler tests covering the new endpoint and failure paths), and the concurrency model is safe. Remaining observations are P2 style notes only.

No files require special attention.

Reviews (5): Last reviewed commit: "feat: universal environment dashboard" | Re-trigger Greptile

Copy link
Copy Markdown
Member Author

kmendell commented Apr 6, 2026

This stack of pull requests is managed by Graphite. Learn more about stacking.

@kmendell
Copy link
Copy Markdown
Member Author

kmendell commented Apr 6, 2026

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@getarcaneappbot
Copy link
Copy Markdown
Contributor

getarcaneappbot commented Apr 6, 2026

Container images for this PR have been built successfully!

  • Manager: ghcr.io/getarcaneapp/arcane:pr-2241
  • Agent: ghcr.io/getarcaneapp/arcane-headless:pr-2241

Built from commit 7589efb

@kmendell
Copy link
Copy Markdown
Member Author

kmendell commented Apr 6, 2026

@greptileai

Comment thread backend/internal/huma/handlers/dashboard.go
Comment thread backend/internal/services/dashboard_service.go
Comment thread backend/internal/services/dashboard_service.go
@kmendell kmendell force-pushed the feat/universal-dash branch 11 times, most recently from 6e5a2c4 to 708ede9 Compare April 9, 2026 21:02
@github-actions
Copy link
Copy Markdown

This pull request has merge conflicts. Please resolve the conflicts so the PR can stay up-to-date and reviewed.

@kmendell kmendell force-pushed the feat/universal-dash branch from 708ede9 to b711f12 Compare April 10, 2026 22:08
@kmendell kmendell force-pushed the feat/universal-dash branch 3 times, most recently from 8c21173 to 40df004 Compare April 11, 2026 01:38
@kmendell kmendell marked this pull request as ready for review April 11, 2026 01:38
@kmendell kmendell requested a review from a team April 11, 2026 01:38
@kmendell kmendell force-pushed the feat/universal-dash branch 4 times, most recently from 117794a to cc1650d Compare April 12, 2026 18:57
@kmendell kmendell force-pushed the feat/universal-dash branch 2 times, most recently from 0b00872 to ca88e44 Compare April 13, 2026 05:38
@github-actions
Copy link
Copy Markdown

This pull request has merge conflicts. Please resolve the conflicts so the PR can stay up-to-date and reviewed.

@kmendell kmendell force-pushed the feat/universal-dash branch 2 times, most recently from 8dc8b04 to 58a9a31 Compare April 16, 2026 00:02
@kmendell kmendell force-pushed the feat/universal-dash branch from 58a9a31 to 7589efb Compare April 16, 2026 00:12
@kmendell kmendell merged commit 93cbbdc into main Apr 16, 2026
25 checks passed
@kmendell kmendell deleted the feat/universal-dash branch April 16, 2026 00:22
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.

⚡️ Feature: Overall-Dashboard

2 participants