|
6 | 6 | // Each `enum Variable` denotes an environment variable. The enum value names |
7 | 7 | // are the same as the names of the environment variables. |
8 | 8 | // |
9 | | -// `variable_names` is an array of the names of the environment variables. Nginx |
10 | | -// uses `variable_names` as an allow list of environment variables to forward to |
11 | | -// worker processes. |
12 | | -// |
13 | 9 | // `name` returns the name of a specified `Variable`. |
14 | 10 | // |
15 | 11 | // `lookup` retrieves the value of `Variable` in the environment. |
16 | | - |
17 | 12 | #include <datadog/optional.h> |
18 | 13 | #include <datadog/string_view.h> |
19 | 14 |
|
| 15 | +#include <string> |
| 16 | + |
20 | 17 | namespace datadog { |
21 | 18 | namespace tracing { |
22 | 19 | namespace environment { |
23 | 20 |
|
24 | | -// To enforce correspondence between `enum Variable` and `variable_names`, the |
25 | | -// preprocessor is used so that the DD_* symbols are listed exactly once. |
26 | | -#define LIST_ENVIRONMENT_VARIABLES(MACRO) \ |
27 | | - MACRO(DD_AGENT_HOST) \ |
28 | | - MACRO(DD_ENV) \ |
29 | | - MACRO(DD_INSTRUMENTATION_TELEMETRY_ENABLED) \ |
30 | | - MACRO(DD_PROPAGATION_STYLE_EXTRACT) \ |
31 | | - MACRO(DD_PROPAGATION_STYLE_INJECT) \ |
32 | | - MACRO(DD_REMOTE_CONFIGURATION_ENABLED) \ |
33 | | - MACRO(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS) \ |
34 | | - MACRO(DD_SERVICE) \ |
35 | | - MACRO(DD_SPAN_SAMPLING_RULES) \ |
36 | | - MACRO(DD_SPAN_SAMPLING_RULES_FILE) \ |
37 | | - MACRO(DD_TRACE_PROPAGATION_STYLE_EXTRACT) \ |
38 | | - MACRO(DD_TRACE_PROPAGATION_STYLE_INJECT) \ |
39 | | - MACRO(DD_TRACE_PROPAGATION_STYLE) \ |
40 | | - MACRO(DD_TAGS) \ |
41 | | - MACRO(DD_TRACE_AGENT_PORT) \ |
42 | | - MACRO(DD_TRACE_AGENT_URL) \ |
43 | | - MACRO(DD_TRACE_DEBUG) \ |
44 | | - MACRO(DD_TRACE_ENABLED) \ |
45 | | - MACRO(DD_TRACE_RATE_LIMIT) \ |
46 | | - MACRO(DD_TRACE_REPORT_HOSTNAME) \ |
47 | | - MACRO(DD_TRACE_SAMPLE_RATE) \ |
48 | | - MACRO(DD_TRACE_SAMPLING_RULES) \ |
49 | | - MACRO(DD_TRACE_STARTUP_LOGS) \ |
50 | | - MACRO(DD_TRACE_TAGS_PROPAGATION_MAX_LENGTH) \ |
51 | | - MACRO(DD_VERSION) \ |
52 | | - MACRO(DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED) \ |
53 | | - MACRO(DD_TELEMETRY_HEARTBEAT_INTERVAL) \ |
54 | | - MACRO(DD_TELEMETRY_METRICS_ENABLED) \ |
55 | | - MACRO(DD_TELEMETRY_METRICS_INTERVAL_SECONDS) \ |
56 | | - MACRO(DD_TELEMETRY_DEBUG) \ |
57 | | - MACRO(DD_TRACE_BAGGAGE_MAX_ITEMS) \ |
58 | | - MACRO(DD_TRACE_BAGGAGE_MAX_BYTES) \ |
59 | | - MACRO(DD_TELEMETRY_LOG_COLLECTION_ENABLED) \ |
60 | | - MACRO(DD_INSTRUMENTATION_INSTALL_ID) \ |
61 | | - MACRO(DD_INSTRUMENTATION_INSTALL_TYPE) \ |
62 | | - MACRO(DD_INSTRUMENTATION_INSTALL_TIME) \ |
63 | | - MACRO(DD_APM_TRACING_ENABLED) \ |
64 | | - MACRO(DD_TRACE_RESOURCE_RENAMING_ENABLED) \ |
65 | | - MACRO(DD_TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT) \ |
66 | | - MACRO(DD_EXTERNAL_ENV) |
| 21 | +// Central registry for supported environment variables. |
| 22 | +// All configurations must be registered here. |
| 23 | +// |
| 24 | +// This registry is the single source of truth for: |
| 25 | +// - env variable name allowlist (`include/datadog/environment.h`) |
| 26 | +// - generated metadata (`metadata/supported-configurations.json`) |
| 27 | +// |
| 28 | +// Each entry has: |
| 29 | +// - NAME: environment variable symbol (e.g. DD_SERVICE) |
| 30 | +// - TYPE: STRING | BOOLEAN | INT | DECIMAL | ARRAY | MAP |
| 31 | +// - DEFAULT: literal default value or a marker token |
| 32 | +// |
| 33 | +// Marker tokens: |
| 34 | +// - ENV_DEFAULT_RESOLVED_IN_CODE("...description...") |
| 35 | +// The runtime default is resolved in C++ configuration finalization |
| 36 | +// logic. The description is emitted as the "default" field in |
| 37 | +// metadata/supported-configurations.json. |
| 38 | +#define DD_LIST_ENVIRONMENT_VARIABLES(MACRO) \ |
| 39 | + MACRO(DD_AGENT_HOST, STRING, "localhost") \ |
| 40 | + MACRO(DD_ENV, STRING, "") \ |
| 41 | + MACRO(DD_INSTRUMENTATION_TELEMETRY_ENABLED, BOOLEAN, true) \ |
| 42 | + MACRO(DD_PROPAGATION_STYLE_EXTRACT, ARRAY, "datadog,tracecontext,baggage") \ |
| 43 | + MACRO(DD_PROPAGATION_STYLE_INJECT, ARRAY, "datadog,tracecontext,baggage") \ |
| 44 | + MACRO(DD_REMOTE_CONFIGURATION_ENABLED, BOOLEAN, true) \ |
| 45 | + MACRO(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS, DECIMAL, 5.0) \ |
| 46 | + MACRO(DD_SERVICE, STRING, \ |
| 47 | + ENV_DEFAULT_RESOLVED_IN_CODE("Defaults to process name when unset.")) \ |
| 48 | + MACRO(DD_SPAN_SAMPLING_RULES, ARRAY, "[]") \ |
| 49 | + MACRO(DD_SPAN_SAMPLING_RULES_FILE, STRING, "") \ |
| 50 | + MACRO(DD_TRACE_PROPAGATION_STYLE_EXTRACT, ARRAY, \ |
| 51 | + "datadog,tracecontext,baggage") \ |
| 52 | + MACRO(DD_TRACE_PROPAGATION_STYLE_INJECT, ARRAY, \ |
| 53 | + "datadog,tracecontext,baggage") \ |
| 54 | + MACRO(DD_TRACE_PROPAGATION_STYLE, ARRAY, "datadog,tracecontext,baggage") \ |
| 55 | + MACRO(DD_TAGS, MAP, "") \ |
| 56 | + MACRO(DD_TRACE_AGENT_PORT, INT, 8126) \ |
| 57 | + MACRO(DD_TRACE_AGENT_URL, STRING, \ |
| 58 | + ENV_DEFAULT_RESOLVED_IN_CODE( \ |
| 59 | + "If unset, built from DD_AGENT_HOST and DD_TRACE_AGENT_PORT, " \ |
| 60 | + "then defaults to http://localhost:8126.")) \ |
| 61 | + MACRO(DD_TRACE_DEBUG, BOOLEAN, false) \ |
| 62 | + MACRO(DD_TRACE_ENABLED, BOOLEAN, true) \ |
| 63 | + MACRO(DD_TRACE_RATE_LIMIT, DECIMAL, 100.0) \ |
| 64 | + MACRO(DD_TRACE_REPORT_HOSTNAME, BOOLEAN, false) \ |
| 65 | + MACRO(DD_TRACE_SAMPLE_RATE, DECIMAL, 1.0) \ |
| 66 | + MACRO(DD_TRACE_SAMPLING_RULES, ARRAY, "[]") \ |
| 67 | + MACRO(DD_TRACE_STARTUP_LOGS, BOOLEAN, true) \ |
| 68 | + MACRO(DD_TRACE_TAGS_PROPAGATION_MAX_LENGTH, INT, 512) \ |
| 69 | + MACRO(DD_VERSION, STRING, "") \ |
| 70 | + MACRO(DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED, BOOLEAN, true) \ |
| 71 | + MACRO(DD_TELEMETRY_HEARTBEAT_INTERVAL, DECIMAL, 10) \ |
| 72 | + MACRO(DD_TELEMETRY_METRICS_ENABLED, BOOLEAN, true) \ |
| 73 | + MACRO(DD_TELEMETRY_METRICS_INTERVAL_SECONDS, DECIMAL, 60) \ |
| 74 | + MACRO(DD_TELEMETRY_DEBUG, BOOLEAN, false) \ |
| 75 | + MACRO(DD_TRACE_BAGGAGE_MAX_ITEMS, INT, 64) \ |
| 76 | + MACRO(DD_TRACE_BAGGAGE_MAX_BYTES, INT, 8192) \ |
| 77 | + MACRO(DD_TELEMETRY_LOG_COLLECTION_ENABLED, BOOLEAN, true) \ |
| 78 | + MACRO(DD_INSTRUMENTATION_INSTALL_ID, STRING, "") \ |
| 79 | + MACRO(DD_INSTRUMENTATION_INSTALL_TYPE, STRING, "") \ |
| 80 | + MACRO(DD_INSTRUMENTATION_INSTALL_TIME, STRING, "") \ |
| 81 | + MACRO(DD_APM_TRACING_ENABLED, BOOLEAN, true) \ |
| 82 | + MACRO(DD_TRACE_RESOURCE_RENAMING_ENABLED, BOOLEAN, false) \ |
| 83 | + MACRO(DD_TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT, BOOLEAN, false) \ |
| 84 | + MACRO(DD_EXTERNAL_ENV, STRING, "") |
67 | 85 |
|
68 | | -#define WITH_COMMA(ARG) ARG, |
| 86 | +#define ENV_DEFAULT_RESOLVED_IN_CODE(X) X |
| 87 | +#define WITH_COMMA(ARG, TYPE, DEFAULT_VALUE) ARG, |
69 | 88 |
|
70 | | -enum Variable { LIST_ENVIRONMENT_VARIABLES(WITH_COMMA) }; |
| 89 | +enum Variable { DD_LIST_ENVIRONMENT_VARIABLES(WITH_COMMA) }; |
71 | 90 |
|
72 | 91 | // Quoting a macro argument requires this two-step. |
73 | 92 | #define QUOTED_IMPL(ARG) #ARG |
74 | 93 | #define QUOTED(ARG) QUOTED_IMPL(ARG) |
75 | 94 |
|
76 | | -#define QUOTED_WITH_COMMA(ARG) WITH_COMMA(QUOTED(ARG)) |
| 95 | +#define QUOTED_WITH_COMMA(ARG, TYPE, DEFAULT_VALUE) \ |
| 96 | + WITH_COMMA(QUOTED(ARG), TYPE, DEFAULT_VALUE) |
77 | 97 |
|
78 | 98 | inline const char *const variable_names[] = { |
79 | | - LIST_ENVIRONMENT_VARIABLES(QUOTED_WITH_COMMA)}; |
| 99 | + DD_LIST_ENVIRONMENT_VARIABLES(QUOTED_WITH_COMMA)}; |
80 | 100 |
|
81 | | -#undef QUOTED_WITH_COMMA |
82 | 101 | #undef QUOTED |
83 | 102 | #undef QUOTED_IMPL |
84 | 103 | #undef WITH_COMMA |
85 | | -#undef LIST_ENVIRONMENT_VARIABLES |
| 104 | +#undef ENV_DEFAULT_RESOLVED_IN_CODE |
86 | 105 |
|
87 | 106 | // Return the name of the specified environment `variable`. |
88 | 107 | StringView name(Variable variable); |
|
0 commit comments