Crate ferro_feed
Expand description
ferro-feed: high-performance crypto market data normalizer (multi-venue mode).
Usage: ferro-feed βconfig ./config.toml
The output is newline-delimited JSON (ndjson) by default, suitable for piping to downstream consumers.
ModulesΒ§
- archive π
- md:v1 continuous archiver (#14) β the
ferro-feed archivesubcommand. - config π
- Runtime configuration for config-only multi-venue mode.
- connector π
- control π
- Redis control-key watcher (#11).
- metrics π
- Operational metrics: atomic counters, Prometheus HTTP endpoint, periodic stats logger.
- model π
- Canonical market data types.
- ohlcv π
- OHLCV bar aggregation from trade events.
- sink π
- traits π
- Traits for exchange connectors and output sinks.
- tui π
- Interactive ratatui dashboard for runtime monitoring.
StructsΒ§
- Cli π
- Pipeline
Event π - Venue
Ingress π
EnumsΒ§
- Command π
ConstantsΒ§
- DEFAULT_
COINBASE_ πKEY_ ENV - DEFAULT_
COINBASE_ πPASSPHRASE_ ENV - DEFAULT_
COINBASE_ πSECRET_ ENV - DEFAULT_
MASSIVE_ πKEY_ ENV
FunctionsΒ§
- create_
connector π - create_
sink π - init_
tracing π - main π
- parse_
channels π - parse_
channels_ πstrict - parse_
symbol π - resolve_
env π - run_
fair_ πmerger - spawn_
task_ πpanic_ watcher - stream_
end_ πis_ fatal - #17 Phase-0 supervision contract: a PANIC in a supervised task (venue stream,
fair-merger) exits the process so a process-level supervisor (systemd
Restart=always/ launchdKeepAlive) can restart it. Without this, a panicked task leaves the feed alive-but-wedged: the dead connector canβt updateconnected, so even/readykeeps reporting healthy. Clean task completion (e.g. stream end on shutdown) is NOT fatal. - validate_
coinbase_ πfunding_ config - validate_
ui_ πconfig - validate_
venue_ πsymbol_ conventions - venues_
supplying_ πbars - Venues that supply their own venue-aggregated bars (the
aggregateschannel) are excluded from the local trade aggregator, so the same venue never emits both venue bars and locally-aggregated bars. Gating is per-venue, so an aggregate venue can coexist with venues that do want local aggregation.