Skip to content

Commit 9000fef

Browse files
committed
rename telemetry_configs to metadata and remove old metadata
1 parent 842d4e8 commit 9000fef

13 files changed

Lines changed: 104 additions & 95 deletions

include/datadog/config.h

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,12 @@ struct ConfigMetadata {
6363
};
6464

6565
// Returns the final configuration value using the following
66-
// precedence order: environment > user code > default, and populates two maps:
67-
// 1. `telemetry_configs`: Records ALL configuration sources that were provided,
68-
// ordered from lowest to highest precedence.
69-
// 2. `metadata`: Records ONLY the winning configuration value (highest
70-
// precedence). Template Parameters:
66+
// precedence order: environment > user code > default, and populates metadata:
67+
// `metadata`: Records ALL configuration sources that were provided,
68+
// ordered from lowest to highest precedence. The last entry has the highest
69+
// precedence and is the winning value.
70+
//
71+
// Template Parameters:
7172
// Value: The type of the configuration value
7273
// Stringifier: Optional function type to convert Value to string
7374
// (defaults to std::nullptr_t, which uses string construction)
@@ -76,10 +77,8 @@ struct ConfigMetadata {
7677
// Parameters:
7778
// from_env: Optional value from environment variables (highest precedence)
7879
// from_user: Optional value from user code (middle precedence)
79-
// telemetry_configs: Output map that will be populated with all config
80-
// sources found for this config_name, in precedence order
81-
// metadata: Output map that will be populated with the winning config value
82-
// for this config_name
80+
// metadata: Output map that will be populated with all config sources found
81+
// for this config_name, in precedence order (last = highest)
8382
// config_name: The configuration parameter name identifier
8483
// fallback: Optional default value (lowest precedence). Pass nullptr to
8584
// indicate no default.
@@ -94,9 +93,7 @@ template <typename Value, typename Stringifier = std::nullptr_t,
9493
typename DefaultValue = std::nullptr_t>
9594
Value resolve_and_record_config(
9695
const Optional<Value>& from_env, const Optional<Value>& from_user,
97-
std::unordered_map<ConfigName, std::vector<ConfigMetadata>>*
98-
telemetry_configs,
99-
std::unordered_map<ConfigName, ConfigMetadata>* metadata,
96+
std::unordered_map<ConfigName, std::vector<ConfigMetadata>>* metadata,
10097
ConfigName config_name, DefaultValue fallback = nullptr,
10198
Stringifier to_string_fn = nullptr) {
10299
auto stringify = [&](const Value& v) -> std::string {
@@ -111,13 +108,12 @@ Value resolve_and_record_config(
111108
}
112109
};
113110

114-
std::vector<ConfigMetadata> telemetry_entries;
111+
std::vector<ConfigMetadata> metadata_entries;
115112
Optional<Value> chosen_value;
116113

117114
auto add_entry = [&](ConfigMetadata::Origin origin, const Value& val) {
118115
std::string val_str = stringify(val);
119-
telemetry_entries.emplace_back(
120-
ConfigMetadata{config_name, val_str, origin});
116+
metadata_entries.emplace_back(ConfigMetadata{config_name, val_str, origin});
121117
chosen_value = val;
122118
};
123119

@@ -134,9 +130,8 @@ Value resolve_and_record_config(
134130
add_entry(ConfigMetadata::Origin::ENVIRONMENT_VARIABLE, *from_env);
135131
}
136132

137-
(*telemetry_configs)[config_name] = std::move(telemetry_entries);
138-
if (!(*telemetry_configs)[config_name].empty()) {
139-
(*metadata)[config_name] = (*telemetry_configs)[config_name].back();
133+
if (!metadata_entries.empty()) {
134+
(*metadata)[config_name] = std::move(metadata_entries);
140135
}
141136

142137
return chosen_value.value_or(Value{});

include/datadog/datadog_agent_config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class FinalizedDatadogAgentConfig {
8585
std::chrono::steady_clock::duration request_timeout;
8686
std::chrono::steady_clock::duration shutdown_timeout;
8787
std::chrono::steady_clock::duration remote_configuration_poll_interval;
88-
std::unordered_map<ConfigName, ConfigMetadata> metadata;
88+
std::unordered_map<ConfigName, std::vector<ConfigMetadata>> metadata;
8989

9090
// Origin detection
9191
Optional<std::string> admission_controller_uid;

include/datadog/span_sampler_config.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ class FinalizedSpanSamplerConfig {
4949
};
5050

5151
std::vector<Rule> rules;
52-
std::unordered_map<ConfigName, ConfigMetadata> metadata;
53-
std::unordered_map<ConfigName, std::vector<ConfigMetadata>> telemetry_configs;
52+
std::unordered_map<ConfigName, std::vector<ConfigMetadata>> metadata;
5453
};
5554

5655
Expected<FinalizedSpanSamplerConfig> finalize_config(const SpanSamplerConfig&,

include/datadog/trace_sampler_config.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ class FinalizedTraceSamplerConfig {
5050
public:
5151
double max_per_second;
5252
std::vector<TraceSamplerRule> rules;
53-
std::unordered_map<ConfigName, ConfigMetadata> metadata;
54-
std::unordered_map<ConfigName, std::vector<ConfigMetadata>> telemetry_configs;
53+
std::unordered_map<ConfigName, std::vector<ConfigMetadata>> metadata;
5554

5655
public:
5756
/// Returns the trace sampler configuration when APM Tracing is disabled.

include/datadog/tracer_config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ class FinalizedTracerConfig final {
229229
std::string integration_name;
230230
std::string integration_version;
231231
bool report_traces;
232-
std::unordered_map<ConfigName, ConfigMetadata> metadata;
232+
std::unordered_map<ConfigName, std::vector<ConfigMetadata>> metadata;
233233
Baggage::Options baggage_opts;
234234
HTTPClient::URL agent_url;
235235
std::shared_ptr<EventScheduler> event_scheduler;

src/datadog/config_manager.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,12 +287,18 @@ namespace rc = datadog::remote_config;
287287

288288
ConfigManager::ConfigManager(const FinalizedTracerConfig& config)
289289
: clock_(config.clock),
290-
default_metadata_(config.metadata),
291290
trace_sampler_(
292291
std::make_shared<TraceSampler>(config.trace_sampler, clock_)),
293292
rules_(config.trace_sampler.rules),
294293
span_defaults_(std::make_shared<SpanDefaults>(config.defaults)),
295-
report_traces_(config.report_traces) {}
294+
report_traces_(config.report_traces) {
295+
// Extract winning value (last entry) from each config's metadata history
296+
for (const auto& [name, metadata_vec] : config.metadata) {
297+
if (!metadata_vec.empty()) {
298+
default_metadata_[name] = metadata_vec.back();
299+
}
300+
}
301+
}
296302

297303
rc::Products ConfigManager::get_products() { return rc::product::APM_TRACING; }
298304

src/datadog/datadog_agent_config.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ Expected<FinalizedDatadogAgentConfig> finalize_config(
142142
return std::move(*error);
143143
}
144144
result.url = *parsed_url;
145-
result.metadata[ConfigName::AGENT_URL] =
146-
ConfigMetadata(ConfigName::AGENT_URL, url, origin);
145+
result.metadata[ConfigName::AGENT_URL] = {
146+
ConfigMetadata(ConfigName::AGENT_URL, url, origin)};
147147

148148
// Starting Datadog Agent 7.62.0, the admission controller inject a unique
149149
// identifier through `DD_EXTERNAL_ENV`. This uid is used for origin

src/datadog/span_sampler_config.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,8 @@ Expected<FinalizedSpanSamplerConfig> finalize_config(
238238
}
239239

240240
std::vector<SpanSamplerConfig::Rule> rules = resolve_and_record_config(
241-
env_rules, user_rules, &result.telemetry_configs, &result.metadata,
242-
ConfigName::SPAN_SAMPLING_RULES, nullptr,
243-
[](const std::vector<SpanSamplerConfig::Rule> &r) {
241+
env_rules, user_rules, &result.metadata, ConfigName::SPAN_SAMPLING_RULES,
242+
nullptr, [](const std::vector<SpanSamplerConfig::Rule> &r) {
244243
return to_string(r);
245244
});
246245

src/datadog/trace_sampler_config.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,14 @@ Expected<FinalizedTraceSamplerConfig> finalize_config(
162162

163163
if (!env_config->rules.empty()) {
164164
rules = std::move(env_config->rules);
165-
result.metadata[ConfigName::TRACE_SAMPLING_RULES] =
165+
result.metadata[ConfigName::TRACE_SAMPLING_RULES] = {
166166
ConfigMetadata(ConfigName::TRACE_SAMPLING_RULES, to_string(rules),
167-
ConfigMetadata::Origin::ENVIRONMENT_VARIABLE);
167+
ConfigMetadata::Origin::ENVIRONMENT_VARIABLE)};
168168
} else if (!config.rules.empty()) {
169169
rules = std::move(config.rules);
170-
result.metadata[ConfigName::TRACE_SAMPLING_RULES] =
170+
result.metadata[ConfigName::TRACE_SAMPLING_RULES] = {
171171
ConfigMetadata(ConfigName::TRACE_SAMPLING_RULES, to_string(rules),
172-
ConfigMetadata::Origin::CODE);
172+
ConfigMetadata::Origin::CODE)};
173173
}
174174

175175
for (const auto &rule : rules) {
@@ -192,8 +192,8 @@ Expected<FinalizedTraceSamplerConfig> finalize_config(
192192
}
193193

194194
Optional<double> sample_rate = resolve_and_record_config(
195-
env_config->sample_rate, config.sample_rate, &result.telemetry_configs,
196-
&result.metadata, ConfigName::TRACE_SAMPLING_RATE, 1.0,
195+
env_config->sample_rate, config.sample_rate, &result.metadata,
196+
ConfigName::TRACE_SAMPLING_RATE, 1.0,
197197
[](const double &d) { return to_string(d, 1); });
198198

199199
bool is_sample_rate_provided = env_config->sample_rate || config.sample_rate;
@@ -215,8 +215,7 @@ Expected<FinalizedTraceSamplerConfig> finalize_config(
215215
}
216216

217217
double max_per_second = resolve_and_record_config(
218-
env_config->max_per_second, config.max_per_second,
219-
&result.telemetry_configs, &result.metadata,
218+
env_config->max_per_second, config.max_per_second, &result.metadata,
220219
ConfigName::TRACE_SAMPLING_LIMIT, 100.0,
221220
[](const double &d) { return std::to_string(d); });
222221

src/datadog/tracer_config.cpp

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -284,36 +284,32 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
284284
final_config.clock = clock;
285285
final_config.logger = logger;
286286

287-
std::unordered_map<ConfigName, std::vector<ConfigMetadata>>
288-
all_sources_configs;
289-
290287
// DD_SERVICE
291288
final_config.defaults.service = resolve_and_record_config(
292-
env_config->service, user_config.service, &all_sources_configs,
293-
&final_config.metadata, ConfigName::SERVICE_NAME, get_process_name());
289+
env_config->service, user_config.service, &final_config.metadata,
290+
ConfigName::SERVICE_NAME, get_process_name());
294291

295292
// Service type
296293
final_config.defaults.service_type =
297294
value_or(env_config->service_type, user_config.service_type, "web");
298295

299296
// DD_ENV
300297
final_config.defaults.environment = resolve_and_record_config(
301-
env_config->environment, user_config.environment, &all_sources_configs,
302-
&final_config.metadata, ConfigName::SERVICE_ENV);
298+
env_config->environment, user_config.environment, &final_config.metadata,
299+
ConfigName::SERVICE_ENV);
303300

304301
// DD_VERSION
305302
final_config.defaults.version = resolve_and_record_config(
306-
env_config->version, user_config.version, &all_sources_configs,
307-
&final_config.metadata, ConfigName::SERVICE_VERSION);
303+
env_config->version, user_config.version, &final_config.metadata,
304+
ConfigName::SERVICE_VERSION);
308305

309306
// Span name
310307
final_config.defaults.name = value_or(env_config->name, user_config.name, "");
311308

312309
// DD_TAGS
313310
final_config.defaults.tags = resolve_and_record_config(
314-
env_config->tags, user_config.tags, &all_sources_configs,
315-
&final_config.metadata, ConfigName::TAGS,
316-
std::unordered_map<std::string, std::string>{},
311+
env_config->tags, user_config.tags, &final_config.metadata,
312+
ConfigName::TAGS, std::unordered_map<std::string, std::string>{},
317313
[](const auto &tags) { return join_tags(tags); });
318314

319315
// Extraction Styles
@@ -323,8 +319,8 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
323319

324320
final_config.extraction_styles = resolve_and_record_config(
325321
env_config->extraction_styles, user_config.extraction_styles,
326-
&all_sources_configs, &final_config.metadata,
327-
ConfigName::EXTRACTION_STYLES, default_propagation_styles,
322+
&final_config.metadata, ConfigName::EXTRACTION_STYLES,
323+
default_propagation_styles,
328324
[](const std::vector<PropagationStyle> &styles) {
329325
return join_propagation_styles(styles);
330326
});
@@ -337,8 +333,8 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
337333
// Injection Styles
338334
final_config.injection_styles = resolve_and_record_config(
339335
env_config->injection_styles, user_config.injection_styles,
340-
&all_sources_configs, &final_config.metadata,
341-
ConfigName::INJECTION_STYLES, default_propagation_styles,
336+
&final_config.metadata, ConfigName::INJECTION_STYLES,
337+
default_propagation_styles,
342338
[](const std::vector<PropagationStyle> &styles) {
343339
return join_propagation_styles(styles);
344340
});
@@ -351,14 +347,14 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
351347
// Startup Logs
352348
final_config.log_on_startup = resolve_and_record_config(
353349
env_config->log_on_startup, user_config.log_on_startup,
354-
&all_sources_configs, &final_config.metadata, ConfigName::STARTUP_LOGS,
355-
true, [](const bool &b) { return to_string(b); });
350+
&final_config.metadata, ConfigName::STARTUP_LOGS, true,
351+
[](const bool &b) { return to_string(b); });
356352

357353
// Report traces
358354
final_config.report_traces = resolve_and_record_config(
359355
env_config->report_traces, user_config.report_traces,
360-
&all_sources_configs, &final_config.metadata, ConfigName::REPORT_TRACES,
361-
true, [](const bool &b) { return to_string(b); });
356+
&final_config.metadata, ConfigName::REPORT_TRACES, true,
357+
[](const bool &b) { return to_string(b); });
362358

363359
// Report hostname
364360
final_config.report_hostname =
@@ -371,8 +367,8 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
371367
// 128b Trace IDs
372368
final_config.generate_128bit_trace_ids = resolve_and_record_config(
373369
env_config->generate_128bit_trace_ids,
374-
user_config.generate_128bit_trace_ids, &all_sources_configs,
375-
&final_config.metadata, ConfigName::GENEREATE_128BIT_TRACE_IDS, true,
370+
user_config.generate_128bit_trace_ids, &final_config.metadata,
371+
ConfigName::GENEREATE_128BIT_TRACE_IDS, true,
376372
[](const bool &b) { return to_string(b); });
377373

378374
// Integration name & version
@@ -385,15 +381,13 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
385381
// Baggage - max items
386382
final_config.baggage_opts.max_items = resolve_and_record_config(
387383
env_config->baggage_max_items, user_config.baggage_max_items,
388-
&all_sources_configs, &final_config.metadata,
389-
ConfigName::TRACE_BAGGAGE_MAX_ITEMS, 64UL,
384+
&final_config.metadata, ConfigName::TRACE_BAGGAGE_MAX_ITEMS, 64UL,
390385
[](const size_t &i) { return std::to_string(i); });
391386

392387
// Baggage - max bytes
393388
final_config.baggage_opts.max_bytes = resolve_and_record_config(
394389
env_config->baggage_max_bytes, user_config.baggage_max_bytes,
395-
&all_sources_configs, &final_config.metadata,
396-
ConfigName::TRACE_BAGGAGE_MAX_BYTES, 8192UL,
390+
&final_config.metadata, ConfigName::TRACE_BAGGAGE_MAX_BYTES, 8192UL,
397391
[](const size_t &i) { return std::to_string(i); });
398392

399393
if (final_config.baggage_opts.max_items <= 0 ||
@@ -422,17 +416,23 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
422416
}
423417

424418
if (auto trace_sampler_config = finalize_config(user_config.trace_sampler)) {
425-
final_config.metadata.merge(trace_sampler_config->metadata);
426-
all_sources_configs.merge(trace_sampler_config->telemetry_configs);
419+
// Merge metadata vectors
420+
for (auto &[key, values] : trace_sampler_config->metadata) {
421+
auto &dest = final_config.metadata[key];
422+
dest.insert(dest.end(), values.begin(), values.end());
423+
}
427424
final_config.trace_sampler = std::move(*trace_sampler_config);
428425
} else {
429426
return std::move(trace_sampler_config.error());
430427
}
431428

432429
if (auto span_sampler_config =
433430
finalize_config(user_config.span_sampler, *logger)) {
434-
final_config.metadata.merge(span_sampler_config->metadata);
435-
all_sources_configs.merge(span_sampler_config->telemetry_configs);
431+
// Merge metadata vectors
432+
for (auto &[key, values] : span_sampler_config->metadata) {
433+
auto &dest = final_config.metadata[key];
434+
dest.insert(dest.end(), values.begin(), values.end());
435+
}
436436
final_config.span_sampler = std::move(*span_sampler_config);
437437
} else {
438438
return std::move(span_sampler_config.error());
@@ -455,32 +455,31 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
455455
final_config.telemetry = std::move(*telemetry_final_config);
456456
final_config.telemetry.products.emplace_back(telemetry::Product{
457457
telemetry::Product::Name::tracing, true, tracer_version, nullopt,
458-
nullopt, all_sources_configs});
458+
nullopt, final_config.metadata});
459459
} else {
460460
return std::move(telemetry_final_config.error());
461461
}
462462

