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