Skip to main content

burn_central_client/fleet/
request.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4/// Request to sync device state with the fleet.
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct SyncDeviceRequest {
7    /// Optional updated metadata about the device.
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub metadata: Option<serde_json::Value>,
10}
11
12/// Request to download model files.
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct DownloadModelRequest {}
15
16/// Supported metric payload variants.
17#[derive(Debug, Clone, Serialize, Deserialize)]
18#[serde(tag = "kind")]
19#[serde(rename_all = "lowercase")]
20pub enum MetricData {
21    Gauge {
22        value: f64,
23    },
24    Counter {
25        value: u64,
26    },
27    Histogram {
28        count: u64,
29        sum: f64,
30        buckets: Vec<(f64, u64)>,
31    },
32}
33
34/// A telemetry metric sample to ingest.
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct MetricIngestionEvent {
37    pub name: String,
38    pub timestamp_ms: i64,
39    #[serde(default)]
40    pub attributes: HashMap<String, String>,
41    #[serde(flatten)]
42    pub data: MetricData,
43}
44
45/// Kind of metric (gauge, counter, histogram).
46#[derive(Debug, Clone, Serialize, Deserialize)]
47#[serde(rename_all = "lowercase")]
48pub enum MetricKind {
49    Gauge,
50    Counter,
51    Histogram,
52}
53
54/// Optional metadata/descriptor attached to a metric name.
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct MetricDescriptorIngestionEvent {
57    pub name: String,
58    pub kind: MetricKind,
59    pub unit: Option<String>,
60    pub description: Option<String>,
61}
62
63/// A log line to ingest.
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct LogIngestionEvent {
66    pub timestamp_ms: i64,
67    pub level: String,
68    pub message: String,
69    #[serde(default)]
70    pub attributes: HashMap<String, String>,
71}
72
73/// Envelope for fleet telemetry ingestion.
74#[derive(Debug, Clone, Serialize, Deserialize, Default)]
75pub struct TelemetryIngestionEvents {
76    #[serde(default)]
77    pub metrics: Vec<MetricIngestionEvent>,
78    #[serde(default)]
79    pub metric_descriptors: Vec<MetricDescriptorIngestionEvent>,
80    #[serde(default)]
81    pub logs: Vec<LogIngestionEvent>,
82}
83
84/// Request to ingest telemetry for a device.
85#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct IngestTelemetryRequest {
87    /// Telemetry events to ingest.
88    pub events: TelemetryIngestionEvents,
89}
90
91/// Request to exchange a registration token for a device JWT after successful fleet registration.
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct ExchangeFleetDeviceTokenRequest {
94    pub registration_token: String,
95    pub identity_key: String,
96    pub metadata: Option<serde_json::Value>,
97}