463463
// APM Tracing Enabled
464464
final_config.tracing_enabled = resolve_and_record_config(
465465
env_config->tracing_enabled, user_config.tracing_enabled,
466-
&all_sources_configs, &final_config.metadata,
467-
ConfigName::APM_TRACING_ENABLED, true,
466+
&final_config.metadata, ConfigName::APM_TRACING_ENABLED, true,
468467
[](const bool &b) { return to_string(b); });
469468

470469
{
471470
// Resource Renaming Enabled
472471
const bool resource_renaming_enabled = resolve_and_record_config(
473472
env_config->resource_renaming_enabled,
474-
user_config.resource_renaming_enabled, &all_sources_configs,
475-
&final_config.metadata, ConfigName::TRACE_RESOURCE_RENAMING_ENABLED,
476-
false, [](const bool &b) { return to_string(b); });
473+
user_config.resource_renaming_enabled, &final_config.metadata,
474+
ConfigName::TRACE_RESOURCE_RENAMING_ENABLED, false,
475+
[](const bool &b) { return to_string(b); });
477476

478477
// Resource Renaming Always Simplified Endpoint
479478
const bool resource_renaming_always_simplified_endpoint =
480479
resolve_and_record_config(
481480
env_config->resource_renaming_always_simplified_endpoint,
482481
user_config.resource_renaming_always_simplified_endpoint,
483-
&all_sources_configs, &final_config.metadata,
482+
&final_config.metadata,
484483
ConfigName::TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT,
485484
false, [](const bool &b) { return to_string(b); });
486485

@@ -511,7 +510,11 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
511510

512511
if (!user_config.collector) {
513512
final_config.collector = *agent_finalized;
514-
final_config.metadata.merge(agent_finalized->metadata);
513+
// Merge metadata vectors
514+
for (auto &[key, values] : agent_finalized->metadata) {
515+
auto &dest = final_config.metadata[key];
516+
dest.insert(dest.end(), values.begin(), values.end());
517+
}
515518
} else {
516519
final_config.collector = user_config.collector;
517520
}

0 commit comments

Comments
 (0)