diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration_parser.h b/sdk/include/opentelemetry/sdk/configuration/configuration_parser.h index dc5a3b77ef..2d2304a41f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration_parser.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration_parser.h @@ -30,6 +30,9 @@ #include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/exemplar_filter.h" +#include "opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" @@ -164,6 +167,16 @@ class ConfigurationParser std::unique_ptr ParseLoggerProviderConfiguration( const std::unique_ptr &node) const; + ExperimentalLoggerConfigConfiguration ParseExperimentalLoggerConfigConfiguration( + const std::unique_ptr &node) const; + + ExperimentalLoggerMatcherAndConfigConfiguration + ParseExperimentalLoggerMatcherAndConfigConfiguration( + const std::unique_ptr &node) const; + + std::unique_ptr + ParseExperimentalLoggerConfiguratorConfiguration(const std::unique_ptr &node) const; + DefaultHistogramAggregation ParseDefaultHistogramAggregation( const std::unique_ptr &node, const std::string &name) const; @@ -266,6 +279,16 @@ class ConfigurationParser std::unique_ptr ParseMeterProviderConfiguration( const std::unique_ptr &node) const; + ExperimentalMeterConfigConfiguration ParseExperimentalMeterConfigConfiguration( + const std::unique_ptr &node) const; + + ExperimentalMeterMatcherAndConfigConfiguration + ParseExperimentalMeterMatcherAndConfigConfiguration( + const std::unique_ptr &node) const; + + std::unique_ptr + ParseExperimentalMeterConfiguratorConfiguration(const std::unique_ptr &node) const; + std::unique_ptr ParsePropagatorConfiguration( const std::unique_ptr &node) const; @@ -336,6 +359,16 @@ class ConfigurationParser std::unique_ptr ParseTracerProviderConfiguration( const std::unique_ptr &node) const; + ExperimentalTracerConfigConfiguration ParseExperimentalTracerConfigConfiguration( + const std::unique_ptr &node) const; + + ExperimentalTracerMatcherAndConfigConfiguration + ParseExperimentalTracerMatcherAndConfigConfiguration( + const std::unique_ptr &node) const; + + std::unique_ptr + ParseExperimentalTracerConfiguratorConfiguration(const std::unique_ptr &node) const; + std::unique_ptr ParseStringAttributeValueConfiguration( const std::unique_ptr &node) const; diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_logger_config_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_logger_config_configuration.h new file mode 100644 index 0000000000..78032b8307 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_logger_config_configuration.h @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: ExperimentalLoggerConfig +class ExperimentalLoggerConfigConfiguration +{ +public: + bool disabled{false}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h new file mode 100644 index 0000000000..34e08a8d32 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/experimental_logger_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_matcher_and_config_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: ExperimentalLoggerConfigurator +class ExperimentalLoggerConfiguratorConfiguration +{ +public: + ExperimentalLoggerConfigConfiguration default_config; + std::vector loggers; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_logger_matcher_and_config_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_logger_matcher_and_config_configuration.h new file mode 100644 index 0000000000..f5924e7df3 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_logger_matcher_and_config_configuration.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/experimental_logger_config_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: ExperimentalLoggerMatcherAndConfig +class ExperimentalLoggerMatcherAndConfigConfiguration +{ +public: + std::string name; + ExperimentalLoggerConfigConfiguration config; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_meter_config_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_meter_config_configuration.h new file mode 100644 index 0000000000..dba1615653 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_meter_config_configuration.h @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.yaml +// YAML-NODE: ExperimentalMeterConfig +class ExperimentalMeterConfigConfiguration +{ +public: + bool disabled{false}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h new file mode 100644 index 0000000000..dcbb6655c8 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/experimental_meter_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_matcher_and_config_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.yaml +// YAML-NODE: ExperimentalMeterConfigurator +class ExperimentalMeterConfiguratorConfiguration +{ +public: + ExperimentalMeterConfigConfiguration default_config; + std::vector meters; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_meter_matcher_and_config_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_meter_matcher_and_config_configuration.h new file mode 100644 index 0000000000..7d71ee7e29 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_meter_matcher_and_config_configuration.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/experimental_meter_config_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.yaml +// YAML-NODE: ExperimentalMeterMatcherAndConfig +class ExperimentalMeterMatcherAndConfigConfiguration +{ +public: + std::string name; + ExperimentalMeterConfigConfiguration config; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h new file mode 100644 index 0000000000..f5067caf4b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: ExperimentalTracerConfig +class ExperimentalTracerConfigConfiguration +{ +public: + bool disabled{false}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h new file mode 100644 index 0000000000..1ffc2c608b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_matcher_and_config_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: ExperimentalTracerConfigurator +class ExperimentalTracerConfiguratorConfiguration +{ +public: + ExperimentalTracerConfigConfiguration default_config; + std::vector tracers; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_matcher_and_config_configuration.h b/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_matcher_and_config_configuration.h new file mode 100644 index 0000000000..09fa5d88c8 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/experimental_tracer_matcher_and_config_configuration.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: ExperimentalTracerMatcherAndConfig +class ExperimentalTracerMatcherAndConfigConfiguration +{ +public: + std::string name; + ExperimentalTracerConfigConfiguration config; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h index 8debcaac49..47f4f37ad2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h" #include "opentelemetry/sdk/configuration/log_record_limits_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/version.h" @@ -23,7 +24,7 @@ class LoggerProviderConfiguration public: std::vector> processors; std::unique_ptr limits; - // FIXME: logger_configurator + std::unique_ptr logger_configurator; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h index 3ade70f7fc..c055beece2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -7,6 +7,7 @@ #include #include "opentelemetry/sdk/configuration/exemplar_filter.h" +#include "opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/version.h" @@ -25,7 +26,7 @@ class MeterProviderConfiguration std::vector> readers; std::vector> views; ExemplarFilter exemplar_filter = ExemplarFilter::trace_based; - // FIXME: meter_configurator + std::unique_ptr meter_configurator; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h b/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h index 5ff817f8f4..5148a4a97d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h @@ -17,6 +17,9 @@ #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" @@ -44,14 +47,18 @@ #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/string_attribute_value_configuration.h" +#include "opentelemetry/sdk/instrumentationscope/scope_configurator.h" #include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/sdk/logs/logger_config.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h" +#include "opentelemetry/sdk/metrics/meter_config.h" #include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/sdk/trace/tracer_config.h" #include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" @@ -125,6 +132,11 @@ class SdkBuilder const std::unique_ptr &model) const; + std::unique_ptr> + CreateTracerConfigurator( + const std::unique_ptr &model) const; + std::unique_ptr CreateTracerProvider( const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const; @@ -204,6 +216,11 @@ class SdkBuilder opentelemetry::sdk::metrics::ViewRegistry *view_registry, const std::unique_ptr &model) const; + std::unique_ptr> + CreateMeterConfigurator( + const std::unique_ptr &model) const; + std::unique_ptr CreateMeterProvider( const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const; @@ -242,6 +259,11 @@ class SdkBuilder const std::unique_ptr &model) const; + std::unique_ptr> + CreateLoggerConfigurator( + const std::unique_ptr &model) const; + std::unique_ptr CreateLoggerProvider( const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const; diff --git a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h index 9ef3d75b67..2b0297b2e0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/span_limits_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" @@ -25,7 +26,7 @@ class TracerProviderConfiguration std::vector> processors; std::unique_ptr limits; std::unique_ptr sampler; - // FIXME: tracer_configurator + std::unique_ptr tracer_configurator; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 702a093275..15fecd7d61 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -39,6 +39,15 @@ #include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/exemplar_filter.h" +#include "opentelemetry/sdk/configuration/experimental_logger_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_matcher_and_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_matcher_and_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_matcher_and_config_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" @@ -600,6 +609,50 @@ ConfigurationParser::ParseLogRecordLimitsConfiguration( return model; } +ExperimentalLoggerConfigConfiguration +ConfigurationParser::ParseExperimentalLoggerConfigConfiguration( + const std::unique_ptr &node) const +{ + ExperimentalLoggerConfigConfiguration model; + model.disabled = node->GetBoolean("disabled", false); + return model; +} + +ExperimentalLoggerMatcherAndConfigConfiguration +ConfigurationParser::ParseExperimentalLoggerMatcherAndConfigConfiguration( + const std::unique_ptr &node) const +{ + ExperimentalLoggerMatcherAndConfigConfiguration model; + model.name = node->GetRequiredString("name"); + + auto child = node->GetRequiredChildNode("config"); + model.config = ParseExperimentalLoggerConfigConfiguration(child); + + return model; +} + +std::unique_ptr +ConfigurationParser::ParseExperimentalLoggerConfiguratorConfiguration( + const std::unique_ptr &node) const +{ + auto model = std::make_unique(); + + auto child = node->GetRequiredChildNode("default_config"); + model->default_config = ParseExperimentalLoggerConfigConfiguration(child); + + child = node->GetChildNode("loggers"); + if (child) + { + for (auto it = child->begin(); it != child->end(); ++it) + { + std::unique_ptr element(*it); + model->loggers.push_back(ParseExperimentalLoggerMatcherAndConfigConfiguration(element)); + } + } + + return model; +} + std::unique_ptr ConfigurationParser::ParseLoggerProviderConfiguration( const std::unique_ptr &node) const { @@ -626,6 +679,12 @@ std::unique_ptr ConfigurationParser::ParseLoggerPro model->limits = ParseLogRecordLimitsConfiguration(child); } + child = node->GetChildNode("logger_configurator/development"); + if (child) + { + model->logger_configurator = ParseExperimentalLoggerConfiguratorConfiguration(child); + } + return model; } @@ -1384,6 +1443,49 @@ std::unique_ptr ConfigurationParser::ParseViewConfiguration( return model; } +ExperimentalMeterConfigConfiguration ConfigurationParser::ParseExperimentalMeterConfigConfiguration( + const std::unique_ptr &node) const +{ + ExperimentalMeterConfigConfiguration model; + model.disabled = node->GetBoolean("disabled", false); + return model; +} + +ExperimentalMeterMatcherAndConfigConfiguration +ConfigurationParser::ParseExperimentalMeterMatcherAndConfigConfiguration( + const std::unique_ptr &node) const +{ + ExperimentalMeterMatcherAndConfigConfiguration model; + model.name = node->GetRequiredString("name"); + + auto child = node->GetRequiredChildNode("config"); + model.config = ParseExperimentalMeterConfigConfiguration(child); + + return model; +} + +std::unique_ptr +ConfigurationParser::ParseExperimentalMeterConfiguratorConfiguration( + const std::unique_ptr &node) const +{ + auto model = std::make_unique(); + + auto child = node->GetRequiredChildNode("default_config"); + model->default_config = ParseExperimentalMeterConfigConfiguration(child); + + child = node->GetChildNode("meters"); + if (child) + { + for (auto it = child->begin(); it != child->end(); ++it) + { + std::unique_ptr element(*it); + model->meters.push_back(ParseExperimentalMeterMatcherAndConfigConfiguration(element)); + } + } + + return model; +} + std::unique_ptr ConfigurationParser::ParseMeterProviderConfiguration( const std::unique_ptr &node) const { @@ -1416,7 +1518,11 @@ std::unique_ptr ConfigurationParser::ParseMeterProvi std::string exemplar_filter = node->GetString("exemplar_filter", "trace_based"); model->exemplar_filter = ParseExemplarFilter(node, exemplar_filter); - // FIXME: meter_configurator/development + child = node->GetChildNode("meter_configurator/development"); + if (child) + { + model->meter_configurator = ParseExperimentalMeterConfiguratorConfiguration(child); + } return model; } @@ -1883,6 +1989,50 @@ std::unique_ptr ConfigurationParser::ParseSpanProces return model; } +ExperimentalTracerConfigConfiguration +ConfigurationParser::ParseExperimentalTracerConfigConfiguration( + const std::unique_ptr &node) const +{ + ExperimentalTracerConfigConfiguration model; + model.disabled = node->GetBoolean("disabled", false); + return model; +} + +ExperimentalTracerMatcherAndConfigConfiguration +ConfigurationParser::ParseExperimentalTracerMatcherAndConfigConfiguration( + const std::unique_ptr &node) const +{ + ExperimentalTracerMatcherAndConfigConfiguration model; + model.name = node->GetRequiredString("name"); + + auto child = node->GetRequiredChildNode("config"); + model.config = ParseExperimentalTracerConfigConfiguration(child); + + return model; +} + +std::unique_ptr +ConfigurationParser::ParseExperimentalTracerConfiguratorConfiguration( + const std::unique_ptr &node) const +{ + auto model = std::make_unique(); + + auto child = node->GetRequiredChildNode("default_config"); + model->default_config = ParseExperimentalTracerConfigConfiguration(child); + + child = node->GetChildNode("tracers"); + if (child) + { + for (auto it = child->begin(); it != child->end(); ++it) + { + std::unique_ptr element(*it); + model->tracers.push_back(ParseExperimentalTracerMatcherAndConfigConfiguration(element)); + } + } + + return model; +} + std::unique_ptr ConfigurationParser::ParseTracerProviderConfiguration( const std::unique_ptr &node) const { @@ -1915,6 +2065,12 @@ std::unique_ptr ConfigurationParser::ParseTracerPro model->sampler = ParseSamplerConfiguration(child, 0); } + child = node->GetChildNode("tracer_configurator/development"); + if (child) + { + model->tracer_configurator = ParseExperimentalTracerConfiguratorConfiguration(child); + } + return model; } diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 17751ba7df..223d4b9359 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -40,6 +41,15 @@ #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_matcher_and_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_matcher_and_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_matcher_and_config_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" @@ -117,9 +127,12 @@ #include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/sdk/configuration/view_selector_configuration.h" #include "opentelemetry/sdk/configuration/view_stream_configuration.h" +#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +#include "opentelemetry/sdk/instrumentationscope/scope_configurator.h" #include "opentelemetry/sdk/logs/batch_log_record_processor_factory.h" #include "opentelemetry/sdk/logs/batch_log_record_processor_options.h" #include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/sdk/logs/logger_config.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/logs/logger_provider_factory.h" #include "opentelemetry/sdk/logs/processor.h" @@ -129,10 +142,12 @@ #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h" #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_options.h" #include "opentelemetry/sdk/metrics/instruments.h" +#include "opentelemetry/sdk/metrics/meter_config.h" #include "opentelemetry/sdk/metrics/meter_context.h" #include "opentelemetry/sdk/metrics/meter_context_factory.h" #include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/metrics/meter_provider_factory.h" +#include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/metrics/metric_reader.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -145,13 +160,16 @@ #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_options.h" #include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/id_generator.h" #include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/sdk/trace/random_id_generator_factory.h" #include "opentelemetry/sdk/trace/sampler.h" #include "opentelemetry/sdk/trace/samplers/always_off_factory.h" #include "opentelemetry/sdk/trace/samplers/always_on_factory.h" #include "opentelemetry/sdk/trace/samplers/parent_factory.h" #include "opentelemetry/sdk/trace/samplers/trace_id_ratio_factory.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" +#include "opentelemetry/sdk/trace/tracer_config.h" #include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/version.h" @@ -166,6 +184,46 @@ namespace sdk namespace configuration { +static bool WildcardMatch(const std::string &pattern, const std::string &text) +{ + size_t p = 0; + size_t t = 0; + size_t star_p = std::string::npos; + size_t star_t = 0; + + while (t < text.size()) + { + if (p < pattern.size() && (pattern[p] == '?' || pattern[p] == text[t])) + { + ++p; + ++t; + } + else if (p < pattern.size() && pattern[p] == '*') + { + star_p = p; + star_t = t; + ++p; + } + else if (star_p != std::string::npos) + { + p = star_p + 1; + ++star_t; + t = star_t; + } + else + { + return false; + } + } + + while (p < pattern.size() && pattern[p] == '*') + { + ++p; + } + + return p == pattern.size(); +} + class ResourceAttributeValueSetter : public opentelemetry::sdk::configuration::AttributeValueConfigurationVisitor { @@ -984,6 +1042,35 @@ std::unique_ptr SdkBuilder::CreateSpan return sdk; } +std::unique_ptr> +SdkBuilder::CreateTracerConfigurator( + const std::unique_ptr &model) const +{ + using opentelemetry::sdk::instrumentationscope::InstrumentationScope; + using opentelemetry::sdk::instrumentationscope::ScopeConfigurator; + using opentelemetry::sdk::trace::TracerConfig; + + TracerConfig default_config = + model->default_config.disabled ? TracerConfig::Disabled() : TracerConfig::Enabled(); + + auto builder = ScopeConfigurator::Builder(default_config); + + for (const auto &entry : model->tracers) + { + TracerConfig entry_config = + entry.config.disabled ? TracerConfig::Disabled() : TracerConfig::Enabled(); + std::string pattern = entry.name; + builder.AddCondition( + [pattern](const InstrumentationScope &scope) { + return WildcardMatch(pattern, scope.GetName()); + }, + entry_config); + } + + return std::make_unique>(builder.Build()); +} + std::unique_ptr SdkBuilder::CreateTracerProvider( const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const @@ -1009,8 +1096,19 @@ std::unique_ptr SdkBuilder::CreateTra // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3303 // FIXME-SDK: use limits, id_generator, ... - sdk = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(sdk_processors), - resource, std::move(sampler)); + if (model->tracer_configurator) + { + auto tracer_configurator = CreateTracerConfigurator(model->tracer_configurator); + auto id_generator = opentelemetry::sdk::trace::RandomIdGeneratorFactory::Create(); + sdk = opentelemetry::sdk::trace::TracerProviderFactory::Create( + std::move(sdk_processors), resource, std::move(sampler), std::move(id_generator), + std::move(tracer_configurator)); + } + else + { + sdk = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(sdk_processors), + resource, std::move(sampler)); + } return sdk; } @@ -1509,6 +1607,35 @@ void SdkBuilder::AddView( std::move(sdk_view)); } +std::unique_ptr> +SdkBuilder::CreateMeterConfigurator( + const std::unique_ptr &model) const +{ + using opentelemetry::sdk::instrumentationscope::InstrumentationScope; + using opentelemetry::sdk::instrumentationscope::ScopeConfigurator; + using opentelemetry::sdk::metrics::MeterConfig; + + MeterConfig default_config = + model->default_config.disabled ? MeterConfig::Disabled() : MeterConfig::Enabled(); + + auto builder = ScopeConfigurator::Builder(default_config); + + for (const auto &entry : model->meters) + { + MeterConfig entry_config = + entry.config.disabled ? MeterConfig::Disabled() : MeterConfig::Enabled(); + std::string pattern = entry.name; + builder.AddCondition( + [pattern](const InstrumentationScope &scope) { + return WildcardMatch(pattern, scope.GetName()); + }, + entry_config); + } + + return std::make_unique>(builder.Build()); +} + std::unique_ptr SdkBuilder::CreateMeterProvider( const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const @@ -1522,8 +1649,18 @@ std::unique_ptr SdkBuilder::CreateMe AddView(view_registry.get(), view_configuration); } - auto meter_context = - opentelemetry::sdk::metrics::MeterContextFactory::Create(std::move(view_registry), resource); + std::unique_ptr meter_context; + if (model->meter_configurator) + { + auto meter_configurator = CreateMeterConfigurator(model->meter_configurator); + meter_context = opentelemetry::sdk::metrics::MeterContextFactory::Create( + std::move(view_registry), resource, std::move(meter_configurator)); + } + else + { + meter_context = opentelemetry::sdk::metrics::MeterContextFactory::Create( + std::move(view_registry), resource); + } for (const auto &reader_configuration : model->readers) { @@ -1720,6 +1857,35 @@ std::unique_ptr SdkBuilder::Create return sdk; } +std::unique_ptr> +SdkBuilder::CreateLoggerConfigurator( + const std::unique_ptr &model) const +{ + using opentelemetry::sdk::instrumentationscope::InstrumentationScope; + using opentelemetry::sdk::instrumentationscope::ScopeConfigurator; + using opentelemetry::sdk::logs::LoggerConfig; + + LoggerConfig default_config = + model->default_config.disabled ? LoggerConfig::Disabled() : LoggerConfig::Enabled(); + + auto builder = ScopeConfigurator::Builder(default_config); + + for (const auto &entry : model->loggers) + { + LoggerConfig entry_config = + entry.config.disabled ? LoggerConfig::Disabled() : LoggerConfig::Enabled(); + std::string pattern = entry.name; + builder.AddCondition( + [pattern](const InstrumentationScope &scope) { + return WildcardMatch(pattern, scope.GetName()); + }, + entry_config); + } + + return std::make_unique>(builder.Build()); +} + std::unique_ptr SdkBuilder::CreateLoggerProvider( const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const @@ -1735,8 +1901,17 @@ std::unique_ptr SdkBuilder::CreateLogg // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3303 // FIXME-SDK: use limits - sdk = - opentelemetry::sdk::logs::LoggerProviderFactory::Create(std::move(sdk_processors), resource); + if (model->logger_configurator) + { + auto logger_configurator = CreateLoggerConfigurator(model->logger_configurator); + sdk = opentelemetry::sdk::logs::LoggerProviderFactory::Create( + std::move(sdk_processors), resource, std::move(logger_configurator)); + } + else + { + sdk = opentelemetry::sdk::logs::LoggerProviderFactory::Create(std::move(sdk_processors), + resource); + } return sdk; } diff --git a/sdk/test/configuration/yaml_logs_test.cc b/sdk/test/configuration/yaml_logs_test.cc index e3e93ee9dd..667dab0e24 100644 --- a/sdk/test/configuration/yaml_logs_test.cc +++ b/sdk/test/configuration/yaml_logs_test.cc @@ -9,6 +9,9 @@ #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_logger_matcher_and_config_configuration.h" #include "opentelemetry/sdk/configuration/grpc_tls_configuration.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/http_tls_configuration.h" @@ -482,3 +485,109 @@ file_format: "1.0-logs" ASSERT_EQ(config->logger_provider->limits->attribute_value_length_limit, 1111); ASSERT_EQ(config->logger_provider->limits->attribute_count_limit, 2222); } + +TEST(YamlLogs, no_logger_configurator) +{ + std::string yaml = R"( +file_format: "1.0-logs" +logger_provider: + processors: + - simple: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->logger_configurator, nullptr); +} + +TEST(YamlLogs, logger_configurator_default_only) +{ + std::string yaml = R"( +file_format: "1.0-logs" +logger_provider: + processors: + - simple: + exporter: + console: + logger_configurator/development: + default_config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->logger_configurator, nullptr); + ASSERT_EQ(config->logger_provider->logger_configurator->default_config.disabled, true); + ASSERT_EQ(config->logger_provider->logger_configurator->loggers.size(), 0); +} + +TEST(YamlLogs, logger_configurator_with_loggers) +{ + std::string yaml = R"( +file_format: "1.0-logs" +logger_provider: + processors: + - simple: + exporter: + console: + logger_configurator/development: + default_config: + disabled: true + loggers: + - name: io.opentelemetry.contrib.* + config: + disabled: false + - name: my.exact.logger + config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->logger_configurator, nullptr); + + auto &configurator = config->logger_provider->logger_configurator; + ASSERT_EQ(configurator->default_config.disabled, true); + ASSERT_EQ(configurator->loggers.size(), 2); + + ASSERT_EQ(configurator->loggers[0].name, "io.opentelemetry.contrib.*"); + ASSERT_EQ(configurator->loggers[0].config.disabled, false); + + ASSERT_EQ(configurator->loggers[1].name, "my.exact.logger"); + ASSERT_EQ(configurator->loggers[1].config.disabled, true); +} + +TEST(YamlLogs, logger_configurator_default_enabled) +{ + std::string yaml = R"( +file_format: "1.0-logs" +logger_provider: + processors: + - simple: + exporter: + console: + logger_configurator/development: + default_config: + disabled: false + loggers: + - name: noisy.library + config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->logger_configurator, nullptr); + + auto &configurator = config->logger_provider->logger_configurator; + ASSERT_EQ(configurator->default_config.disabled, false); + ASSERT_EQ(configurator->loggers.size(), 1); + ASSERT_EQ(configurator->loggers[0].name, "noisy.library"); + ASSERT_EQ(configurator->loggers[0].config.disabled, true); +} diff --git a/sdk/test/configuration/yaml_metrics_test.cc b/sdk/test/configuration/yaml_metrics_test.cc index 5dff4e674c..76657f38a5 100644 --- a/sdk/test/configuration/yaml_metrics_test.cc +++ b/sdk/test/configuration/yaml_metrics_test.cc @@ -12,6 +12,9 @@ #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/exemplar_filter.h" +#include "opentelemetry/sdk/configuration/experimental_meter_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_meter_matcher_and_config_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/grpc_tls_configuration.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" @@ -1042,3 +1045,109 @@ file_format: "1.0-metrics" ASSERT_EQ(view->stream->attribute_keys->excluded->string_array[0], "foo.ex"); ASSERT_EQ(view->stream->attribute_keys->excluded->string_array[1], "bar.ex"); } + +TEST(YamlMetrics, no_meter_configurator) +{ + std::string yaml = R"( +file_format: "1.0-metrics" +meter_provider: + readers: + - periodic: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->meter_configurator, nullptr); +} + +TEST(YamlMetrics, meter_configurator_default_only) +{ + std::string yaml = R"( +file_format: "1.0-metrics" +meter_provider: + readers: + - periodic: + exporter: + console: + meter_configurator/development: + default_config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_NE(config->meter_provider->meter_configurator, nullptr); + ASSERT_EQ(config->meter_provider->meter_configurator->default_config.disabled, true); + ASSERT_EQ(config->meter_provider->meter_configurator->meters.size(), 0); +} + +TEST(YamlMetrics, meter_configurator_with_meters) +{ + std::string yaml = R"( +file_format: "1.0-metrics" +meter_provider: + readers: + - periodic: + exporter: + console: + meter_configurator/development: + default_config: + disabled: true + meters: + - name: io.opentelemetry.contrib.* + config: + disabled: false + - name: my.exact.meter + config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_NE(config->meter_provider->meter_configurator, nullptr); + + auto &configurator = config->meter_provider->meter_configurator; + ASSERT_EQ(configurator->default_config.disabled, true); + ASSERT_EQ(configurator->meters.size(), 2); + + ASSERT_EQ(configurator->meters[0].name, "io.opentelemetry.contrib.*"); + ASSERT_EQ(configurator->meters[0].config.disabled, false); + + ASSERT_EQ(configurator->meters[1].name, "my.exact.meter"); + ASSERT_EQ(configurator->meters[1].config.disabled, true); +} + +TEST(YamlMetrics, meter_configurator_default_enabled) +{ + std::string yaml = R"( +file_format: "1.0-metrics" +meter_provider: + readers: + - periodic: + exporter: + console: + meter_configurator/development: + default_config: + disabled: false + meters: + - name: noisy.library + config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_NE(config->meter_provider->meter_configurator, nullptr); + + auto &configurator = config->meter_provider->meter_configurator; + ASSERT_EQ(configurator->default_config.disabled, false); + ASSERT_EQ(configurator->meters.size(), 1); + ASSERT_EQ(configurator->meters[0].name, "noisy.library"); + ASSERT_EQ(configurator->meters[0].config.disabled, true); +} diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc index daa3c40d4b..3f147a5ae7 100644 --- a/sdk/test/configuration/yaml_trace_test.cc +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -9,6 +9,9 @@ #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_config_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_configurator_configuration.h" +#include "opentelemetry/sdk/configuration/experimental_tracer_matcher_and_config_configuration.h" #include "opentelemetry/sdk/configuration/grpc_tls_configuration.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/http_tls_configuration.h" @@ -731,3 +734,109 @@ file_format: "1.0-trace" sampler); ASSERT_EQ(ratio->ratio, 3.14); } + +TEST(YamlTrace, no_tracer_configurator) +{ + std::string yaml = R"( +file_format: "1.0-trace" +tracer_provider: + processors: + - simple: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->tracer_configurator, nullptr); +} + +TEST(YamlTrace, tracer_configurator_default_only) +{ + std::string yaml = R"( +file_format: "1.0-trace" +tracer_provider: + processors: + - simple: + exporter: + console: + tracer_configurator/development: + default_config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->tracer_configurator, nullptr); + ASSERT_EQ(config->tracer_provider->tracer_configurator->default_config.disabled, true); + ASSERT_EQ(config->tracer_provider->tracer_configurator->tracers.size(), 0); +} + +TEST(YamlTrace, tracer_configurator_with_tracers) +{ + std::string yaml = R"( +file_format: "1.0-trace" +tracer_provider: + processors: + - simple: + exporter: + console: + tracer_configurator/development: + default_config: + disabled: true + tracers: + - name: io.opentelemetry.contrib.* + config: + disabled: false + - name: my.exact.tracer + config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->tracer_configurator, nullptr); + + auto &configurator = config->tracer_provider->tracer_configurator; + ASSERT_EQ(configurator->default_config.disabled, true); + ASSERT_EQ(configurator->tracers.size(), 2); + + ASSERT_EQ(configurator->tracers[0].name, "io.opentelemetry.contrib.*"); + ASSERT_EQ(configurator->tracers[0].config.disabled, false); + + ASSERT_EQ(configurator->tracers[1].name, "my.exact.tracer"); + ASSERT_EQ(configurator->tracers[1].config.disabled, true); +} + +TEST(YamlTrace, tracer_configurator_default_enabled) +{ + std::string yaml = R"( +file_format: "1.0-trace" +tracer_provider: + processors: + - simple: + exporter: + console: + tracer_configurator/development: + default_config: + disabled: false + tracers: + - name: noisy.library + config: + disabled: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->tracer_configurator, nullptr); + + auto &configurator = config->tracer_provider->tracer_configurator; + ASSERT_EQ(configurator->default_config.disabled, false); + ASSERT_EQ(configurator->tracers.size(), 1); + ASSERT_EQ(configurator->tracers[0].name, "noisy.library"); + ASSERT_EQ(configurator->tracers[0].config.disabled, true); +}