Class SSEFaultHandler

Class Documentation

class SSEFaultHandler

Handler for Server-Sent Events (SSE) fault streaming.

Provides real-time fault event notifications via SSE at:

  • GET /faults/stream

Events streamed:

  • fault_confirmed: When a fault transitions to CONFIRMED status

  • fault_cleared: When a fault is manually cleared

  • fault_updated: When fault data changes (occurrence_count, sources)

Features:

  • Multi-client support (multiple browsers can connect simultaneously)

  • Keepalive every 30 seconds to prevent connection timeout

  • Automatic reconnection support via Last-Event-ID header

  • Replay buffer of up to 100 most recent events for reconnecting clients; when the buffer is full, older events are discarded (FIFO), so clients that are disconnected for long periods may miss some events

Public Functions

SSEFaultHandler(HandlerContext &ctx, std::shared_ptr<SSEClientTracker> client_tracker)

Construct SSE fault handler with shared context.

Parameters:
  • ctx – The shared handler context

  • client_tracker – Shared SSE client counter (across all SSE handlers)

SSEFaultHandler(HandlerContext &ctx, std::shared_ptr<SSEClientTracker> client_tracker, std::chrono::milliseconds keepalive_interval)

Test-only constructor that overrides the keepalive interval.

Parameters:
  • ctx – The shared handler context

  • client_tracker – Shared SSE client counter (across all SSE handlers)

  • keepalive_interval – Must be positive; non-positive values fall back to the 30s default.

~SSEFaultHandler()

Destructor - cleanup subscription.

SSEFaultHandler(const SSEFaultHandler&) = delete
SSEFaultHandler &operator=(const SSEFaultHandler&) = delete
SSEFaultHandler(SSEFaultHandler&&) = delete
SSEFaultHandler &operator=(SSEFaultHandler&&) = delete
void handle_stream(const httplib::Request &req, httplib::Response &res)

Handle GET /faults/stream - SSE stream endpoint.

Establishes a long-lived connection and streams fault events in SSE format:

event: fault_confirmed
data: {"event_type":"fault_confirmed","fault":{...},"timestamp":1234567890.123}

event: fault_cleared
data: {"event_type":"fault_cleared","fault":{...},"timestamp":1234567890.456}

size_t connected_clients() const

Get the number of currently connected SSE clients.