Skip to main content

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}