Skip to main content

libdd_trace_utils/
config_utils.rs

1// Copyright 2023-Present Datadog, Inc. https://www.datadoghq.com/
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::trace_utils;
5use std::env;
6
7pub const PROD_INTAKE_SUBDOMAIN: &str = "trace.agent";
8
9const TRACE_INTAKE_ROUTE: &str = "/api/v0.2/traces";
10const TRACE_STATS_INTAKE_ROUTE: &str = "/api/v0.2/stats";
11
12pub fn read_cloud_env() -> Option<(String, trace_utils::EnvironmentType)> {
13    if let Ok(res) = env::var("AWS_LAMBDA_FUNCTION_NAME") {
14        return Some((res, trace_utils::EnvironmentType::LambdaFunction));
15    }
16    if let Ok(res) = env::var("K_SERVICE") {
17        // Set by Google Cloud Functions for newer runtimes
18        return Some((res, trace_utils::EnvironmentType::CloudFunction));
19    }
20    if let Ok(res) = env::var("FUNCTION_NAME") {
21        // Set by Google Cloud Functions for older runtimes
22        return Some((res, trace_utils::EnvironmentType::CloudFunction));
23    }
24    if let Ok(res) = env::var("WEBSITE_SITE_NAME") {
25        // Set by Azure Functions
26        return Some((res, trace_utils::EnvironmentType::AzureFunction));
27    }
28    if let Ok(res) = env::var("ASCSVCRT_SPRING__APPLICATION__NAME") {
29        // Set by Azure Spring Apps
30        return Some((res, trace_utils::EnvironmentType::AzureSpringApp));
31    }
32    None
33}
34
35pub fn trace_intake_url(site: &str) -> String {
36    construct_trace_intake_url(site, TRACE_INTAKE_ROUTE)
37}
38
39pub fn trace_intake_url_prefixed(endpoint_prefix: &str) -> String {
40    format!("{endpoint_prefix}{TRACE_INTAKE_ROUTE}")
41}
42
43pub fn trace_stats_url(site: &str) -> String {
44    construct_trace_intake_url(site, TRACE_STATS_INTAKE_ROUTE)
45}
46
47pub fn trace_stats_url_prefixed(endpoint_prefix: &str) -> String {
48    format!("{endpoint_prefix}{TRACE_STATS_INTAKE_ROUTE}")
49}
50
51fn construct_trace_intake_url(prefix: &str, route: &str) -> String {
52    format!("https://{PROD_INTAKE_SUBDOMAIN}.{prefix}{route}")
53}