reckon_db_links (reckon_db v1.4.4)
View SourceStream linking and simple projections for reckon-db
Provides derived streams from source streams: - Filter events based on predicates - Transform event data - Create materialized streams for specialized queries
Links are live - new events are automatically propagated. Link streams can be subscribed to like regular streams.
Usage:
%% Create a link for high-value orders
reckon_db_links:create(my_store, #{
name => <<"high-value-orders">>,
source => #{type => stream_pattern, pattern => <<"orders-*">>},
filter => fun(E) -> maps:get(total, E#event.data, 0) > 1000 end,
transform => fun(E) -> E#event{data = E#event.data#{flagged => true}} end
}).
%% Subscribe to linked stream
reckon_db_subscriptions:subscribe(my_store, stream, <<"$link:high-value-orders">>, ...).
Summary
Functions
Create a new link.
Delete a link.
Get a link by name.
Get detailed link info.
List all links.
Start processing a link.
Stop processing a link.
Types
-type event() :: #event{event_id :: binary(), event_type :: binary(), stream_id :: binary(), version :: non_neg_integer(), data :: map() | binary(), metadata :: map(), tags :: [binary()] | undefined, timestamp :: integer(), epoch_us :: integer(), data_content_type :: binary(), metadata_content_type :: binary()}.
-type link_info() :: #{name := binary(), source := source_spec(), status := running | stopped | error, processed := non_neg_integer(), last_event => binary()}.
-type link_spec() :: #{name := binary(), source := source_spec(), filter => filter_fun(), transform => transform_fun(), backfill => boolean()}.
Functions
Create a new link.
Options: - name: Link name (required, will create stream with $link prefix) - source: Source specification (stream, stream_pattern, or all) - filter: Predicate function to filter events - transform: Function to transform events - backfill: Process existing events (default: false)
Delete a link.
Get a link by name.
Get detailed link info.
List all links.
Start processing a link.
This will: 1. Subscribe to source stream(s) 2. Optionally backfill existing events 3. Apply filter and transform to each event 4. Write matching events to the link stream
Stop processing a link.