Skip to content

feat(monitoring): the Monitoring shell with its Overview page - #6614

Merged
delchev merged 4 commits into
masterfrom
feat/monitoring-shell
Aug 7, 2026
Merged

feat(monitoring): the Monitoring shell with its Overview page#6614
delchev merged 4 commits into
masterfrom
feat/monitoring-shell

Conversation

@delchev

@delchev delchev commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Phase 1 of the Monitoring shell plan. Stacked on #6613 (the Phase-0 backend) — it targets that branch, so review it after #6613 and it will retarget master on merge.

What this is

A standalone Harmonia shell at /services/web/monitoring/ that answers "is the system healthy, and if not, what broke?" without opening the IDE. Today that answer spans four IDE perspectives sitting last in the rail (Jobs 450, Operations 900, Tracing 1000, Messaging 1010, Monitoring 1100), behind the Workbench tile the Home launchpad deliberately demotes — and health/readiness have no screen anywhere.

components/resources/resources-monitoring follows the resources-my / resources-admin pattern: a pure-resources module over the shared runtime at /services/web/application-core/shell/ (fetch client, theme, branding, i18n, user). No new backend, no copied runtime files.

The Overview page

KPI tiles, each backed by an existing platform endpoint, with the individual failures named in the lists below them:

Tile Source
Health + failed synchronizers GET /services/core/healthcheck
Readiness (traffic, pending/failed artefacts) GET /services/core/readiness
Artefacts in error GET /services/core/artefacts (#6613)
Failed jobs GET /services/jobs
Process incidents (dead-letter jobs) GET /services/bpm/bpm-processes/instances + …/instance/{id}/jobs
Database pool pressure GET /services/ide/monitoring/counts
Broker backlog GET /services/ide/messaging-monitoring/summary

Auto-refreshes every 30 s, pausable, with a manual refresh. There is no server-side metric history and v1 does not invent one — every poll is a fresh snapshot. A source that cannot be read (engine not enabled, 403, restart mid-poll) degrades to one marked tile instead of an empty page; the incident scan is capped at 50 active instances and says so rather than silently reporting "no incidents".

Scope discipline

The shell is a view layer. The deep and destructive tooling — SQL console, terminal, message purging, process-variable editing, log-level changes — stays in the Workbench permanently; the sidebar links there instead of cloning it.

Wiring

platform-shells (id monitoringShell, order 37, icon activity), a Home launchpad entry placed secondary alongside Administration and Workbench (an operations tool, not where the working day starts), monitoring.access gating /monitoring/ to ADMINISTRATOR / OPERATOR / DEVELOPER, plus the three usual Maven edits (components/pom.xml module + dependencyManagement, group-ui).

Verification

  • mvn -T 1C clean install -P quick-build — green.
  • MonitoringShellIT (Selenide, @Tag("ui")) — green: opens the shell and asserts the sidebar entry, the page subtitle and the tiles that only exist once the store's first poll resolved. That is the only way to catch an aborted Alpine walk, which has no DOM or server-side symptom.
  • Manually against a running instance: every endpoint the shell reads answers 200, the shell registers on platform-shells, and the Overview renders as intended (checked in a real browser).

Next

Phase 2 (Processes + Jobs), Phase 3 (Logs + Messaging + System), Phase 4 (i18n + the full MonitoringShellIT journey) follow as separate PRs.

🤖 Generated with Claude Code

delchev and others added 3 commits August 7, 2026 20:45
…RolesAllowed

The JVM monitoring, logs, messaging-monitoring and BPM process endpoints all
declare @RolesAllowed({ADMINISTRATOR, DEVELOPER, OPERATOR}), but they live under
/services/ide/** and /services/bpm/**, which the URL layer gates on DEVELOPER
alone - so an OPERATOR was rejected by the filter chain before method security
ever ran. Add a monitoring gate covering exactly those prefixes, matched before
the DEVELOPER gate; everything else under them (workspaces, git, publisher, the
BPMN modeler, the LSP/debug sockets) stays DEVELOPER-only.

The role gates are now one ordered declaration read by both configure() and the
test that guards the matrix, so the ordering the alignment depends on cannot be
changed silently.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
"What is deployed and did it synchronize" had no Java REST endpoint - the IDE's
Artefacts view reads it through a JS aggregator that fans out over an extension
point issuing per-table SQL, which nothing outside that perspective can build on.

GET /services/core/artefacts (ADMINISTRATOR/DEVELOPER/OPERATOR) aggregates the
ArtefactService beans instead: every synchronizer already registers one, so the
injected bean list is the complete inventory and a new artefact type needs no
registration step. An artefact type that cannot be read is logged and skipped
rather than taking down the inventory.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A standalone Harmonia shell at /services/web/monitoring/ that answers the most
basic operational question - "is the system healthy, and if not, what broke?" -
without opening the IDE. Today that answer is spread across four IDE
perspectives sitting last in the rail, behind a Workbench tile the Home
launchpad deliberately demotes, and health/readiness have no screen at all.

This first phase is the shell skeleton plus the Overview page: KPI tiles for
health, readiness, artefacts in error, failed jobs, process incidents, database
pool pressure and broker backlog, each backed by an existing platform endpoint,
with the individual failures named in the lists below them. It auto-refreshes
every 30 seconds (pausable) - there is no server-side history, every poll is a
fresh snapshot.

The shell is a view layer, not a re-implementation: it reuses the shared
Harmonia runtime from application-core, adds no backend, and links to the
Workbench for the deep and destructive tooling (SQL console, terminal, message
purging, log levels), which stays there permanently.

Registered on platform-shells (order 37) and offered on Home as a secondary
destination - an operations tool, not where the working day starts. Gated to
ADMINISTRATOR / OPERATOR / DEVELOPER, matching the endpoints it reads.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Base automatically changed from feat/monitoring-shell-backend to master August 7, 2026 18:50
Master gained the Builder shell (#6610), which registers itself on the
Home launchpad exactly where this branch registers Monitoring - so both
sides added an entry to the same two constants in home.js.

Resolved additively, keeping both shells. SECONDARY stays ordered
least-technical-first per its own comment: the two operations tools
(Admin, Monitoring) then the two building tools (Builder, Workbench).

The Maven wiring in components/pom.xml and group-ui merged cleanly and
was verified to carry both modules.
@delchev
delchev merged commit d8dd85f into master Aug 7, 2026
10 checks passed
@delchev
delchev deleted the feat/monitoring-shell branch August 7, 2026 19:10
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.

1 participant