2026-06-05 07:25:43 +00:00
|
|
|
//! The per-node telemetry **datastream** (see `DATASTREAM_SPEC.md`).
|
|
|
|
|
//!
|
|
|
|
|
//! A deliberately dumb pipe: producers dump bytes tagged by channel, a
|
|
|
|
|
//! single per-node mux interleaves them into one ordered stream, a
|
|
|
|
|
//! best-effort transport carries that stream to the one consumer, ingest
|
|
|
|
|
//! reconstructs each node's stream by position, and views are read-time
|
|
|
|
|
//! projections over the stored stream. Nothing between a producer and a
|
|
|
|
|
//! view interprets the payload.
|
|
|
|
|
//!
|
|
|
|
|
//! ```text
|
2026-06-23 15:42:28 +00:00
|
|
|
//! producers (caller-owned records + text)
|
|
|
|
|
//! │ bytes tagged by channel → [`record::Record`]
|
2026-06-05 07:25:43 +00:00
|
|
|
//! ▼
|
|
|
|
|
//! per-node MUX → [`mux::Mux`]
|
|
|
|
|
//! │ one ordered stream of [`Frame`]s
|
|
|
|
|
//! ▼
|
|
|
|
|
//! best-effort transport → [`transport`]
|
|
|
|
|
//! │ delivery: frames, maybe dropped/reordered/delayed
|
|
|
|
|
//! ▼
|
|
|
|
|
//! consumer INGEST → [`ingest::Consumer`]
|
|
|
|
|
//! │ complete stream, stored whole
|
|
|
|
|
//! ▼
|
|
|
|
|
//! stored STREAM (truth) → [`store`]
|
|
|
|
|
//! │ read-time only
|
|
|
|
|
//! ▼
|
|
|
|
|
//! VIEWS → [`views`]
|
|
|
|
|
//! ```
|
|
|
|
|
//!
|
2026-06-23 15:42:28 +00:00
|
|
|
//! The data model ([`frame`]), extension contract ([`record`]), and wire
|
|
|
|
|
//! envelope ([`wire`]) are the seams a test observes. Channel meanings live in
|
|
|
|
|
//! producer/consumer crates, not in a datastream-wide catalog.
|
2026-06-05 07:25:43 +00:00
|
|
|
|
2026-06-06 17:53:25 +00:00
|
|
|
pub mod emit;
|
2026-06-25 12:30:18 +00:00
|
|
|
pub mod endpoint;
|
2026-06-05 07:25:43 +00:00
|
|
|
pub mod frame;
|
2026-07-07 10:40:02 +00:00
|
|
|
pub mod hardware;
|
2026-06-23 15:42:28 +00:00
|
|
|
pub mod health;
|
2026-06-05 07:25:43 +00:00
|
|
|
pub mod ingest;
|
|
|
|
|
pub mod mux;
|
2026-07-12 06:14:34 +00:00
|
|
|
pub mod publisher_actor;
|
2026-06-23 15:42:28 +00:00
|
|
|
pub mod record;
|
2026-06-09 09:29:07 +00:00
|
|
|
pub mod sink_actor;
|
2026-06-05 07:25:43 +00:00
|
|
|
pub mod store;
|
2026-07-05 09:59:51 +00:00
|
|
|
pub mod timing;
|
2026-06-05 07:25:43 +00:00
|
|
|
pub mod transport;
|
|
|
|
|
pub mod views;
|
|
|
|
|
pub mod wire;
|
|
|
|
|
|
2026-06-25 12:30:18 +00:00
|
|
|
pub use endpoint::{
|
2026-07-12 06:14:34 +00:00
|
|
|
CatalogSnapshot, ChannelRegistrationError, DatastreamEndpoint, DatastreamProducer,
|
|
|
|
|
DatastreamSnapshot, DatastreamSubscription, DeliveryFanout, EndpointTick, SubscriberSnapshot,
|
|
|
|
|
SubscriptionId, frame_event_to_delivery,
|
|
|
|
|
};
|
|
|
|
|
pub use frame::{
|
|
|
|
|
ChannelContent, ChannelContentKind, ChannelDescriptor, ChannelFilter, ChannelId, ChannelRef,
|
|
|
|
|
DatastreamEvent, Frame, FrameDelivery, Lifetime, NodeId, Position, SourceFilter,
|
|
|
|
|
StreamDescriptor, StreamId, StreamOrigin, SubscriptionRequest,
|
2026-06-25 12:30:18 +00:00
|
|
|
};
|
2026-06-05 07:25:43 +00:00
|
|
|
pub use ingest::Consumer;
|
|
|
|
|
pub use mux::Mux;
|
2026-07-12 06:14:34 +00:00
|
|
|
pub use publisher_actor::{
|
|
|
|
|
DATASTREAM_PUBLISHER_NAME, DatastreamPublisherActor, DatastreamPublisherMsg,
|
|
|
|
|
DatastreamSubscribe, register_datastream_publisher_codec,
|
|
|
|
|
};
|
2026-06-23 15:42:28 +00:00
|
|
|
pub use record::{ChannelKind, ChannelRegistry, Record};
|
|
|
|
|
pub use sink_actor::{DATASTREAM_SINK_NAME, DatastreamSink};
|
2026-06-05 07:25:43 +00:00
|
|
|
pub use store::{GapSpan, Store, StoredStream};
|
2026-07-12 06:14:34 +00:00
|
|
|
pub use timing::{FRAME_TIME_CHANNEL, FRAME_TIME_CHANNEL_ID, FrameTimeSample};
|
2026-06-05 07:25:43 +00:00
|
|
|
pub use transport::{Delivery, Reorder, ScriptedTransport, StreamScript};
|
|
|
|
|
pub use views::{Body, LogEntry, MergedFrame};
|