datadog_protos/
lib.rs

1//! Datadog Agent-specific Protocol Buffers definitions.
2//!
3//! This crate contains generated code based on the Protocol Buffers definitions used by the Datadog Agent to
4//! communicate with the Datadog Platform, specifically for shipping metrics and traces.
5#![deny(warnings)]
6#![allow(dead_code)]
7#![allow(clippy::enum_variant_names)]
8#![allow(clippy::doc_overindented_list_items)]
9
10pub(crate) mod serde;
11
12mod include {
13    include!(concat!(env!("OUT_DIR"), "/protos/mod.rs"));
14}
15
16mod trace_include {
17    include!(concat!(env!("OUT_DIR"), "/trace_protos/mod.rs"));
18}
19
20mod agent_include {
21    include!(concat!(env!("OUT_DIR"), "/api.mod.rs"));
22}
23
24mod sketch_include {
25    include!(concat!(env!("OUT_DIR"), "/sketch_protos/mod.rs"));
26}
27
28mod trace_piecemeal_include {
29    include!(concat!(env!("OUT_DIR"), "/trace_piecemeal/mod.rs"));
30}
31
32mod checks_include {
33    include!(concat!(env!("OUT_DIR"), "/checks.mod.rs"));
34}
35
36/// Metrics-related definitions.
37pub mod metrics {
38    pub use super::include::agent_payload::metric_payload::*;
39    pub use super::include::agent_payload::sketch_payload::{sketch::*, Sketch};
40    pub use super::include::agent_payload::*;
41
42    /// Metrics V3 API-related definitions.
43    pub mod v3 {
44        pub use super::super::include::intake_v3::*;
45    }
46}
47
48/// Event-related definitions.
49pub mod events {
50    pub use super::include::agent_payload::events_payload::*;
51    pub use super::include::agent_payload::EventsPayload;
52}
53
54/// Trace-related definitions.
55pub mod traces {
56    pub use super::trace_include::agent_payload::*;
57    pub use super::trace_include::classic_span::{attribute_any_value::*, attribute_array_value::*, *};
58    pub use super::trace_include::classic_tracer_payload::*;
59    pub use super::trace_include::stats::*;
60
61    /// Piecemeal-generated builder types for incremental trace encoding.
62    pub mod builders {
63        pub use super::super::trace_piecemeal_include::datadog::trace::*;
64    }
65
66    /// Efficient Trace Payload (ETP) types: the string-indexed trace payload format used by the v0.2 trace intake.
67    ///
68    /// The `idx` module name mirrors the Agent's proto package (`datadog.trace.idx`); prefer the term "ETP" when
69    /// referring to this format in prose and in our own (non-generated) code.
70    pub mod idx {
71        pub use super::super::trace_include::idx_span::{any_value, *};
72        pub use super::super::trace_include::idx_tracer_payload::*;
73    }
74}
75
76/// Agent definitions.
77pub mod agent {
78    pub use super::agent_include::datadog::api::v1::agent_client::AgentClient;
79    pub use super::agent_include::datadog::api::v1::agent_secure_client::AgentSecureClient;
80    pub use super::agent_include::datadog::autodiscovery::*;
81    pub use super::agent_include::datadog::model::v1::*;
82    pub use super::agent_include::datadog::remoteagent::v1::remote_agent_client::RemoteAgentClient;
83    pub use super::agent_include::datadog::remoteagent::*;
84    pub use super::agent_include::datadog::workloadmeta::*;
85}
86
87/// DDSketch definitions from (sketches-go).
88pub mod sketches {
89    pub use super::sketch_include::ddsketch::*;
90}
91
92/// Checks definitions.
93pub mod checks {
94    pub use super::checks_include::datadog::checks::v1::*;
95}
96
97#[cfg(test)]
98mod tests {
99    use protobuf::Message as _;
100
101    use super::traces::{self, AgentPayload};
102
103    #[test]
104    fn agent_payload_round_trips_classic_and_indexed_tracer_payloads() {
105        let mut classic_payload = traces::TracerPayload::new();
106        classic_payload.containerID = "classic-container".to_string();
107
108        let mut indexed_payload = traces::idx::TracerPayload::new();
109        indexed_payload.strings = vec!["".to_string(), "indexed-container".to_string()];
110        indexed_payload.containerIDRef = 1;
111
112        let mut payload = AgentPayload::new();
113        payload.tracerPayloads.push(classic_payload);
114        payload.idxTracerPayloads.push(indexed_payload);
115
116        let encoded = payload.write_to_bytes().expect("payload should encode");
117        let decoded = AgentPayload::parse_from_bytes(&encoded).expect("payload should decode");
118
119        let indexed_payloads: &[traces::idx::TracerPayload] = decoded.idxTracerPayloads();
120        assert_eq!(decoded.tracerPayloads()[0].containerID(), "classic-container");
121        assert_eq!(indexed_payloads[0].containerIDRef(), 1);
122        assert_eq!(indexed_payloads[0].strings(), &["", "indexed-container"]);
123    }
124}