libdd_telemetry/data/
common.rs

1// Copyright 2021-Present Datadog, Inc. https://www.datadoghq.com/
2// SPDX-License-Identifier: Apache-2.0
3
4use serde::{Deserialize, Serialize};
5
6use crate::data::*;
7
8#[derive(Serialize, Deserialize, Debug)]
9pub enum ApiVersion {
10    #[serde(rename = "v1")]
11    V1,
12    #[serde(rename = "v2")]
13    V2,
14}
15
16impl ApiVersion {
17    pub fn to_str(&self) -> &'static str {
18        match self {
19            ApiVersion::V1 => "v1",
20            ApiVersion::V2 => "v2",
21        }
22    }
23}
24
25#[derive(Serialize, Debug)]
26pub struct Telemetry<'a> {
27    pub api_version: ApiVersion,
28    pub tracer_time: u64,
29    pub runtime_id: &'a str,
30    pub seq_id: u64,
31    pub application: &'a Application,
32    pub host: &'a Host,
33    #[serde(default, skip_serializing_if = "Option::is_none")]
34    pub origin: Option<&'a str>,
35    #[serde(flatten)]
36    pub payload: &'a Payload,
37}
38
39#[derive(Serialize, Deserialize, Default, Debug)]
40pub struct Application {
41    pub service_name: String,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub service_version: Option<String>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub env: Option<String>,
46    pub language_name: String,
47    pub language_version: String,
48    pub tracer_version: String,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub runtime_name: Option<String>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub runtime_version: Option<String>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub runtime_patches: Option<String>,
55}
56
57#[derive(Serialize, Deserialize, Default, Debug)]
58pub struct Host {
59    pub hostname: String,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub container_id: Option<String>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub os: Option<String>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub os_version: Option<String>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub kernel_name: Option<String>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub kernel_release: Option<String>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub kernel_version: Option<String>,
72}