Skip to content

Commit 928ebe8

Browse files
committed
commit1
1 parent 258a71d commit 928ebe8

File tree

5 files changed

+31
-28
lines changed

5 files changed

+31
-28
lines changed

include/datadog/config.h

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,26 @@ struct ConfigMetadata {
5656
: name(n), value(std::move(v)), origin(orig), error(std::move(err)) {}
5757
};
5858

59-
// Return a pair containing the configuration origin and value of a
60-
// configuration value chosen from one of the specified `from_env`,
61-
// `from_config`, and `fallback`. This function defines the relative precedence
62-
// among configuration values originating from the environment, programmatic
63-
// configuration, and default configuration.
59+
// Return a vector containing the configuration values chosen from one of the
60+
// specified `from_env`, `from_user`, and `fallback`. This function defines
61+
// the relative precedence among configuration values, from lower to higher,
62+
// originating from the default configuration, programmatic configuration,
63+
// and environment.
6464
template <typename Value, typename DefaultValue>
65-
std::pair<ConfigMetadata::Origin, Value> pick(const Optional<Value> &from_env,
66-
const Optional<Value> &from_user,
67-
DefaultValue fallback) {
65+
std::vector<std::pair<ConfigMetadata::Origin, Value>> pick(
66+
const Optional<Value>& from_env, const Optional<Value>& from_user,
67+
DefaultValue fallback) {
68+
std::vector<std::pair<ConfigMetadata::Origin, Value>> result;
69+
result.emplace_back(ConfigMetadata::Origin::DEFAULT, fallback);
70+
71+
if (from_user) {
72+
result.emplace_back(ConfigMetadata::Origin::CODE, *from_user);
73+
}
6874
if (from_env) {
69-
return {ConfigMetadata::Origin::ENVIRONMENT_VARIABLE, *from_env};
70-
} else if (from_user) {
71-
return {ConfigMetadata::Origin::CODE, *from_user};
75+
result.emplace_back(ConfigMetadata::Origin::ENVIRONMENT_VARIABLE,
76+
*from_env);
7277
}
73-
return {ConfigMetadata::Origin::DEFAULT, fallback};
78+
return result;
7479
}
7580

7681
} // namespace tracing

include/datadog/telemetry/product.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <string>
77
#include <unordered_map>
8+
#include <vector>
89

910
namespace datadog::telemetry {
1011

@@ -30,8 +31,7 @@ struct Product final {
3031
/// Optional error message related to the product status.
3132
tracing::Optional<std::string> error_message;
3233
/// Map of configuration settings for the product.
33-
std::unordered_map<tracing::ConfigName, tracing::ConfigMetadata>
34-
configurations;
34+
std::unordered_map<tracing::ConfigName, std::vector<tracing::ConfigMetadata>> configurations;
3535
};
3636

3737
inline std::string_view to_string(Product::Name product) {

src/datadog/telemetry/telemetry_impl.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -587,11 +587,12 @@ std::string Telemetry::app_started_payload() {
587587

588588
for (const auto& product : config_.products) {
589589
auto& configurations = product.configurations;
590-
for (const auto& [_, config_metadata] : configurations) {
590+
for (const auto& [_, config_metadatas] : configurations) {
591591
// if (config_metadata.value.empty()) continue;
592-
593-
configuration_json.emplace_back(
594-
generate_configuration_field(config_metadata));
592+
for (const auto& config_metadata : config_metadatas) {
593+
configuration_json.emplace_back(
594+
generate_configuration_field(config_metadata));
595+
}
595596
}
596597

597598
/// NOTE(@dmehala): Telemetry API is tightly related to APM tracing and

src/datadog/trace_sampler_config.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ Expected<FinalizedTraceSamplerConfig> finalize_config(
226226
}
227227

228228
const auto [origin, max_per_second] =
229-
pick(env_config->max_per_second, config.max_per_second, 100);
229+
pick(env_config->max_per_second, config.max_per_second, 100).back();
230230
result.metadata[ConfigName::TRACE_SAMPLING_LIMIT] = ConfigMetadata(
231231
ConfigName::TRACE_SAMPLING_LIMIT, std::to_string(max_per_second), origin);
232232

src/datadog/tracer_config.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -285,16 +285,13 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
285285
final_config.logger = logger;
286286

287287
ConfigMetadata::Origin origin;
288+
std::unordered_map<tracing::ConfigName, std::vector<std::pair<ConfigMetadata::Origin, std::string>>> telemetry_configs;
288289

289-
std::tie(origin, final_config.defaults.service) =
290-
pick(env_config->service, user_config.service, "");
291-
292-
if (final_config.defaults.service.empty()) {
293-
final_config.defaults.service = get_process_name();
294-
}
295-
296-
final_config.metadata[ConfigName::SERVICE_NAME] = ConfigMetadata(
297-
ConfigName::SERVICE_NAME, final_config.defaults.service, origin);
290+
auto configs = pick(env_config->service, user_config.service, get_process_name());
291+
const auto& winning_config = configs.back();
292+
final_config.defaults.service = winning_config.value;
293+
telemetry_configs[ConfigName::SERVICE_NAME] = configs;
294+
final_config.metadata[ConfigName::SERVICE_NAME] = ConfigMetadata(ConfigName::SERVICE_NAME, winning_config.value, winning_config.origin);;
298295

299296
final_config.defaults.service_type =
300297
value_or(env_config->service_type, user_config.service_type, "web");

0 commit comments

Comments
 (0)