fiberplane_models/providers/
data.rs1use crate::{events::Event, timestamps::Timestamp};
2#[cfg(feature = "fp-bindgen")]
3use fp_bindgen::prelude::Serializable;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6use std::collections::BTreeMap;
7use typed_builder::TypedBuilder;
8
9#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize, TypedBuilder)]
15#[cfg_attr(
16 feature = "fp-bindgen",
17 derive(Serializable),
18 fp(rust_module = "fiberplane_models::providers")
19)]
20#[non_exhaustive]
21#[serde(rename_all = "camelCase")]
22pub struct ProviderEvent {
23 pub time: Timestamp,
24 #[builder(default)]
25 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub end_time: Option<Timestamp>,
27
28 #[builder(default)]
29 #[serde(flatten)]
30 pub otel: OtelMetadata,
31
32 pub title: String,
33
34 #[builder(default)]
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub description: Option<String>,
37
38 #[builder(default)]
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub severity: Option<OtelSeverityNumber>,
41
42 #[builder(default)]
43 pub labels: BTreeMap<String, String>,
44}
45
46#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TypedBuilder)]
51#[cfg_attr(
52 feature = "fp-bindgen",
53 derive(Serializable),
54 fp(rust_module = "fiberplane_models::providers")
55)]
56#[non_exhaustive]
57#[serde(rename_all = "camelCase")]
58pub struct Metric {
59 pub time: Timestamp,
60
61 #[serde(flatten)]
62 pub otel: OtelMetadata,
63
64 pub value: f64,
65}
66
67#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize, TypedBuilder)]
69#[cfg_attr(
70 feature = "fp-bindgen",
71 derive(Serializable),
72 fp(rust_module = "fiberplane_models::providers")
73)]
74#[non_exhaustive]
75#[serde(rename_all = "camelCase")]
76pub struct OtelMetadata {
77 pub attributes: BTreeMap<String, Value>,
78
79 pub resource: BTreeMap<String, Value>,
80
81 #[serde(default, skip_serializing_if = "Option::is_none")]
82 pub trace_id: Option<OtelTraceId>,
83
84 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub span_id: Option<OtelSpanId>,
86}
87
88#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
91#[cfg_attr(
92 feature = "fp-bindgen",
93 derive(Serializable),
94 fp(rust_module = "fiberplane_models::providers")
95)]
96#[non_exhaustive]
97#[serde(rename_all = "camelCase")]
98pub struct OtelSeverityNumber(pub u8);
99
100#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
103#[cfg_attr(
104 feature = "fp-bindgen",
105 derive(Serializable),
106 fp(rust_module = "fiberplane_models::providers")
107)]
108#[non_exhaustive]
109#[serde(rename_all = "camelCase")]
110pub struct OtelSpanId(pub [u8; 8]);
111
112impl OtelSpanId {
113 pub fn new(data: [u8; 8]) -> Self {
114 Self(data)
115 }
116}
117
118#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
121#[cfg_attr(
122 feature = "fp-bindgen",
123 derive(Serializable),
124 fp(rust_module = "fiberplane_models::providers")
125)]
126#[non_exhaustive]
127#[serde(rename_all = "camelCase")]
128pub struct OtelTraceId(pub [u8; 16]);
129
130impl OtelTraceId {
131 pub fn new(data: [u8; 16]) -> Self {
132 Self(data)
133 }
134}
135
136#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize, TypedBuilder)]
140#[cfg_attr(
141 feature = "fp-bindgen",
142 derive(Serializable),
143 fp(rust_module = "fiberplane_models::providers")
144)]
145#[non_exhaustive]
146#[serde(rename_all = "camelCase")]
147pub struct Timeline {
148 pub days: Vec<String>,
149 pub events_by_day: BTreeMap<String, Vec<Event>>,
150 #[serde(flatten)]
151 pub otel: OtelMetadata,
152}
153
154#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize, TypedBuilder)]
156#[cfg_attr(
157 feature = "fp-bindgen",
158 derive(Serializable),
159 fp(rust_module = "fiberplane_models::providers")
160)]
161#[non_exhaustive]
162#[serde(rename_all = "camelCase")]
163pub struct Timeseries {
164 pub name: String,
165 pub labels: BTreeMap<String, String>,
166 pub metrics: Vec<Metric>,
167 #[serde(flatten)]
168 pub otel: OtelMetadata,
169
170 #[serde(default)]
172 pub visible: bool,
173}