Skip to content

Event Journal & Ops Console

Durable BLOGE deployments can record an append-only stream of execution events and surface them in a built-in operations console — no separate dashboard stack required.

Execution event journal

The optional ExecutionEvent stream captures the lifecycle of every execution with per-execution sequence numbers:

GRAPH_STARTED, NODE_STARTED, NODE_COMPLETED, NODE_FAILED, NODE_SUSPENDED, NODE_RESUMED, NODE_RETRIED, GRAPH_COMPLETED, plus compensation events.

Enable it in Spring Boot:

yaml
spring:
  bloge:
    event-journal:
      enabled: true

It is backed by InMemoryExecutionEventStore for tests or the durable bd_execution_event table in production.

Durability guarantees

  • Idempotent appends on (executionId, sequenceNumber) — replays never duplicate rows.
  • Async flush recovery — a failed batch write is retried one-by-one, and EventJournalListener.failedEventCount() exposes events that still could not be persisted.
  • Tenant scoping — durable rows carry tenantId / namespace for tenant-scoped activity queries.
  • Retention — cleanup can be scheduled with configurable purge windows and batch sizes via the EventJournalPurgeScheduler.
yaml
spring:
  bloge:
    event-journal:
      enabled: true
      retention:
        purge-window: 30d
        batch-size: 500

Audit journal

Separately from the event stream, BLOGE keeps a node-lifecycle audit journal (NODE_START, NODE_COMPLETE, NODE_FAILED, NODE_RETRY, NODE_SUSPEND, NODE_RESUME) persisted in-memory or to a JDBC bd_audit_journal table. It supports optional async batching with a bounded buffer (max-buffer-size) that drops entries on overflow instead of blocking execution threads, and exposes buffer-health metrics as bloge.audit.buffer.*.

Embedded ops console

bloge-spring-web ships a built-in /bloge-console single-page app on top of the generic durable REST APIs. It gives operators a live view without standing up a separate frontend:

  • Runtime overview cards — totals computed with store-side aggregate counts to avoid full scans on large datasets.
  • Execution timelines — step-by-step activity per execution.
  • SVG graph topology — visualize the running graph.
  • Task inbox — claim and complete human tasks.
  • Dead-letter replay — requeue failed work items.

Execution-activity and dead-letter views honor the current request's tenant context.

yaml
spring:
  bloge:
    web:
      dispatch-limit: 32   # synchronous follow-up dispatch batch size

The durable task / execution / work-item / dead-letter APIs live under /api/bloge/**, with page size capped at 500 and free-text filters capped at 256 characters.

Event deduplication

External event publication is idempotent through a 4-argument publishEvent overload. The dedup store is auto-configured in Spring Boot and backed by bd_event_dedup in the durable stack, so a redelivered external event will not resume a flow twice.

Trace propagation

For distributed observability, bloge-metrics-otel provides OpenTelemetry + Micrometer integration for graph / node metrics and traces, and bloge-dispatch-kafka carries the W3C traceparent across the Kafka boundary via a TracePropagator SPI. See Observability (OTel).

Next steps