Portal Community

What Is Visible

WhatComponent / ToolPackage
Hook execution log — name, status, timing, errorsHooksMonitor@edge-stream/observability-react
Subscriber delivery log — topic, status, duration, errorsSubscribersMonitor@edge-stream/observability-react
Full activity stream — message overview, timelineActivityStreamMonitor@edge-stream/observability-react
External log forwarding (Splunk, Datadog, etc.)Observability hooks@edge-stream/observability-hooks-js
Pipeline + subscriber state inspectionDevTools appedge-stream-dev-tools

Observability Architecture

Message arrives
      │
      ▼
  Pipeline
  ├── HookActivityLogger (priority 5) ──→ LoggingService (in-memory ring buffer)
  │                                              │
  ├── ... other hooks ...                        │  polls every 500ms
  │                                              ▼
  └── Publish to subscribers                HooksMonitor
                │                           SubscribersMonitor
                ▼                           ActivityStreamMonitor
       SubscriptionManager ─────────────→ LoggingService (subscriber logs)

HooksMonitor vs SubscribersMonitor

HooksMonitorSubscribersMonitor
ShowsEach hook's invocation: name, status (success/error), timingEach subscriber delivery: topic, status (delivered/error/queued), timing
StatsTotal hooks, success count, failure countTotal deliveries, delivered, failed, pending
FilterBy hook nameBy topic
Detail clickFull hook log for that message (all hooks in order)All subscriber deliveries for that message
Settings tabEnable/disable hook loggingEnable/disable subscriber logging
Poll interval500ms default500ms default

Data Source: LoggingService

Both monitors poll the singleton LoggingService which maintains an in-memory ring buffer of MessageActivityLog records. Each record captures:

interface MessageActivityLog {
  messageId: string;
  messageType: string;
  topic: string;
  serverId: string;
  status: 'processing' | 'completed' | 'failed';
  startTime: Date;
  endTime?: Date;
  hookLogs?: HookLog[];        // one entry per hook executed
  subscriberLogs?: SubscriberLog[]; // one entry per subscriber matched
}

Enabling Observability

Observability is enabled by adding HookActivityLogger to the pipeline. It runs at priority 5 — the first hook to execute — and captures timing for every subsequent hook:

import { createEdgeStream, HookActivityLogger } from 'edge-stream-js';

const stream = createEdgeStream({ logLevel: 'debug' });
stream.registerServer({ id: 'bas', ... });

const server = stream.server('bas')!;
server.incomingPipeline.addHook(new HookActivityLogger()); // enables observability

await stream.start();