nodedb_types/sync/wire/timeseries.rs
1//! Timeseries ingest + definition-sync messages.
2
3use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6
7/// Timeseries metric batch push (client → server, 0x40).
8#[derive(
9 Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
10)]
11pub struct TimeseriesPushMsg {
12 /// Source Lite instance ID (UUID v7).
13 pub lite_id: String,
14 /// Collection name.
15 pub collection: String,
16 /// Gorilla-encoded timestamp block.
17 pub ts_block: Vec<u8>,
18 /// Gorilla-encoded value block.
19 pub val_block: Vec<u8>,
20 /// Raw LE u64 series ID block.
21 pub series_block: Vec<u8>,
22 /// Number of samples in this batch.
23 pub sample_count: u64,
24 /// Min timestamp in this batch.
25 pub min_ts: i64,
26 /// Max timestamp in this batch.
27 pub max_ts: i64,
28 /// Per-series sync watermark: highest LSN already synced for each series.
29 /// Only samples after these watermarks are included.
30 pub watermarks: HashMap<u64, u64>,
31}
32
33/// Timeseries push acknowledgment (server → client, 0x41).
34#[derive(
35 Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
36)]
37pub struct TimeseriesAckMsg {
38 /// Collection acknowledged.
39 pub collection: String,
40 /// Number of samples accepted.
41 pub accepted: u64,
42 /// Number of samples rejected (duplicates, out-of-retention, etc.)
43 pub rejected: u64,
44 /// Server-assigned LSN for this batch (used as sync watermark).
45 pub lsn: u64,
46}
47
48/// Definition sync message (server → client, 0x70).
49///
50/// Carries function/trigger/procedure definitions from Origin to Lite.
51/// Sent when definitions are created, modified, or dropped on Origin.
52#[derive(
53 Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
54)]
55pub struct DefinitionSyncMsg {
56 /// Type of definition: "function", "trigger", "procedure".
57 pub definition_type: String,
58 /// The definition name.
59 pub name: String,
60 /// Action: "put" (create/replace) or "delete" (drop).
61 pub action: String,
62 /// Serialized definition body (JSON). Empty for "delete" actions.
63 pub payload: Vec<u8>,
64}