Skip to content

feat(monitoring): Processes, Jobs, Logs, Messaging and System pages - #6615

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

feat(monitoring): Processes, Jobs, Logs, Messaging and System pages#6615
delchev merged 7 commits into
masterfrom
feat/monitoring-shell-processes-jobs

Conversation

@delchev

@delchev delchev commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Phases 2–4 of the Monitoring shell plan — the five remaining pages, the label catalogs and the full IT. Stacked on #6614 (Overview), which is stacked on #6613 (backend). Review in that order; each retargets on merge.

The pages

/processes — the triage page. Running or completed instances; for the selected one the live BPMN diagram (the same bpmn-visualization webjar the IDE's process viewer uses, themed through Harmonia's own --foreground / --input-background / --positive / --negative variables and lazy-loaded on first use, so the Overview never pays for a megabyte it doesn't draw), its read-only variables, its open user tasks, and its dead-letter jobs with the two management actions v1 allows: Retry and Skip. Starting instances, editing variables and claiming other people's tasks stay in the IDE.

/jobs — the scheduled jobs with their last outcome, the selected job's execution log with the tenant column visible (the job-log service does not scope its reads yet — #6606), and enable / disable / trigger (with the job's declared parameters). E-mail assignment and log clearing stay in the IDE.

/logs — the live stream from /websockets/ide/console (level filters, pause, clear, follow) — the only live surface in the product — plus the log files on disk, tailed client-side: the endpoint returns whole files, so the page loads on demand and grows the window upwards rather than polling. Log-level management is deliberately absent — management with real blast radius.

/messaging — read-only: the broker's queues and topics with their counters, and a non-destructive browse of a queue's pending messages. Purging and destination removal stay in the IDE. (Topics show counters but no list: JMS topics don't retain non-persistent messages.)

/system — the JVM snapshot: CPU / heap / threads / runtime cards, memory pools, GC, the platform's own counters, and the live thread list with a filter and a deadlock badge. The heap and CPU sparklines are a session-local ring buffer — there is no server-side metric history and v1 does not invent one; long-term dashboards stay the OpenTelemetry stack's job.

Also here

  • Label catalogs i18n/en-US + i18n/bg-BG covering all 145 keys (the platform's existing i18next/locales.js machinery, namespace monitoring).
  • MonitoringShellIT walks all six pages. It clicks the sidebar by id, not by label — a label match also hits page content (a "System" span in the Overview's database-pool tile), and the failure mode this test exists to catch (an Alpine binding on an <i x-h-lucide> aborts the walk) has no DOM or server-side symptom.
  • A root CLAUDE.md section for the shell: the scope line, the two Phase-0 prerequisites, the ops.soft degradation rule, the diagram contract, the filed data issues and the IT's role.

Verification

  • mvn -T 1C clean install -P quick-build — green.
  • MonitoringShellIT — green (2 tests, all six pages).
  • Checked in a real browser against a running instance: System renders the cards, sparklines, pools, GC and thread list; Logs connects to the console socket and streams live records; Processes renders its empty state and switcher. Two things that check found and this PR fixes: a JVM reporting a non-finite CPU load rendered NaN% (now , and the sparkline plots 0), and a w-64 class on x-h-input loses to the component's own width rule (the search boxes are wrapped instead).

🤖 Generated with Claude Code

delchev and others added 5 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>
Completes the Monitoring shell. Each page reads existing, role-gated platform
endpoints; the deep and destructive tooling stays in the Workbench.

Processes is the triage page: running or completed instances, and for the
selected one the live BPMN diagram - the same bpmn-visualization the IDE's
process viewer uses, themed through Harmonia's own CSS variables and loaded on
first use so the Overview does not pay for a megabyte it never draws - plus its
read-only variables, its open user tasks, and its dead-letter jobs with the two
management actions v1 allows: retry the failed step, or skip it. Starting
instances, editing variables and claiming other people's tasks stay in the IDE.

Jobs lists the scheduled jobs with their last outcome and the selected job's
execution log (with the tenant column visible - the job-log service does not
scope its reads yet, #6606), and allows enable, disable and trigger. E-mail
assignment and log clearing stay in the IDE.

Logs carries the live stream from the platform's console socket - the only live
surface in the product - with level filters, pause and clear, plus the log files
on disk, tailed client-side because the endpoint returns whole files and must
not be polled. Log-LEVEL management is deliberately absent: real blast radius.

Messaging is read-only: the broker's destinations and a non-destructive browse
of a queue's pending messages. System is the JVM snapshot - CPU, heap, threads,
GC, memory pools, the platform counters and the live thread list - with
sparklines filled while the page is open, since there is no server-side metric
history and this shell does not invent one.

Also here: en/bg label catalogs for every string, and MonitoringShellIT walks
all six pages. It clicks the sidebar by id rather than by label - a label match
also hits page content, and the Alpine-bootstrap failure mode this test exists
to catch has no other symptom.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Base automatically changed from feat/monitoring-shell to master August 7, 2026 19:10
delchev added 2 commits August 7, 2026 22:10
…/monitoring-shell-processes-jobs

# Conflicts:
#	CLAUDE.md
…ll-processes-jobs

# Conflicts:
#	components/resources/resources-monitoring/src/main/resources/META-INF/dirigible/monitoring/css/app.css
#	components/resources/resources-monitoring/src/main/resources/META-INF/dirigible/monitoring/index.html
#	components/resources/resources-monitoring/src/main/resources/META-INF/dirigible/monitoring/js/services/ops.js
#	components/resources/resources-monitoring/src/main/resources/META-INF/dirigible/monitoring/views/_overview.html
#	tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/MonitoringShellIT.java
@delchev
delchev merged commit 73b8b5c into master Aug 7, 2026
9 checks passed
@delchev
delchev deleted the feat/monitoring-shell-processes-jobs branch August 7, 2026 19:15
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