1use chrono::{DateTime, Utc};
9use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct TelemetrySubscription {
15 pub types: Vec<TelemetryEventType>,
17
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub buffering: Option<BufferingConfig>,
21
22 pub destination: Destination,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
28#[serde(rename_all = "lowercase")]
29pub enum TelemetryEventType {
30 Platform,
32
33 Function,
35
36 Extension,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42#[serde(rename_all = "camelCase")]
43pub struct BufferingConfig {
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub max_items: Option<u32>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub max_bytes: Option<u32>,
51
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub timeout_ms: Option<u32>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct Destination {
60 pub protocol: String,
62
63 #[serde(rename = "URI")]
65 pub uri: String,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct TelemetryEvent {
71 pub time: DateTime<Utc>,
73
74 #[serde(rename = "type")]
76 pub event_type: String,
77
78 pub record: serde_json::Value,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub struct PlatformStart {
86 pub request_id: String,
88
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub version: Option<String>,
92
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub tracing: Option<TraceContext>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
100#[serde(rename_all = "camelCase")]
101pub struct PlatformRuntimeDone {
102 pub request_id: String,
104
105 pub status: RuntimeStatus,
107
108 #[serde(skip_serializing_if = "Option::is_none")]
110 pub metrics: Option<RuntimeDoneMetrics>,
111
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub spans: Option<Vec<Span>>,
115
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub tracing: Option<TraceContext>,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
123#[serde(rename_all = "camelCase")]
124pub struct PlatformReport {
125 pub request_id: String,
127
128 pub status: RuntimeStatus,
130
131 pub metrics: ReportMetrics,
133
134 #[serde(skip_serializing_if = "Option::is_none")]
136 pub spans: Option<Vec<Span>>,
137
138 #[serde(skip_serializing_if = "Option::is_none")]
140 pub tracing: Option<TraceContext>,
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize)]
145#[serde(rename_all = "camelCase")]
146pub struct PlatformInitStart {
147 pub initialization_type: InitializationType,
149
150 pub phase: Phase,
152
153 #[serde(skip_serializing_if = "Option::is_none")]
155 pub function_name: Option<String>,
156
157 #[serde(skip_serializing_if = "Option::is_none")]
159 pub function_version: Option<String>,
160
161 #[serde(skip_serializing_if = "Option::is_none")]
163 pub instance_id: Option<String>,
164
165 #[serde(skip_serializing_if = "Option::is_none")]
167 pub instance_max_memory: Option<u32>,
168
169 #[serde(skip_serializing_if = "Option::is_none")]
171 pub runtime_version: Option<String>,
172
173 #[serde(skip_serializing_if = "Option::is_none")]
175 pub runtime_version_arn: Option<String>,
176
177 #[serde(skip_serializing_if = "Option::is_none")]
179 pub tracing: Option<TraceContext>,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
184#[serde(rename_all = "camelCase")]
185pub struct PlatformInitRuntimeDone {
186 pub initialization_type: InitializationType,
188
189 pub phase: Phase,
191
192 pub status: RuntimeStatus,
194
195 #[serde(skip_serializing_if = "Option::is_none")]
197 pub spans: Option<Vec<Span>>,
198
199 #[serde(skip_serializing_if = "Option::is_none")]
201 pub tracing: Option<TraceContext>,
202}
203
204#[derive(Debug, Clone, Serialize, Deserialize)]
206#[serde(rename_all = "camelCase")]
207pub struct PlatformInitReport {
208 pub initialization_type: InitializationType,
210
211 pub phase: Phase,
213
214 pub status: RuntimeStatus,
216
217 pub metrics: InitReportMetrics,
219
220 #[serde(skip_serializing_if = "Option::is_none")]
222 pub spans: Option<Vec<Span>>,
223
224 #[serde(skip_serializing_if = "Option::is_none")]
226 pub tracing: Option<TraceContext>,
227}
228
229#[derive(Debug, Clone, Serialize, Deserialize)]
231#[serde(rename_all = "lowercase")]
232pub enum RuntimeStatus {
233 Success,
235
236 Error,
238
239 Failure,
241
242 Timeout,
244}
245
246#[derive(Debug, Clone, Serialize, Deserialize)]
248#[serde(rename_all = "kebab-case")]
249pub enum InitializationType {
250 OnDemand,
252
253 ProvisionedConcurrency,
255
256 SnapStart,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
262#[serde(rename_all = "lowercase")]
263pub enum Phase {
264 Init,
266
267 Invoke,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize)]
273#[serde(rename_all = "camelCase")]
274pub struct RuntimeDoneMetrics {
275 pub duration_ms: f64,
277
278 #[serde(skip_serializing_if = "Option::is_none")]
280 pub produced_bytes: Option<u64>,
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize)]
285#[serde(rename_all = "camelCase")]
286pub struct ReportMetrics {
287 pub duration_ms: f64,
289
290 pub billed_duration_ms: u64,
292
293 #[serde(rename = "memorySizeMB")]
295 pub memory_size_mb: u64,
296
297 #[serde(rename = "maxMemoryUsedMB")]
299 pub max_memory_used_mb: u64,
300
301 #[serde(skip_serializing_if = "Option::is_none")]
303 pub init_duration_ms: Option<f64>,
304
305 #[serde(skip_serializing_if = "Option::is_none")]
307 pub restore_duration_ms: Option<f64>,
308
309 #[serde(skip_serializing_if = "Option::is_none")]
311 pub billed_restore_duration_ms: Option<u64>,
312}
313
314#[derive(Debug, Clone, Serialize, Deserialize)]
316#[serde(rename_all = "camelCase")]
317pub struct InitReportMetrics {
318 pub duration_ms: f64,
320}
321
322#[derive(Debug, Clone, Serialize, Deserialize)]
324#[serde(rename_all = "camelCase")]
325pub struct TraceContext {
326 #[serde(rename = "type")]
328 pub trace_type: String,
329
330 pub value: String,
332
333 #[serde(skip_serializing_if = "Option::is_none")]
335 pub span_id: Option<String>,
336}
337
338#[derive(Debug, Clone, Serialize, Deserialize)]
340#[serde(rename_all = "camelCase")]
341pub struct Span {
342 pub name: String,
344
345 pub start: DateTime<Utc>,
347
348 pub duration_ms: f64,
350}
351
352#[derive(Debug, Clone, Serialize, Deserialize)]
356#[serde(rename_all = "camelCase")]
357pub struct PlatformTelemetrySubscription {
358 pub name: String,
360
361 pub state: String,
363
364 pub types: Vec<String>,
366}