use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TelemetrySubscription {
pub types: Vec<TelemetryEventType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub buffering: Option<BufferingConfig>,
pub destination: Destination,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum TelemetryEventType {
Platform,
Function,
Extension,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BufferingConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub max_items: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_bytes: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_ms: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Destination {
pub protocol: String,
#[serde(rename = "URI")]
pub uri: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TelemetryEvent {
pub time: DateTime<Utc>,
#[serde(rename = "type")]
pub event_type: String,
pub record: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlatformStart {
pub request_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing: Option<TraceContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlatformRuntimeDone {
pub request_id: String,
pub status: RuntimeStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub metrics: Option<RuntimeDoneMetrics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spans: Option<Vec<Span>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing: Option<TraceContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlatformReport {
pub request_id: String,
pub status: RuntimeStatus,
pub metrics: ReportMetrics,
#[serde(skip_serializing_if = "Option::is_none")]
pub spans: Option<Vec<Span>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing: Option<TraceContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlatformInitStart {
pub initialization_type: InitializationType,
pub phase: Phase,
#[serde(skip_serializing_if = "Option::is_none")]
pub function_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub function_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instance_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instance_max_memory: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub runtime_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub runtime_version_arn: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing: Option<TraceContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlatformInitRuntimeDone {
pub initialization_type: InitializationType,
pub phase: Phase,
pub status: RuntimeStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub spans: Option<Vec<Span>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing: Option<TraceContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlatformInitReport {
pub initialization_type: InitializationType,
pub phase: Phase,
pub status: RuntimeStatus,
pub metrics: InitReportMetrics,
#[serde(skip_serializing_if = "Option::is_none")]
pub spans: Option<Vec<Span>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing: Option<TraceContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum RuntimeStatus {
Success,
Error,
Failure,
Timeout,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum InitializationType {
OnDemand,
ProvisionedConcurrency,
SnapStart,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Phase {
Init,
Invoke,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RuntimeDoneMetrics {
pub duration_ms: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub produced_bytes: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ReportMetrics {
pub duration_ms: f64,
pub billed_duration_ms: u64,
#[serde(rename = "memorySizeMB")]
pub memory_size_mb: u64,
#[serde(rename = "maxMemoryUsedMB")]
pub max_memory_used_mb: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub init_duration_ms: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub restore_duration_ms: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub billed_restore_duration_ms: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InitReportMetrics {
pub duration_ms: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TraceContext {
#[serde(rename = "type")]
pub trace_type: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub span_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Span {
pub name: String,
pub start: DateTime<Utc>,
pub duration_ms: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlatformTelemetrySubscription {
pub name: String,
pub state: String,
pub types: Vec<String>,
}