modkit/telemetry/
config.rs1use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8
9#[derive(Debug, Clone, Deserialize, Serialize, Default)]
11pub struct TracingConfig {
12 pub enabled: bool,
13 pub service_name: Option<String>,
14 pub exporter: Option<Exporter>,
15 pub sampler: Option<Sampler>,
16 pub propagation: Option<Propagation>,
17 pub resource: Option<HashMap<String, String>>,
18 pub http: Option<HttpOpts>,
19 pub logs_correlation: Option<LogsCorrelation>,
20 #[serde(default)]
21 pub metrics: MetricsConfig,
22}
23
24#[derive(Debug, Clone, Deserialize, Serialize, Default)]
26pub struct MetricsConfig {
27 pub enabled: bool,
28 pub exporter: Option<Exporter>,
29 #[serde(skip_serializing_if = "Option::is_none")]
33 pub cardinality_limit: Option<usize>,
34}
35
36#[derive(Debug, Default, Clone, Deserialize, Serialize, PartialEq, Eq, Copy)]
37#[serde(rename_all = "snake_case")]
38pub enum ExporterKind {
39 #[default]
40 OtlpGrpc,
41 OtlpHttp,
42}
43
44#[derive(Debug, Clone, Deserialize, Serialize)]
45pub struct Exporter {
46 pub kind: ExporterKind,
47 pub endpoint: Option<String>,
48 pub headers: Option<HashMap<String, String>>,
49 pub timeout_ms: Option<u64>,
50}
51
52#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
53#[serde(rename_all = "snake_case")]
54pub enum Sampler {
55 ParentBasedAlwaysOn {},
56 ParentBasedRatio {
57 #[serde(skip_serializing_if = "Option::is_none")]
58 ratio: Option<f64>,
59 },
60 AlwaysOn {},
61 AlwaysOff {},
62}
63
64#[derive(Debug, Clone, Deserialize, Serialize)]
65pub struct Propagation {
66 pub w3c_trace_context: Option<bool>,
67}
68
69#[derive(Debug, Clone, Deserialize, Serialize)]
70pub struct HttpOpts {
71 pub inject_request_id_header: Option<String>,
72 pub record_headers: Option<Vec<String>>,
73}
74
75#[derive(Debug, Clone, Deserialize, Serialize)]
76pub struct LogsCorrelation {
77 pub inject_trace_ids_into_logs: Option<bool>,
78}