From 636b85c4c41adc323ed6cf47c08b6e1286d44b46 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 23 Jan 2024 21:24:58 +0100 Subject: [PATCH 001/166] POC --- CMakeLists.txt | 9 + examples/CMakeLists.txt | 4 + examples/yaml/CMakeLists.txt | 19 + examples/yaml/main.cc | 33 ++ .../attribute_limit_configuration.h | 24 ++ .../batch_span_processor_configuration.h | 21 + .../sdk/configuration/configuration.h | 38 ++ .../sdk/configuration/configuration_factory.h | 26 ++ .../logger_provider_configuration.h | 20 + .../meter_provider_configuration.h | 20 + .../configuration/propagator_configuration.h | 20 + .../configuration/resource_configuration.h | 20 + .../sdk/configuration/sampler_configuration.h | 20 + .../simple_span_processor_configuration.h | 21 + .../configuration/span_limits_configuration.h | 20 + .../span_processor_configuration.h | 20 + .../tracer_provider_configuration.h | 30 ++ sdk/src/CMakeLists.txt | 1 + sdk/src/configuration/CMakeLists.txt | 31 ++ .../configuration/configuration_factory.cc | 378 ++++++++++++++++++ 20 files changed, 775 insertions(+) create mode 100644 examples/yaml/CMakeLists.txt create mode 100644 examples/yaml/main.cc create mode 100644 sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/configuration_factory.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/resource_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h create mode 100644 sdk/src/configuration/CMakeLists.txt create mode 100644 sdk/src/configuration/configuration_factory.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 6fa071f353..827e73b9b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,9 @@ endif() option(WITH_ABI_VERSION_1 "ABI version 1" ON) option(WITH_ABI_VERSION_2 "EXPERIMENTAL: ABI version 2 preview" OFF) +option(WITH_CONFIGURATION "EXPERIMENTAL: configuration model" OFF) +option(WITH_CONFIGURATION_YAML "EXPERIMENTAL: YAML configuration file" OFF) + file(READ "${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h" OPENTELEMETRY_CPP_HEADER_VERSION_H) @@ -284,6 +287,10 @@ option(WITH_METRICS_EXEMPLAR_PREVIEW # Verify options dependencies # +if(WITH_CONFIGURATION_YAML AND NOT WITH_CONFIGURATION) + message(FATAL_ERROR "CONFIGURATION_YAML=ON requires WITH_CONFIGURATION=ON") +endif() + if(WITH_EXAMPLES_HTTP AND NOT WITH_EXAMPLES) message(FATAL_ERROR "WITH_EXAMPLES_HTTP=ON requires WITH_EXAMPLES=ON") endif() @@ -466,6 +473,8 @@ if((NOT WITH_API_ONLY) AND USE_NLOHMANN_JSON) include(cmake/nlohmann-json.cmake) endif() +find_package(yaml-cpp REQUIRED) + if(OTELCPP_MAINTAINER_MODE) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") message("Building with gcc in maintainer mode.") diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6a237af982..2321eb2b7e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -29,3 +29,7 @@ add_subdirectory(multi_processor) if(WITH_EXAMPLES_HTTP) add_subdirectory(http) endif() + +if(WITH_CONFIGURATION_YAML) + add_subdirectory(yaml) +endif() diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt new file mode 100644 index 0000000000..d204f24374 --- /dev/null +++ b/examples/yaml/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +if(DEFINED OPENTELEMETRY_BUILD_DLL) + add_definitions(-DOPENTELEMETRY_BUILD_IMPORT_DLL) +endif() + +include_directories(${CMAKE_SOURCE_DIR}/sdk/include) + +add_executable(example_yaml main.cc) +target_link_libraries(example_yaml ${CMAKE_THREAD_LIBS_INIT} + common_foo_library) + +if(DEFINED OPENTELEMETRY_BUILD_DLL) + target_link_libraries(example_yaml opentelemetry_cpp) +else() + target_link_libraries(example_yaml opentelemetry_configuration +opentelemetry_common) +endif() diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc new file mode 100644 index 0000000000..183a4272f9 --- /dev/null +++ b/examples/yaml/main.cc @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/configuration/configuration_factory.h" + +#ifdef BAZEL_BUILD +# include "examples/common/foo_library/foo_library.h" +#else +# include "foo_library/foo_library.h" +#endif + +namespace +{ +void InitTracer() +{ + std::string config_file = "config.yaml"; + auto model = opentelemetry::sdk::configuration::ConfigurationFactory::Parse(config_file); +} + +void CleanupTracer() +{ +} +} // namespace + +int main() +{ + // Removing this line will leave the default noop TracerProvider in place. + InitTracer(); + + foo_library(); + + CleanupTracer(); +} diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h new file mode 100644 index 0000000000..71ff39dc56 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class AttributeLimitConfiguration { +public: + size_t attribute_value_length_limit; + size_t attribute_count_limit; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h new file mode 100644 index 0000000000..e040a37011 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h new file mode 100644 index 0000000000..400aa5094a --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" +#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" +#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/resource_configuration.h" +#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class Configuration +{ +public: + std::string file_format; + bool disabled{false}; + + std::unique_ptr attribute_limits; + std::unique_ptr logger_provider; + std::unique_ptr meter_provider; + std::unique_ptr propagator; + std::unique_ptr tracer_provider; + std::unique_ptr resource; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h new file mode 100644 index 0000000000..e833f49780 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ConfigurationFactory +{ +public: + static std::unique_ptr Parse(std::string file_path); +}; + +} // 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 new file mode 100644 index 0000000000..ac885ff89e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class LoggerProviderConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h new file mode 100644 index 0000000000..9c7297553c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class MeterProviderConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h new file mode 100644 index 0000000000..a7acea03c2 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class PropagatorConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h new file mode 100644 index 0000000000..ac73d85932 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ResourceConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h new file mode 100644 index 0000000000..0952ca0269 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SamplerConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h new file mode 100644 index 0000000000..031b686164 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h new file mode 100644 index 0000000000..58f269baff --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SpanLimitsConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h new file mode 100644 index 0000000000..e68f4b8079 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SpanProcessorConfiguration { +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h new file mode 100644 index 0000000000..ea7ff23bb0 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/version.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_limits_configuration.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class TracerProviderConfiguration { +public: + std::vector> processors; + std::unique_ptr limits; + std::unique_ptr sampler; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/CMakeLists.txt b/sdk/src/CMakeLists.txt index 377d305627..e562fc0dc9 100644 --- a/sdk/src/CMakeLists.txt +++ b/sdk/src/CMakeLists.txt @@ -7,3 +7,4 @@ add_subdirectory(metrics) add_subdirectory(logs) add_subdirectory(version) add_subdirectory(resource) +add_subdirectory(configuration) diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt new file mode 100644 index 0000000000..8f3fcf32a2 --- /dev/null +++ b/sdk/src/configuration/CMakeLists.txt @@ -0,0 +1,31 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +add_library( + opentelemetry_configuration + configuration_factory.cc) + +set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) +set_target_version(opentelemetry_configuration) + +target_include_directories( + opentelemetry_configuration + PUBLIC "$") + +target_link_libraries( + opentelemetry_configuration + PUBLIC yaml-cpp::yaml-cpp) + +if(OPENTELEMETRY_INSTALL) + install( + TARGETS opentelemetry_configuration + EXPORT "${PROJECT_NAME}-target" + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + opentelemetry_add_pkgconfig( + configuration "OpenTelemetry SDK - Configuration" + "Components for exporting traces in the OpenTelemetry SDK." + "opentelemetry_configuration") +endif() diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc new file mode 100644 index 0000000000..328e3c872a --- /dev/null +++ b/sdk/src/configuration/configuration_factory.cc @@ -0,0 +1,378 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +static void DebugNode(std::string_view name, const YAML::Node &yaml) +{ + if (yaml) + { + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", IsDefined: " << yaml.IsDefined()); + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Size: " << yaml.size()); + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Type: " << yaml.Type()); + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Scalar: " << yaml.Scalar()); + } + else + { + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", missing node."); + } +} + +static YAML::Node GetChild(std::string_view name, const YAML::Node &yaml) +{ + YAML::Node child = yaml[name]; + // DebugNode(name, child); + return child; +} + +static YAML::Node GetRequiredChild(std::string_view name, const YAML::Node &yaml) +{ + YAML::Node child = yaml[name]; + // DebugNode(name, child); + if (!child) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + // FIXME: throw + } + return child; +} + +static bool GetRequiredBoolean(std::string_view name, const YAML::Node &yaml) +{ + YAML::Node child = GetRequiredChild(name, yaml); + if (!child.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: boolean node: " << name); + // FIXME: throw + } + bool value = child.as(); + return value; +} + +static bool GetBoolean(std::string_view name, const YAML::Node &yaml, bool default_value) +{ + YAML::Node child = GetChild(name, yaml); + bool value = default_value; + if (child) + { + if (!child.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: boolean node: " << name); + // FIXME: throw + } + bool value = child.as(); + } + return value; +} + +static size_t GetRequiredInteger(std::string_view name, const YAML::Node &yaml) +{ + YAML::Node child = GetRequiredChild(name, yaml); + if (!child.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); + // FIXME: throw + } + size_t value = child.as(); + return value; +} + +static size_t GetInteger(std::string_view name, const YAML::Node &yaml, size_t default_value) +{ + YAML::Node child = GetChild(name, yaml); + size_t value = default_value; + if (child) + { + if (!child.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); + // FIXME: throw + } + size_t value = child.as(); + } + return value; +} + +static std::string GetRequiredString(std::string_view name, const YAML::Node &yaml) +{ + YAML::Node child = GetRequiredChild(name, yaml); + if (!child.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); + // FIXME: throw + } + std::string value = child.as(); + return value; +} + +static std::string GetString(std::string_view name, + const YAML::Node &yaml, + std::string default_value) +{ + YAML::Node child = GetChild(name, yaml); + std::string value = default_value; + if (child) + { + if (!child.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); + // FIXME: throw + } + std::string value = child.as(); + } + return value; +} + +static std::unique_ptr ParseYamlAttributeLimitConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new AttributeLimitConfiguration); + + model->attribute_value_length_limit = GetInteger("attribute_value_length_limit", yaml, 4096); + model->attribute_count_limit = GetInteger("attribute_count_limit", yaml, 128); + + return model; +} + +static std::unique_ptr ParseYamlLoggerProviderConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new LoggerProviderConfiguration); + + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlMeterProviderConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new MeterProviderConfiguration); + + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlPropagatorConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new PropagatorConfiguration); + + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlSpanProcessorConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new SpanProcessorConfiguration); + + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlSpanLimitsConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new SpanLimitsConfiguration); + + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlSamplerConfiguration(const YAML::Node &yaml) +{ + std::unique_ptr model(new SamplerConfiguration); + + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlTracerProviderConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new TracerProviderConfiguration); + + { + YAML::Node n = GetChild("processors", yaml); + + if (n) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + // model->processors = n.as(); + } + else + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node processors"); + return nullptr; + } + } + + { + YAML::Node n = GetChild("limits", yaml); + + if (n) + { + model->limits = ParseYamlSpanLimitsConfiguration(n); + } + else + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node limits"); + return nullptr; + } + } + + { + YAML::Node n = GetChild("sampler", yaml); + + if (n) + { + model->sampler = ParseYamlSamplerConfiguration(n); + } + else + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node sampler"); + return nullptr; + } + } + + return model; +} + +static std::unique_ptr ParseYamlResourceConfiguration(const YAML::Node &yaml) +{ + std::unique_ptr model(new ResourceConfiguration); + + OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlConfiguration(const YAML::Node &yaml) +{ + std::unique_ptr model(new Configuration); + + model->file_format = GetRequiredString("file_format", yaml); + model->disabled = GetBoolean("disabled", yaml, false); + + { + YAML::Node n = GetChild("attribute_limits", yaml); + + if (n) + { + model->attribute_limits = ParseYamlAttributeLimitConfiguration(n); + } + } + + { + YAML::Node n = GetChild("logger_provider", yaml); + + if (n) + { + model->logger_provider = ParseYamlLoggerProviderConfiguration(n); + } + } + + { + YAML::Node n = GetChild("meter_provider", yaml); + + if (n) + { + model->meter_provider = ParseYamlMeterProviderConfiguration(n); + } + } + + { + YAML::Node n = GetChild("propagator", yaml); + + if (n) + { + model->propagator = ParseYamlPropagatorConfiguration(n); + } + } + + { + YAML::Node n = GetChild("tracer_provider", yaml); + + if (n) + { + model->tracer_provider = ParseYamlTracerProviderConfiguration(n); + } + } + + { + YAML::Node n = GetChild("resource", yaml); + + if (n) + { + model->resource = ParseYamlResourceConfiguration(n); + } + } + + return model; +} + +std::unique_ptr ConfigurationFactory::Parse(std::string file_path) +{ + YAML::Node yaml; + std::unique_ptr config; + + try + { + yaml = YAML::LoadFile(file_path); + } + catch (YAML::BadFile e) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">, " << e.what()); + return config; + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); + return config; + } + + DebugNode("root", yaml); + + if (yaml.Type() == YAML::NodeType::Undefined) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); + return config; + } + + try + { + config = ParseYamlConfiguration(yaml); + } + catch (YAML::Exception e) + { + OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml file <" << file_path << ">, " << e.what()); + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml file <" << file_path << ">"); + } + + return config; +} + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From b90ce1c4bc02904bd003a6b74807484792f6598c Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 24 Jan 2024 01:29:38 +0100 Subject: [PATCH 002/166] POC --- .../attribute_limit_configuration.h | 3 +- .../batch_span_processor_configuration.h | 11 +- .../sdk/configuration/headers_configuration.h | 21 +++ .../logger_provider_configuration.h | 3 +- .../meter_provider_configuration.h | 3 +- .../otlp_span_exporter_configuration.h | 32 ++++ .../configuration/propagator_configuration.h | 3 +- .../configuration/resource_configuration.h | 3 +- .../sdk/configuration/sampler_configuration.h | 3 +- .../simple_span_processor_configuration.h | 5 +- .../span_exporter_configuration.h | 21 +++ .../configuration/span_limits_configuration.h | 3 +- .../span_processor_configuration.h | 3 +- .../tracer_provider_configuration.h | 8 +- .../zipkin_span_exporter_configuration.h | 22 +++ .../configuration/configuration_factory.cc | 159 +++++++++++++++--- 16 files changed, 266 insertions(+), 37 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/headers_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h index 71ff39dc56..8f85c56215 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h @@ -13,7 +13,8 @@ namespace sdk namespace configuration { -class AttributeLimitConfiguration { +class AttributeLimitConfiguration +{ public: size_t attribute_value_length_limit; size_t attribute_count_limit; diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h index e040a37011..c64f6ab529 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -3,8 +3,9 @@ #pragma once -#include "opentelemetry/version.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -12,8 +13,14 @@ namespace sdk namespace configuration { -class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration { +class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration +{ public: + size_t schedule_delay; + size_t export_timeout; + size_t max_queue_size; + size_t max_export_batch_size; + std::unique_ptr exporter; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h new file mode 100644 index 0000000000..fc8079de71 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class HeadersConfiguration +{ +public: +}; + +} // 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 ac885ff89e..bd5bf4e8b2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class LoggerProviderConfiguration { +class LoggerProviderConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h index 9c7297553c..081e70d3ab 100644 --- a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class MeterProviderConfiguration { +class MeterProviderConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h new file mode 100644 index 0000000000..5217ae4fe5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + std::string protocol; + std::string endpoint; + std::string certificate; + std::string client_key; + std::string client_certificate; + std::unique_ptr headers; + std::string compression; + size_t timeout; + bool insecure; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h index a7acea03c2..bca00dda75 100644 --- a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class PropagatorConfiguration { +class PropagatorConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h index ac73d85932..530d583d16 100644 --- a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class ResourceConfiguration { +class ResourceConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h index 0952ca0269..36ce601899 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class SamplerConfiguration { +class SamplerConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h index 031b686164..13dac01365 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -3,8 +3,8 @@ #pragma once -#include "opentelemetry/version.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -12,7 +12,8 @@ namespace sdk namespace configuration { -class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration { +class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h new file mode 100644 index 0000000000..89e4646770 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SpanExporterConfiguration +{ +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h index 58f269baff..b7ce8fc13c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class SpanLimitsConfiguration { +class SpanLimitsConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h index e68f4b8079..7df54cf71b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class SpanProcessorConfiguration { +class SpanProcessorConfiguration +{ public: }; diff --git a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h index ea7ff23bb0..5ec3145173 100644 --- a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h @@ -6,11 +6,10 @@ #include #include -#include "opentelemetry/version.h" -#include "opentelemetry/sdk/configuration/span_processor_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" -#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -18,7 +17,8 @@ namespace sdk namespace configuration { -class TracerProviderConfiguration { +class TracerProviderConfiguration +{ public: std::vector> processors; std::unique_ptr limits; diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h new file mode 100644 index 0000000000..1395342662 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 328e3c872a..d2927e5bc8 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -5,8 +5,12 @@ #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -151,7 +155,7 @@ static std::unique_ptr ParseYamlLoggerProviderConfi { std::unique_ptr model(new LoggerProviderConfiguration); - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseYamlLoggerProviderConfiguration: FIXME"); return model; } @@ -161,7 +165,7 @@ static std::unique_ptr ParseYamlMeterProviderConfigu { std::unique_ptr model(new MeterProviderConfiguration); - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseYamlMeterProviderConfiguration: FIXME"); return model; } @@ -171,57 +175,170 @@ static std::unique_ptr ParseYamlPropagatorConfiguration { std::unique_ptr model(new PropagatorConfiguration); - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseYamlPropagatorConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlSpanProcessorConfiguration( +static std::unique_ptr ParseYamlSpanLimitsConfiguration( const YAML::Node &yaml) { - std::unique_ptr model(new SpanProcessorConfiguration); + std::unique_ptr model(new SpanLimitsConfiguration); - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseYamlSpanLimitsConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlSpanLimitsConfiguration( +static std::unique_ptr ParseYamlSamplerConfiguration(const YAML::Node &yaml) +{ + std::unique_ptr model(new SamplerConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParseYamlSamplerConfiguration: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlHeadersConfiguration(const YAML::Node &yaml) +{ + std::unique_ptr model(new HeadersConfiguration); + + OTEL_INTERNAL_LOG_ERROR("HeadersConfiguration: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlOtlpSpanExporterConfiguration( const YAML::Node &yaml) { - std::unique_ptr model(new SpanLimitsConfiguration); + std::unique_ptr model(new OtlpSpanExporterConfiguration); + + model->protocol = GetRequiredString("protocol", yaml); + model->endpoint = GetRequiredString("endpoint", yaml); + model->certificate = GetString("certificate", yaml, ""); + model->client_key = GetString("client_key", yaml, ""); + model->client_certificate = GetString("client_certificate", yaml, ""); - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + YAML::Node n = GetChild("headers", yaml); + model->headers = ParseYamlHeadersConfiguration(n); + + model->compression = GetString("compression", yaml, ""); + model->timeout = GetInteger("timeout", yaml, 10000); + model->insecure = GetBoolean("insecure", yaml, false); return model; } -static std::unique_ptr ParseYamlSamplerConfiguration(const YAML::Node &yaml) +static std::unique_ptr ParseYamlZipkinSpanExporterConfiguration( + const YAML::Node &yaml) { - std::unique_ptr model(new SamplerConfiguration); + std::unique_ptr model(new ZipkinSpanExporterConfiguration); - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ZipkinSpanExporterConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlTracerProviderConfiguration( +static std::unique_ptr ParseYamlSpanExporterConfiguration( const YAML::Node &yaml) { - std::unique_ptr model(new TracerProviderConfiguration); + std::unique_ptr model; + for (const auto &kv : yaml) { - YAML::Node n = GetChild("processors", yaml); + std::string k = kv.first.as(); + YAML::Node v = kv.second; - if (n) + if (k == "otlp") { - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); - // model->processors = n.as(); + model = ParseYamlOtlpSpanExporterConfiguration(v); + } + else if (k == "zipkin") + { + model = ParseYamlZipkinSpanExporterConfiguration(v); } else { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node processors"); - return nullptr; +#ifdef LATER + model = ParseYamlSpanExporterExtensionConfiguration(k, v); +#endif + } + + break; + } + + return model; +} + +static std::unique_ptr ParseYamlBatchSpanProcessorConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new BatchSpanProcessorConfiguration); + + model->schedule_delay = GetInteger("schedule_delay", yaml, 5000); + model->export_timeout = GetInteger("export_timeout", yaml, 30000); + model->max_queue_size = GetInteger("max_queue_size", yaml, 2048); + model->max_export_batch_size = GetInteger("max_export_batch_size", yaml, 512); + + YAML::Node n = GetRequiredChild("exporter", yaml); + model->exporter = ParseYamlSpanExporterConfiguration(n); + + return model; +} + +static std::unique_ptr ParseYamlSimpleSpanProcessorConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new SimpleSpanProcessorConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParseYamlSimpleSpanProcessorConfiguration: FIXME"); + + return model; +} + +static std::unique_ptr ParseYamlSpanProcessorConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model; + + for (const auto &kv : yaml) + { + std::string k = kv.first.as(); + YAML::Node v = kv.second; + + if (k == "batch") + { + model = ParseYamlBatchSpanProcessorConfiguration(v); + } + else if (k == "simple") + { + model = ParseYamlSimpleSpanProcessorConfiguration(v); + } + else + { +#ifdef LATER + model = ParseYamlSpanProcessorExtensionConfiguration(k, v); +#endif + } + + break; + } + + return model; +} + +static std::unique_ptr ParseYamlTracerProviderConfiguration( + const YAML::Node &yaml) +{ + std::unique_ptr model(new TracerProviderConfiguration); + + { + YAML::Node n = GetRequiredChild("processors", yaml); + + for (YAML::const_iterator it = n.begin(); it != n.end(); ++it) + { + OTEL_INTERNAL_LOG_ERROR("processor = " << *it); + model->processors.push_back(ParseYamlSpanProcessorConfiguration(*it)); } } @@ -260,7 +377,7 @@ static std::unique_ptr ParseYamlResourceConfiguration(con { std::unique_ptr model(new ResourceConfiguration); - OTEL_INTERNAL_LOG_ERROR("Yaml: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseYamlResourceConfiguration: FIXME"); return model; } From 1532b26bed6f6581a9089d483c0c28b2cbe8932d Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 25 Jan 2024 02:30:15 +0100 Subject: [PATCH 003/166] POC. Abstracted parsing from YAML. --- .../sdk/configuration/document.h | 25 ++ .../sdk/configuration/document_node.h | 97 +++++ .../sdk/configuration/yaml_document.h | 35 ++ .../sdk/configuration/yaml_document_node.h | 65 +++ sdk/src/configuration/CMakeLists.txt | 2 +- .../configuration/configuration_factory.cc | 411 ++++++------------ sdk/src/configuration/yaml_document.cc | 58 +++ sdk/src/configuration/yaml_document_node.cc | 232 ++++++++++ 8 files changed, 651 insertions(+), 274 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/document.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/document_node.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/yaml_document.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h create mode 100644 sdk/src/configuration/yaml_document.cc create mode 100644 sdk/src/configuration/yaml_document_node.cc diff --git a/sdk/include/opentelemetry/sdk/configuration/document.h b/sdk/include/opentelemetry/sdk/configuration/document.h new file mode 100644 index 0000000000..d38fdf6f43 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/document.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class Document +{ +public: + virtual std::unique_ptr GetRootNode() = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h new file mode 100644 index 0000000000..91bdd236ef --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -0,0 +1,97 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" +#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" +#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/resource_configuration.h" +#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class DocumentNodeConstIterator; + +class DocumentNode +{ +public: + DocumentNode() {} + virtual ~DocumentNode() {} + + virtual std::pair> GetNameAndContent() = 0; + + virtual std::unique_ptr GetRequiredChildNode(std::string_view name) = 0; + virtual std::unique_ptr GetChildNode(std::string_view name) = 0; + + virtual bool GetRequiredBoolean(std::string_view name) = 0; + virtual bool GetBoolean(std::string_view name, bool default_value) = 0; + + virtual size_t GetRequiredInteger(std::string_view name) = 0; + virtual size_t GetInteger(std::string_view name, size_t default_value) = 0; + + virtual std::string GetRequiredString(std::string_view name) = 0; + virtual std::string GetString(std::string_view name, std::string_view default_value) = 0; + + virtual DocumentNodeConstIterator begin() const = 0; + virtual DocumentNodeConstIterator end() const = 0; +}; + +class DocumentNodeConstIteratorImpl +{ +public: + DocumentNodeConstIteratorImpl() {} + virtual ~DocumentNodeConstIteratorImpl() {} + + virtual void Next() = 0; + virtual std::unique_ptr Item() const = 0; + virtual bool Equal(const DocumentNodeConstIteratorImpl *rhs) const = 0; +}; + +class DocumentNodeConstIterator +{ +public: + DocumentNodeConstIterator(DocumentNodeConstIteratorImpl *impl) : m_impl(impl) {} + ~DocumentNodeConstIterator() { delete m_impl; } + + bool operator==(const DocumentNodeConstIterator &rhs) const + { + return (m_impl->Equal(rhs.m_impl)); + } + + bool operator!=(const DocumentNodeConstIterator &rhs) const + { + return (!m_impl->Equal(rhs.m_impl)); + } + + std::unique_ptr operator*() const { return m_impl->Item(); } + + DocumentNodeConstIterator &operator++() + { + m_impl->Next(); + return *this; + } + +#ifdef NEVER + DocumentNodeConstIterator &operator++(int) + { + m_impl->Next(); + return *this; + } +#endif + +private: + DocumentNodeConstIteratorImpl *m_impl; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h new file mode 100644 index 0000000000..e88bf27343 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/document.h" +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class YamlDocument : public Document +{ +public: + static std::unique_ptr Parse(std::string file_path); + + YamlDocument(YAML::Node root) : m_root(root) {} + ~YamlDocument() = default; + + std::unique_ptr GetRootNode() override; + +private: + YAML::Node m_root; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h new file mode 100644 index 0000000000..d00002258b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h @@ -0,0 +1,65 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" +#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" +#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/resource_configuration.h" +#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class YamlDocumentNode : public DocumentNode +{ +public: + YamlDocumentNode(YAML::Node yaml) : m_yaml(yaml) {} + ~YamlDocumentNode() override = default; + + std::pair> GetNameAndContent() override; + + std::unique_ptr GetRequiredChildNode(std::string_view name) override; + std::unique_ptr GetChildNode(std::string_view name) override; + + bool GetRequiredBoolean(std::string_view name) override; + bool GetBoolean(std::string_view name, bool default_value) override; + + size_t GetRequiredInteger(std::string_view name) override; + size_t GetInteger(std::string_view name, size_t default_value) override; + + std::string GetRequiredString(std::string_view name) override; + std::string GetString(std::string_view name, std::string_view default_value) override; + + DocumentNodeConstIterator begin() const override; + DocumentNodeConstIterator end() const override; + +private: + YAML::Node m_yaml; +}; + +class YamlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl +{ +public: + YamlDocumentNodeConstIteratorImpl(const YAML::const_iterator &iter); + virtual ~YamlDocumentNodeConstIteratorImpl(); + + void Next() override; + std::unique_ptr Item() const override; + bool Equal(const DocumentNodeConstIteratorImpl *rhs) const override; + +private: + YAML::const_iterator m_iter; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index 8f3fcf32a2..bbc8adce51 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -3,7 +3,7 @@ add_library( opentelemetry_configuration - configuration_factory.cc) + configuration_factory.cc yaml_document.cc yaml_document_node.cc) set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) set_target_version(opentelemetry_configuration) diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index d2927e5bc8..d920951b35 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -8,8 +8,11 @@ #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/document.h" +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/yaml_document.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" @@ -34,172 +37,69 @@ static void DebugNode(std::string_view name, const YAML::Node &yaml) } } -static YAML::Node GetChild(std::string_view name, const YAML::Node &yaml) -{ - YAML::Node child = yaml[name]; - // DebugNode(name, child); - return child; -} - -static YAML::Node GetRequiredChild(std::string_view name, const YAML::Node &yaml) -{ - YAML::Node child = yaml[name]; - // DebugNode(name, child); - if (!child) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - // FIXME: throw - } - return child; -} - -static bool GetRequiredBoolean(std::string_view name, const YAML::Node &yaml) -{ - YAML::Node child = GetRequiredChild(name, yaml); - if (!child.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: boolean node: " << name); - // FIXME: throw - } - bool value = child.as(); - return value; -} - -static bool GetBoolean(std::string_view name, const YAML::Node &yaml, bool default_value) -{ - YAML::Node child = GetChild(name, yaml); - bool value = default_value; - if (child) - { - if (!child.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: boolean node: " << name); - // FIXME: throw - } - bool value = child.as(); - } - return value; -} - -static size_t GetRequiredInteger(std::string_view name, const YAML::Node &yaml) -{ - YAML::Node child = GetRequiredChild(name, yaml); - if (!child.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); - // FIXME: throw - } - size_t value = child.as(); - return value; -} - -static size_t GetInteger(std::string_view name, const YAML::Node &yaml, size_t default_value) -{ - YAML::Node child = GetChild(name, yaml); - size_t value = default_value; - if (child) - { - if (!child.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); - // FIXME: throw - } - size_t value = child.as(); - } - return value; -} - -static std::string GetRequiredString(std::string_view name, const YAML::Node &yaml) -{ - YAML::Node child = GetRequiredChild(name, yaml); - if (!child.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); - // FIXME: throw - } - std::string value = child.as(); - return value; -} - -static std::string GetString(std::string_view name, - const YAML::Node &yaml, - std::string default_value) -{ - YAML::Node child = GetChild(name, yaml); - std::string value = default_value; - if (child) - { - if (!child.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); - // FIXME: throw - } - std::string value = child.as(); - } - return value; -} - -static std::unique_ptr ParseYamlAttributeLimitConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseAttributeLimitConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new AttributeLimitConfiguration); - model->attribute_value_length_limit = GetInteger("attribute_value_length_limit", yaml, 4096); - model->attribute_count_limit = GetInteger("attribute_count_limit", yaml, 128); + model->attribute_value_length_limit = node->GetInteger("attribute_value_length_limit", 4096); + model->attribute_count_limit = node->GetInteger("attribute_count_limit", 128); return model; } -static std::unique_ptr ParseYamlLoggerProviderConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseLoggerProviderConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new LoggerProviderConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseYamlLoggerProviderConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseLoggerProviderConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlMeterProviderConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseMeterProviderConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new MeterProviderConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseYamlMeterProviderConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseMeterProviderConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlPropagatorConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParsePropagatorConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new PropagatorConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseYamlPropagatorConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlSpanLimitsConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseSpanLimitsConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new SpanLimitsConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseYamlSpanLimitsConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseSpanLimitsConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlSamplerConfiguration(const YAML::Node &yaml) +static std::unique_ptr ParseSamplerConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new SamplerConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseYamlSamplerConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseSamplerConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlHeadersConfiguration(const YAML::Node &yaml) +static std::unique_ptr ParseHeadersConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new HeadersConfiguration); @@ -208,29 +108,33 @@ static std::unique_ptr ParseYamlHeadersConfiguration(const return model; } -static std::unique_ptr ParseYamlOtlpSpanExporterConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseOtlpSpanExporterConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new OtlpSpanExporterConfiguration); + std::unique_ptr child; - model->protocol = GetRequiredString("protocol", yaml); - model->endpoint = GetRequiredString("endpoint", yaml); - model->certificate = GetString("certificate", yaml, ""); - model->client_key = GetString("client_key", yaml, ""); - model->client_certificate = GetString("client_certificate", yaml, ""); + model->protocol = node->GetRequiredString("protocol"); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate = node->GetString("certificate", ""); + model->client_key = node->GetString("client_key", ""); + model->client_certificate = node->GetString("client_certificate", ""); - YAML::Node n = GetChild("headers", yaml); - model->headers = ParseYamlHeadersConfiguration(n); + child = node->GetChildNode("headers"); + if (child) + { + model->headers = ParseHeadersConfiguration(child); + } - model->compression = GetString("compression", yaml, ""); - model->timeout = GetInteger("timeout", yaml, 10000); - model->insecure = GetBoolean("insecure", yaml, false); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->insecure = node->GetBoolean("insecure", false); return model; } -static std::unique_ptr ParseYamlZipkinSpanExporterConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseZipkinSpanExporterConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new ZipkinSpanExporterConfiguration); @@ -239,208 +143,175 @@ static std::unique_ptr ParseYamlZipkinSpanExpor return model; } -static std::unique_ptr ParseYamlSpanExporterConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseSpanExporterConfiguration( + const std::unique_ptr &node) { std::unique_ptr model; - for (const auto &kv : yaml) + auto name_and_content = node->GetNameAndContent(); + std::string name = name_and_content.first; + std::unique_ptr child = std::move(name_and_content.second); + + if (name == "otlp") + { + model = ParseOtlpSpanExporterConfiguration(child); + } + else if (name == "zipkin") + { + model = ParseZipkinSpanExporterConfiguration(child); + } + else { - std::string k = kv.first.as(); - YAML::Node v = kv.second; - - if (k == "otlp") - { - model = ParseYamlOtlpSpanExporterConfiguration(v); - } - else if (k == "zipkin") - { - model = ParseYamlZipkinSpanExporterConfiguration(v); - } - else - { #ifdef LATER - model = ParseYamlSpanExporterExtensionConfiguration(k, v); + model = ParseSpanExporterExtensionConfiguration(name, child); #endif - } - - break; } return model; } -static std::unique_ptr ParseYamlBatchSpanProcessorConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseBatchSpanProcessorConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new BatchSpanProcessorConfiguration); + std::unique_ptr child; - model->schedule_delay = GetInteger("schedule_delay", yaml, 5000); - model->export_timeout = GetInteger("export_timeout", yaml, 30000); - model->max_queue_size = GetInteger("max_queue_size", yaml, 2048); - model->max_export_batch_size = GetInteger("max_export_batch_size", yaml, 512); + model->schedule_delay = node->GetInteger("schedule_delay", 5000); + model->export_timeout = node->GetInteger("export_timeout", 30000); + model->max_queue_size = node->GetInteger("max_queue_size", 2048); + model->max_export_batch_size = node->GetInteger("max_export_batch_size", 512); - YAML::Node n = GetRequiredChild("exporter", yaml); - model->exporter = ParseYamlSpanExporterConfiguration(n); + child = node->GetRequiredChildNode("exporter"); + model->exporter = ParseSpanExporterConfiguration(child); return model; } -static std::unique_ptr ParseYamlSimpleSpanProcessorConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseSimpleSpanProcessorConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new SimpleSpanProcessorConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseYamlSimpleSpanProcessorConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseSimpleSpanProcessorConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlSpanProcessorConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseSpanProcessorConfiguration( + const std::unique_ptr &node) { std::unique_ptr model; - for (const auto &kv : yaml) + auto name_and_content = node->GetNameAndContent(); + std::string name = name_and_content.first; + std::unique_ptr content = std::move(name_and_content.second); + + OTEL_INTERNAL_LOG_ERROR("Found " << name); + + if (name == "batch") + { + model = ParseBatchSpanProcessorConfiguration(content); + } + else if (name == "simple") + { + model = ParseSimpleSpanProcessorConfiguration(content); + } + else { - std::string k = kv.first.as(); - YAML::Node v = kv.second; - - if (k == "batch") - { - model = ParseYamlBatchSpanProcessorConfiguration(v); - } - else if (k == "simple") - { - model = ParseYamlSimpleSpanProcessorConfiguration(v); - } - else - { #ifdef LATER - model = ParseYamlSpanProcessorExtensionConfiguration(k, v); + model = ParseSpanProcessorExtensionConfiguration(name, content); #endif - } - - break; } return model; } -static std::unique_ptr ParseYamlTracerProviderConfiguration( - const YAML::Node &yaml) +static std::unique_ptr ParseTracerProviderConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new TracerProviderConfiguration); + std::unique_ptr child; - { - YAML::Node n = GetRequiredChild("processors", yaml); + child = node->GetRequiredChildNode("processors"); - for (YAML::const_iterator it = n.begin(); it != n.end(); ++it) - { - OTEL_INTERNAL_LOG_ERROR("processor = " << *it); - model->processors.push_back(ParseYamlSpanProcessorConfiguration(*it)); - } - } + OTEL_INTERNAL_LOG_ERROR("FIXME iterator"); + for (auto it = child->begin(); it != child->end(); ++it) { - YAML::Node n = GetChild("limits", yaml); - - if (n) - { - model->limits = ParseYamlSpanLimitsConfiguration(n); - } - else - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node limits"); - return nullptr; - } + OTEL_INTERNAL_LOG_ERROR("processor = "); + model->processors.push_back(ParseSpanProcessorConfiguration(*it)); } +#ifdef LATER + for (YAML::const_iterator it = n.begin(); it != n.end(); ++it) { - YAML::Node n = GetChild("sampler", yaml); - - if (n) - { - model->sampler = ParseYamlSamplerConfiguration(n); - } - else - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node sampler"); - return nullptr; - } + OTEL_INTERNAL_LOG_ERROR("processor = " << *it); + model->processors.push_back(ParseSpanProcessorConfiguration(*it)); } +#endif + + child = node->GetRequiredChildNode("limits"); + model->limits = ParseSpanLimitsConfiguration(child); + + child = node->GetRequiredChildNode("sampler"); + model->sampler = ParseSamplerConfiguration(child); return model; } -static std::unique_ptr ParseYamlResourceConfiguration(const YAML::Node &yaml) +static std::unique_ptr ParseResourceConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new ResourceConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseYamlResourceConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseResourceConfiguration: FIXME"); return model; } -static std::unique_ptr ParseYamlConfiguration(const YAML::Node &yaml) +static std::unique_ptr ParseConfiguration(const std::unique_ptr &node) { std::unique_ptr model(new Configuration); - model->file_format = GetRequiredString("file_format", yaml); - model->disabled = GetBoolean("disabled", yaml, false); + model->file_format = node->GetRequiredString("file_format"); + model->disabled = node->GetBoolean("disabled", false); - { - YAML::Node n = GetChild("attribute_limits", yaml); + std::unique_ptr child; - if (n) - { - model->attribute_limits = ParseYamlAttributeLimitConfiguration(n); - } + child = node->GetChildNode("attribute_limits"); + if (child) + { + model->attribute_limits = ParseAttributeLimitConfiguration(child); } + child = node->GetChildNode("logger_provider"); + if (child) { - YAML::Node n = GetChild("logger_provider", yaml); - - if (n) - { - model->logger_provider = ParseYamlLoggerProviderConfiguration(n); - } + model->logger_provider = ParseLoggerProviderConfiguration(child); } + child = node->GetChildNode("meter_provider"); + if (child) { - YAML::Node n = GetChild("meter_provider", yaml); - - if (n) - { - model->meter_provider = ParseYamlMeterProviderConfiguration(n); - } + model->meter_provider = ParseMeterProviderConfiguration(child); } + child = node->GetChildNode("propagator"); + if (child) { - YAML::Node n = GetChild("propagator", yaml); - - if (n) - { - model->propagator = ParseYamlPropagatorConfiguration(n); - } + model->propagator = ParsePropagatorConfiguration(child); } + child = node->GetChildNode("tracer_provider"); + if (child) { - YAML::Node n = GetChild("tracer_provider", yaml); - - if (n) - { - model->tracer_provider = ParseYamlTracerProviderConfiguration(n); - } + model->tracer_provider = ParseTracerProviderConfiguration(child); } + child = node->GetChildNode("resource"); + if (child) { - YAML::Node n = GetChild("resource", yaml); - - if (n) - { - model->resource = ParseYamlResourceConfiguration(n); - } + model->resource = ParseResourceConfiguration(child); } return model; @@ -448,12 +319,14 @@ static std::unique_ptr ParseYamlConfiguration(const YAML::Node &y std::unique_ptr ConfigurationFactory::Parse(std::string file_path) { - YAML::Node yaml; + std::unique_ptr doc; + std::unique_ptr root; std::unique_ptr config; try { - yaml = YAML::LoadFile(file_path); + doc = YamlDocument::Parse(file_path); + root = doc->GetRootNode(); } catch (YAML::BadFile e) { @@ -466,17 +339,9 @@ std::unique_ptr ConfigurationFactory::Parse(std::string file_path return config; } - DebugNode("root", yaml); - - if (yaml.Type() == YAML::NodeType::Undefined) - { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); - return config; - } - try { - config = ParseYamlConfiguration(yaml); + config = ParseConfiguration(root); } catch (YAML::Exception e) { diff --git a/sdk/src/configuration/yaml_document.cc b/sdk/src/configuration/yaml_document.cc new file mode 100644 index 0000000000..8c48c8ea9f --- /dev/null +++ b/sdk/src/configuration/yaml_document.cc @@ -0,0 +1,58 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/yaml_document.h" +#include "opentelemetry/sdk/configuration/yaml_document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +std::unique_ptr YamlDocument::Parse(std::string file_path) +{ + YAML::Node yaml; + std::unique_ptr doc; + + try + { + yaml = YAML::LoadFile(file_path); + } + catch (YAML::BadFile e) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">, " << e.what()); + return doc; + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); + return doc; + } + + if (yaml.Type() == YAML::NodeType::Undefined) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); + return doc; + } + + YamlDocument *yaml_doc = new YamlDocument(yaml); + doc = std::unique_ptr(yaml_doc); + return doc; +} + +std::unique_ptr YamlDocument::GetRootNode() +{ + YamlDocumentNode *yaml_node = new YamlDocumentNode(m_root); + std::unique_ptr node(yaml_node); + return node; +} + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/yaml_document_node.cc b/sdk/src/configuration/yaml_document_node.cc new file mode 100644 index 0000000000..db37019226 --- /dev/null +++ b/sdk/src/configuration/yaml_document_node.cc @@ -0,0 +1,232 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/yaml_document.h" +#include "opentelemetry/sdk/configuration/yaml_document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +static void DebugNode(std::string_view name, const YAML::Node &yaml) +{ + if (yaml) + { + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", IsDefined: " << yaml.IsDefined()); + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Size: " << yaml.size()); + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Type: " << yaml.Type()); + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Scalar: " << yaml.Scalar()); + } + else + { + OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", missing node."); + } +} + +std::pair> YamlDocumentNode::GetNameAndContent() +{ + std::pair> result; + + for (const auto &kv : m_yaml) + { + result.first = kv.first.as(); + result.second = std::unique_ptr(new YamlDocumentNode(kv.second)); + + return result; + } + + OTEL_INTERNAL_LOG_ERROR("FIXME"); + return result; +} + +std::unique_ptr YamlDocumentNode::GetRequiredChildNode(std::string_view name) +{ + std::unique_ptr child; + + YAML::Node yaml_child = m_yaml[name]; + // DebugNode(name, yaml_child); + if (!yaml_child) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + // FIXME: throw + } + child = std::unique_ptr(new YamlDocumentNode(yaml_child)); + return child; +} + +std::unique_ptr YamlDocumentNode::GetChildNode(std::string_view name) +{ + std::unique_ptr child; + + YAML::Node yaml_child = m_yaml[name]; + // DebugNode(name, yaml_child); + if (yaml_child) + { + child = std::unique_ptr(new YamlDocumentNode(yaml_child)); + } + return child; +} + +bool YamlDocumentNode::GetRequiredBoolean(std::string_view name) +{ + YAML::Node attr = m_yaml[name]; + if (!attr) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + // FIXME: throw + } + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: bool node: " << name); + // FIXME: throw + } + bool value = attr.as(); + return value; +} + +bool YamlDocumentNode::GetBoolean(std::string_view name, bool default_value) +{ + bool value = default_value; + YAML::Node attr = m_yaml[name]; + if (attr) + { + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: bool node: " << name); + // FIXME: throw + } + value = attr.as(); + } + return value; +} + +size_t YamlDocumentNode::GetRequiredInteger(std::string_view name) +{ + YAML::Node attr = m_yaml[name]; + if (!attr) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + // FIXME: throw + } + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); + // FIXME: throw + } + size_t value = attr.as(); + return value; +} + +size_t YamlDocumentNode::GetInteger(std::string_view name, size_t default_value) +{ + size_t value = default_value; + YAML::Node attr = m_yaml[name]; + if (attr) + { + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); + // FIXME: throw + } + value = attr.as(); + } + return value; +} + +std::string YamlDocumentNode::GetRequiredString(std::string_view name) +{ + YAML::Node attr = m_yaml[name]; + if (!attr) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + // FIXME: throw + } + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); + // FIXME: throw + } + std::string value = attr.as(); + return value; +} + +std::string YamlDocumentNode::GetString(std::string_view name, std::string_view default_value) +{ + std::string value(default_value); + YAML::Node attr = m_yaml[name]; + if (attr) + { + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); + // FIXME: throw + } + value = attr.as(); + } + return value; +} + +DocumentNodeConstIterator YamlDocumentNode::begin() const +{ +#ifdef LATER + DebugNode("::begin()", m_yaml); + + for (auto it = m_yaml.begin(); it != m_yaml.end(); ++it) + { + std::pair pair = *it; + DebugNode(" first", pair.first); + DebugNode(" second", pair.second); + } +#endif + + return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.begin())); +} + +DocumentNodeConstIterator YamlDocumentNode::end() const +{ + return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.end())); +} + +YamlDocumentNodeConstIteratorImpl::YamlDocumentNodeConstIteratorImpl( + const YAML::const_iterator &iter) + : m_iter(iter) +{} + +YamlDocumentNodeConstIteratorImpl::~YamlDocumentNodeConstIteratorImpl() {} + +void YamlDocumentNodeConstIteratorImpl::Next() +{ + m_iter++; +} + +std::unique_ptr YamlDocumentNodeConstIteratorImpl::Item() const +{ + std::unique_ptr item; + YAML::Node yaml_item = *m_iter; + if (!yaml_item) + { + OTEL_INTERNAL_LOG_ERROR("iterator is lost "); + // Throw + } + item = std::unique_ptr(new YamlDocumentNode(yaml_item)); + return item; +} + +bool YamlDocumentNodeConstIteratorImpl::Equal(const DocumentNodeConstIteratorImpl *rhs) const +{ + const YamlDocumentNodeConstIteratorImpl *other = + static_cast(rhs); + OTEL_INTERNAL_LOG_ERROR("Equal()"); + return m_iter == other->m_iter; +} + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From 34b85756c323fb796a2c380fc4174a3391814494 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 28 Jan 2024 22:11:59 +0100 Subject: [PATCH 004/166] POC, continued. --- .../sdk/configuration/document_node.h | 51 ++++++- .../sdk/configuration/headers_configuration.h | 1 + .../sdk/configuration/yaml_document_node.h | 24 +++- .../configuration/configuration_factory.cc | 64 ++++++--- sdk/src/configuration/yaml_document_node.cc | 134 +++++++++++++++--- 5 files changed, 230 insertions(+), 44 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 91bdd236ef..649a8d8acf 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -20,6 +20,7 @@ namespace configuration { class DocumentNodeConstIterator; +class PropertiesNodeConstIterator; class DocumentNode { @@ -27,7 +28,9 @@ class DocumentNode DocumentNode() {} virtual ~DocumentNode() {} - virtual std::pair> GetNameAndContent() = 0; + virtual bool AsBoolean() = 0; + virtual size_t AsInteger() = 0; + virtual std::string AsString() = 0; virtual std::unique_ptr GetRequiredChildNode(std::string_view name) = 0; virtual std::unique_ptr GetChildNode(std::string_view name) = 0; @@ -43,6 +46,11 @@ class DocumentNode virtual DocumentNodeConstIterator begin() const = 0; virtual DocumentNodeConstIterator end() const = 0; + + virtual PropertiesNodeConstIterator begin_properties() const = 0; + virtual PropertiesNodeConstIterator end_properties() const = 0; + + virtual std::string Dump() const = 0; }; class DocumentNodeConstIteratorImpl @@ -56,6 +64,18 @@ class DocumentNodeConstIteratorImpl virtual bool Equal(const DocumentNodeConstIteratorImpl *rhs) const = 0; }; +class PropertiesNodeConstIteratorImpl +{ +public: + PropertiesNodeConstIteratorImpl() {} + virtual ~PropertiesNodeConstIteratorImpl() {} + + virtual void Next() = 0; + virtual std::string Name() const = 0; + virtual std::unique_ptr Value() const = 0; + virtual bool Equal(const PropertiesNodeConstIteratorImpl *rhs) const = 0; +}; + class DocumentNodeConstIterator { public: @@ -92,6 +112,35 @@ class DocumentNodeConstIterator DocumentNodeConstIteratorImpl *m_impl; }; +class PropertiesNodeConstIterator +{ +public: + PropertiesNodeConstIterator(PropertiesNodeConstIteratorImpl *impl) : m_impl(impl) {} + ~PropertiesNodeConstIterator() { delete m_impl; } + + bool operator==(const PropertiesNodeConstIterator &rhs) const + { + return (m_impl->Equal(rhs.m_impl)); + } + + bool operator!=(const PropertiesNodeConstIterator &rhs) const + { + return (!m_impl->Equal(rhs.m_impl)); + } + + std::string Name() const { return m_impl->Name(); } + std::unique_ptr Value() const { return m_impl->Value(); } + + PropertiesNodeConstIterator &operator++() + { + m_impl->Next(); + return *this; + } + +private: + PropertiesNodeConstIteratorImpl *m_impl; +}; + } // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h index fc8079de71..d92a3be1fc 100644 --- a/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h @@ -14,6 +14,7 @@ namespace configuration class HeadersConfiguration { public: + std::map m_kv_map; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h index d00002258b..8d2d7a62c6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h @@ -25,7 +25,9 @@ class YamlDocumentNode : public DocumentNode YamlDocumentNode(YAML::Node yaml) : m_yaml(yaml) {} ~YamlDocumentNode() override = default; - std::pair> GetNameAndContent() override; + bool AsBoolean() override; + size_t AsInteger() override; + std::string AsString() override; std::unique_ptr GetRequiredChildNode(std::string_view name) override; std::unique_ptr GetChildNode(std::string_view name) override; @@ -42,6 +44,11 @@ class YamlDocumentNode : public DocumentNode DocumentNodeConstIterator begin() const override; DocumentNodeConstIterator end() const override; + PropertiesNodeConstIterator begin_properties() const override; + PropertiesNodeConstIterator end_properties() const override; + + std::string Dump() const override; + private: YAML::Node m_yaml; }; @@ -60,6 +67,21 @@ class YamlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl YAML::const_iterator m_iter; }; +class YamlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorImpl +{ +public: + YamlPropertiesNodeConstIteratorImpl(const YAML::const_iterator &iter); + virtual ~YamlPropertiesNodeConstIteratorImpl(); + + void Next() override; + std::string Name() const override; + std::unique_ptr Value() const override; + bool Equal(const PropertiesNodeConstIteratorImpl *rhs) const override; + +private: + YAML::const_iterator m_iter; +}; + } // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index d920951b35..3be2e8abea 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -103,7 +103,16 @@ static std::unique_ptr ParseHeadersConfiguration( { std::unique_ptr model(new HeadersConfiguration); - OTEL_INTERNAL_LOG_ERROR("HeadersConfiguration: FIXME"); + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + std::string name = it.Name(); + std::unique_ptr child = it.Value(); + std::string string_value = child->AsString(); + + OTEL_INTERNAL_LOG_ERROR("name = " << name << ", value = " << string_value); + std::pair entry(name, string_value); + model->m_kv_map.insert(entry); + } return model; } @@ -148,9 +157,21 @@ static std::unique_ptr ParseSpanExporterConfiguration { std::unique_ptr model; - auto name_and_content = node->GetNameAndContent(); - std::string name = name_and_content.first; - std::unique_ptr child = std::move(name_and_content.second); + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) { + OTEL_INTERNAL_LOG_ERROR("ParseSpanExporterConfiguration: count " << count); + // Throw + } if (name == "otlp") { @@ -202,24 +223,34 @@ static std::unique_ptr ParseSpanProcessorConfigurati { std::unique_ptr model; - auto name_and_content = node->GetNameAndContent(); - std::string name = name_and_content.first; - std::unique_ptr content = std::move(name_and_content.second); + std::string name; + std::unique_ptr child; + size_t count = 0; - OTEL_INTERNAL_LOG_ERROR("Found " << name); + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) { + OTEL_INTERNAL_LOG_ERROR("ParseSpanProcessorConfiguration: count " << count); + // Throw + } if (name == "batch") { - model = ParseBatchSpanProcessorConfiguration(content); + model = ParseBatchSpanProcessorConfiguration(child); } else if (name == "simple") { - model = ParseSimpleSpanProcessorConfiguration(content); + model = ParseSimpleSpanProcessorConfiguration(child); } else { #ifdef LATER - model = ParseSpanProcessorExtensionConfiguration(name, content); + model = ParseSpanProcessorExtensionConfiguration(name, child); #endif } @@ -234,21 +265,10 @@ static std::unique_ptr ParseTracerProviderConfigura child = node->GetRequiredChildNode("processors"); - OTEL_INTERNAL_LOG_ERROR("FIXME iterator"); - for (auto it = child->begin(); it != child->end(); ++it) { - OTEL_INTERNAL_LOG_ERROR("processor = "); - model->processors.push_back(ParseSpanProcessorConfiguration(*it)); - } - -#ifdef LATER - for (YAML::const_iterator it = n.begin(); it != n.end(); ++it) - { - OTEL_INTERNAL_LOG_ERROR("processor = " << *it); model->processors.push_back(ParseSpanProcessorConfiguration(*it)); } -#endif child = node->GetRequiredChildNode("limits"); model->limits = ParseSpanLimitsConfiguration(child); diff --git a/sdk/src/configuration/yaml_document_node.cc b/sdk/src/configuration/yaml_document_node.cc index db37019226..515935284b 100644 --- a/sdk/src/configuration/yaml_document_node.cc +++ b/sdk/src/configuration/yaml_document_node.cc @@ -19,31 +19,71 @@ static void DebugNode(std::string_view name, const YAML::Node &yaml) { if (yaml) { - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", IsDefined: " << yaml.IsDefined()); - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Size: " << yaml.size()); - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Type: " << yaml.Type()); - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Scalar: " << yaml.Scalar()); + OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", IsDefined: " << yaml.IsDefined()); + OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", Size: " << yaml.size()); + + const char* msg; + switch(yaml.Type()) { + case YAML::NodeType::Undefined: + msg = "NodeType::Undefined"; + break; + case YAML::NodeType::Null: + msg = "NodeType::Null"; + break; + case YAML::NodeType::Scalar: + msg = "NodeType::Scalar"; + break; + case YAML::NodeType::Sequence: + msg = "NodeType::Sequence"; + break; + case YAML::NodeType::Map: + msg = "NodeType::Map"; + break; + default: + msg = "NodeType::???"; + break; + } + + OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", " << msg); + OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", Scalar: " << yaml.Scalar()); } else { - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", missing node."); + OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", missing node."); } } -std::pair> YamlDocumentNode::GetNameAndContent() +bool YamlDocumentNode::AsBoolean() { - std::pair> result; - - for (const auto &kv : m_yaml) + if (!m_yaml.IsScalar()) { - result.first = kv.first.as(); - result.second = std::unique_ptr(new YamlDocumentNode(kv.second)); + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + // FIXME: throw + } + bool value = m_yaml.as(); + return value; +} - return result; +size_t YamlDocumentNode::AsInteger() +{ + if (!m_yaml.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + // FIXME: throw } + size_t value = m_yaml.as(); + return value; +} - OTEL_INTERNAL_LOG_ERROR("FIXME"); - return result; +std::string YamlDocumentNode::AsString() +{ + if (!m_yaml.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + // FIXME: throw + } + std::string value = m_yaml.as(); + return value; } std::unique_ptr YamlDocumentNode::GetRequiredChildNode(std::string_view name) @@ -175,16 +215,12 @@ std::string YamlDocumentNode::GetString(std::string_view name, std::string_view DocumentNodeConstIterator YamlDocumentNode::begin() const { -#ifdef LATER DebugNode("::begin()", m_yaml); for (auto it = m_yaml.begin(); it != m_yaml.end(); ++it) { - std::pair pair = *it; - DebugNode(" first", pair.first); - DebugNode(" second", pair.second); + DebugNode(" whole", *it); } -#endif return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.begin())); } @@ -194,6 +230,30 @@ DocumentNodeConstIterator YamlDocumentNode::end() const return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.end())); } +PropertiesNodeConstIterator YamlDocumentNode::begin_properties() const +{ + DebugNode("::begin_properties()", m_yaml); + + for (auto it = m_yaml.begin(); it != m_yaml.end(); ++it) + { + std::pair pair = *it; + DebugNode(" first", pair.first); + DebugNode(" second", pair.second); + } + + return PropertiesNodeConstIterator(new YamlPropertiesNodeConstIteratorImpl(m_yaml.begin())); +} + +PropertiesNodeConstIterator YamlDocumentNode::end_properties() const +{ + return PropertiesNodeConstIterator(new YamlPropertiesNodeConstIteratorImpl(m_yaml.end())); +} + +std::string YamlDocumentNode::Dump() const +{ + return "FIXME: Dump"; +} + YamlDocumentNodeConstIteratorImpl::YamlDocumentNodeConstIteratorImpl( const YAML::const_iterator &iter) : m_iter(iter) @@ -223,7 +283,41 @@ bool YamlDocumentNodeConstIteratorImpl::Equal(const DocumentNodeConstIteratorImp { const YamlDocumentNodeConstIteratorImpl *other = static_cast(rhs); - OTEL_INTERNAL_LOG_ERROR("Equal()"); + return m_iter == other->m_iter; +} + +YamlPropertiesNodeConstIteratorImpl::YamlPropertiesNodeConstIteratorImpl( + const YAML::const_iterator &iter) + : m_iter(iter) +{} + +YamlPropertiesNodeConstIteratorImpl::~YamlPropertiesNodeConstIteratorImpl() {} + +void YamlPropertiesNodeConstIteratorImpl::Next() +{ + m_iter++; +} + +std::string YamlPropertiesNodeConstIteratorImpl::Name() const +{ + std::pair> result; + std::pair kv = *m_iter; + std::string name = kv.first.as(); + return name; +} + +std::unique_ptr YamlPropertiesNodeConstIteratorImpl::Value() const +{ + std::unique_ptr item; + std::pair kv = *m_iter; + item = std::unique_ptr(new YamlDocumentNode(kv.second)); + return item; +} + +bool YamlPropertiesNodeConstIteratorImpl::Equal(const PropertiesNodeConstIteratorImpl *rhs) const +{ + const YamlPropertiesNodeConstIteratorImpl *other = + static_cast(rhs); return m_iter == other->m_iter; } From da2f173d1e9c64fcbdb542c1d83db36e005e8032 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 29 Jan 2024 00:07:21 +0100 Subject: [PATCH 005/166] POC, trace signal. --- .../always_off_sampler_configuration.h | 22 ++ .../always_on_sampler_configuration.h | 22 ++ .../configuration/attributes_configuration.h | 25 ++ .../sdk/configuration/document_node.h | 14 +- .../sdk/configuration/headers_configuration.h | 2 +- .../jaeger_remote_sampler_configuration.h | 25 ++ .../parent_based_sampler_configuration.h | 27 +++ .../configuration/resource_configuration.h | 3 + .../simple_span_processor_configuration.h | 1 + .../configuration/span_limits_configuration.h | 6 + ...ce_id_ration_based_sampler_configuration.h | 23 ++ .../sdk/configuration/yaml_document_node.h | 6 +- .../zipkin_span_exporter_configuration.h | 2 + .../configuration/configuration_factory.cc | 218 +++++++++++++++++- sdk/src/configuration/yaml_document_node.cc | 51 +++- 15 files changed, 425 insertions(+), 22 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h new file mode 100644 index 0000000000..bf8e150a4c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class AlwaysOffSamplerConfiguration : public SamplerConfiguration +{ +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h new file mode 100644 index 0000000000..d7d94d1ae3 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class AlwaysOnSamplerConfiguration : public SamplerConfiguration +{ +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h new file mode 100644 index 0000000000..9f2e9fad21 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class AttributesConfiguration +{ +public: + std::string service_name; + std::map kv_map; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 649a8d8acf..de8a8f0494 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -28,8 +28,9 @@ class DocumentNode DocumentNode() {} virtual ~DocumentNode() {} - virtual bool AsBoolean() = 0; - virtual size_t AsInteger() = 0; + virtual bool AsBoolean() = 0; + virtual size_t AsInteger() = 0; + virtual double AsDouble() = 0; virtual std::string AsString() = 0; virtual std::unique_ptr GetRequiredChildNode(std::string_view name) = 0; @@ -41,6 +42,9 @@ class DocumentNode virtual size_t GetRequiredInteger(std::string_view name) = 0; virtual size_t GetInteger(std::string_view name, size_t default_value) = 0; + virtual double GetRequiredDouble(std::string_view name) = 0; + virtual double GetDouble(std::string_view name, double default_value) = 0; + virtual std::string GetRequiredString(std::string_view name) = 0; virtual std::string GetString(std::string_view name, std::string_view default_value) = 0; @@ -70,9 +74,9 @@ class PropertiesNodeConstIteratorImpl PropertiesNodeConstIteratorImpl() {} virtual ~PropertiesNodeConstIteratorImpl() {} - virtual void Next() = 0; - virtual std::string Name() const = 0; - virtual std::unique_ptr Value() const = 0; + virtual void Next() = 0; + virtual std::string Name() const = 0; + virtual std::unique_ptr Value() const = 0; virtual bool Equal(const PropertiesNodeConstIteratorImpl *rhs) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h index d92a3be1fc..b54dbff34b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h @@ -14,7 +14,7 @@ namespace configuration class HeadersConfiguration { public: - std::map m_kv_map; + std::map kv_map; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h new file mode 100644 index 0000000000..66b0596a89 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class JaegerRemoteSamplerConfiguration : public SamplerConfiguration +{ +public: + std::string endpoint; + size_t interval; + std::unique_ptr initial_sampler; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h new file mode 100644 index 0000000000..f89f6276a7 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h @@ -0,0 +1,27 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ParentBasedSamplerConfiguration : public SamplerConfiguration +{ +public: + std::unique_ptr root; + std::unique_ptr remote_parent_sampled; + std::unique_ptr remote_parent_not_sampled; + std::unique_ptr local_parent_sampled; + std::unique_ptr local_parent_not_sampled; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h index 530d583d16..8296757d6e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -14,6 +15,8 @@ namespace configuration class ResourceConfiguration { public: + std::unique_ptr attributes; + std::string schema_url; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h index 13dac01365..12d037f887 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -15,6 +15,7 @@ namespace configuration class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration { public: + std::unique_ptr exporter; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h index b7ce8fc13c..813e5d1bef 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h @@ -14,6 +14,12 @@ namespace configuration class SpanLimitsConfiguration { public: + size_t attribute_value_length_limit; + size_t attribute_count_limit; + size_t event_count_limit; + size_t link_count_limit; + size_t event_attribute_count_limit; + size_t link_attribute_count_limit; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h new file mode 100644 index 0000000000..1774a709c5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h @@ -0,0 +1,23 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class TraceIdRatioBasedSamplerConfiguration : public SamplerConfiguration +{ +public: + double ratio; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h index 8d2d7a62c6..919b7f9dfc 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h @@ -27,6 +27,7 @@ class YamlDocumentNode : public DocumentNode bool AsBoolean() override; size_t AsInteger() override; + double AsDouble() override; std::string AsString() override; std::unique_ptr GetRequiredChildNode(std::string_view name) override; @@ -38,6 +39,9 @@ class YamlDocumentNode : public DocumentNode size_t GetRequiredInteger(std::string_view name) override; size_t GetInteger(std::string_view name, size_t default_value) override; + double GetRequiredDouble(std::string_view name) override; + double GetDouble(std::string_view name, double default_value) override; + std::string GetRequiredString(std::string_view name) override; std::string GetString(std::string_view name, std::string_view default_value) override; @@ -45,7 +49,7 @@ class YamlDocumentNode : public DocumentNode DocumentNodeConstIterator end() const override; PropertiesNodeConstIterator begin_properties() const override; - PropertiesNodeConstIterator end_properties() const override; + PropertiesNodeConstIterator end_properties() const override; std::string Dump() const override; diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h index 1395342662..6b1cd72dae 100644 --- a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -15,6 +15,8 @@ namespace configuration class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration { public: + std::string endpoint; + size_t timeout; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 3be2e8abea..c38fc581b6 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -5,13 +5,18 @@ #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" @@ -83,17 +88,167 @@ static std::unique_ptr ParseSpanLimitsConfiguration( { std::unique_ptr model(new SpanLimitsConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseSpanLimitsConfiguration: FIXME"); + model->attribute_value_length_limit = node->GetInteger("attribute_value_length_limit", 4096); + model->attribute_count_limit = node->GetInteger("attribute_count_limit", 128); + model->event_count_limit = node->GetInteger("event_count_limit", 128); + model->link_count_limit = node->GetInteger("link_count_limit", 128); + model->event_attribute_count_limit = node->GetInteger("event_attribute_count_limit", 128); + model->link_attribute_count_limit = node->GetInteger("link_attribute_count_limit", 128); + + return model; +} + +static std::unique_ptr ParseSamplerConfiguration( + const std::unique_ptr &node); + +static std::unique_ptr ParseAlwaysOffSamplerConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new AlwaysOffSamplerConfiguration); + + return model; +} + +static std::unique_ptr ParseAlwaysOnSamplerConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new AlwaysOnSamplerConfiguration); + + return model; +} + +static std::unique_ptr ParseJaegerRemoteSamplerConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new JaegerRemoteSamplerConfiguration); + std::unique_ptr child; + + // Unclear if endpoint and interval are required/optional + OTEL_INTERNAL_LOG_ERROR("JaegerRemoteSamplerConfiguration: FIXME"); + + model->endpoint = node->GetString("endpoint", "FIXME"); + model->interval = node->GetInteger("interval", 0); + + child = node->GetChildNode("initial_sampler"); + if (child) + { + model->initial_sampler = ParseSamplerConfiguration(child); + } + + return model; +} + +static std::unique_ptr ParseParentBasedSamplerConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new ParentBasedSamplerConfiguration); + std::unique_ptr child; + + child = node->GetChildNode("root"); + if (child) + { + model->root = ParseSamplerConfiguration(child); + } + + child = node->GetChildNode("remote_parent_sampled"); + if (child) + { + model->remote_parent_sampled = ParseSamplerConfiguration(child); + } + + child = node->GetChildNode("remote_parent_not_sampled"); + if (child) + { + model->remote_parent_not_sampled = ParseSamplerConfiguration(child); + } + + child = node->GetChildNode("local_parent_sampled"); + if (child) + { + model->local_parent_sampled = ParseSamplerConfiguration(child); + } + + child = node->GetChildNode("local_parent_not_sampled"); + if (child) + { + model->local_parent_not_sampled = ParseSamplerConfiguration(child); + } + + return model; +} + +static std::unique_ptr ParseTraceIdRatioBasedSamplerConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model( + new TraceIdRatioBasedSamplerConfiguration); + std::unique_ptr child; + + model->ratio = node->GetDouble("ratio", 0); + + return model; +} + +#ifdef LATER +static std::unique_ptr ParseSamplerExtensionConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new SamplerExtensionConfiguration); + + OTEL_INTERNAL_LOG_ERROR("SamplerExtensionConfiguration: FIXME"); return model; } +#endif static std::unique_ptr ParseSamplerConfiguration( const std::unique_ptr &node) { std::unique_ptr model(new SamplerConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseSamplerConfiguration: FIXME"); + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParseSamplerConfiguration: count " << count); + // Throw + } + + if (name == "always_off") + { + model = ParseAlwaysOffSamplerConfiguration(child); + } + else if (name == "always_on") + { + model = ParseAlwaysOnSamplerConfiguration(child); + } + else if (name == "jaeger_remote") + { + model = ParseJaegerRemoteSamplerConfiguration(child); + } + else if (name == "parent_based") + { + model = ParseParentBasedSamplerConfiguration(child); + } + else if (name == "trace_id_ratio_based") + { + model = ParseTraceIdRatioBasedSamplerConfiguration(child); + } + else + { +#ifdef LATER + model = ParseSamplerExtensionConfiguration(name, child); +#endif + } return model; } @@ -105,13 +260,13 @@ static std::unique_ptr ParseHeadersConfiguration( for (auto it = node->begin_properties(); it != node->end_properties(); ++it) { - std::string name = it.Name(); + std::string name = it.Name(); std::unique_ptr child = it.Value(); - std::string string_value = child->AsString(); + std::string string_value = child->AsString(); OTEL_INTERNAL_LOG_ERROR("name = " << name << ", value = " << string_value); std::pair entry(name, string_value); - model->m_kv_map.insert(entry); + model->kv_map.insert(entry); } return model; @@ -147,7 +302,8 @@ static std::unique_ptr ParseZipkinSpanExporterC { std::unique_ptr model(new ZipkinSpanExporterConfiguration); - OTEL_INTERNAL_LOG_ERROR("ZipkinSpanExporterConfiguration: FIXME"); + model->endpoint = node->GetRequiredString("endpoint"); + model->timeout = node->GetInteger("timeout", 10000); return model; } @@ -163,12 +319,13 @@ static std::unique_ptr ParseSpanExporterConfiguration for (auto it = node->begin_properties(); it != node->end_properties(); ++it) { - name = it.Name(); + name = it.Name(); child = it.Value(); count++; } - if (count != 1) { + if (count != 1) + { OTEL_INTERNAL_LOG_ERROR("ParseSpanExporterConfiguration: count " << count); // Throw } @@ -212,8 +369,10 @@ static std::unique_ptr ParseSimpleSpanProcesso const std::unique_ptr &node) { std::unique_ptr model(new SimpleSpanProcessorConfiguration); + std::unique_ptr child; - OTEL_INTERNAL_LOG_ERROR("ParseSimpleSpanProcessorConfiguration: FIXME"); + child = node->GetRequiredChildNode("exporter"); + model->exporter = ParseSpanExporterConfiguration(child); return model; } @@ -229,12 +388,13 @@ static std::unique_ptr ParseSpanProcessorConfigurati for (auto it = node->begin_properties(); it != node->end_properties(); ++it) { - name = it.Name(); + name = it.Name(); child = it.Value(); count++; } - if (count != 1) { + if (count != 1) + { OTEL_INTERNAL_LOG_ERROR("ParseSpanProcessorConfiguration: count " << count); // Throw } @@ -279,12 +439,46 @@ static std::unique_ptr ParseTracerProviderConfigura return model; } +static std::unique_ptr ParseAttributesConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new AttributesConfiguration); + std::unique_ptr child; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + std::string name = it.Name(); + std::unique_ptr child = it.Value(); + std::string string_value = child->AsString(); + + OTEL_INTERNAL_LOG_ERROR("name = " << name << ", value = " << string_value); + if (name == "service.name") + { + model->service_name = name; + } + else + { + std::pair entry(name, string_value); + model->kv_map.insert(entry); + } + } + + return model; +} + static std::unique_ptr ParseResourceConfiguration( const std::unique_ptr &node) { std::unique_ptr model(new ResourceConfiguration); + std::unique_ptr child; + + model->schema_url = node->GetString("schema_url", ""); - OTEL_INTERNAL_LOG_ERROR("ParseResourceConfiguration: FIXME"); + child = node->GetRequiredChildNode("attributes"); + if (child) + { + model->attributes = ParseAttributesConfiguration(child); + } return model; } diff --git a/sdk/src/configuration/yaml_document_node.cc b/sdk/src/configuration/yaml_document_node.cc index 515935284b..20540d3cd9 100644 --- a/sdk/src/configuration/yaml_document_node.cc +++ b/sdk/src/configuration/yaml_document_node.cc @@ -22,8 +22,9 @@ static void DebugNode(std::string_view name, const YAML::Node &yaml) OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", IsDefined: " << yaml.IsDefined()); OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", Size: " << yaml.size()); - const char* msg; - switch(yaml.Type()) { + const char *msg; + switch (yaml.Type()) + { case YAML::NodeType::Undefined: msg = "NodeType::Undefined"; break; @@ -75,6 +76,17 @@ size_t YamlDocumentNode::AsInteger() return value; } +double YamlDocumentNode::AsDouble() +{ + if (!m_yaml.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + // FIXME: throw + } + double value = m_yaml.as(); + return value; +} + std::string YamlDocumentNode::AsString() { if (!m_yaml.IsScalar()) @@ -180,6 +192,39 @@ size_t YamlDocumentNode::GetInteger(std::string_view name, size_t default_value) return value; } +double YamlDocumentNode::GetRequiredDouble(std::string_view name) +{ + YAML::Node attr = m_yaml[name]; + if (!attr) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + // FIXME: throw + } + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: double node: " << name); + // FIXME: throw + } + double value = attr.as(); + return value; +} + +double YamlDocumentNode::GetDouble(std::string_view name, double default_value) +{ + double value = default_value; + YAML::Node attr = m_yaml[name]; + if (attr) + { + if (!attr.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: double node: " << name); + // FIXME: throw + } + value = attr.as(); + } + return value; +} + std::string YamlDocumentNode::GetRequiredString(std::string_view name) { YAML::Node attr = m_yaml[name]; @@ -302,7 +347,7 @@ std::string YamlPropertiesNodeConstIteratorImpl::Name() const { std::pair> result; std::pair kv = *m_iter; - std::string name = kv.first.as(); + std::string name = kv.first.as(); return name; } From 04f2f6f6ed8b4d257bd318c15f01e416d23529cf Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 31 Jan 2024 01:18:05 +0100 Subject: [PATCH 006/166] POC, continued. --- examples/yaml/CMakeLists.txt | 3 +- examples/yaml/main.cc | 26 ++- .../always_off_sampler_configuration.h | 5 + .../always_on_sampler_configuration.h | 2 + .../extension_sampler_configuration.h | 31 +++ .../jaeger_remote_sampler_configuration.h | 6 + .../parent_based_sampler_configuration.h | 6 + .../sdk/configuration/sampler_configuration.h | 3 + .../sampler_configuration_visitor.h | 34 +++ ...ce_id_ratio_based_sampler_configuration.h} | 6 + .../opentelemetry/sdk/init/configured_sdk.h | 31 +++ sdk/include/opentelemetry/sdk/init/registry.h | 20 ++ .../opentelemetry/sdk/init/sdk_builder.h | 60 +++++ sdk/src/CMakeLists.txt | 1 + sdk/src/configuration/CMakeLists.txt | 2 +- .../configuration/configuration_factory.cc | 27 +-- sdk/src/init/CMakeLists.txt | 31 +++ sdk/src/init/configured_sdk.cc | 38 ++++ sdk/src/init/sdk_builder.cc | 209 ++++++++++++++++++ 19 files changed, 512 insertions(+), 29 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h rename sdk/include/opentelemetry/sdk/configuration/{trace_id_ration_based_sampler_configuration.h => trace_id_ratio_based_sampler_configuration.h} (69%) create mode 100644 sdk/include/opentelemetry/sdk/init/configured_sdk.h create mode 100644 sdk/include/opentelemetry/sdk/init/registry.h create mode 100644 sdk/include/opentelemetry/sdk/init/sdk_builder.h create mode 100644 sdk/src/init/CMakeLists.txt create mode 100644 sdk/src/init/configured_sdk.cc create mode 100644 sdk/src/init/sdk_builder.cc diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index d204f24374..a8813d04ae 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -15,5 +15,6 @@ if(DEFINED OPENTELEMETRY_BUILD_DLL) target_link_libraries(example_yaml opentelemetry_cpp) else() target_link_libraries(example_yaml opentelemetry_configuration -opentelemetry_common) +opentelemetry_init +opentelemetry_common opentelemetry_trace) endif() diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 183a4272f9..19ed73d815 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/init/configured_sdk.h" #ifdef BAZEL_BUILD # include "examples/common/foo_library/foo_library.h" @@ -9,25 +10,40 @@ # include "foo_library/foo_library.h" #endif +std::unique_ptr sdk; + namespace { -void InitTracer() +void InitOtel() { + // See + // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml std::string config_file = "config.yaml"; auto model = opentelemetry::sdk::configuration::ConfigurationFactory::Parse(config_file); + + sdk = opentelemetry::sdk::init::ConfiguredSdk::Create(model); + + if (sdk != nullptr) + { + sdk->Install(); + } } -void CleanupTracer() +void CleanupOtel() { + if (sdk != nullptr) + { + sdk->UnInstall(); + } + sdk.reset(nullptr); } } // namespace int main() { - // Removing this line will leave the default noop TracerProvider in place. - InitTracer(); + InitOtel(); foo_library(); - CleanupTracer(); + CleanupOtel(); } diff --git a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h index bf8e150a4c..4e62147d73 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,6 +16,10 @@ namespace configuration class AlwaysOffSamplerConfiguration : public SamplerConfiguration { public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitAlwaysOff(this); + } }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h index d7d94d1ae3..a376dba520 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,6 +16,7 @@ namespace configuration class AlwaysOnSamplerConfiguration : public SamplerConfiguration { public: + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitAlwaysOn(this); } }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h new file mode 100644 index 0000000000..6fcbb5fabb --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionSamplerConfiguration : public SamplerConfiguration +{ +public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h index 66b0596a89..b87505191a 100644 --- a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,6 +16,11 @@ namespace configuration class JaegerRemoteSamplerConfiguration : public SamplerConfiguration { public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitJaegerRemote(this); + } + std::string endpoint; size_t interval; std::unique_ptr initial_sampler; diff --git a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h index f89f6276a7..78de653bc9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,6 +16,11 @@ namespace configuration class ParentBasedSamplerConfiguration : public SamplerConfiguration { public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitParentBased(this); + } + std::unique_ptr root; std::unique_ptr remote_parent_sampled; std::unique_ptr remote_parent_not_sampled; diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h index 36ce601899..a2053cc448 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h @@ -11,9 +11,12 @@ namespace sdk namespace configuration { +class SamplerConfigurationVisitor; + class SamplerConfiguration { public: + virtual void Accept(SamplerConfigurationVisitor *visitor) const = 0; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h new file mode 100644 index 0000000000..3a0fa1209f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class AlwaysOffSamplerConfiguration; +class AlwaysOnSamplerConfiguration; +class JaegerRemoteSamplerConfiguration; +class ParentBasedSamplerConfiguration; +class TraceIdRatioBasedSamplerConfiguration; +class ExtensionSamplerConfiguration; + +class SamplerConfigurationVisitor +{ +public: + virtual void VisitAlwaysOff(const AlwaysOffSamplerConfiguration *model) = 0; + virtual void VisitAlwaysOn(const AlwaysOnSamplerConfiguration *model) = 0; + virtual void VisitJaegerRemote(const JaegerRemoteSamplerConfiguration *model) = 0; + virtual void VisitParentBased(const ParentBasedSamplerConfiguration *model) = 0; + virtual void VisitTraceIdRatioBased(const TraceIdRatioBasedSamplerConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionSamplerConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h similarity index 69% rename from sdk/include/opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h index 1774a709c5..534ee9b572 100644 --- a/sdk/include/opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,6 +16,11 @@ namespace configuration class TraceIdRatioBasedSamplerConfiguration : public SamplerConfiguration { public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitTraceIdRatioBased(this); + } + double ratio; }; diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h new file mode 100644 index 0000000000..f326c4feab --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ConfiguredSdk +{ +public: + static std::unique_ptr Create( + const std::unique_ptr &model); + + void Install(); + void UnInstall(); + + // FIXME: should be sdk::trace::TracerProvider + std::shared_ptr m_tracer_provider; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h new file mode 100644 index 0000000000..8b1dff57b6 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/common/attribute_utils.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class Registry +{}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h new file mode 100644 index 0000000000..fa1b1d4887 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -0,0 +1,60 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class SdkBuilder +{ +public: + static std::unique_ptr CreateAlwaysOffSampler( + const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model); + + static std::unique_ptr CreateAlwaysOnSampler( + const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model); + + static std::unique_ptr CreateJaegerRemoteSampler( + const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model); + + static std::unique_ptr CreateParentBasedSampler( + const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model); + + static std::unique_ptr CreateTraceIdRatioBasedSampler( + const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model); + + static std::unique_ptr CreateExtensionSampler( + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model); + + static std::unique_ptr CreateSampler( + const std::unique_ptr &model); + + static std::unique_ptr CreateProcessor( + const std::unique_ptr &model); + + static std::unique_ptr CreateTracerProvider( + const std::unique_ptr &model); + + static std::unique_ptr CreateConfiguredSdk( + const std::unique_ptr &model); + +#if 0 + static std::unique_ptr CreateXXX( + const std::unique_ptr &model); +#endif +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/CMakeLists.txt b/sdk/src/CMakeLists.txt index e562fc0dc9..d46c5b005f 100644 --- a/sdk/src/CMakeLists.txt +++ b/sdk/src/CMakeLists.txt @@ -8,3 +8,4 @@ add_subdirectory(logs) add_subdirectory(version) add_subdirectory(resource) add_subdirectory(configuration) +add_subdirectory(init) diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index bbc8adce51..c3852749fe 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -14,7 +14,7 @@ target_include_directories( target_link_libraries( opentelemetry_configuration - PUBLIC yaml-cpp::yaml-cpp) + PUBLIC opentelemetry_api opentelemetry_common yaml-cpp::yaml-cpp) if(OPENTELEMETRY_INSTALL) install( diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index c38fc581b6..cb9f532f9e 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -12,11 +12,12 @@ #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" -#include "opentelemetry/sdk/configuration/trace_id_ration_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" @@ -27,21 +28,6 @@ namespace sdk namespace configuration { -static void DebugNode(std::string_view name, const YAML::Node &yaml) -{ - if (yaml) - { - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", IsDefined: " << yaml.IsDefined()); - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Size: " << yaml.size()); - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Type: " << yaml.Type()); - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", Scalar: " << yaml.Scalar()); - } - else - { - OTEL_INTERNAL_LOG_ERROR("Processing: " << name << ", missing node."); - } -} - static std::unique_ptr ParseAttributeLimitConfiguration( const std::unique_ptr &node) { @@ -189,22 +175,21 @@ static std::unique_ptr ParseTraceIdRatioBasedSamplerConfig return model; } -#ifdef LATER static std::unique_ptr ParseSamplerExtensionConfiguration( + std::string name, const std::unique_ptr &node) { - std::unique_ptr model(new SamplerExtensionConfiguration); + std::unique_ptr model(new ExtensionSamplerConfiguration); OTEL_INTERNAL_LOG_ERROR("SamplerExtensionConfiguration: FIXME"); return model; } -#endif static std::unique_ptr ParseSamplerConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new SamplerConfiguration); + std::unique_ptr model; std::string name; std::unique_ptr child; @@ -245,9 +230,7 @@ static std::unique_ptr ParseSamplerConfiguration( } else { -#ifdef LATER model = ParseSamplerExtensionConfiguration(name, child); -#endif } return model; diff --git a/sdk/src/init/CMakeLists.txt b/sdk/src/init/CMakeLists.txt new file mode 100644 index 0000000000..d336b83d92 --- /dev/null +++ b/sdk/src/init/CMakeLists.txt @@ -0,0 +1,31 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +add_library( + opentelemetry_init + configured_sdk.cc sdk_builder.cc) + +set_target_properties(opentelemetry_init PROPERTIES EXPORT_NAME init) +set_target_version(opentelemetry_init) + +target_include_directories( + opentelemetry_init + PUBLIC "$") + +target_link_libraries( + opentelemetry_init + PUBLIC opentelemetry_configuration opentelemetry_trace) + +if(OPENTELEMETRY_INSTALL) + install( + TARGETS opentelemetry_init + EXPORT "${PROJECT_NAME}-target" + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + opentelemetry_add_pkgconfig( + init "OpenTelemetry SDK - Init" + "Components for exporting traces in the OpenTelemetry SDK." + "opentelemetry_init") +endif() diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc new file mode 100644 index 0000000000..7b42e5e3ef --- /dev/null +++ b/sdk/src/init/configured_sdk.cc @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/init/configured_sdk.h" +#include "opentelemetry/sdk/init/sdk_builder.h" +#include "opentelemetry/trace/provider.h" +#include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +std::unique_ptr ConfiguredSdk::Create( + const std::unique_ptr &model) +{ + return SdkBuilder::CreateConfiguredSdk(model); +} + +void ConfiguredSdk::Install() +{ + opentelemetry::trace::Provider::SetTracerProvider(m_tracer_provider); +} + +void ConfiguredSdk::UnInstall() +{ + std::shared_ptr none; + opentelemetry::trace::Provider::SetTracerProvider(none); +} + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc new file mode 100644 index 0000000000..8b7d99ddb3 --- /dev/null +++ b/sdk/src/init/sdk_builder.cc @@ -0,0 +1,209 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/document.h" +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/yaml_document.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/configured_sdk.h" +#include "opentelemetry/sdk/init/sdk_builder.h" +#include "opentelemetry/sdk/trace/processor.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/tracer_provider_factory.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigurationVisitor +{ +public: + void VisitAlwaysOff( + const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) override + { + sampler = SdkBuilder::CreateAlwaysOffSampler(model); + } + + void VisitAlwaysOn( + const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model) override + { + sampler = SdkBuilder::CreateAlwaysOnSampler(model); + } + + void VisitJaegerRemote( + const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model) override + { + sampler = SdkBuilder::CreateJaegerRemoteSampler(model); + } + + void VisitParentBased( + const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) override + { + sampler = SdkBuilder::CreateParentBasedSampler(model); + } + + void VisitTraceIdRatioBased( + const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model) + override + { + sampler = SdkBuilder::CreateTraceIdRatioBasedSampler(model); + } + + void VisitExtension( + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) override + { + sampler = SdkBuilder::CreateExtensionSampler(model); + } + + std::unique_ptr sampler; +}; + +std::unique_ptr SdkBuilder::CreateAlwaysOffSampler( + const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) +{ + std::unique_ptr sdk; + + sdk = opentelemetry::sdk::trace::AlwaysOffSamplerFactory::Create(); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateAlwaysOnSampler( + const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model) +{ + std::unique_ptr sdk; + + sdk = opentelemetry::sdk::trace::AlwaysOnSamplerFactory::Create(); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateJaegerRemoteSampler( + const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateJaegerRemoteSampler: FIXME"); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateParentBasedSampler( + const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) +{ + std::unique_ptr sdk; + + auto root_sdk = SdkBuilder::CreateSampler(model->root); + auto remote_parent_sampled_sdk = SdkBuilder::CreateSampler(model->remote_parent_sampled); + auto remote_parent_not_sampled_sdk = SdkBuilder::CreateSampler(model->remote_parent_not_sampled); + auto local_parent_sampled_sdk = SdkBuilder::CreateSampler(model->local_parent_sampled); + auto local_parent_not_sampled_sdk = SdkBuilder::CreateSampler(model->local_parent_not_sampled); + + OTEL_INTERNAL_LOG_ERROR("CreateParentBasedSampler: FIXME, missing param in parent factory"); + std::shared_ptr delegate_sampler = std::move(root_sdk); + sdk = opentelemetry::sdk::trace::ParentBasedSamplerFactory::Create(delegate_sampler); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateTraceIdRatioBasedSampler( + const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model) +{ + std::unique_ptr sdk; + + sdk = opentelemetry::sdk::trace::TraceIdRatioBasedSamplerFactory::Create(model->ratio); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateExtensionSampler( + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateExtensionSampler: FIXME"); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateSampler( + const std::unique_ptr &model) +{ + std::unique_ptr sdk; + + SamplerBuilder builder; + model->Accept(&builder); + sdk = std::move(builder.sampler); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateProcessor( + const std::unique_ptr &model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateProcessor: FIXME"); + + // sdk = xxx; + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateTracerProvider( + const std::unique_ptr &model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME"); + + auto sampler = CreateSampler(model->sampler); + + std::vector> sdk_processors; + + for (const auto &processor_model : model->processors) + { + sdk_processors.push_back(CreateProcessor(processor_model)); + } + + sdk = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(sdk_processors)); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateConfiguredSdk( + const std::unique_ptr &model) +{ + std::unique_ptr sdk(new ConfiguredSdk); + + if (!model->disabled) + { + sdk->m_tracer_provider = CreateTracerProvider(model->tracer_provider); + } + + return sdk; +} + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From 90e641887a245ec68e784f1eecaa19b65cff0a4b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 31 Jan 2024 04:01:58 +0100 Subject: [PATCH 007/166] POC, yaml tests. --- examples/yaml/main.cc | 2 +- .../sdk/configuration/configuration_factory.h | 5 +- .../sdk/configuration/document_node.h | 20 ++-- .../configuration/invalid_schema_exception.h | 29 ++++++ .../sdk/configuration/yaml_document.h | 2 +- .../sdk/configuration/yaml_document_node.h | 20 ++-- .../configuration/configuration_factory.cc | 35 +++++-- sdk/src/configuration/yaml_document.cc | 10 +- sdk/src/configuration/yaml_document_node.cc | 55 +++++------ sdk/test/CMakeLists.txt | 1 + sdk/test/configuration/CMakeLists.txt | 17 ++++ sdk/test/configuration/yaml_test.cc | 97 +++++++++++++++++++ 12 files changed, 232 insertions(+), 61 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h create mode 100644 sdk/test/configuration/CMakeLists.txt create mode 100644 sdk/test/configuration/yaml_test.cc diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 19ed73d815..b30026bcec 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -19,7 +19,7 @@ void InitOtel() // See // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml std::string config_file = "config.yaml"; - auto model = opentelemetry::sdk::configuration::ConfigurationFactory::Parse(config_file); + auto model = opentelemetry::sdk::configuration::ConfigurationFactory::ParseFile(config_file); sdk = opentelemetry::sdk::init::ConfiguredSdk::Create(model); diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h index e833f49780..ef54069c69 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include @@ -18,7 +19,9 @@ namespace configuration class ConfigurationFactory { public: - static std::unique_ptr Parse(std::string file_path); + static std::unique_ptr ParseFile(std::string filename); + static std::unique_ptr ParseString(std::string content); + static std::unique_ptr Parse(std::istream &in); }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index de8a8f0494..37603a5cc0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -33,20 +33,20 @@ class DocumentNode virtual double AsDouble() = 0; virtual std::string AsString() = 0; - virtual std::unique_ptr GetRequiredChildNode(std::string_view name) = 0; - virtual std::unique_ptr GetChildNode(std::string_view name) = 0; + virtual std::unique_ptr GetRequiredChildNode(const std::string &name) = 0; + virtual std::unique_ptr GetChildNode(const std::string &name) = 0; - virtual bool GetRequiredBoolean(std::string_view name) = 0; - virtual bool GetBoolean(std::string_view name, bool default_value) = 0; + virtual bool GetRequiredBoolean(const std::string &name) = 0; + virtual bool GetBoolean(const std::string &name, bool default_value) = 0; - virtual size_t GetRequiredInteger(std::string_view name) = 0; - virtual size_t GetInteger(std::string_view name, size_t default_value) = 0; + virtual size_t GetRequiredInteger(const std::string &name) = 0; + virtual size_t GetInteger(const std::string &name, size_t default_value) = 0; - virtual double GetRequiredDouble(std::string_view name) = 0; - virtual double GetDouble(std::string_view name, double default_value) = 0; + virtual double GetRequiredDouble(const std::string &name) = 0; + virtual double GetDouble(const std::string &name, double default_value) = 0; - virtual std::string GetRequiredString(std::string_view name) = 0; - virtual std::string GetString(std::string_view name, std::string_view default_value) = 0; + virtual std::string GetRequiredString(const std::string &name) = 0; + virtual std::string GetString(const std::string &name, const std::string &default_value) = 0; virtual DocumentNodeConstIterator begin() const = 0; virtual DocumentNodeConstIterator end() const = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h new file mode 100644 index 0000000000..7fbe31493d --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/document.h" +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class InvalidSchemaException : public std::runtime_error +{ +public: + InvalidSchemaException(const std::string &msg) : std::runtime_error(msg) {} + + ~InvalidSchemaException() override = default; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h index e88bf27343..1cf46cede4 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h @@ -19,7 +19,7 @@ namespace configuration class YamlDocument : public Document { public: - static std::unique_ptr Parse(std::string file_path); + static std::unique_ptr Parse(std::istream &in); YamlDocument(YAML::Node root) : m_root(root) {} ~YamlDocument() = default; diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h index 919b7f9dfc..9208c157f4 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h @@ -30,20 +30,20 @@ class YamlDocumentNode : public DocumentNode double AsDouble() override; std::string AsString() override; - std::unique_ptr GetRequiredChildNode(std::string_view name) override; - std::unique_ptr GetChildNode(std::string_view name) override; + std::unique_ptr GetRequiredChildNode(const std::string &name) override; + std::unique_ptr GetChildNode(const std::string &name) override; - bool GetRequiredBoolean(std::string_view name) override; - bool GetBoolean(std::string_view name, bool default_value) override; + bool GetRequiredBoolean(const std::string &name) override; + bool GetBoolean(const std::string &name, bool default_value) override; - size_t GetRequiredInteger(std::string_view name) override; - size_t GetInteger(std::string_view name, size_t default_value) override; + size_t GetRequiredInteger(const std::string &name) override; + size_t GetInteger(const std::string &name, size_t default_value) override; - double GetRequiredDouble(std::string_view name) override; - double GetDouble(std::string_view name, double default_value) override; + double GetRequiredDouble(const std::string &name) override; + double GetDouble(const std::string &name, double default_value) override; - std::string GetRequiredString(std::string_view name) override; - std::string GetString(std::string_view name, std::string_view default_value) override; + std::string GetRequiredString(const std::string &name) override; + std::string GetString(const std::string &name, const std::string &default_value) override; DocumentNodeConstIterator begin() const override; DocumentNodeConstIterator end() const override; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index cb9f532f9e..199c646030 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/common/global_log_handler.h" @@ -514,7 +515,29 @@ static std::unique_ptr ParseConfiguration(const std::unique_ptr ConfigurationFactory::Parse(std::string file_path) +std::unique_ptr ConfigurationFactory::ParseFile(std::string filename) +{ + std::unique_ptr conf; + std::ifstream in(filename, std::ios::binary); + if (!in.is_open()) + { + OTEL_INTERNAL_LOG_ERROR("Failed to open yaml file <" << filename << ">."); + } + else + { + conf = ConfigurationFactory::Parse(in); + } + + return Parse(in); +} + +std::unique_ptr ConfigurationFactory::ParseString(std::string content) +{ + std::istringstream in(content); + return Parse(in); +} + +std::unique_ptr ConfigurationFactory::Parse(std::istream &in) { std::unique_ptr doc; std::unique_ptr root; @@ -522,17 +545,17 @@ std::unique_ptr ConfigurationFactory::Parse(std::string file_path try { - doc = YamlDocument::Parse(file_path); + doc = YamlDocument::Parse(in); root = doc->GetRootNode(); } catch (YAML::BadFile e) { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">, " << e.what()); + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml, " << e.what()); return config; } catch (...) { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml."); return config; } @@ -542,11 +565,11 @@ std::unique_ptr ConfigurationFactory::Parse(std::string file_path } catch (YAML::Exception e) { - OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml file <" << file_path << ">, " << e.what()); + OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml, " << e.what()); } catch (...) { - OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml file <" << file_path << ">"); + OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml."); } return config; diff --git a/sdk/src/configuration/yaml_document.cc b/sdk/src/configuration/yaml_document.cc index 8c48c8ea9f..a0d1fa7bc7 100644 --- a/sdk/src/configuration/yaml_document.cc +++ b/sdk/src/configuration/yaml_document.cc @@ -15,29 +15,29 @@ namespace sdk namespace configuration { -std::unique_ptr YamlDocument::Parse(std::string file_path) +std::unique_ptr YamlDocument::Parse(std::istream &in) { YAML::Node yaml; std::unique_ptr doc; try { - yaml = YAML::LoadFile(file_path); + yaml = YAML::Load(in); } catch (YAML::BadFile e) { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">, " << e.what()); + OTEL_INTERNAL_LOG_ERROR("Failed to load yaml, " << e.what()); return doc; } catch (...) { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); + OTEL_INTERNAL_LOG_ERROR("Failed to load yaml."); return doc; } if (yaml.Type() == YAML::NodeType::Undefined) { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml file <" << file_path << ">"); + OTEL_INTERNAL_LOG_ERROR("Failed to load yaml."); return doc; } diff --git a/sdk/src/configuration/yaml_document_node.cc b/sdk/src/configuration/yaml_document_node.cc index 20540d3cd9..9a84f5302b 100644 --- a/sdk/src/configuration/yaml_document_node.cc +++ b/sdk/src/configuration/yaml_document_node.cc @@ -5,6 +5,7 @@ #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/yaml_document.h" #include "opentelemetry/sdk/configuration/yaml_document_node.h" #include "opentelemetry/version.h" @@ -59,7 +60,7 @@ bool YamlDocumentNode::AsBoolean() if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - // FIXME: throw + throw InvalidSchemaException(""); } bool value = m_yaml.as(); return value; @@ -70,7 +71,7 @@ size_t YamlDocumentNode::AsInteger() if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - // FIXME: throw + throw InvalidSchemaException(""); } size_t value = m_yaml.as(); return value; @@ -81,7 +82,7 @@ double YamlDocumentNode::AsDouble() if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - // FIXME: throw + throw InvalidSchemaException(""); } double value = m_yaml.as(); return value; @@ -92,13 +93,13 @@ std::string YamlDocumentNode::AsString() if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - // FIXME: throw + throw InvalidSchemaException(""); } std::string value = m_yaml.as(); return value; } -std::unique_ptr YamlDocumentNode::GetRequiredChildNode(std::string_view name) +std::unique_ptr YamlDocumentNode::GetRequiredChildNode(const std::string &name) { std::unique_ptr child; @@ -107,13 +108,13 @@ std::unique_ptr YamlDocumentNode::GetRequiredChildNode(std::string if (!yaml_child) { OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } child = std::unique_ptr(new YamlDocumentNode(yaml_child)); return child; } -std::unique_ptr YamlDocumentNode::GetChildNode(std::string_view name) +std::unique_ptr YamlDocumentNode::GetChildNode(const std::string &name) { std::unique_ptr child; @@ -126,24 +127,24 @@ std::unique_ptr YamlDocumentNode::GetChildNode(std::string_view na return child; } -bool YamlDocumentNode::GetRequiredBoolean(std::string_view name) +bool YamlDocumentNode::GetRequiredBoolean(const std::string &name) { YAML::Node attr = m_yaml[name]; if (!attr) { OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: bool node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } bool value = attr.as(); return value; } -bool YamlDocumentNode::GetBoolean(std::string_view name, bool default_value) +bool YamlDocumentNode::GetBoolean(const std::string &name, bool default_value) { bool value = default_value; YAML::Node attr = m_yaml[name]; @@ -152,31 +153,31 @@ bool YamlDocumentNode::GetBoolean(std::string_view name, bool default_value) if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: bool node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } value = attr.as(); } return value; } -size_t YamlDocumentNode::GetRequiredInteger(std::string_view name) +size_t YamlDocumentNode::GetRequiredInteger(const std::string &name) { YAML::Node attr = m_yaml[name]; if (!attr) { OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } size_t value = attr.as(); return value; } -size_t YamlDocumentNode::GetInteger(std::string_view name, size_t default_value) +size_t YamlDocumentNode::GetInteger(const std::string &name, size_t default_value) { size_t value = default_value; YAML::Node attr = m_yaml[name]; @@ -185,31 +186,31 @@ size_t YamlDocumentNode::GetInteger(std::string_view name, size_t default_value) if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } value = attr.as(); } return value; } -double YamlDocumentNode::GetRequiredDouble(std::string_view name) +double YamlDocumentNode::GetRequiredDouble(const std::string &name) { YAML::Node attr = m_yaml[name]; if (!attr) { OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: double node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } double value = attr.as(); return value; } -double YamlDocumentNode::GetDouble(std::string_view name, double default_value) +double YamlDocumentNode::GetDouble(const std::string &name, double default_value) { double value = default_value; YAML::Node attr = m_yaml[name]; @@ -218,31 +219,31 @@ double YamlDocumentNode::GetDouble(std::string_view name, double default_value) if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: double node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } value = attr.as(); } return value; } -std::string YamlDocumentNode::GetRequiredString(std::string_view name) +std::string YamlDocumentNode::GetRequiredString(const std::string &name) { YAML::Node attr = m_yaml[name]; if (!attr) { OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } std::string value = attr.as(); return value; } -std::string YamlDocumentNode::GetString(std::string_view name, std::string_view default_value) +std::string YamlDocumentNode::GetString(const std::string &name, const std::string &default_value) { std::string value(default_value); YAML::Node attr = m_yaml[name]; @@ -251,7 +252,7 @@ std::string YamlDocumentNode::GetString(std::string_view name, std::string_view if (!attr.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); - // FIXME: throw + throw InvalidSchemaException(name); } value = attr.as(); } diff --git a/sdk/test/CMakeLists.txt b/sdk/test/CMakeLists.txt index 33dd07f81a..3ea45b36e5 100644 --- a/sdk/test/CMakeLists.txt +++ b/sdk/test/CMakeLists.txt @@ -7,3 +7,4 @@ add_subdirectory(metrics) add_subdirectory(logs) add_subdirectory(resource) add_subdirectory(instrumentationscope) +add_subdirectory(configuration) diff --git a/sdk/test/configuration/CMakeLists.txt b/sdk/test/configuration/CMakeLists.txt new file mode 100644 index 0000000000..580c1457b4 --- /dev/null +++ b/sdk/test/configuration/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +foreach( + testname + yaml_test) + add_executable(${testname} "${testname}.cc") + target_link_libraries( + ${testname} + ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + opentelemetry_configuration) + gtest_add_tests( + TARGET ${testname} + TEST_PREFIX trace. + TEST_LIST ${testname}) +endforeach() diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc new file mode 100644 index 0000000000..c75421520f --- /dev/null +++ b/sdk/test/configuration/yaml_test.cc @@ -0,0 +1,97 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/configuration/configuration_factory.h" + +std::unique_ptr +DoParse(std::string yaml) +{ + return opentelemetry::sdk::configuration::ConfigurationFactory::ParseString(yaml); +} + +TEST(Yaml, empty) +{ + std::string yaml = ""; + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, no_format) +{ + std::string yaml = R"( +file_format: +)"; + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, just_format) +{ + std::string yaml = R"( +file_format: xx.yy +)"; + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "xx.yy"); +} + +TEST(Yaml, disabled) +{ + std::string yaml = R"( +file_format: xx.yy +disabled: true +)"; + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "xx.yy"); + ASSERT_EQ(config->disabled, true); +} + +TEST(Yaml, enabled) +{ + std::string yaml = R"( +file_format: xx.yy +disabled: false +)"; + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "xx.yy"); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, enabled_by_default) +{ + std::string yaml = R"( +file_format: xx.yy +)"; + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "xx.yy"); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, no_processors) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: +)"; + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, processors) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: +)"; + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + + + From 469bc0e345ab559766c91ead0e3dc0a22c4858cd Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 1 Feb 2024 02:01:01 +0100 Subject: [PATCH 008/166] POC --- .../batch_span_processor_configuration.h | 6 + .../extension_span_exporter_configuration.h | 31 ++++ .../extension_span_processor_configuration.h | 31 ++++ .../otlp_span_exporter_configuration.h | 6 + .../simple_span_processor_configuration.h | 6 + .../span_exporter_configuration.h | 2 + .../span_exporter_configuration_visitor.h | 28 ++++ .../span_processor_configuration.h | 2 + .../span_processor_configuration_visitor.h | 28 ++++ .../zipkin_span_exporter_configuration.h | 6 + .../opentelemetry/sdk/init/sdk_builder.h | 29 ++++ .../configuration/configuration_factory.cc | 2 +- sdk/src/init/sdk_builder.cc | 148 +++++++++++++++++- 13 files changed, 323 insertions(+), 2 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h index c64f6ab529..cff399b2e6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -5,6 +5,7 @@ #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,6 +17,11 @@ namespace configuration class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration { public: + void Accept(SpanProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitBatch(this); + } + size_t schedule_delay; size_t export_timeout; size_t max_queue_size; diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h new file mode 100644 index 0000000000..3d5c244a0c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h new file mode 100644 index 0000000000..49733f35f5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionSpanProcessorConfiguration : public SpanProcessorConfiguration +{ +public: + void Accept(SpanProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h index 5217ae4fe5..90a4b7c7d3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h @@ -5,6 +5,7 @@ #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,6 +17,11 @@ namespace configuration class OtlpSpanExporterConfiguration : public SpanExporterConfiguration { public: + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlp(this); + } + std::string protocol; std::string endpoint; std::string certificate; diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h index 12d037f887..9204a9f7d2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,6 +16,11 @@ namespace configuration class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration { public: + void Accept(SpanProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitSimple(this); + } + std::unique_ptr exporter; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h index 89e4646770..9e3e0e41b0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h @@ -10,10 +10,12 @@ namespace sdk { namespace configuration { +class SpanExporterConfigurationVisitor; class SpanExporterConfiguration { public: + virtual void Accept(SpanExporterConfigurationVisitor *visitor) const = 0; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h new file mode 100644 index 0000000000..955b8a3c23 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpSpanExporterConfiguration; +class ZipkinSpanExporterConfiguration; +class ExtensionSpanExporterConfiguration; + +class SpanExporterConfigurationVisitor +{ +public: + virtual void VisitOtlp(const OtlpSpanExporterConfiguration *model) = 0; + virtual void VisitZipkin(const ZipkinSpanExporterConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionSpanExporterConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h index 7df54cf71b..58a1204e68 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h @@ -10,10 +10,12 @@ namespace sdk { namespace configuration { +class SpanProcessorConfigurationVisitor; class SpanProcessorConfiguration { public: + virtual void Accept(SpanProcessorConfigurationVisitor *visitor) const = 0; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h new file mode 100644 index 0000000000..df174cd518 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class BatchSpanProcessorConfiguration; +class SimpleSpanProcessorConfiguration; +class ExtensionSpanProcessorConfiguration; + +class SpanProcessorConfigurationVisitor +{ +public: + virtual void VisitBatch(const BatchSpanProcessorConfiguration *model) = 0; + virtual void VisitSimple(const SimpleSpanProcessorConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionSpanProcessorConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h index 6b1cd72dae..21f40ba67e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,6 +16,11 @@ namespace configuration class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration { public: + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitZipkin(this); + } + std::string endpoint; size_t timeout; }; diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index fa1b1d4887..3613ceb96f 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -4,7 +4,15 @@ #pragma once #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/sampler.h" #include "opentelemetry/trace/tracer_provider.h" @@ -40,6 +48,27 @@ class SdkBuilder static std::unique_ptr CreateSampler( const std::unique_ptr &model); + static std::unique_ptr CreateOtlpSpanExporter( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model); + + static std::unique_ptr CreateZipkinSpanExporter( + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model); + + static std::unique_ptr CreateExtensionSpanExporter( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model); + + static std::unique_ptr CreateSpanExporter( + const std::unique_ptr &model); + + static std::unique_ptr CreateBatchSpanProcessor( + const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model); + + static std::unique_ptr CreateSimpleSpanProcessor( + const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model); + + static std::unique_ptr CreateExtensionSpanProcessor( + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model); + static std::unique_ptr CreateProcessor( const std::unique_ptr &model); diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 199c646030..120d856030 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -528,7 +528,7 @@ std::unique_ptr ConfigurationFactory::ParseFile(std::string filen conf = ConfigurationFactory::Parse(in); } - return Parse(in); + return conf; } std::unique_ptr ConfigurationFactory::ParseString(std::string content) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 8b7d99ddb3..9f4b6744f3 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -15,17 +15,22 @@ #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/sdk_builder.h" +#include "opentelemetry/sdk/trace/batch_span_processor_factory.h" +#include "opentelemetry/sdk/trace/batch_span_processor_options.h" #include "opentelemetry/sdk/trace/processor.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_provider_factory.h" #include "opentelemetry/version.h" @@ -78,6 +83,56 @@ class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigur std::unique_ptr sampler; }; +class SpanProcessorBuilder + : public opentelemetry::sdk::configuration::SpanProcessorConfigurationVisitor +{ +public: + void VisitBatch( + const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) override + { + processor = SdkBuilder::CreateBatchSpanProcessor(model); + } + + void VisitSimple( + const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model) override + { + processor = SdkBuilder::CreateSimpleSpanProcessor(model); + } + + void VisitExtension( + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) override + { + processor = SdkBuilder::CreateExtensionSpanProcessor(model); + } + + std::unique_ptr processor; +}; + +class SpanExporterBuilder + : public opentelemetry::sdk::configuration::SpanExporterConfigurationVisitor +{ +public: + void VisitOtlp( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) override + { + exporter = SdkBuilder::CreateOtlpSpanExporter(model); + } + + void VisitZipkin( + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) override + { + exporter = SdkBuilder::CreateZipkinSpanExporter(model); + } + + void VisitExtension( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) override + { + exporter = SdkBuilder::CreateExtensionSpanExporter(model); + } + + std::unique_ptr exporter; +}; + std::unique_ptr SdkBuilder::CreateAlwaysOffSampler( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) { @@ -158,6 +213,95 @@ std::unique_ptr SdkBuilder::CreateSampler( return sdk; } +std::unique_ptr SdkBuilder::CreateOtlpSpanExporter( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateOtlpSpanExporter: FIXME"); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateZipkinSpanExporter( + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateZipkinSpanExporter: FIXME"); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateExtensionSpanExporter( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanExporter: FIXME"); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateSpanExporter( + const std::unique_ptr &model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateSpanExporter: FIXME"); + + SpanExporterBuilder builder; + model->Accept(&builder); + sdk = std::move(builder.exporter); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateBatchSpanProcessor( + const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) +{ + std::unique_ptr sdk; + opentelemetry::sdk::trace::BatchSpanProcessorOptions options; + + options.schedule_delay_millis = std::chrono::milliseconds(model->schedule_delay); + +#ifdef LATER + options.xxx = model->export_timeout; +#endif + + options.max_queue_size = model->max_queue_size; + options.max_export_batch_size = model->max_export_batch_size; + + auto exporter_sdk = CreateSpanExporter(model->exporter); + + OTEL_INTERNAL_LOG_ERROR("CreateBatchSpanProcessor: FIXME"); + + // sdk = opentelemetry::sdk::trace::BatchSpanProcessorFactory::Create(exporter_sdk, options); + return sdk; +} + +std::unique_ptr SdkBuilder::CreateSimpleSpanProcessor( + const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model) +{ + std::unique_ptr sdk; + + auto exporter_sdk = CreateSpanExporter(model->exporter); + + sdk = opentelemetry::sdk::trace::SimpleSpanProcessorFactory::Create(std::move(exporter_sdk)); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateExtensionSpanProcessor( + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanProcessor: FIXME"); + + return sdk; +} + std::unique_ptr SdkBuilder::CreateProcessor( const std::unique_ptr &model) { @@ -165,7 +309,9 @@ std::unique_ptr SdkBuilder::CreateProc OTEL_INTERNAL_LOG_ERROR("CreateProcessor: FIXME"); - // sdk = xxx; + SpanProcessorBuilder builder; + model->Accept(&builder); + sdk = std::move(builder.processor); return sdk; } From 8af0eed83a0ceb856e55d92a808074a7380a41db Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 2 Feb 2024 01:03:29 +0100 Subject: [PATCH 009/166] POC, continued. --- examples/yaml/CMakeLists.txt | 8 ++- examples/yaml/main.cc | 12 ++++ exporters/ostream/CMakeLists.txt | 3 +- .../exporters/ostream/console_builder.h | 30 ++++++++++ exporters/ostream/src/console_builder.cc | 30 ++++++++++ exporters/otlp/CMakeLists.txt | 11 ++++ .../exporters/otlp/otlp_builder.h | 31 +++++++++++ exporters/otlp/src/otlp_builder.cc | 32 +++++++++++ exporters/zipkin/CMakeLists.txt | 3 +- .../exporters/zipkin/zipkin_builder.h | 31 +++++++++++ exporters/zipkin/src/zipkin_builder.cc | 33 +++++++++++ .../console_span_exporter_configuration.h | 27 +++++++++ .../span_exporter_configuration_visitor.h | 2 + .../sdk/init/console_span_exporter_builder.h | 25 +++++++++ .../sdk/init/otlp_span_exporter_builder.h | 25 +++++++++ sdk/include/opentelemetry/sdk/init/registry.h | 16 +++++- .../opentelemetry/sdk/init/sdk_builder.h | 3 + .../sdk/init/zipkin_span_exporter_builder.h | 25 +++++++++ .../configuration/configuration_factory.cc | 47 ++++++++++++++-- sdk/src/init/CMakeLists.txt | 2 +- sdk/src/init/registry.cc | 50 +++++++++++++++++ sdk/src/init/sdk_builder.cc | 55 +++++++++++++++++-- 22 files changed, 485 insertions(+), 16 deletions(-) create mode 100644 exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h create mode 100644 exporters/ostream/src/console_builder.cc create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h create mode 100644 exporters/otlp/src/otlp_builder.cc create mode 100644 exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h create mode 100644 exporters/zipkin/src/zipkin_builder.cc create mode 100644 sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h create mode 100644 sdk/src/init/registry.cc diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index a8813d04ae..27320f41fe 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -7,9 +7,15 @@ endif() include_directories(${CMAKE_SOURCE_DIR}/sdk/include) +include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) +include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) + add_executable(example_yaml main.cc) target_link_libraries(example_yaml ${CMAKE_THREAD_LIBS_INIT} - common_foo_library) + common_foo_library opentelemetry_otlp_builder + opentelemetry_exporter_otlp_http + opentelemetry_exporter_zipkin_trace + opentelemetry_exporter_ostream_span) if(DEFINED OPENTELEMETRY_BUILD_DLL) target_link_libraries(example_yaml opentelemetry_cpp) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index b30026bcec..ff37cf6f04 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -10,17 +10,29 @@ # include "foo_library/foo_library.h" #endif +#include "opentelemetry/exporters/otlp/otlp_builder.h" +#include "opentelemetry/exporters/ostream/console_builder.h" +#include "opentelemetry/exporters/zipkin/zipkin_builder.h" + + std::unique_ptr sdk; namespace { void InitOtel() { + opentelemetry::exporter::otlp::OtlpBuilder::Register(nullptr); + opentelemetry::exporter::trace::ConsoleBuilder::Register(nullptr); + opentelemetry::exporter::zipkin::ZipkinBuilder::Register(nullptr); + // See // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml std::string config_file = "config.yaml"; auto model = opentelemetry::sdk::configuration::ConfigurationFactory::ParseFile(config_file); + + + sdk = opentelemetry::sdk::init::ConfiguredSdk::Create(model); if (sdk != nullptr) diff --git a/exporters/ostream/CMakeLists.txt b/exporters/ostream/CMakeLists.txt index e08d6592a3..be106594e0 100644 --- a/exporters/ostream/CMakeLists.txt +++ b/exporters/ostream/CMakeLists.txt @@ -2,7 +2,8 @@ # SPDX-License-Identifier: Apache-2.0 add_library(opentelemetry_exporter_ostream_span src/span_exporter.cc - src/span_exporter_factory.cc) + src/span_exporter_factory.cc + src/console_builder.cc) set_target_properties(opentelemetry_exporter_ostream_span PROPERTIES EXPORT_NAME ostream_span_exporter) diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h new file mode 100644 index 0000000000..ff8e184be1 --- /dev/null +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/init/console_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace trace +{ + +class OPENTELEMETRY_EXPORT ConsoleBuilder + : public opentelemetry::sdk::init::ConsoleSpanExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/ostream/src/console_builder.cc b/exporters/ostream/src/console_builder.cc new file mode 100644 index 0000000000..6524f772d4 --- /dev/null +++ b/exporters/ostream/src/console_builder.cc @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/ostream/span_exporter_factory.h" +#include "opentelemetry/exporters/ostream/span_exporter.h" +#include "opentelemetry/exporters/ostream/console_builder.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace trace +{ + +static ConsoleBuilder singleton; + +void ConsoleBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + opentelemetry::sdk::init::Registry::SetConsoleBuilder(& singleton); +} + +std::unique_ptr ConsoleBuilder::Build( +const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const +{ + return OStreamSpanExporterFactory::Create(); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index ec55211a6d..b4c1c1d0c3 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -1,6 +1,17 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 +add_library( + opentelemetry_otlp_builder src/otlp_builder.cc) +set_target_properties(opentelemetry_otlp_builder PROPERTIES EXPORT_NAME + otlp_builder) +set_target_version(opentelemetry_otlp_builder) + +target_include_directories( + opentelemetry_otlp_builder + PUBLIC "$" + "$") + add_library( opentelemetry_otlp_recordable src/otlp_environment.cc src/otlp_log_recordable.cc src/otlp_recordable.cc diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h new file mode 100644 index 0000000000..542001238f --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" +#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpBuilder + : public opentelemetry::sdk::init::OtlpSpanExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_builder.cc b/exporters/otlp/src/otlp_builder.cc new file mode 100644 index 0000000000..25e940cf97 --- /dev/null +++ b/exporters/otlp/src/otlp_builder.cc @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_http_exporter.h" +#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" +#include "opentelemetry/exporters/otlp/otlp_builder.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpBuilder singleton; + +void OtlpBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + opentelemetry::sdk::init::Registry::SetOtlpBuilder(& singleton); +} + +std::unique_ptr OtlpBuilder::Build( +const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const +{ + OtlpHttpExporterOptions options; + return OtlpHttpExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/zipkin/CMakeLists.txt b/exporters/zipkin/CMakeLists.txt index 60f8a80a2a..e7cf69a38a 100644 --- a/exporters/zipkin/CMakeLists.txt +++ b/exporters/zipkin/CMakeLists.txt @@ -5,7 +5,8 @@ include_directories(include) add_definitions(-DWITH_CURL) add_library( opentelemetry_exporter_zipkin_trace - src/zipkin_exporter.cc src/zipkin_exporter_factory.cc src/recordable.cc) + src/zipkin_exporter.cc src/zipkin_exporter_factory.cc src/recordable.cc + src/zipkin_builder.cc) target_include_directories( opentelemetry_exporter_zipkin_trace diff --git a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h new file mode 100644 index 0000000000..d0025fd648 --- /dev/null +++ b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" +#include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace zipkin +{ + +class OPENTELEMETRY_EXPORT ZipkinBuilder + : public opentelemetry::sdk::init::ZipkinSpanExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc new file mode 100644 index 0000000000..425fd72446 --- /dev/null +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" +#include "opentelemetry/exporters/zipkin/zipkin_exporter.h" +#include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" +#include "opentelemetry/exporters/zipkin/zipkin_builder.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace zipkin +{ + +static ZipkinBuilder singleton; + +void ZipkinBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + opentelemetry::sdk::init::Registry::SetZipkinBuilder(& singleton); +} + +std::unique_ptr ZipkinBuilder::Build( +const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const +{ + // FIXME: from model + ZipkinExporterOptions options; + return ZipkinExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h new file mode 100644 index 0000000000..9967e82840 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h @@ -0,0 +1,27 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ConsoleSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitConsole(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h index 955b8a3c23..68100eaa83 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h @@ -12,6 +12,7 @@ namespace configuration { class OtlpSpanExporterConfiguration; +class ConsoleSpanExporterConfiguration; class ZipkinSpanExporterConfiguration; class ExtensionSpanExporterConfiguration; @@ -19,6 +20,7 @@ class SpanExporterConfigurationVisitor { public: virtual void VisitOtlp(const OtlpSpanExporterConfiguration *model) = 0; + virtual void VisitConsole(const ConsoleSpanExporterConfiguration *model) = 0; virtual void VisitZipkin(const ZipkinSpanExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionSpanExporterConfiguration *model) = 0; }; diff --git a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h new file mode 100644 index 0000000000..5c1aa4c74a --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ConsoleSpanExporterBuilder +{ +public: + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h new file mode 100644 index 0000000000..c35ad2b116 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpSpanExporterBuilder +{ +public: + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 8b1dff57b6..fff241d82d 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -3,7 +3,6 @@ #pragma once -#include "opentelemetry/sdk/common/attribute_utils.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -11,9 +10,22 @@ namespace sdk { namespace init { +class OtlpSpanExporterBuilder; +class ConsoleSpanExporterBuilder; +class ZipkinSpanExporterBuilder; class Registry -{}; +{ +public: + static const OtlpSpanExporterBuilder *GetOtlpBuilder(); + static void SetOtlpBuilder(const OtlpSpanExporterBuilder * builder); + + static const ConsoleSpanExporterBuilder *GetConsoleBuilder(); + static void SetConsoleBuilder(const ConsoleSpanExporterBuilder * builder); + + static const ZipkinSpanExporterBuilder *GetZipkinBuilder(); + static void SetZipkinBuilder(const ZipkinSpanExporterBuilder * builder); +}; } // namespace init } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 3613ceb96f..03818d9797 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -51,6 +51,9 @@ class SdkBuilder static std::unique_ptr CreateOtlpSpanExporter( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model); + static std::unique_ptr CreateConsoleSpanExporter( + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model); + static std::unique_ptr CreateZipkinSpanExporter( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model); diff --git a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h new file mode 100644 index 0000000000..4126b09c19 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ZipkinSpanExporterBuilder +{ +public: + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 120d856030..7d8671cd79 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -14,12 +14,15 @@ #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" @@ -281,6 +284,14 @@ static std::unique_ptr ParseOtlpSpanExporterConfi return model; } +static std::unique_ptr ParseConsoleSpanExporterConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new ConsoleSpanExporterConfiguration); + + return model; +} + static std::unique_ptr ParseZipkinSpanExporterConfiguration( const std::unique_ptr &node) { @@ -292,6 +303,18 @@ static std::unique_ptr ParseZipkinSpanExporterC return model; } +static std::unique_ptr ParseExtensionSpanExporterConfiguration( + const std::string &name, + const std::unique_ptr &node) +{ + std::unique_ptr model(new ExtensionSpanExporterConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParseExtensionSpanExporterConfiguration: FIXME"); + model->name = name; + + return model; +} + static std::unique_ptr ParseSpanExporterConfiguration( const std::unique_ptr &node) { @@ -318,15 +341,17 @@ static std::unique_ptr ParseSpanExporterConfiguration { model = ParseOtlpSpanExporterConfiguration(child); } + else if (name == "console") + { + model = ParseConsoleSpanExporterConfiguration(child); + } else if (name == "zipkin") { model = ParseZipkinSpanExporterConfiguration(child); } else { -#ifdef LATER - model = ParseSpanExporterExtensionConfiguration(name, child); -#endif + model = ParseExtensionSpanExporterConfiguration(name, child); } return model; @@ -361,6 +386,18 @@ static std::unique_ptr ParseSimpleSpanProcesso return model; } +static std::unique_ptr ParseExtensionSpanProcessorConfiguration( + const std::string &name, + const std::unique_ptr &node) +{ + std::unique_ptr model(new ExtensionSpanProcessorConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParseExtensionSpanProcessorConfiguration: FIXME"); + model->name = name; + + return model; +} + static std::unique_ptr ParseSpanProcessorConfiguration( const std::unique_ptr &node) { @@ -393,9 +430,7 @@ static std::unique_ptr ParseSpanProcessorConfigurati } else { -#ifdef LATER - model = ParseSpanProcessorExtensionConfiguration(name, child); -#endif + model = ParseExtensionSpanProcessorConfiguration(name, child); } return model; diff --git a/sdk/src/init/CMakeLists.txt b/sdk/src/init/CMakeLists.txt index d336b83d92..5a480dd3fc 100644 --- a/sdk/src/init/CMakeLists.txt +++ b/sdk/src/init/CMakeLists.txt @@ -3,7 +3,7 @@ add_library( opentelemetry_init - configured_sdk.cc sdk_builder.cc) + configured_sdk.cc sdk_builder.cc registry.cc) set_target_properties(opentelemetry_init PROPERTIES EXPORT_NAME init) set_target_version(opentelemetry_init) diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc new file mode 100644 index 0000000000..c0486e7dd2 --- /dev/null +++ b/sdk/src/init/registry.cc @@ -0,0 +1,50 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +static const OtlpSpanExporterBuilder *otlp_singleton = nullptr; +static const ConsoleSpanExporterBuilder *console_singleton = nullptr; +static const ZipkinSpanExporterBuilder *zipkin_singleton = nullptr; + +const OtlpSpanExporterBuilder* Registry::GetOtlpBuilder() { + return otlp_singleton; +} + +void Registry::SetOtlpBuilder(const OtlpSpanExporterBuilder * builder) +{ + otlp_singleton = builder; +} + +const ConsoleSpanExporterBuilder* Registry::GetConsoleBuilder() { + return console_singleton; +} + +void Registry::SetConsoleBuilder(const ConsoleSpanExporterBuilder * builder) +{ + console_singleton = builder; +} + +const ZipkinSpanExporterBuilder* Registry::GetZipkinBuilder() { + return zipkin_singleton; +} + +void Registry::SetZipkinBuilder(const ZipkinSpanExporterBuilder * builder) +{ + zipkin_singleton = builder; +} + + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 9f4b6744f3..70ca7d7fea 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -19,9 +19,14 @@ #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/sdk_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/init/console_span_exporter_builder.h" +#include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_options.h" #include "opentelemetry/sdk/trace/processor.h" @@ -118,6 +123,12 @@ class SpanExporterBuilder exporter = SdkBuilder::CreateOtlpSpanExporter(model); } + void VisitConsole( + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) override + { + exporter = SdkBuilder::CreateConsoleSpanExporter(model); + } + void VisitZipkin( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) override { @@ -217,8 +228,34 @@ std::unique_ptr SdkBuilder::CreateOtlpS const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) { std::unique_ptr sdk; + const OtlpSpanExporterBuilder *builder = Registry::GetOtlpBuilder(); + + if (builder != nullptr) { + OTEL_INTERNAL_LOG_ERROR("before builder for OtlpSpanExporter"); + sdk = builder->Build(model); + OTEL_INTERNAL_LOG_ERROR("after builder for OtlpSpanExporter"); + } else { + OTEL_INTERNAL_LOG_ERROR("No builder for OtlpSpanExporter"); + // Throw + } - OTEL_INTERNAL_LOG_ERROR("CreateOtlpSpanExporter: FIXME"); + return sdk; +} + +std::unique_ptr SdkBuilder::CreateConsoleSpanExporter( + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) +{ + std::unique_ptr sdk; + const ConsoleSpanExporterBuilder *builder = Registry::GetConsoleBuilder(); + + if (builder != nullptr) { + OTEL_INTERNAL_LOG_ERROR("before builder for ConsoleSpanExporter"); + sdk = builder->Build(model); + OTEL_INTERNAL_LOG_ERROR("after builder for ConsoleSpanExporter"); + } else { + OTEL_INTERNAL_LOG_ERROR("No builder for ConsoleSpanExporter"); + // Throw + } return sdk; } @@ -227,8 +264,16 @@ std::unique_ptr SdkBuilder::CreateZipki const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) { std::unique_ptr sdk; - - OTEL_INTERNAL_LOG_ERROR("CreateZipkinSpanExporter: FIXME"); + const ZipkinSpanExporterBuilder *builder = Registry::GetZipkinBuilder(); + + if (builder != nullptr) { + OTEL_INTERNAL_LOG_ERROR("before builder for ZipkinSpanExporter"); + sdk = builder->Build(model); + OTEL_INTERNAL_LOG_ERROR("after builder for ZipkinSpanExporter"); + } else { + OTEL_INTERNAL_LOG_ERROR("No builder for ZipkinSpanExporter"); + // Throw + } return sdk; } @@ -248,12 +293,14 @@ std::unique_ptr SdkBuilder::CreateSpanE { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("CreateSpanExporter: FIXME"); + OTEL_INTERNAL_LOG_ERROR("CreateSpanExporter: before"); SpanExporterBuilder builder; model->Accept(&builder); sdk = std::move(builder.exporter); + OTEL_INTERNAL_LOG_ERROR("CreateSpanExporter: after"); + return sdk; } From de491464d8f96320d19707d3f854e84244e70739 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 6 Feb 2024 00:33:03 +0100 Subject: [PATCH 010/166] CI --- .github/workflows/ci.yml | 33 +++++++++++++++++++++++++++++++++ ci/install_yaml_cpp.sh | 31 +++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100755 ci/install_yaml_cpp.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9772ccc2c3..045e87202d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -124,6 +124,39 @@ jobs: run: | (cd ./functional/otlp; ./run_test.sh) + cmake_clang_yaml_config: + name: CMake clang 15 (maintainer mode, yaml, sync) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/clang-15 + CXX: /usr/bin/clang++-15 + PROTOBUF_VERSION: 21.12 + run: | + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/install_protobuf.sh + sudo -E ./ci/install_yaml_cpp.sh + - name: run cmake clang (maintainer mode, sync) + env: + CC: /usr/bin/clang-15 + CXX: /usr/bin/clang++-15 + run: | + ./ci/do_ci.sh cmake.maintainer.sync.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + cmake_clang_maintainer_async_test: name: CMake clang 15 (maintainer mode, async) runs-on: ubuntu-latest diff --git a/ci/install_yaml_cpp.sh b/ci/install_yaml_cpp.sh new file mode 100755 index 0000000000..6bea736a49 --- /dev/null +++ b/ci/install_yaml_cpp.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +set -ex +export DEBIAN_FRONTEND=noninteractive +[ -z "${YAML_CPP_VERSION}" ] && export YAML_CPP_VERSION="0.8.0" + +BUILD_DIR=/tmp/ +INSTALL_DIR=/usr/local/ +pushd $BUILD_DIR +git clone --depth=1 -b ${YAML_CPP_VERSION} https://github.com/jbeder/yaml-cpp.git +cd yaml-cpp +YAML_CPP_BUILD_OPTIONS=( + "-DBUILD_TESTING=OFF" + "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" + "-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR" +) + +if [ ! -z "${CXX_STANDARD}" ]; then + YAML_CPP_BUILD_OPTIONS=(${YAML_CPP_BUILD_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}") +fi + +mkdir build && pushd build +cmake ${YAML_CPP_BUILD_OPTIONS[@]} .. +make -j $(nproc) +make install +popd +popd +export PATH=${INSTALL_DIR}/bin:$PATH # ensure to use the installed yaml-cpp From 9d12c76c20258078ca150cef1b253ea9f50f54b4 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 6 Feb 2024 01:54:10 +0100 Subject: [PATCH 011/166] POC - Registry --- examples/yaml/main.cc | 26 ++-- exporters/ostream/src/console_builder.cc | 10 +- exporters/otlp/src/otlp_builder.cc | 9 +- exporters/otlp/src/otlp_grpc_client.cc | 2 +- exporters/zipkin/src/zipkin_builder.cc | 10 +- .../opentelemetry/sdk/init/configured_sdk.h | 2 + sdk/include/opentelemetry/sdk/init/registry.h | 20 ++- .../opentelemetry/sdk/init/sdk_builder.h | 85 +++++++------ .../configuration/configuration_factory.cc | 33 ++--- sdk/src/configuration/yaml_document.cc | 2 +- sdk/src/init/configured_sdk.cc | 4 +- sdk/src/init/registry.cc | 38 +----- sdk/src/init/sdk_builder.cc | 119 +++++++++++------- 13 files changed, 193 insertions(+), 167 deletions(-) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index ff37cf6f04..18925e9970 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -3,6 +3,7 @@ #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/init/configured_sdk.h" +#include "opentelemetry/sdk/init/registry.h" #ifdef BAZEL_BUILD # include "examples/common/foo_library/foo_library.h" @@ -10,30 +11,39 @@ # include "foo_library/foo_library.h" #endif -#include "opentelemetry/exporters/otlp/otlp_builder.h" #include "opentelemetry/exporters/ostream/console_builder.h" +#include "opentelemetry/exporters/otlp/otlp_builder.h" #include "opentelemetry/exporters/zipkin/zipkin_builder.h" - std::unique_ptr sdk; namespace { void InitOtel() { - opentelemetry::exporter::otlp::OtlpBuilder::Register(nullptr); - opentelemetry::exporter::trace::ConsoleBuilder::Register(nullptr); - opentelemetry::exporter::zipkin::ZipkinBuilder::Register(nullptr); + /* 1 - Create a registry */ + + std::shared_ptr registry( + new opentelemetry::sdk::init::Registry); + + /* 2 - Populate the registry with the core components supported */ + + opentelemetry::exporter::otlp::OtlpBuilder::Register(registry.get()); + opentelemetry::exporter::trace::ConsoleBuilder::Register(registry.get()); + opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); + + /* 3 - Populate the registry with external extensions plugins */ + + /* 4 - Parse a config.yaml */ // See // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml std::string config_file = "config.yaml"; auto model = opentelemetry::sdk::configuration::ConfigurationFactory::ParseFile(config_file); + /* 5 - Build the SDL from the parsed a config.yaml */ - - - sdk = opentelemetry::sdk::init::ConfiguredSdk::Create(model); + sdk = opentelemetry::sdk::init::ConfiguredSdk::Create(registry, model); if (sdk != nullptr) { diff --git a/exporters/ostream/src/console_builder.cc b/exporters/ostream/src/console_builder.cc index 6524f772d4..579325233e 100644 --- a/exporters/ostream/src/console_builder.cc +++ b/exporters/ostream/src/console_builder.cc @@ -1,9 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/ostream/span_exporter_factory.h" -#include "opentelemetry/exporters/ostream/span_exporter.h" #include "opentelemetry/exporters/ostream/console_builder.h" +#include "opentelemetry/exporters/ostream/span_exporter.h" +#include "opentelemetry/exporters/ostream/span_exporter_factory.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,15 +16,15 @@ static ConsoleBuilder singleton; void ConsoleBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - opentelemetry::sdk::init::Registry::SetConsoleBuilder(& singleton); + registry->SetConsoleBuilder(&singleton); } std::unique_ptr ConsoleBuilder::Build( -const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration * /* model */) const { return OStreamSpanExporterFactory::Create(); } -} // namespace otlp +} // namespace trace } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_builder.cc b/exporters/otlp/src/otlp_builder.cc index 25e940cf97..36766397ea 100644 --- a/exporters/otlp/src/otlp_builder.cc +++ b/exporters/otlp/src/otlp_builder.cc @@ -1,10 +1,10 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter.h" +#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" -#include "opentelemetry/exporters/otlp/otlp_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -17,12 +17,13 @@ static OtlpBuilder singleton; void OtlpBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - opentelemetry::sdk::init::Registry::SetOtlpBuilder(& singleton); + registry->SetOtlpBuilder(&singleton); } std::unique_ptr OtlpBuilder::Build( -const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration * /* model */) const { + // FIXME, use model OtlpHttpExporterOptions options; return OtlpHttpExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_grpc_client.cc b/exporters/otlp/src/otlp_grpc_client.cc index c0436eddaf..27c93bca83 100644 --- a/exporters/otlp/src/otlp_grpc_client.cc +++ b/exporters/otlp/src/otlp_grpc_client.cc @@ -75,7 +75,7 @@ std::shared_ptr OtlpGrpcClient::MakeChannel(const OtlpGrpcClientO grpc::SslCredentialsOptions ssl_opts; ssl_opts.pem_root_certs = GetFileContentsOrInMemoryContents( options.ssl_credentials_cacert_path, options.ssl_credentials_cacert_as_string); -#if ENABLE_OTLP_GRPC_SSL_MTLS_PREVIEW +#ifdef ENABLE_OTLP_GRPC_SSL_MTLS_PREVIEW ssl_opts.pem_private_key = GetFileContentsOrInMemoryContents(options.ssl_client_key_path, options.ssl_client_key_string); ssl_opts.pem_cert_chain = GetFileContentsOrInMemoryContents(options.ssl_client_cert_path, diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 425fd72446..dac7d40669 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -1,10 +1,10 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" +#include "opentelemetry/exporters/zipkin/zipkin_builder.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter.h" +#include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" -#include "opentelemetry/exporters/zipkin/zipkin_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -17,17 +17,17 @@ static ZipkinBuilder singleton; void ZipkinBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - opentelemetry::sdk::init::Registry::SetZipkinBuilder(& singleton); + registry->SetZipkinBuilder(&singleton); } std::unique_ptr ZipkinBuilder::Build( -const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration * /* model */) const { // FIXME: from model ZipkinExporterOptions options; return ZipkinExporterFactory::Create(options); } -} // namespace otlp +} // namespace zipkin } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h index f326c4feab..5430635a91 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" @@ -17,6 +18,7 @@ class ConfiguredSdk { public: static std::unique_ptr Create( + std::shared_ptr registry, const std::unique_ptr &model); void Install(); diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index fff241d82d..96fd6f274f 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -17,14 +17,22 @@ class ZipkinSpanExporterBuilder; class Registry { public: - static const OtlpSpanExporterBuilder *GetOtlpBuilder(); - static void SetOtlpBuilder(const OtlpSpanExporterBuilder * builder); + Registry() = default; + ~Registry() = default; - static const ConsoleSpanExporterBuilder *GetConsoleBuilder(); - static void SetConsoleBuilder(const ConsoleSpanExporterBuilder * builder); + const OtlpSpanExporterBuilder *GetOtlpBuilder() { return m_otlp_builder; } + void SetOtlpBuilder(const OtlpSpanExporterBuilder *builder) { m_otlp_builder = builder; } - static const ZipkinSpanExporterBuilder *GetZipkinBuilder(); - static void SetZipkinBuilder(const ZipkinSpanExporterBuilder * builder); + const ConsoleSpanExporterBuilder *GetConsoleBuilder() { return m_console_builder; } + void SetConsoleBuilder(const ConsoleSpanExporterBuilder *builder) { m_console_builder = builder; } + + const ZipkinSpanExporterBuilder *GetZipkinBuilder() { return m_zipkin_builder; } + void SetZipkinBuilder(const ZipkinSpanExporterBuilder *builder) { m_zipkin_builder = builder; } + +private: + const OtlpSpanExporterBuilder *m_otlp_builder; + const ConsoleSpanExporterBuilder *m_console_builder; + const ZipkinSpanExporterBuilder *m_zipkin_builder; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 03818d9797..de06d3e7c5 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -12,6 +12,7 @@ #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/sampler.h" @@ -27,64 +28,68 @@ namespace init class SdkBuilder { public: - static std::unique_ptr CreateAlwaysOffSampler( - const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model); + SdkBuilder(std::shared_ptr registry) : m_registry(registry) {} + ~SdkBuilder() = default; - static std::unique_ptr CreateAlwaysOnSampler( - const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model); + std::unique_ptr CreateAlwaysOffSampler( + const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) const; - static std::unique_ptr CreateJaegerRemoteSampler( - const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model); + std::unique_ptr CreateAlwaysOnSampler( + const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model) const; - static std::unique_ptr CreateParentBasedSampler( - const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model); + std::unique_ptr CreateJaegerRemoteSampler( + const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model) const; - static std::unique_ptr CreateTraceIdRatioBasedSampler( - const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model); + std::unique_ptr CreateParentBasedSampler( + const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) const; - static std::unique_ptr CreateExtensionSampler( - const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model); + std::unique_ptr CreateTraceIdRatioBasedSampler( + const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model) const; - static std::unique_ptr CreateSampler( - const std::unique_ptr &model); + std::unique_ptr CreateExtensionSampler( + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const; - static std::unique_ptr CreateOtlpSpanExporter( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model); + std::unique_ptr CreateSampler( + const std::unique_ptr &model) const; - static std::unique_ptr CreateConsoleSpanExporter( - const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model); + std::unique_ptr CreateOtlpSpanExporter( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const; - static std::unique_ptr CreateZipkinSpanExporter( - const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model); + std::unique_ptr CreateConsoleSpanExporter( + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const; - static std::unique_ptr CreateExtensionSpanExporter( - const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model); + std::unique_ptr CreateZipkinSpanExporter( + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const; - static std::unique_ptr CreateSpanExporter( - const std::unique_ptr &model); + std::unique_ptr CreateExtensionSpanExporter( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) const; - static std::unique_ptr CreateBatchSpanProcessor( - const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model); + std::unique_ptr CreateSpanExporter( + const std::unique_ptr &model) + const; - static std::unique_ptr CreateSimpleSpanProcessor( - const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model); + std::unique_ptr CreateBatchSpanProcessor( + const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) const; - static std::unique_ptr CreateExtensionSpanProcessor( - const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model); + std::unique_ptr CreateSimpleSpanProcessor( + const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model) const; - static std::unique_ptr CreateProcessor( - const std::unique_ptr &model); + std::unique_ptr CreateExtensionSpanProcessor( + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) const; - static std::unique_ptr CreateTracerProvider( - const std::unique_ptr &model); + std::unique_ptr CreateProcessor( + const std::unique_ptr &model) + const; - static std::unique_ptr CreateConfiguredSdk( - const std::unique_ptr &model); + std::unique_ptr CreateTracerProvider( + const std::unique_ptr &model) + const; -#if 0 - static std::unique_ptr CreateXXX( - const std::unique_ptr &model); -#endif + std::unique_ptr CreateConfiguredSdk( + const std::unique_ptr &model) const; + +private: + std::shared_ptr m_registry; }; } // namespace init diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 7d8671cd79..e2231f9bc9 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -11,6 +11,7 @@ #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" @@ -22,7 +23,6 @@ #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" -#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" @@ -44,7 +44,7 @@ static std::unique_ptr ParseAttributeLimitConfigura } static std::unique_ptr ParseLoggerProviderConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new LoggerProviderConfiguration); @@ -54,7 +54,7 @@ static std::unique_ptr ParseLoggerProviderConfigura } static std::unique_ptr ParseMeterProviderConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new MeterProviderConfiguration); @@ -64,7 +64,7 @@ static std::unique_ptr ParseMeterProviderConfigurati } static std::unique_ptr ParsePropagatorConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new PropagatorConfiguration); @@ -92,7 +92,7 @@ static std::unique_ptr ParseSamplerConfiguration( const std::unique_ptr &node); static std::unique_ptr ParseAlwaysOffSamplerConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new AlwaysOffSamplerConfiguration); @@ -100,7 +100,7 @@ static std::unique_ptr ParseAlwaysOffSamplerConfiguration( } static std::unique_ptr ParseAlwaysOnSamplerConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new AlwaysOnSamplerConfiguration); @@ -180,8 +180,8 @@ static std::unique_ptr ParseTraceIdRatioBasedSamplerConfig } static std::unique_ptr ParseSamplerExtensionConfiguration( - std::string name, - const std::unique_ptr &node) + std::string /* name */, + const std::unique_ptr & /* node */) { std::unique_ptr model(new ExtensionSamplerConfiguration); @@ -285,7 +285,7 @@ static std::unique_ptr ParseOtlpSpanExporterConfi } static std::unique_ptr ParseConsoleSpanExporterConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new ConsoleSpanExporterConfiguration); @@ -305,7 +305,7 @@ static std::unique_ptr ParseZipkinSpanExporterC static std::unique_ptr ParseExtensionSpanExporterConfiguration( const std::string &name, - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new ExtensionSpanExporterConfiguration); @@ -386,11 +386,12 @@ static std::unique_ptr ParseSimpleSpanProcesso return model; } -static std::unique_ptr ParseExtensionSpanProcessorConfiguration( - const std::string &name, - const std::unique_ptr &node) +static std::unique_ptr +ParseExtensionSpanProcessorConfiguration(const std::string &name, + const std::unique_ptr & /* node */) { - std::unique_ptr model(new ExtensionSpanProcessorConfiguration); + std::unique_ptr model( + new ExtensionSpanProcessorConfiguration); OTEL_INTERNAL_LOG_ERROR("ParseExtensionSpanProcessorConfiguration: FIXME"); model->name = name; @@ -583,7 +584,7 @@ std::unique_ptr ConfigurationFactory::Parse(std::istream &in) doc = YamlDocument::Parse(in); root = doc->GetRootNode(); } - catch (YAML::BadFile e) + catch (const YAML::BadFile &e) { OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml, " << e.what()); return config; @@ -598,7 +599,7 @@ std::unique_ptr ConfigurationFactory::Parse(std::istream &in) { config = ParseConfiguration(root); } - catch (YAML::Exception e) + catch (const YAML::Exception &e) { OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml, " << e.what()); } diff --git a/sdk/src/configuration/yaml_document.cc b/sdk/src/configuration/yaml_document.cc index a0d1fa7bc7..393de87340 100644 --- a/sdk/src/configuration/yaml_document.cc +++ b/sdk/src/configuration/yaml_document.cc @@ -24,7 +24,7 @@ std::unique_ptr YamlDocument::Parse(std::istream &in) { yaml = YAML::Load(in); } - catch (YAML::BadFile e) + catch (const YAML::BadFile &e) { OTEL_INTERNAL_LOG_ERROR("Failed to load yaml, " << e.what()); return doc; diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index 7b42e5e3ef..bf7173a30e 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -17,9 +17,11 @@ namespace init { std::unique_ptr ConfiguredSdk::Create( + std::shared_ptr registry, const std::unique_ptr &model) { - return SdkBuilder::CreateConfiguredSdk(model); + SdkBuilder builder(registry); + return builder.CreateConfiguredSdk(model); } void ConfiguredSdk::Install() diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index c0486e7dd2..aeab772e85 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -3,48 +3,14 @@ #include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace init -{ - -static const OtlpSpanExporterBuilder *otlp_singleton = nullptr; -static const ConsoleSpanExporterBuilder *console_singleton = nullptr; -static const ZipkinSpanExporterBuilder *zipkin_singleton = nullptr; - -const OtlpSpanExporterBuilder* Registry::GetOtlpBuilder() { - return otlp_singleton; -} - -void Registry::SetOtlpBuilder(const OtlpSpanExporterBuilder * builder) -{ - otlp_singleton = builder; -} - -const ConsoleSpanExporterBuilder* Registry::GetConsoleBuilder() { - return console_singleton; -} - -void Registry::SetConsoleBuilder(const ConsoleSpanExporterBuilder * builder) -{ - console_singleton = builder; -} - -const ZipkinSpanExporterBuilder* Registry::GetZipkinBuilder() { - return zipkin_singleton; -} - -void Registry::SetZipkinBuilder(const ZipkinSpanExporterBuilder * builder) -{ - zipkin_singleton = builder; -} - - -} // namespace init +{} // namespace init } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 70ca7d7fea..66e4f7b1bf 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -8,6 +8,7 @@ #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" @@ -19,13 +20,12 @@ #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" -#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" -#include "opentelemetry/sdk/init/sdk_builder.h" -#include "opentelemetry/sdk/init/registry.h" -#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/init/sdk_builder.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_options.h" @@ -48,104 +48,122 @@ namespace init class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigurationVisitor { public: + SamplerBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + virtual ~SamplerBuilder() = default; + void VisitAlwaysOff( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) override { - sampler = SdkBuilder::CreateAlwaysOffSampler(model); + sampler = m_sdk_builder->CreateAlwaysOffSampler(model); } void VisitAlwaysOn( const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model) override { - sampler = SdkBuilder::CreateAlwaysOnSampler(model); + sampler = m_sdk_builder->CreateAlwaysOnSampler(model); } void VisitJaegerRemote( const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model) override { - sampler = SdkBuilder::CreateJaegerRemoteSampler(model); + sampler = m_sdk_builder->CreateJaegerRemoteSampler(model); } void VisitParentBased( const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) override { - sampler = SdkBuilder::CreateParentBasedSampler(model); + sampler = m_sdk_builder->CreateParentBasedSampler(model); } void VisitTraceIdRatioBased( const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model) override { - sampler = SdkBuilder::CreateTraceIdRatioBasedSampler(model); + sampler = m_sdk_builder->CreateTraceIdRatioBasedSampler(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) override { - sampler = SdkBuilder::CreateExtensionSampler(model); + sampler = m_sdk_builder->CreateExtensionSampler(model); } std::unique_ptr sampler; + +private: + const SdkBuilder *m_sdk_builder; }; class SpanProcessorBuilder : public opentelemetry::sdk::configuration::SpanProcessorConfigurationVisitor { public: + SpanProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + virtual ~SpanProcessorBuilder() = default; + void VisitBatch( const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) override { - processor = SdkBuilder::CreateBatchSpanProcessor(model); + processor = m_sdk_builder->CreateBatchSpanProcessor(model); } void VisitSimple( const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model) override { - processor = SdkBuilder::CreateSimpleSpanProcessor(model); + processor = m_sdk_builder->CreateSimpleSpanProcessor(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) override { - processor = SdkBuilder::CreateExtensionSpanProcessor(model); + processor = m_sdk_builder->CreateExtensionSpanProcessor(model); } std::unique_ptr processor; + +private: + const SdkBuilder *m_sdk_builder; }; class SpanExporterBuilder : public opentelemetry::sdk::configuration::SpanExporterConfigurationVisitor { public: + SpanExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + virtual ~SpanExporterBuilder() = default; + void VisitOtlp( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) override { - exporter = SdkBuilder::CreateOtlpSpanExporter(model); + exporter = m_sdk_builder->CreateOtlpSpanExporter(model); } void VisitConsole( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) override { - exporter = SdkBuilder::CreateConsoleSpanExporter(model); + exporter = m_sdk_builder->CreateConsoleSpanExporter(model); } void VisitZipkin( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) override { - exporter = SdkBuilder::CreateZipkinSpanExporter(model); + exporter = m_sdk_builder->CreateZipkinSpanExporter(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) override { - exporter = SdkBuilder::CreateExtensionSpanExporter(model); + exporter = m_sdk_builder->CreateExtensionSpanExporter(model); } std::unique_ptr exporter; + +private: + const SdkBuilder *m_sdk_builder; }; std::unique_ptr SdkBuilder::CreateAlwaysOffSampler( - const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) + const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration * /* model */) const { std::unique_ptr sdk; @@ -155,7 +173,7 @@ std::unique_ptr SdkBuilder::CreateAlwaysOffS } std::unique_ptr SdkBuilder::CreateAlwaysOnSampler( - const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model) + const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration * /* model */) const { std::unique_ptr sdk; @@ -165,7 +183,7 @@ std::unique_ptr SdkBuilder::CreateAlwaysOnSa } std::unique_ptr SdkBuilder::CreateJaegerRemoteSampler( - const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model) + const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration * /* model */) const { std::unique_ptr sdk; @@ -175,7 +193,7 @@ std::unique_ptr SdkBuilder::CreateJaegerRemo } std::unique_ptr SdkBuilder::CreateParentBasedSampler( - const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) + const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) const { std::unique_ptr sdk; @@ -193,7 +211,7 @@ std::unique_ptr SdkBuilder::CreateParentBase } std::unique_ptr SdkBuilder::CreateTraceIdRatioBasedSampler( - const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model) + const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model) const { std::unique_ptr sdk; @@ -203,7 +221,7 @@ std::unique_ptr SdkBuilder::CreateTraceIdRat } std::unique_ptr SdkBuilder::CreateExtensionSampler( - const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration * /* model */) const { std::unique_ptr sdk; @@ -213,11 +231,11 @@ std::unique_ptr SdkBuilder::CreateExtensionS } std::unique_ptr SdkBuilder::CreateSampler( - const std::unique_ptr &model) + const std::unique_ptr &model) const { std::unique_ptr sdk; - SamplerBuilder builder; + SamplerBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.sampler); @@ -225,16 +243,19 @@ std::unique_ptr SdkBuilder::CreateSampler( } std::unique_ptr SdkBuilder::CreateOtlpSpanExporter( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const OtlpSpanExporterBuilder *builder = Registry::GetOtlpBuilder(); + const OtlpSpanExporterBuilder *builder = m_registry->GetOtlpBuilder(); - if (builder != nullptr) { + if (builder != nullptr) + { OTEL_INTERNAL_LOG_ERROR("before builder for OtlpSpanExporter"); sdk = builder->Build(model); OTEL_INTERNAL_LOG_ERROR("after builder for OtlpSpanExporter"); - } else { + } + else + { OTEL_INTERNAL_LOG_ERROR("No builder for OtlpSpanExporter"); // Throw } @@ -243,16 +264,19 @@ std::unique_ptr SdkBuilder::CreateOtlpS } std::unique_ptr SdkBuilder::CreateConsoleSpanExporter( - const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const ConsoleSpanExporterBuilder *builder = Registry::GetConsoleBuilder(); + const ConsoleSpanExporterBuilder *builder = m_registry->GetConsoleBuilder(); - if (builder != nullptr) { + if (builder != nullptr) + { OTEL_INTERNAL_LOG_ERROR("before builder for ConsoleSpanExporter"); sdk = builder->Build(model); OTEL_INTERNAL_LOG_ERROR("after builder for ConsoleSpanExporter"); - } else { + } + else + { OTEL_INTERNAL_LOG_ERROR("No builder for ConsoleSpanExporter"); // Throw } @@ -261,16 +285,19 @@ std::unique_ptr SdkBuilder::CreateConso } std::unique_ptr SdkBuilder::CreateZipkinSpanExporter( - const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const ZipkinSpanExporterBuilder *builder = Registry::GetZipkinBuilder(); + const ZipkinSpanExporterBuilder *builder = m_registry->GetZipkinBuilder(); - if (builder != nullptr) { + if (builder != nullptr) + { OTEL_INTERNAL_LOG_ERROR("before builder for ZipkinSpanExporter"); sdk = builder->Build(model); OTEL_INTERNAL_LOG_ERROR("after builder for ZipkinSpanExporter"); - } else { + } + else + { OTEL_INTERNAL_LOG_ERROR("No builder for ZipkinSpanExporter"); // Throw } @@ -279,7 +306,7 @@ std::unique_ptr SdkBuilder::CreateZipki } std::unique_ptr SdkBuilder::CreateExtensionSpanExporter( - const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration * /* model */) const { std::unique_ptr sdk; @@ -290,12 +317,13 @@ std::unique_ptr SdkBuilder::CreateExten std::unique_ptr SdkBuilder::CreateSpanExporter( const std::unique_ptr &model) + const { std::unique_ptr sdk; OTEL_INTERNAL_LOG_ERROR("CreateSpanExporter: before"); - SpanExporterBuilder builder; + SpanExporterBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.exporter); @@ -305,7 +333,7 @@ std::unique_ptr SdkBuilder::CreateSpanE } std::unique_ptr SdkBuilder::CreateBatchSpanProcessor( - const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) + const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) const { std::unique_ptr sdk; opentelemetry::sdk::trace::BatchSpanProcessorOptions options; @@ -328,7 +356,7 @@ std::unique_ptr SdkBuilder::CreateBatc } std::unique_ptr SdkBuilder::CreateSimpleSpanProcessor( - const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model) + const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model) const { std::unique_ptr sdk; @@ -340,7 +368,8 @@ std::unique_ptr SdkBuilder::CreateSimp } std::unique_ptr SdkBuilder::CreateExtensionSpanProcessor( - const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration * /* model */) + const { std::unique_ptr sdk; @@ -351,12 +380,13 @@ std::unique_ptr SdkBuilder::CreateExte std::unique_ptr SdkBuilder::CreateProcessor( const std::unique_ptr &model) + const { std::unique_ptr sdk; OTEL_INTERNAL_LOG_ERROR("CreateProcessor: FIXME"); - SpanProcessorBuilder builder; + SpanProcessorBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.processor); @@ -365,6 +395,7 @@ std::unique_ptr SdkBuilder::CreateProc std::unique_ptr SdkBuilder::CreateTracerProvider( const std::unique_ptr &model) + const { std::unique_ptr sdk; @@ -385,7 +416,7 @@ std::unique_ptr SdkBuilder::CreateTracerPr } std::unique_ptr SdkBuilder::CreateConfiguredSdk( - const std::unique_ptr &model) + const std::unique_ptr &model) const { std::unique_ptr sdk(new ConfiguredSdk); From 083e9f1072527758dc0604cf023c34e534995c5d Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 7 Feb 2024 22:44:21 +0100 Subject: [PATCH 012/166] Code cleanup --- examples/yaml/main.cc | 4 +++- .../exporters/ostream/console_builder.h | 8 ++++++-- .../opentelemetry/exporters/otlp/otlp_builder.h | 6 ++++-- .../opentelemetry/exporters/zipkin/zipkin_builder.h | 10 +++++++--- .../configuration/always_off_sampler_configuration.h | 3 +++ .../configuration/always_on_sampler_configuration.h | 3 +++ .../batch_span_processor_configuration.h | 3 +++ .../console_span_exporter_configuration.h | 3 +++ .../opentelemetry/sdk/configuration/document.h | 3 +++ .../opentelemetry/sdk/configuration/document_node.h | 12 ++++++------ .../configuration/extension_sampler_configuration.h | 3 +++ .../extension_span_exporter_configuration.h | 3 +++ .../extension_span_processor_configuration.h | 3 +++ .../jaeger_remote_sampler_configuration.h | 3 +++ .../configuration/otlp_span_exporter_configuration.h | 3 +++ .../parent_based_sampler_configuration.h | 3 +++ .../sdk/configuration/sampler_configuration.h | 3 +++ .../configuration/sampler_configuration_visitor.h | 3 +++ .../simple_span_processor_configuration.h | 3 +++ .../sdk/configuration/span_exporter_configuration.h | 3 +++ .../span_exporter_configuration_visitor.h | 5 ++++- .../sdk/configuration/span_processor_configuration.h | 3 +++ .../span_processor_configuration_visitor.h | 3 +++ .../trace_id_ratio_based_sampler_configuration.h | 3 +++ .../opentelemetry/sdk/configuration/yaml_document.h | 2 +- .../sdk/configuration/yaml_document_node.h | 4 ++-- .../zipkin_span_exporter_configuration.h | 3 +++ .../sdk/init/console_span_exporter_builder.h | 3 +++ .../sdk/init/otlp_span_exporter_builder.h | 3 +++ .../sdk/init/zipkin_span_exporter_builder.h | 3 +++ 30 files changed, 99 insertions(+), 18 deletions(-) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 18925e9970..dfacb427a3 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -41,10 +41,12 @@ void InitOtel() std::string config_file = "config.yaml"; auto model = opentelemetry::sdk::configuration::ConfigurationFactory::ParseFile(config_file); - /* 5 - Build the SDL from the parsed a config.yaml */ + /* 5 - Build the SDK from the parsed config.yaml */ sdk = opentelemetry::sdk::init::ConfiguredSdk::Create(registry, model); + /* 6 - Deploy the SDK */ + if (sdk != nullptr) { sdk->Install(); diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h index ff8e184be1..a5b8879c56 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h @@ -21,10 +21,14 @@ class OPENTELEMETRY_EXPORT ConsoleBuilder public: static void Register(opentelemetry::sdk::init::Registry *registry); + ConsoleBuilder() = default; + ~ConsoleBuilder() override = default; + std::unique_ptr Build( - const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const override; + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) + const override; }; -} // namespace otlp +} // namespace trace } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h index 542001238f..6c647b006d 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h @@ -16,12 +16,14 @@ namespace exporter namespace otlp { -class OPENTELEMETRY_EXPORT OtlpBuilder - : public opentelemetry::sdk::init::OtlpSpanExporterBuilder +class OPENTELEMETRY_EXPORT OtlpBuilder : public opentelemetry::sdk::init::OtlpSpanExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); + OtlpBuilder() = default; + ~OtlpBuilder() override = default; + std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const override; }; diff --git a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h index d0025fd648..6761f93282 100644 --- a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h +++ b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h @@ -6,8 +6,8 @@ #include #include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" -#include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/trace/exporter.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -22,10 +22,14 @@ class OPENTELEMETRY_EXPORT ZipkinBuilder public: static void Register(opentelemetry::sdk::init::Registry *registry); + ZipkinBuilder() = default; + ~ZipkinBuilder() override = default; + std::unique_ptr Build( - const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const override; + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) + const override; }; -} // namespace otlp +} // namespace zipkin } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h index 4e62147d73..6eac2ef7b5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h @@ -16,6 +16,9 @@ namespace configuration class AlwaysOffSamplerConfiguration : public SamplerConfiguration { public: + AlwaysOffSamplerConfiguration() = default; + ~AlwaysOffSamplerConfiguration() override = default; + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitAlwaysOff(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h index a376dba520..f95121690d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h @@ -16,6 +16,9 @@ namespace configuration class AlwaysOnSamplerConfiguration : public SamplerConfiguration { public: + AlwaysOnSamplerConfiguration() = default; + ~AlwaysOnSamplerConfiguration() override = default; + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitAlwaysOn(this); } }; diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h index cff399b2e6..a65eff686e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -17,6 +17,9 @@ namespace configuration class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration { public: + BatchSpanProcessorConfiguration() = default; + ~BatchSpanProcessorConfiguration() override = default; + void Accept(SpanProcessorConfigurationVisitor *visitor) const override { visitor->VisitBatch(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h index 9967e82840..1fdce12edb 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h @@ -16,6 +16,9 @@ namespace configuration class ConsoleSpanExporterConfiguration : public SpanExporterConfiguration { public: + ConsoleSpanExporterConfiguration() = default; + ~ConsoleSpanExporterConfiguration() override = default; + void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitConsole(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/document.h b/sdk/include/opentelemetry/sdk/configuration/document.h index d38fdf6f43..aa55943a38 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document.h +++ b/sdk/include/opentelemetry/sdk/configuration/document.h @@ -17,6 +17,9 @@ namespace configuration class Document { public: + Document() = default; + virtual ~Document() = default; + virtual std::unique_ptr GetRootNode() = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 37603a5cc0..dd49ad4100 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -25,8 +25,8 @@ class PropertiesNodeConstIterator; class DocumentNode { public: - DocumentNode() {} - virtual ~DocumentNode() {} + DocumentNode() = default; + virtual ~DocumentNode() = default; virtual bool AsBoolean() = 0; virtual size_t AsInteger() = 0; @@ -60,8 +60,8 @@ class DocumentNode class DocumentNodeConstIteratorImpl { public: - DocumentNodeConstIteratorImpl() {} - virtual ~DocumentNodeConstIteratorImpl() {} + DocumentNodeConstIteratorImpl() = default; + virtual ~DocumentNodeConstIteratorImpl() = default; virtual void Next() = 0; virtual std::unique_ptr Item() const = 0; @@ -71,8 +71,8 @@ class DocumentNodeConstIteratorImpl class PropertiesNodeConstIteratorImpl { public: - PropertiesNodeConstIteratorImpl() {} - virtual ~PropertiesNodeConstIteratorImpl() {} + PropertiesNodeConstIteratorImpl() = default; + virtual ~PropertiesNodeConstIteratorImpl() = default; virtual void Next() = 0; virtual std::string Name() const = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h index 6fcbb5fabb..f591e573aa 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h @@ -17,6 +17,9 @@ namespace configuration class ExtensionSamplerConfiguration : public SamplerConfiguration { public: + ExtensionSamplerConfiguration() = default; + ~ExtensionSamplerConfiguration() override = default; + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h index 3d5c244a0c..b2993ecaaa 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h @@ -17,6 +17,9 @@ namespace configuration class ExtensionSpanExporterConfiguration : public SpanExporterConfiguration { public: + ExtensionSpanExporterConfiguration() = default; + ~ExtensionSpanExporterConfiguration() override = default; + void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h index 49733f35f5..f1eba5952b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h @@ -17,6 +17,9 @@ namespace configuration class ExtensionSpanProcessorConfiguration : public SpanProcessorConfiguration { public: + ExtensionSpanProcessorConfiguration() = default; + ~ExtensionSpanProcessorConfiguration() override = default; + void Accept(SpanProcessorConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h index b87505191a..bff5b05a56 100644 --- a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -16,6 +16,9 @@ namespace configuration class JaegerRemoteSamplerConfiguration : public SamplerConfiguration { public: + JaegerRemoteSamplerConfiguration() = default; + ~JaegerRemoteSamplerConfiguration() override = default; + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitJaegerRemote(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h index 90a4b7c7d3..f952b8d6c9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h @@ -17,6 +17,9 @@ namespace configuration class OtlpSpanExporterConfiguration : public SpanExporterConfiguration { public: + OtlpSpanExporterConfiguration() = default; + virtual ~OtlpSpanExporterConfiguration() = default; + void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlp(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h index 78de653bc9..5cf6220232 100644 --- a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h @@ -16,6 +16,9 @@ namespace configuration class ParentBasedSamplerConfiguration : public SamplerConfiguration { public: + ParentBasedSamplerConfiguration() = default; + ~ParentBasedSamplerConfiguration() override = default; + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitParentBased(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h index a2053cc448..d329e2cf24 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h @@ -16,6 +16,9 @@ class SamplerConfigurationVisitor; class SamplerConfiguration { public: + SamplerConfiguration() = default; + virtual ~SamplerConfiguration() = default; + virtual void Accept(SamplerConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h index 3a0fa1209f..2820b4b25e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h @@ -21,6 +21,9 @@ class ExtensionSamplerConfiguration; class SamplerConfigurationVisitor { public: + SamplerConfigurationVisitor() = default; + virtual ~SamplerConfigurationVisitor() = default; + virtual void VisitAlwaysOff(const AlwaysOffSamplerConfiguration *model) = 0; virtual void VisitAlwaysOn(const AlwaysOnSamplerConfiguration *model) = 0; virtual void VisitJaegerRemote(const JaegerRemoteSamplerConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h index 9204a9f7d2..84d93cbe1e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -16,6 +16,9 @@ namespace configuration class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration { public: + SimpleSpanProcessorConfiguration() = default; + ~SimpleSpanProcessorConfiguration() override = default; + void Accept(SpanProcessorConfigurationVisitor *visitor) const override { visitor->VisitSimple(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h index 9e3e0e41b0..5ce5b1282b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h @@ -15,6 +15,9 @@ class SpanExporterConfigurationVisitor; class SpanExporterConfiguration { public: + SpanExporterConfiguration() = default; + virtual ~SpanExporterConfiguration() = default; + virtual void Accept(SpanExporterConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h index 68100eaa83..6b9c56075d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h @@ -19,8 +19,11 @@ class ExtensionSpanExporterConfiguration; class SpanExporterConfigurationVisitor { public: + SpanExporterConfigurationVisitor() = default; + virtual ~SpanExporterConfigurationVisitor() = default; + virtual void VisitOtlp(const OtlpSpanExporterConfiguration *model) = 0; - virtual void VisitConsole(const ConsoleSpanExporterConfiguration *model) = 0; + virtual void VisitConsole(const ConsoleSpanExporterConfiguration *model) = 0; virtual void VisitZipkin(const ZipkinSpanExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionSpanExporterConfiguration *model) = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h index 58a1204e68..2b03fc1b9f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h @@ -15,6 +15,9 @@ class SpanProcessorConfigurationVisitor; class SpanProcessorConfiguration { public: + SpanProcessorConfiguration() = default; + virtual ~SpanProcessorConfiguration() = default; + virtual void Accept(SpanProcessorConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h index df174cd518..f905d5b34e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h @@ -18,6 +18,9 @@ class ExtensionSpanProcessorConfiguration; class SpanProcessorConfigurationVisitor { public: + SpanProcessorConfigurationVisitor() = default; + virtual ~SpanProcessorConfigurationVisitor() = default; + virtual void VisitBatch(const BatchSpanProcessorConfiguration *model) = 0; virtual void VisitSimple(const SimpleSpanProcessorConfiguration *model) = 0; virtual void VisitExtension(const ExtensionSpanProcessorConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h index 534ee9b572..c2fa4b751d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h @@ -16,6 +16,9 @@ namespace configuration class TraceIdRatioBasedSamplerConfiguration : public SamplerConfiguration { public: + TraceIdRatioBasedSamplerConfiguration() = default; + ~TraceIdRatioBasedSamplerConfiguration() override = default; + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitTraceIdRatioBased(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h index 1cf46cede4..6f8dd9c5fa 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h @@ -22,7 +22,7 @@ class YamlDocument : public Document static std::unique_ptr Parse(std::istream &in); YamlDocument(YAML::Node root) : m_root(root) {} - ~YamlDocument() = default; + ~YamlDocument() override = default; std::unique_ptr GetRootNode() override; diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h index 9208c157f4..a8352c6e2c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h @@ -61,7 +61,7 @@ class YamlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl { public: YamlDocumentNodeConstIteratorImpl(const YAML::const_iterator &iter); - virtual ~YamlDocumentNodeConstIteratorImpl(); + ~YamlDocumentNodeConstIteratorImpl() override; void Next() override; std::unique_ptr Item() const override; @@ -75,7 +75,7 @@ class YamlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorIm { public: YamlPropertiesNodeConstIteratorImpl(const YAML::const_iterator &iter); - virtual ~YamlPropertiesNodeConstIteratorImpl(); + ~YamlPropertiesNodeConstIteratorImpl() override; void Next() override; std::string Name() const override; diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h index 21f40ba67e..870f4eaba6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -16,6 +16,9 @@ namespace configuration class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration { public: + ZipkinSpanExporterConfiguration() = default; + ~ZipkinSpanExporterConfiguration() override = default; + void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitZipkin(this); diff --git a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h index 5c1aa4c74a..8a90d6228c 100644 --- a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h @@ -16,6 +16,9 @@ namespace init class ConsoleSpanExporterBuilder { public: + ConsoleSpanExporterBuilder() = default; + virtual ~ConsoleSpanExporterBuilder() = default; + virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h index c35ad2b116..0de0f79892 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h @@ -16,6 +16,9 @@ namespace init class OtlpSpanExporterBuilder { public: + OtlpSpanExporterBuilder() = default; + virtual ~OtlpSpanExporterBuilder() = default; + virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h index 4126b09c19..c426547d45 100644 --- a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h @@ -16,6 +16,9 @@ namespace init class ZipkinSpanExporterBuilder { public: + ZipkinSpanExporterBuilder() = default; + virtual ~ZipkinSpanExporterBuilder() = default; + virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const = 0; }; From 11a51d81f1b3da15cfb69f31e507b4836ece07ac Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 8 Feb 2024 01:05:34 +0100 Subject: [PATCH 013/166] POC, continued. --- examples/yaml/CMakeLists.txt | 20 +++++++--- examples/yaml/main.cc | 18 +++++++-- exporters/otlp/CMakeLists.txt | 39 +++++++++++++------ exporters/zipkin/src/zipkin_builder.cc | 11 +++++- sdk/include/opentelemetry/sdk/init/registry.h | 6 +-- 5 files changed, 69 insertions(+), 25 deletions(-) diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index 27320f41fe..b748418780 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -7,16 +7,24 @@ endif() include_directories(${CMAKE_SOURCE_DIR}/sdk/include) -include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) -include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) - add_executable(example_yaml main.cc) target_link_libraries(example_yaml ${CMAKE_THREAD_LIBS_INIT} - common_foo_library opentelemetry_otlp_builder - opentelemetry_exporter_otlp_http - opentelemetry_exporter_zipkin_trace + common_foo_library opentelemetry_exporter_ostream_span) +if(WITH_OTLP_HTTP) + include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) + add_definitions(-DOTEL_HAVE_OTLP) + target_link_libraries(example_yaml opentelemetry_otlp_builder) +endif() + +if(WITH_ZIPKIN) + include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) + add_definitions(-DOTEL_HAVE_ZIPKIN) + target_link_libraries(example_yaml opentelemetry_exporter_zipkin_trace) +endif() + + if(DEFINED OPENTELEMETRY_BUILD_DLL) target_link_libraries(example_yaml opentelemetry_cpp) else() diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index dfacb427a3..27fbe7f553 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -12,8 +12,14 @@ #endif #include "opentelemetry/exporters/ostream/console_builder.h" -#include "opentelemetry/exporters/otlp/otlp_builder.h" -#include "opentelemetry/exporters/zipkin/zipkin_builder.h" + +#ifdef OTEL_HAVE_OTLP +# include "opentelemetry/exporters/otlp/otlp_builder.h" +#endif + +#ifdef OTEL_HAVE_ZIPKIN +# include "opentelemetry/exporters/zipkin/zipkin_builder.h" +#endif std::unique_ptr sdk; @@ -28,9 +34,15 @@ void InitOtel() /* 2 - Populate the registry with the core components supported */ - opentelemetry::exporter::otlp::OtlpBuilder::Register(registry.get()); opentelemetry::exporter::trace::ConsoleBuilder::Register(registry.get()); + +#ifdef OTEL_HAVE_OTLP + opentelemetry::exporter::otlp::OtlpBuilder::Register(registry.get()); +#endif + +#ifdef OTEL_HAVE_ZIPKIN opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); +#endif /* 3 - Populate the registry with external extensions plugins */ diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index b4c1c1d0c3..0917b2e716 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -1,17 +1,6 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -add_library( - opentelemetry_otlp_builder src/otlp_builder.cc) -set_target_properties(opentelemetry_otlp_builder PROPERTIES EXPORT_NAME - otlp_builder) -set_target_version(opentelemetry_otlp_builder) - -target_include_directories( - opentelemetry_otlp_builder - PUBLIC "$" - "$") - add_library( opentelemetry_otlp_recordable src/otlp_environment.cc src/otlp_log_recordable.cc src/otlp_recordable.cc @@ -200,6 +189,34 @@ target_link_libraries( opentelemetry_otlp_recordable PUBLIC opentelemetry_trace opentelemetry_resources opentelemetry_proto) +add_library( + opentelemetry_otlp_builder src/otlp_builder.cc) +set_target_properties(opentelemetry_otlp_builder PROPERTIES EXPORT_NAME + otlp_builder) +set_target_version(opentelemetry_otlp_builder) + +target_include_directories( + opentelemetry_otlp_builder + PUBLIC "$" + "$") + +# Make sure to build with the proper ABI +target_link_libraries( + opentelemetry_otlp_builder + PUBLIC opentelemetry_api) + +if(WITH_OTLP_HTTP) + target_link_libraries( + opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_http) +endif() + +if(WITH_OTLP_GRPC) + target_link_libraries( + opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_grpc) +endif() + if(OPENTELEMETRY_INSTALL) install( TARGETS ${OPENTELEMETRY_OTLP_TARGETS} diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index dac7d40669..79a3977373 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -5,6 +5,7 @@ #include "opentelemetry/exporters/zipkin/zipkin_exporter.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -21,10 +22,16 @@ void ZipkinBuilder::Register(opentelemetry::sdk::init::Registry *registry) } std::unique_ptr ZipkinBuilder::Build( - const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration * /* model */) const + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const { - // FIXME: from model ZipkinExporterOptions options; + + options.endpoint = model->endpoint; + +#ifdef LATER + options.xxx = model->timeout; +#endif + return ZipkinExporterFactory::Create(options); } diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 96fd6f274f..811719c635 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -30,9 +30,9 @@ class Registry void SetZipkinBuilder(const ZipkinSpanExporterBuilder *builder) { m_zipkin_builder = builder; } private: - const OtlpSpanExporterBuilder *m_otlp_builder; - const ConsoleSpanExporterBuilder *m_console_builder; - const ZipkinSpanExporterBuilder *m_zipkin_builder; + const OtlpSpanExporterBuilder *m_otlp_builder{nullptr}; + const ConsoleSpanExporterBuilder *m_console_builder{nullptr}; + const ZipkinSpanExporterBuilder *m_zipkin_builder{nullptr}; }; } // namespace init From aa21bd6e6f8a2d40da2de515578b54c007ed0c15 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 11 Feb 2024 02:27:52 +0100 Subject: [PATCH 014/166] POC - propagators --- .../composite_propagator_configuration.h | 32 ++++++ .../configuration/propagator_configuration.h | 6 + .../propagator_configuration_visitor.h | 29 +++++ .../simple_propagator_configuration.h | 32 ++++++ .../opentelemetry/sdk/init/configured_sdk.h | 2 + .../opentelemetry/sdk/init/sdk_builder.h | 15 +++ .../configuration/configuration_factory.cc | 62 ++++++++++- sdk/src/init/sdk_builder.cc | 105 ++++++++++++++++++ 8 files changed, 280 insertions(+), 3 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h new file mode 100644 index 0000000000..c64193d635 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class CompositePropagatorConfiguration : public PropagatorConfiguration +{ +public: + CompositePropagatorConfiguration() = default; + ~CompositePropagatorConfiguration() override = default; + + void Accept(PropagatorConfigurationVisitor *visitor) const override + { + visitor->VisitComposite(this); + } + + std::vector names; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h index bca00dda75..eecf9f78ce 100644 --- a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h @@ -11,9 +11,15 @@ namespace sdk namespace configuration { +class PropagatorConfigurationVisitor; + class PropagatorConfiguration { public: + PropagatorConfiguration() = default; + virtual ~PropagatorConfiguration() = default; + + virtual void Accept(PropagatorConfigurationVisitor *visitor) const = 0; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h new file mode 100644 index 0000000000..61669bee5c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SimplePropagatorConfiguration; +class CompositePropagatorConfiguration; + +class PropagatorConfigurationVisitor +{ +public: + PropagatorConfigurationVisitor() = default; + virtual ~PropagatorConfigurationVisitor() = default; + + virtual void VisitSimple(const SimplePropagatorConfiguration *model) = 0; + virtual void VisitComposite(const CompositePropagatorConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h new file mode 100644 index 0000000000..3aed93492d --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SimplePropagatorConfiguration : public PropagatorConfiguration +{ +public: + SimplePropagatorConfiguration() = default; + ~SimplePropagatorConfiguration() override = default; + + void Accept(PropagatorConfigurationVisitor *visitor) const override + { + visitor->VisitSimple(this); + } + + std::string name; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h index 5430635a91..fe8e2d69a6 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/trace/tracer_provider.h" @@ -26,6 +27,7 @@ class ConfiguredSdk // FIXME: should be sdk::trace::TracerProvider std::shared_ptr m_tracer_provider; + std::shared_ptr m_propagator; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index de06d3e7c5..5694823814 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -5,10 +5,12 @@ #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" @@ -85,6 +87,19 @@ class SdkBuilder const std::unique_ptr &model) const; + std::unique_ptr CreateTextMapPropagator( + const std::string &name) const; + + std::unique_ptr CreateSimplePropagator( + const opentelemetry::sdk::configuration::SimplePropagatorConfiguration *model) const; + + std::unique_ptr CreateCompositePropagator( + const opentelemetry::sdk::configuration::CompositePropagatorConfiguration *model) const; + + std::unique_ptr CreatePropagator( + const std::unique_ptr &model) + const; + std::unique_ptr CreateConfiguredSdk( const std::unique_ptr &model) const; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index e2231f9bc9..931fc2cba4 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -9,6 +9,7 @@ #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" @@ -20,6 +21,9 @@ #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_document.h" @@ -63,12 +67,64 @@ static std::unique_ptr ParseMeterProviderConfigurati return model; } +static std::unique_ptr ParseSinglePropagatorConfiguration( + const std::string &name) +{ + std::unique_ptr model(new SimplePropagatorConfiguration); + + model->name = name; + + return model; +} + +static std::unique_ptr ParseCompositePropagatorConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new CompositePropagatorConfiguration); + + for (auto it = node->begin(); it != node->end(); ++it) + { + std::unique_ptr child(*it); + + std::string name = child->AsString(); + + OTEL_INTERNAL_LOG_ERROR("ParseCompositePropagatorConfiguration: name = " << name); + model->names.push_back(name); + } + + return model; +} + static std::unique_ptr ParsePropagatorConfiguration( - const std::unique_ptr & /* node */) + const std::unique_ptr &node) { - std::unique_ptr model(new PropagatorConfiguration); + std::unique_ptr model; - OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: FIXME"); + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: count " << count); + // Throw + } + + if (name == "composite") + { + model = ParseCompositePropagatorConfiguration(child); + } + else + { + model = ParseSinglePropagatorConfiguration(name); + } return model; } diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 66e4f7b1bf..694f048a7c 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -3,9 +3,11 @@ #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/baggage/propagation/baggage_propagator.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" @@ -14,7 +16,9 @@ #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" @@ -37,6 +41,9 @@ #include "opentelemetry/sdk/trace/samplers/trace_id_ratio_factory.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" +#include "opentelemetry/trace/propagation/b3_propagator.h" +#include "opentelemetry/trace/propagation/http_trace_context.h" +#include "opentelemetry/trace/propagation/jaeger.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -45,6 +52,30 @@ namespace sdk namespace init { +class PropagatorBuilder : public opentelemetry::sdk::configuration::PropagatorConfigurationVisitor +{ +public: + PropagatorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + virtual ~PropagatorBuilder() = default; + + void VisitSimple( + const opentelemetry::sdk::configuration::SimplePropagatorConfiguration *model) override + { + propagator = m_sdk_builder->CreateSimplePropagator(model); + } + + void VisitComposite( + const opentelemetry::sdk::configuration::CompositePropagatorConfiguration *model) override + { + propagator = m_sdk_builder->CreateCompositePropagator(model); + } + + std::unique_ptr propagator; + +private: + const SdkBuilder *m_sdk_builder; +}; + class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigurationVisitor { public: @@ -415,6 +446,79 @@ std::unique_ptr SdkBuilder::CreateTracerPr return sdk; } +std::unique_ptr +SdkBuilder::CreateTextMapPropagator(const std::string &name) const +{ + std::unique_ptr sdk; + + if (name == "tracecontext") + { + sdk = std::unique_ptr( + new opentelemetry::trace::propagation::HttpTraceContext()); + } + else if (name == "baggage") + { + sdk = std::unique_ptr( + new opentelemetry::baggage::propagation::BaggagePropagator()); + } + else if (name == "b3") + { + sdk = std::unique_ptr( + new opentelemetry::trace::propagation::B3Propagator()); + } + else if (name == "b3multi") + { + sdk = std::unique_ptr( + new opentelemetry::trace::propagation::B3PropagatorMultiHeader()); + } + else if (name == "jaeger") + { + sdk = std::unique_ptr( + new opentelemetry::trace::propagation::JaegerPropagator()); + } + else + { + OTEL_INTERNAL_LOG_ERROR("CreateTextMapPropagator: unsupported: " << name); + } + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateSimplePropagator( + const opentelemetry::sdk::configuration::SimplePropagatorConfiguration *model) const +{ + std::unique_ptr sdk; + + sdk = CreateTextMapPropagator(model->name); + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateCompositePropagator( + const opentelemetry::sdk::configuration::CompositePropagatorConfiguration * /* model */) const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateCompositePropagator: FIXME"); + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreatePropagator( + const std::unique_ptr &model) const +{ + std::unique_ptr sdk; + + PropagatorBuilder builder(this); + model->Accept(&builder); + sdk = std::move(builder.propagator); + + return sdk; +} + std::unique_ptr SdkBuilder::CreateConfiguredSdk( const std::unique_ptr &model) const { @@ -423,6 +527,7 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (!model->disabled) { sdk->m_tracer_provider = CreateTracerProvider(model->tracer_provider); + sdk->m_propagator = CreatePropagator(model->propagator); } return sdk; From 853c69624e1b532dd32ad20c14ff78e7fdc3c386 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 11 Feb 2024 19:05:43 +0100 Subject: [PATCH 015/166] POC - text map propagetors --- examples/yaml/main.cc | 5 + .../otlp_span_exporter_configuration.h | 4 +- sdk/include/opentelemetry/sdk/init/registry.h | 10 +- .../sdk/init/text_map_propagator_builder.h | 26 ++++ .../configuration/configuration_factory.cc | 7 +- sdk/src/configuration/yaml_document_node.cc | 48 ++++++- sdk/src/init/registry.cc | 118 +++++++++++++++++- sdk/src/init/sdk_builder.cc | 71 ++++------- sdk/test/configuration/yaml_test.cc | 59 ++++++++- 9 files changed, 285 insertions(+), 63 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 27fbe7f553..c48e1546a6 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" @@ -27,6 +28,10 @@ namespace { void InitOtel() { + auto level = opentelemetry::sdk::common::internal_log::LogLevel::Info; + + opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); + /* 1 - Create a registry */ std::shared_ptr registry( diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h index f952b8d6c9..fa4d66eba9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h @@ -17,8 +17,8 @@ namespace configuration class OtlpSpanExporterConfiguration : public SpanExporterConfiguration { public: - OtlpSpanExporterConfiguration() = default; - virtual ~OtlpSpanExporterConfiguration() = default; + OtlpSpanExporterConfiguration() = default; + ~OtlpSpanExporterConfiguration() override = default; void Accept(SpanExporterConfigurationVisitor *visitor) const override { diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 811719c635..ffe6c7b9d7 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -5,6 +5,8 @@ #include "opentelemetry/version.h" +#include + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -13,11 +15,12 @@ namespace init class OtlpSpanExporterBuilder; class ConsoleSpanExporterBuilder; class ZipkinSpanExporterBuilder; +class TextMapPropagatorBuilder; class Registry { public: - Registry() = default; + Registry(); ~Registry() = default; const OtlpSpanExporterBuilder *GetOtlpBuilder() { return m_otlp_builder; } @@ -29,10 +32,15 @@ class Registry const ZipkinSpanExporterBuilder *GetZipkinBuilder() { return m_zipkin_builder; } void SetZipkinBuilder(const ZipkinSpanExporterBuilder *builder) { m_zipkin_builder = builder; } + const TextMapPropagatorBuilder *GetTextMapPropagatorBuilder(const std::string &name); + void AddTextMapPropagatorBuilder(const std::string &name, TextMapPropagatorBuilder *builder); + private: const OtlpSpanExporterBuilder *m_otlp_builder{nullptr}; const ConsoleSpanExporterBuilder *m_console_builder{nullptr}; const ZipkinSpanExporterBuilder *m_zipkin_builder{nullptr}; + + std::map m_propagator_builders; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h b/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h new file mode 100644 index 0000000000..0e1825c420 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class TextMapPropagatorBuilder +{ +public: + TextMapPropagatorBuilder() = default; + virtual ~TextMapPropagatorBuilder() = default; + + virtual std::unique_ptr Build() const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 931fc2cba4..a1f12191b4 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -88,7 +88,6 @@ static std::unique_ptr ParseCompositePropagato std::string name = child->AsString(); - OTEL_INTERNAL_LOG_ERROR("ParseCompositePropagatorConfiguration: name = " << name); model->names.push_back(name); } @@ -307,7 +306,8 @@ static std::unique_ptr ParseHeadersConfiguration( std::unique_ptr child = it.Value(); std::string string_value = child->AsString(); - OTEL_INTERNAL_LOG_ERROR("name = " << name << ", value = " << string_value); + OTEL_INTERNAL_LOG_DEBUG("ParseHeadersConfiguration() name = " << name + << ", value = " << string_value); std::pair entry(name, string_value); model->kv_map.insert(entry); } @@ -527,7 +527,8 @@ static std::unique_ptr ParseAttributesConfiguration( std::unique_ptr child = it.Value(); std::string string_value = child->AsString(); - OTEL_INTERNAL_LOG_ERROR("name = " << name << ", value = " << string_value); + OTEL_INTERNAL_LOG_DEBUG( + "ParseAttributesConfiguration() name = " << name << ", value = " << string_value); if (name == "service.name") { model->service_name = name; diff --git a/sdk/src/configuration/yaml_document_node.cc b/sdk/src/configuration/yaml_document_node.cc index 9a84f5302b..d8d6371fc9 100644 --- a/sdk/src/configuration/yaml_document_node.cc +++ b/sdk/src/configuration/yaml_document_node.cc @@ -16,6 +16,7 @@ namespace sdk namespace configuration { +#if 0 static void DebugNode(std::string_view name, const YAML::Node &yaml) { if (yaml) @@ -54,9 +55,12 @@ static void DebugNode(std::string_view name, const YAML::Node &yaml) OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", missing node."); } } +#endif bool YamlDocumentNode::AsBoolean() { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsBoolean()"); + if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); @@ -68,6 +72,8 @@ bool YamlDocumentNode::AsBoolean() size_t YamlDocumentNode::AsInteger() { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsInteger()"); + if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); @@ -79,6 +85,8 @@ size_t YamlDocumentNode::AsInteger() double YamlDocumentNode::AsDouble() { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsDouble()"); + if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); @@ -90,6 +98,8 @@ double YamlDocumentNode::AsDouble() std::string YamlDocumentNode::AsString() { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsString()"); + if (!m_yaml.IsScalar()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); @@ -101,6 +111,8 @@ std::string YamlDocumentNode::AsString() std::unique_ptr YamlDocumentNode::GetRequiredChildNode(const std::string &name) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredChildNode(" << name << ")"); + std::unique_ptr child; YAML::Node yaml_child = m_yaml[name]; @@ -116,6 +128,8 @@ std::unique_ptr YamlDocumentNode::GetRequiredChildNode(const std:: std::unique_ptr YamlDocumentNode::GetChildNode(const std::string &name) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetChildNode(" << name << ")"); + std::unique_ptr child; YAML::Node yaml_child = m_yaml[name]; @@ -129,6 +143,8 @@ std::unique_ptr YamlDocumentNode::GetChildNode(const std::string & bool YamlDocumentNode::GetRequiredBoolean(const std::string &name) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredBoolean(" << name << ")"); + YAML::Node attr = m_yaml[name]; if (!attr) { @@ -146,6 +162,8 @@ bool YamlDocumentNode::GetRequiredBoolean(const std::string &name) bool YamlDocumentNode::GetBoolean(const std::string &name, bool default_value) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetBoolean(" << name << ", " << default_value << ")"); + bool value = default_value; YAML::Node attr = m_yaml[name]; if (attr) @@ -162,6 +180,8 @@ bool YamlDocumentNode::GetBoolean(const std::string &name, bool default_value) size_t YamlDocumentNode::GetRequiredInteger(const std::string &name) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredInteger(" << name << ")"); + YAML::Node attr = m_yaml[name]; if (!attr) { @@ -179,6 +199,8 @@ size_t YamlDocumentNode::GetRequiredInteger(const std::string &name) size_t YamlDocumentNode::GetInteger(const std::string &name, size_t default_value) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetInteger(" << name << ", " << default_value << ")"); + size_t value = default_value; YAML::Node attr = m_yaml[name]; if (attr) @@ -195,6 +217,8 @@ size_t YamlDocumentNode::GetInteger(const std::string &name, size_t default_valu double YamlDocumentNode::GetRequiredDouble(const std::string &name) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredDouble(" << name << ")"); + YAML::Node attr = m_yaml[name]; if (!attr) { @@ -212,6 +236,8 @@ double YamlDocumentNode::GetRequiredDouble(const std::string &name) double YamlDocumentNode::GetDouble(const std::string &name, double default_value) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetDouble(" << name << ", " << default_value << ")"); + double value = default_value; YAML::Node attr = m_yaml[name]; if (attr) @@ -228,6 +254,8 @@ double YamlDocumentNode::GetDouble(const std::string &name, double default_value std::string YamlDocumentNode::GetRequiredString(const std::string &name) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredString(" << name << ")"); + YAML::Node attr = m_yaml[name]; if (!attr) { @@ -245,6 +273,8 @@ std::string YamlDocumentNode::GetRequiredString(const std::string &name) std::string YamlDocumentNode::GetString(const std::string &name, const std::string &default_value) { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetString(" << name << ", " << default_value << ")"); + std::string value(default_value); YAML::Node attr = m_yaml[name]; if (attr) @@ -261,23 +291,23 @@ std::string YamlDocumentNode::GetString(const std::string &name, const std::stri DocumentNodeConstIterator YamlDocumentNode::begin() const { - DebugNode("::begin()", m_yaml); - - for (auto it = m_yaml.begin(); it != m_yaml.end(); ++it) - { - DebugNode(" whole", *it); - } + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::begin()"); return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.begin())); } DocumentNodeConstIterator YamlDocumentNode::end() const { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::end()"); + return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.end())); } PropertiesNodeConstIterator YamlDocumentNode::begin_properties() const { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::begin_properties()"); + +#if 0 DebugNode("::begin_properties()", m_yaml); for (auto it = m_yaml.begin(); it != m_yaml.end(); ++it) @@ -286,12 +316,15 @@ PropertiesNodeConstIterator YamlDocumentNode::begin_properties() const DebugNode(" first", pair.first); DebugNode(" second", pair.second); } +#endif return PropertiesNodeConstIterator(new YamlPropertiesNodeConstIteratorImpl(m_yaml.begin())); } PropertiesNodeConstIterator YamlDocumentNode::end_properties() const { + OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::end_properties()"); + return PropertiesNodeConstIterator(new YamlPropertiesNodeConstIteratorImpl(m_yaml.end())); } @@ -349,6 +382,9 @@ std::string YamlPropertiesNodeConstIteratorImpl::Name() const std::pair> result; std::pair kv = *m_iter; std::string name = kv.first.as(); + + OTEL_INTERNAL_LOG_DEBUG("YamlPropertiesNodeConstIteratorImpl::Name() = " << name); + return name; } diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index aeab772e85..3f0d6b13b7 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -3,14 +3,130 @@ #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/baggage/propagation/baggage_propagator.h" #include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/init/text_map_propagator_builder.h" +#include "opentelemetry/trace/propagation/b3_propagator.h" +#include "opentelemetry/trace/propagation/http_trace_context.h" +#include "opentelemetry/trace/propagation/jaeger.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace init -{} // namespace init +{ + +class TraceContextBuilder : public TextMapPropagatorBuilder +{ +public: + TraceContextBuilder() = default; + virtual ~TraceContextBuilder() override = default; + + std::unique_ptr Build() const override + { + return std::unique_ptr( + new opentelemetry::trace::propagation::HttpTraceContext()); + } +}; + +class BaggageBuilder : public TextMapPropagatorBuilder +{ +public: + BaggageBuilder() = default; + virtual ~BaggageBuilder() override = default; + + std::unique_ptr Build() const override + { + return std::unique_ptr( + new opentelemetry::baggage::propagation::BaggagePropagator()); + } +}; + +class B3Builder : public TextMapPropagatorBuilder +{ +public: + B3Builder() = default; + virtual ~B3Builder() override = default; + + std::unique_ptr Build() const override + { + return std::unique_ptr( + new opentelemetry::trace::propagation::B3Propagator()); + } +}; + +class B3MultiBuilder : public TextMapPropagatorBuilder +{ +public: + B3MultiBuilder() = default; + virtual ~B3MultiBuilder() override = default; + + std::unique_ptr Build() const override + { + return std::unique_ptr( + new opentelemetry::trace::propagation::B3PropagatorMultiHeader()); + } +}; + +class JaegerBuilder : public TextMapPropagatorBuilder +{ +public: + JaegerBuilder() = default; + virtual ~JaegerBuilder() override = default; + + std::unique_ptr Build() const override + { + return std::unique_ptr( + new opentelemetry::trace::propagation::JaegerPropagator()); + } +}; + +static TraceContextBuilder trace_context_builder; +static BaggageBuilder baggage_builder; +static B3Builder b3_builder; +static B3MultiBuilder b3_multi_builder; +static JaegerBuilder jaeger_builder; + +Registry::Registry() +{ + std::pair entry; + + entry = {"tracecontext", &trace_context_builder}; + m_propagator_builders.insert(entry); + + entry = {"baggage", &baggage_builder}; + m_propagator_builders.insert(entry); + + entry = {"b3", &b3_builder}; + m_propagator_builders.insert(entry); + + entry = {"b3multi", &b3_multi_builder}; + m_propagator_builders.insert(entry); + + entry = {"jaeger", &jaeger_builder}; + m_propagator_builders.insert(entry); +} + +const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) +{ + TextMapPropagatorBuilder *builder = nullptr; + auto search = m_propagator_builders.find(name); + if (search != m_propagator_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddTextMapPropagatorBuilder(const std::string &name, + TextMapPropagatorBuilder *builder) +{ + std::pair entry{name, builder}; + m_propagator_builders.insert(entry); +} + +} // namespace init } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 694f048a7c..18838c4a5f 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -4,6 +4,7 @@ #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/baggage/propagation/baggage_propagator.h" +#include "opentelemetry/context/propagation/composite_propagator.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" @@ -30,6 +31,7 @@ #include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" +#include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_options.h" @@ -281,9 +283,8 @@ std::unique_ptr SdkBuilder::CreateOtlpS if (builder != nullptr) { - OTEL_INTERNAL_LOG_ERROR("before builder for OtlpSpanExporter"); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered builder"); sdk = builder->Build(model); - OTEL_INTERNAL_LOG_ERROR("after builder for OtlpSpanExporter"); } else { @@ -302,9 +303,8 @@ std::unique_ptr SdkBuilder::CreateConso if (builder != nullptr) { - OTEL_INTERNAL_LOG_ERROR("before builder for ConsoleSpanExporter"); + OTEL_INTERNAL_LOG_DEBUG("CreateConsoleSpanExporter() using registered builder"); sdk = builder->Build(model); - OTEL_INTERNAL_LOG_ERROR("after builder for ConsoleSpanExporter"); } else { @@ -323,9 +323,8 @@ std::unique_ptr SdkBuilder::CreateZipki if (builder != nullptr) { - OTEL_INTERNAL_LOG_ERROR("before builder for ZipkinSpanExporter"); + OTEL_INTERNAL_LOG_DEBUG("CreateZipkinSpanExporter() using registered builder"); sdk = builder->Build(model); - OTEL_INTERNAL_LOG_ERROR("after builder for ZipkinSpanExporter"); } else { @@ -352,14 +351,10 @@ std::unique_ptr SdkBuilder::CreateSpanE { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("CreateSpanExporter: before"); - SpanExporterBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.exporter); - OTEL_INTERNAL_LOG_ERROR("CreateSpanExporter: after"); - return sdk; } @@ -380,9 +375,8 @@ std::unique_ptr SdkBuilder::CreateBatc auto exporter_sdk = CreateSpanExporter(model->exporter); - OTEL_INTERNAL_LOG_ERROR("CreateBatchSpanProcessor: FIXME"); - - // sdk = opentelemetry::sdk::trace::BatchSpanProcessorFactory::Create(exporter_sdk, options); + sdk = opentelemetry::sdk::trace::BatchSpanProcessorFactory::Create(std::move(exporter_sdk), + options); return sdk; } @@ -415,8 +409,6 @@ std::unique_ptr SdkBuilder::CreateProc { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("CreateProcessor: FIXME"); - SpanProcessorBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.processor); @@ -430,7 +422,8 @@ std::unique_ptr SdkBuilder::CreateTracerPr { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME"); + // https://github.com/open-telemetry/opentelemetry-configuration/issues/70 + OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME (IdGenerator)"); auto sampler = CreateSampler(model->sampler); @@ -451,36 +444,18 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const { std::unique_ptr sdk; - if (name == "tracecontext") - { - sdk = std::unique_ptr( - new opentelemetry::trace::propagation::HttpTraceContext()); - } - else if (name == "baggage") - { - sdk = std::unique_ptr( - new opentelemetry::baggage::propagation::BaggagePropagator()); - } - else if (name == "b3") - { - sdk = std::unique_ptr( - new opentelemetry::trace::propagation::B3Propagator()); - } - else if (name == "b3multi") - { - sdk = std::unique_ptr( - new opentelemetry::trace::propagation::B3PropagatorMultiHeader()); - } - else if (name == "jaeger") + const TextMapPropagatorBuilder *builder = m_registry->GetTextMapPropagatorBuilder(name); + + if (builder != nullptr) { - sdk = std::unique_ptr( - new opentelemetry::trace::propagation::JaegerPropagator()); + OTEL_INTERNAL_LOG_DEBUG("CreateTextMapPropagator() using registered builder"); + sdk = builder->Build(); } else { - OTEL_INTERNAL_LOG_ERROR("CreateTextMapPropagator: unsupported: " << name); + OTEL_INTERNAL_LOG_ERROR("CreateTextMapPropagator() no builder for " << name); + // Throw } - return sdk; } @@ -497,11 +472,19 @@ SdkBuilder::CreateSimplePropagator( std::unique_ptr SdkBuilder::CreateCompositePropagator( - const opentelemetry::sdk::configuration::CompositePropagatorConfiguration * /* model */) const + const opentelemetry::sdk::configuration::CompositePropagatorConfiguration *model) const { - std::unique_ptr sdk; + std::vector> propagators; + std::unique_ptr propagator; + + for (const auto &name : model->names) + { + propagator = CreateTextMapPropagator(name); + propagators.push_back(std::move(propagator)); + } - OTEL_INTERNAL_LOG_ERROR("CreateCompositePropagator: FIXME"); + std::unique_ptr sdk( + new opentelemetry::context::propagation::CompositePropagator(std::move(propagators))); return sdk; } diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index c75421520f..945b388564 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -5,8 +5,7 @@ #include "opentelemetry/sdk/configuration/configuration_factory.h" -std::unique_ptr -DoParse(std::string yaml) +std::unique_ptr DoParse(std::string yaml) { return opentelemetry::sdk::configuration::ConfigurationFactory::ParseString(yaml); } @@ -14,6 +13,7 @@ DoParse(std::string yaml) TEST(Yaml, empty) { std::string yaml = ""; + auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } @@ -23,6 +23,7 @@ TEST(Yaml, no_format) std::string yaml = R"( file_format: )"; + auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } @@ -32,6 +33,7 @@ TEST(Yaml, just_format) std::string yaml = R"( file_format: xx.yy )"; + auto config = DoParse(yaml); ASSERT_NE(config, nullptr); ASSERT_EQ(config->file_format, "xx.yy"); @@ -43,6 +45,7 @@ TEST(Yaml, disabled) file_format: xx.yy disabled: true )"; + auto config = DoParse(yaml); ASSERT_NE(config, nullptr); ASSERT_EQ(config->file_format, "xx.yy"); @@ -55,6 +58,7 @@ TEST(Yaml, enabled) file_format: xx.yy disabled: false )"; + auto config = DoParse(yaml); ASSERT_NE(config, nullptr); ASSERT_EQ(config->file_format, "xx.yy"); @@ -66,32 +70,75 @@ TEST(Yaml, enabled_by_default) std::string yaml = R"( file_format: xx.yy )"; + auto config = DoParse(yaml); ASSERT_NE(config, nullptr); ASSERT_EQ(config->file_format, "xx.yy"); ASSERT_EQ(config->disabled, false); } +TEST(Yaml, no_attribute_limits) +{ + std::string yaml = R"( +file_format: xx.yy +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->attribute_limits, nullptr); +} + +TEST(Yaml, empty_attribute_limits) +{ + std::string yaml = R"( +file_format: xx.yy +attribute_limits: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "xx.yy"); + ASSERT_NE(config->attribute_limits, nullptr); + ASSERT_EQ(config->attribute_limits->attribute_value_length_limit, 4096); + ASSERT_EQ(config->attribute_limits->attribute_count_limit, 128); +} + +TEST(Yaml, attribute_limits) +{ + std::string yaml = R"( +file_format: xx.yy +attribute_limits: + attribute_value_length_limit: 1234 + attribute_count_limit: 5678 +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "xx.yy"); + ASSERT_NE(config->attribute_limits, nullptr); + ASSERT_EQ(config->attribute_limits->attribute_value_length_limit, 1234); + ASSERT_EQ(config->attribute_limits->attribute_count_limit, 5678); +} + TEST(Yaml, no_processors) { std::string yaml = R"( file_format: xx.yy tracer_provider: )"; + auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } -TEST(Yaml, processors) +TEST(Yaml, empty_processors) { std::string yaml = R"( file_format: xx.yy tracer_provider: processors: )"; + auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } - - - From bc394cf018424a36678a007d13888f314e6fa186 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 12 Feb 2024 02:13:59 +0100 Subject: [PATCH 016/166] POC - cleanup --- sdk/include/opentelemetry/sdk/init/registry.h | 21 +++++++ .../sdk/init/unsupported_exception.h | 26 +++++++++ .../configuration/configuration_factory.cc | 47 +++++++++++++--- sdk/src/init/registry.cc | 55 +++++++++++++++++++ sdk/src/init/sdk_builder.cc | 10 ++-- 5 files changed, 148 insertions(+), 11 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/init/unsupported_exception.h diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index ffe6c7b9d7..77b3fb931d 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -16,6 +16,9 @@ class OtlpSpanExporterBuilder; class ConsoleSpanExporterBuilder; class ZipkinSpanExporterBuilder; class TextMapPropagatorBuilder; +class ExtensionSamplerBuilder; +class ExtensionSpanExporterBuilder; +class ExtensionSpanProcessorBuilder; class Registry { @@ -23,6 +26,8 @@ class Registry Registry(); ~Registry() = default; + /* Core optional components. */ + const OtlpSpanExporterBuilder *GetOtlpBuilder() { return m_otlp_builder; } void SetOtlpBuilder(const OtlpSpanExporterBuilder *builder) { m_otlp_builder = builder; } @@ -32,15 +37,31 @@ class Registry const ZipkinSpanExporterBuilder *GetZipkinBuilder() { return m_zipkin_builder; } void SetZipkinBuilder(const ZipkinSpanExporterBuilder *builder) { m_zipkin_builder = builder; } + /* Extension points */ + const TextMapPropagatorBuilder *GetTextMapPropagatorBuilder(const std::string &name); void AddTextMapPropagatorBuilder(const std::string &name, TextMapPropagatorBuilder *builder); + const ExtensionSamplerBuilder *GetExtensionSamplerBuilder(const std::string &name); + void AddExtensionSamplerBuilder(const std::string &name, ExtensionSamplerBuilder *builder); + + const ExtensionSpanExporterBuilder *GetExtensionSpanExporterBuilder(const std::string &name); + void AddExtensionSpanExporterBuilder(const std::string &name, + ExtensionSpanExporterBuilder *builder); + + const ExtensionSpanProcessorBuilder *GetExtensionSpanProcessorBuilder(const std::string &name); + void AddExtensionSpanProcessorBuilder(const std::string &name, + ExtensionSpanProcessorBuilder *builder); + private: const OtlpSpanExporterBuilder *m_otlp_builder{nullptr}; const ConsoleSpanExporterBuilder *m_console_builder{nullptr}; const ZipkinSpanExporterBuilder *m_zipkin_builder{nullptr}; std::map m_propagator_builders; + std::map m_sampler_builders; + std::map m_span_exporter_builders; + std::map m_span_processor_builders; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/unsupported_exception.h b/sdk/include/opentelemetry/sdk/init/unsupported_exception.h new file mode 100644 index 0000000000..3dc4face55 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/unsupported_exception.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class UnsupportedException : public std::runtime_error +{ +public: + UnsupportedException(const std::string &msg) : std::runtime_error(msg) {} + + ~UnsupportedException() override = default; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index a1f12191b4..dce93faf57 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -18,6 +18,7 @@ #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" @@ -67,6 +68,7 @@ static std::unique_ptr ParseMeterProviderConfigurati return model; } +#ifdef NEVER static std::unique_ptr ParseSinglePropagatorConfiguration( const std::string &name) { @@ -76,6 +78,17 @@ static std::unique_ptr ParseSinglePropagatorConfi return model; } +#endif + +static std::unique_ptr ParseSinglePropagatorConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new SimplePropagatorConfiguration); + + model->name = node->AsString(); + + return model; +} static std::unique_ptr ParseCompositePropagatorConfiguration( const std::unique_ptr &node) @@ -97,8 +110,27 @@ static std::unique_ptr ParseCompositePropagato static std::unique_ptr ParsePropagatorConfiguration( const std::unique_ptr &node) { - std::unique_ptr model; + std::unique_ptr child; + + child = node->GetChildNode("composite"); + if (child) + { + return ParseCompositePropagatorConfiguration(child); + } + + // FIXME: File bug with opentelemetry-configuration + child = node->GetChildNode("simple"); + if (child) + { + return ParseSinglePropagatorConfiguration(child); + } + + OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: illegal propagator"); + throw InvalidSchemaException("Illegal propagator"); + return nullptr; +#ifdef NEVER + // This is the code that complies with the current model spec std::string name; std::unique_ptr child; size_t count = 0; @@ -113,7 +145,7 @@ static std::unique_ptr ParsePropagatorConfiguration( if (count != 1) { OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: count " << count); - // Throw + throw InvalidSchemaException("Illegal propagator"); } if (name == "composite") @@ -126,6 +158,7 @@ static std::unique_ptr ParsePropagatorConfiguration( } return model; +#endif } static std::unique_ptr ParseSpanLimitsConfiguration( @@ -264,7 +297,7 @@ static std::unique_ptr ParseSamplerConfiguration( if (count != 1) { OTEL_INTERNAL_LOG_ERROR("ParseSamplerConfiguration: count " << count); - // Throw + throw InvalidSchemaException("Illegal sampler"); } if (name == "always_off") @@ -390,7 +423,7 @@ static std::unique_ptr ParseSpanExporterConfiguration if (count != 1) { OTEL_INTERNAL_LOG_ERROR("ParseSpanExporterConfiguration: count " << count); - // Throw + throw InvalidSchemaException("Illegal span exporter"); } if (name == "otlp") @@ -474,7 +507,7 @@ static std::unique_ptr ParseSpanProcessorConfigurati if (count != 1) { OTEL_INTERNAL_LOG_ERROR("ParseSpanProcessorConfiguration: count " << count); - // Throw + throw InvalidSchemaException("Illegal span processor"); } if (name == "batch") @@ -658,11 +691,11 @@ std::unique_ptr ConfigurationFactory::Parse(std::istream &in) } catch (const YAML::Exception &e) { - OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml, " << e.what()); + OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml, " << e.what()); } catch (...) { - OTEL_INTERNAL_LOG_ERROR("Failed interpret yaml."); + OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml."); } return config; diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index 3f0d6b13b7..1ad8aa897d 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -127,6 +127,61 @@ void Registry::AddTextMapPropagatorBuilder(const std::string &name, m_propagator_builders.insert(entry); } +const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::string &name) +{ + ExtensionSamplerBuilder *builder = nullptr; + auto search = m_sampler_builders.find(name); + if (search != m_sampler_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddExtensionSamplerBuilder(const std::string &name, ExtensionSamplerBuilder *builder) +{ + std::pair entry{name, builder}; + m_sampler_builders.insert(entry); +} + +const ExtensionSpanExporterBuilder *Registry::GetExtensionSpanExporterBuilder( + const std::string &name) +{ + ExtensionSpanExporterBuilder *builder = nullptr; + auto search = m_span_exporter_builders.find(name); + if (search != m_span_exporter_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddExtensionSpanExporterBuilder(const std::string &name, + ExtensionSpanExporterBuilder *builder) +{ + std::pair entry{name, builder}; + m_span_exporter_builders.insert(entry); +} + +const ExtensionSpanProcessorBuilder *Registry::GetExtensionSpanProcessorBuilder( + const std::string &name) +{ + ExtensionSpanProcessorBuilder *builder = nullptr; + auto search = m_span_processor_builders.find(name); + if (search != m_span_processor_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddExtensionSpanProcessorBuilder(const std::string &name, + ExtensionSpanProcessorBuilder *builder) +{ + std::pair entry{name, builder}; + m_span_processor_builders.insert(entry); +} + } // namespace init } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 18838c4a5f..d1aaeee2b4 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -32,6 +32,7 @@ #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" #include "opentelemetry/sdk/init/text_map_propagator_builder.h" +#include "opentelemetry/sdk/init/unsupported_exception.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_options.h" @@ -221,6 +222,7 @@ std::unique_ptr SdkBuilder::CreateJaegerRemo std::unique_ptr sdk; OTEL_INTERNAL_LOG_ERROR("CreateJaegerRemoteSampler: FIXME"); + throw UnsupportedException("JeagerRemoteSampler not available in opentelemetry-cpp"); return sdk; } @@ -289,7 +291,7 @@ std::unique_ptr SdkBuilder::CreateOtlpS else { OTEL_INTERNAL_LOG_ERROR("No builder for OtlpSpanExporter"); - // Throw + throw UnsupportedException("No builder for OtlpSpanExporter"); } return sdk; @@ -309,7 +311,7 @@ std::unique_ptr SdkBuilder::CreateConso else { OTEL_INTERNAL_LOG_ERROR("No builder for ConsoleSpanExporter"); - // Throw + throw UnsupportedException("No builder for ConsoleSpanExporter"); } return sdk; @@ -329,7 +331,7 @@ std::unique_ptr SdkBuilder::CreateZipki else { OTEL_INTERNAL_LOG_ERROR("No builder for ZipkinSpanExporter"); - // Throw + throw UnsupportedException("No builder for ZipkinSpanExporter"); } return sdk; @@ -454,7 +456,7 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const else { OTEL_INTERNAL_LOG_ERROR("CreateTextMapPropagator() no builder for " << name); - // Throw + throw UnsupportedException("CreateTextMapPropagator() no builder for " + name); } return sdk; } From c8c1668d6700c443443c312e8e314f900f1bf5c7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 15 Feb 2024 01:34:19 +0100 Subject: [PATCH 017/166] POC - replacing Yaml-cpp with Rapidyaml --- CMakeLists.txt | 1 + examples/yaml/main.cc | 6 +- .../sdk/configuration/configuration_factory.h | 6 +- .../sdk/configuration/ryml_document.h | 35 ++ .../sdk/configuration/ryml_document_node.h | 94 ++++ .../yaml_configuration_factory.h | 28 + .../sdk/configuration/yaml_document.h | 2 +- sdk/src/configuration/CMakeLists.txt | 15 +- .../configuration/configuration_factory.cc | 63 +-- sdk/src/configuration/ryml_document.cc | 48 ++ sdk/src/configuration/ryml_document_node.cc | 500 ++++++++++++++++++ .../yaml_configuration_factory.cc | 117 ++++ sdk/src/configuration/yaml_document.cc | 4 +- sdk/src/init/configured_sdk.cc | 30 +- sdk/src/init/sdk_builder.cc | 11 +- sdk/test/configuration/yaml_test.cc | 4 +- 16 files changed, 883 insertions(+), 81 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/ryml_document.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h create mode 100644 sdk/src/configuration/ryml_document.cc create mode 100644 sdk/src/configuration/ryml_document_node.cc create mode 100644 sdk/src/configuration/yaml_configuration_factory.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 827e73b9b3..865c834061 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -474,6 +474,7 @@ if((NOT WITH_API_ONLY) AND USE_NLOHMANN_JSON) endif() find_package(yaml-cpp REQUIRED) +find_package(ryml REQUIRED) if(OTELCPP_MAINTAINER_MODE) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index c48e1546a6..d8f40db4b3 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" @@ -28,7 +28,7 @@ namespace { void InitOtel() { - auto level = opentelemetry::sdk::common::internal_log::LogLevel::Info; + auto level = opentelemetry::sdk::common::internal_log::LogLevel::Debug; opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); @@ -56,7 +56,7 @@ void InitOtel() // See // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml std::string config_file = "config.yaml"; - auto model = opentelemetry::sdk::configuration::ConfigurationFactory::ParseFile(config_file); + auto model = opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseFile(config_file); /* 5 - Build the SDK from the parsed config.yaml */ diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h index ef54069c69..9dbfa68000 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h @@ -8,6 +8,7 @@ #include #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,9 +20,8 @@ namespace configuration class ConfigurationFactory { public: - static std::unique_ptr ParseFile(std::string filename); - static std::unique_ptr ParseString(std::string content); - static std::unique_ptr Parse(std::istream &in); + static std::unique_ptr ParseConfiguration( + const std::unique_ptr &node); }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h new file mode 100644 index 0000000000..f37471356e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/document.h" +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class RymlDocument : public Document +{ +public: + static std::unique_ptr Parse(std::string content); + + RymlDocument(ryml::Tree tree) : m_tree(tree) {} + ~RymlDocument() override = default; + + std::unique_ptr GetRootNode() override; + +private: + ryml::Tree m_tree; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h new file mode 100644 index 0000000000..ba46f4b37e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -0,0 +1,94 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class RymlDocumentNode : public DocumentNode +{ +public: + RymlDocumentNode(ryml::ConstNodeRef node) : m_node(node) {} + ~RymlDocumentNode() override = default; + + bool AsBoolean() override; + size_t AsInteger() override; + double AsDouble() override; + std::string AsString() override; + + std::unique_ptr GetRequiredChildNode(const std::string &name) override; + std::unique_ptr GetChildNode(const std::string &name) override; + + bool GetRequiredBoolean(const std::string &name) override; + bool GetBoolean(const std::string &name, bool default_value) override; + + size_t GetRequiredInteger(const std::string &name) override; + size_t GetInteger(const std::string &name, size_t default_value) override; + + double GetRequiredDouble(const std::string &name) override; + double GetDouble(const std::string &name, double default_value) override; + + std::string GetRequiredString(const std::string &name) override; + std::string GetString(const std::string &name, const std::string &default_value) override; + + DocumentNodeConstIterator begin() const override; + DocumentNodeConstIterator end() const override; + + PropertiesNodeConstIterator begin_properties() const override; + PropertiesNodeConstIterator end_properties() const override; + + std::string Dump() const override; + +private: + ryml::ConstNodeRef GetRequiredRymlChildNode(const std::string &name); + ryml::ConstNodeRef GetRymlChildNode(const std::string &name); + + std::string GetRequiredRaw(const std::string &name); + std::pair GetRaw(const std::string &name); + + ryml::ConstNodeRef m_node; +}; + +class RymlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl +{ +public: + RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index); + ~RymlDocumentNodeConstIteratorImpl() override; + + void Next() override; + std::unique_ptr Item() const override; + bool Equal(const DocumentNodeConstIteratorImpl *rhs) const override; + +private: + ryml::ConstNodeRef m_parent; + size_t m_index; +}; + +class RymlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorImpl +{ +public: + RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index); + ~RymlPropertiesNodeConstIteratorImpl() override; + + void Next() override; + std::string Name() const override; + std::unique_ptr Value() const override; + bool Equal(const PropertiesNodeConstIteratorImpl *rhs) const override; + +private: + ryml::ConstNodeRef m_parent; + size_t m_index; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h new file mode 100644 index 0000000000..87bfababb5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class YamlConfigurationFactory +{ +public: + static std::unique_ptr ParseFile(std::string filename); + static std::unique_ptr ParseString(std::string content); +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h index 6f8dd9c5fa..0dfc6a098c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h @@ -19,7 +19,7 @@ namespace configuration class YamlDocument : public Document { public: - static std::unique_ptr Parse(std::istream &in); + static std::unique_ptr Parse(std::string content); YamlDocument(YAML::Node root) : m_root(root) {} ~YamlDocument() override = default; diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index c3852749fe..05aae825de 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -3,7 +3,9 @@ add_library( opentelemetry_configuration - configuration_factory.cc yaml_document.cc yaml_document_node.cc) + configuration_factory.cc + yaml_configuration_factory.cc yaml_document.cc yaml_document_node.cc + ryml_document.cc ryml_document_node.cc) set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) set_target_version(opentelemetry_configuration) @@ -14,7 +16,16 @@ target_include_directories( target_link_libraries( opentelemetry_configuration - PUBLIC opentelemetry_api opentelemetry_common yaml-cpp::yaml-cpp) + PUBLIC opentelemetry_api opentelemetry_common) + +target_link_libraries( + opentelemetry_configuration + PUBLIC yaml-cpp::yaml-cpp) + + +target_link_libraries( + opentelemetry_configuration + PUBLIC ryml::ryml) if(OPENTELEMETRY_INSTALL) install( diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index dce93faf57..7a1f384994 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -593,7 +593,8 @@ static std::unique_ptr ParseResourceConfiguration( return model; } -static std::unique_ptr ParseConfiguration(const std::unique_ptr &node) +std::unique_ptr ConfigurationFactory::ParseConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new Configuration); @@ -641,66 +642,6 @@ static std::unique_ptr ParseConfiguration(const std::unique_ptr ConfigurationFactory::ParseFile(std::string filename) -{ - std::unique_ptr conf; - std::ifstream in(filename, std::ios::binary); - if (!in.is_open()) - { - OTEL_INTERNAL_LOG_ERROR("Failed to open yaml file <" << filename << ">."); - } - else - { - conf = ConfigurationFactory::Parse(in); - } - - return conf; -} - -std::unique_ptr ConfigurationFactory::ParseString(std::string content) -{ - std::istringstream in(content); - return Parse(in); -} - -std::unique_ptr ConfigurationFactory::Parse(std::istream &in) -{ - std::unique_ptr doc; - std::unique_ptr root; - std::unique_ptr config; - - try - { - doc = YamlDocument::Parse(in); - root = doc->GetRootNode(); - } - catch (const YAML::BadFile &e) - { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml, " << e.what()); - return config; - } - catch (...) - { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml."); - return config; - } - - try - { - config = ParseConfiguration(root); - } - catch (const YAML::Exception &e) - { - OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml, " << e.what()); - } - catch (...) - { - OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml."); - } - - return config; -} - } // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc new file mode 100644 index 0000000000..4f4e862779 --- /dev/null +++ b/sdk/src/configuration/ryml_document.cc @@ -0,0 +1,48 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/ryml_document.h" +#include "opentelemetry/sdk/configuration/ryml_document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +std::unique_ptr RymlDocument::Parse(std::string content) +{ + ryml::Tree tree; + std::unique_ptr doc; + + try + { + tree = ryml::parse_in_arena(ryml::to_csubstr(content)); + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed to load yaml."); + return doc; + } + + RymlDocument *ryml_doc = new RymlDocument(tree); + doc = std::unique_ptr(ryml_doc); + return doc; +} + +std::unique_ptr RymlDocument::GetRootNode() +{ + RymlDocumentNode *ryml_node = new RymlDocumentNode(m_tree.rootref()); + std::unique_ptr node(ryml_node); + return node; +} + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc new file mode 100644 index 0000000000..fa06c2e122 --- /dev/null +++ b/sdk/src/configuration/ryml_document_node.cc @@ -0,0 +1,500 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/invalid_schema_exception.h" +#include "opentelemetry/sdk/configuration/ryml_document.h" +#include "opentelemetry/sdk/configuration/ryml_document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +static void DebugNode(std::string_view name, ryml::ConstNodeRef node) +{ + OTEL_INTERNAL_LOG_DEBUG("Processing: " << name); + OTEL_INTERNAL_LOG_DEBUG(" - valid() : " << node.valid()); + OTEL_INTERNAL_LOG_DEBUG(" - empty() : " << node.empty()); + OTEL_INTERNAL_LOG_DEBUG(" - is_container() : " << node.is_container()); + OTEL_INTERNAL_LOG_DEBUG(" - is_map() : " << node.is_map()); + OTEL_INTERNAL_LOG_DEBUG(" - is_seq() : " << node.is_seq()); + OTEL_INTERNAL_LOG_DEBUG(" - is_val() : " << node.is_val()); + OTEL_INTERNAL_LOG_DEBUG(" - is_keyval() : " << node.is_keyval()); + OTEL_INTERNAL_LOG_DEBUG(" - has_key() : " << node.has_key()); + OTEL_INTERNAL_LOG_DEBUG(" - has_val() : " << node.has_val()); + OTEL_INTERNAL_LOG_DEBUG(" - num_children() : " << node.num_children()); + if (node.has_key()) + { + OTEL_INTERNAL_LOG_DEBUG(" - key() : " << node.key()); + } + if (node.has_val()) + { + OTEL_INTERNAL_LOG_DEBUG(" - val() : " << node.val()); + } +} + +bool RymlDocumentNode::AsBoolean() +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsBoolean()"); + +#ifdef LATER + if (!m_yaml.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + throw InvalidSchemaException(""); + } + bool value = m_yaml.as(); + return value; +#endif + return false; +} + +size_t RymlDocumentNode::AsInteger() +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsInteger()"); + +#ifdef LATER + if (!m_yaml.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + throw InvalidSchemaException(""); + } + size_t value = m_yaml.as(); + return value; +#endif + return 0; +} + +double RymlDocumentNode::AsDouble() +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsDouble()"); + +#ifdef LATER + if (!m_yaml.IsScalar()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + throw InvalidSchemaException(""); + } + double value = m_yaml.as(); + return value; +#endif + return 0.0; +} + +std::string RymlDocumentNode::AsString() +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsString()"); + + if (!m_node.is_val() && !m_node.is_keyval()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); + throw InvalidSchemaException(""); + } + ryml::csubstr view = m_node.val(); + std::string value(view.str, view.len); + return value; +} + +ryml::ConstNodeRef RymlDocumentNode::GetRequiredRymlChildNode(const std::string &name) +{ + if (!m_node.is_map()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); + throw InvalidSchemaException(name); + } + + const char *name_str = name.c_str(); + if (!m_node.has_child(name_str)) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + throw InvalidSchemaException(name); + } + + ryml::ConstNodeRef ryml_child = m_node[name_str]; + return ryml_child; +} + +ryml::ConstNodeRef RymlDocumentNode::GetRymlChildNode(const std::string &name) +{ + if (!m_node.is_map()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); + throw InvalidSchemaException(name); + } + + const char *name_str = name.c_str(); + if (!m_node.has_child(name_str)) + { + return ryml::ConstNodeRef{}; + } + + ryml::ConstNodeRef ryml_child = m_node[name_str]; + return ryml_child; +} + +std::unique_ptr RymlDocumentNode::GetRequiredChildNode(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredChildNode(" << name << ")"); + + auto ryml_child = GetRequiredRymlChildNode(name); + auto child = std::unique_ptr(new RymlDocumentNode(ryml_child)); + return child; +} + +std::unique_ptr RymlDocumentNode::GetChildNode(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetChildNode(" << name << ")"); + + std::unique_ptr child; + + if (!m_node.is_map()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); + throw InvalidSchemaException(name); + } + + const char *name_str = name.c_str(); + if (!m_node.has_child(name_str)) + { + return child; + } + + ryml::ConstNodeRef ryml_child = m_node[name_str]; + child = std::unique_ptr(new RymlDocumentNode(ryml_child)); + return child; +} + +bool RymlDocumentNode::GetRequiredBoolean(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredBoolean(" << name << ")"); + + auto ryml_child = GetRequiredRymlChildNode(name); + + bool value; + ryml_child >> value; + return value; +} + +bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetBoolean(" << name << ", " << default_value << ")"); + + auto ryml_child = GetRymlChildNode(name); + + if (!ryml_child.valid()) + { + return default_value; + } + + bool value; + ryml_child >> value; + return value; +} + +size_t RymlDocumentNode::GetRequiredInteger(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredInteger(" << name << ")"); + + auto ryml_child = GetRequiredRymlChildNode(name); + + size_t value; + ryml_child >> value; + return value; +} + +size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_value) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetInteger(" << name << ", " << default_value << ")"); + + auto ryml_child = GetRymlChildNode(name); + + if (!ryml_child.valid()) + { + return default_value; + } + + size_t value; + ryml_child >> value; + return value; +} + +double RymlDocumentNode::GetRequiredDouble(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredDouble(" << name << ")"); + + auto ryml_child = GetRequiredRymlChildNode(name); + + double value; + ryml_child >> value; + return value; +} + +double RymlDocumentNode::GetDouble(const std::string &name, double default_value) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetDouble(" << name << ", " << default_value << ")"); + + auto ryml_child = GetRymlChildNode(name); + + if (!ryml_child.valid()) + { + return default_value; + } + + double value; + ryml_child >> value; + return value; +} + +std::string RymlDocumentNode::GetRequiredString(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredString(" << name << ")"); + + ryml::ConstNodeRef ryml_child = GetRequiredRymlChildNode(name); + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + + return value; +} + +std::string RymlDocumentNode::GetString(const std::string &name, const std::string &default_value) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetString(" << name << ", " << default_value << ")"); + + ryml::ConstNodeRef ryml_child = GetRymlChildNode(name); + + if (!ryml_child.valid()) + { + return default_value; + } + + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + return value; +} + +std::string RymlDocumentNode::GetRequiredRaw(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredRaw(" << name << ")"); + + if (!m_node.is_map()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); + throw InvalidSchemaException(name); + } + + const char *name_str = name.c_str(); + if (!m_node.has_child(name_str)) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); + throw InvalidSchemaException(name); + } + + ryml::ConstNodeRef attr = m_node[name_str]; + if (attr.empty()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: empty node: " << name); + throw InvalidSchemaException(name); + } + + if (!attr.has_val()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: no value node: " << name); + throw InvalidSchemaException(name); + } + + ryml::csubstr view = attr.val(); + if (view.len == 0) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: 0 length node: " << name); + throw InvalidSchemaException(name); + } + + std::string value(view.str, view.len); + return value; +} + +std::pair RymlDocumentNode::GetRaw(const std::string &name) +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRaw(" << name << ")"); + + std::pair result{false, ""}; + + if (!m_node.is_map()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); + throw InvalidSchemaException(name); + } + + const char *name_str = name.c_str(); + if (!m_node.has_child(name_str)) + { + return result; + } + + ryml::ConstNodeRef attr = m_node[name_str]; + if (attr.empty()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: empty node: " << name); + throw InvalidSchemaException(name); + } + + if (!attr.has_val()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: no value node: " << name); + throw InvalidSchemaException(name); + } + + ryml::csubstr view = attr.val(); + if (view.len == 0) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: 0 length node: " << name); + throw InvalidSchemaException(name); + } + + std::string value(view.str, view.len); + result.first = true; + result.second = value; + return result; +} + +DocumentNodeConstIterator RymlDocumentNode::begin() const +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin()"); + + DebugNode("::begin()", m_node); + + for (auto it = m_node.cbegin(); it != m_node.cend(); ++it) + { + DebugNode("(iter)", *it); + } + + for (int index = 0; index < m_node.num_children(); index++) + { + DebugNode("(child)", m_node[index]); + } + + return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(m_node, 0)); +} + +DocumentNodeConstIterator RymlDocumentNode::end() const +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end()"); + + return DocumentNodeConstIterator( + new RymlDocumentNodeConstIteratorImpl(m_node, m_node.num_children())); +} + +PropertiesNodeConstIterator RymlDocumentNode::begin_properties() const +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin_properties()"); + + DebugNode("::begin_properties()", m_node); + + for (auto it = m_node.cbegin(); it != m_node.cend(); ++it) + { + DebugNode("(iter)", *it); + } + + for (int index = 0; index < m_node.num_children(); index++) + { + DebugNode("(child)", m_node[index]); + } + + return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(m_node, 0)); +} + +PropertiesNodeConstIterator RymlDocumentNode::end_properties() const +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end_properties()"); + + return PropertiesNodeConstIterator( + new RymlPropertiesNodeConstIteratorImpl(m_node, m_node.num_children())); +} + +std::string RymlDocumentNode::Dump() const +{ + return "FIXME: Dump"; +} + +RymlDocumentNodeConstIteratorImpl::RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, + size_t index) + : m_parent(parent), m_index(index) +{} + +RymlDocumentNodeConstIteratorImpl::~RymlDocumentNodeConstIteratorImpl() {} + +void RymlDocumentNodeConstIteratorImpl::Next() +{ + ++m_index; +} + +std::unique_ptr RymlDocumentNodeConstIteratorImpl::Item() const +{ + std::unique_ptr item; + ryml::ConstNodeRef ryml_item = m_parent[m_index]; + if (!ryml_item.valid()) + { + OTEL_INTERNAL_LOG_ERROR("iterator is lost "); + // Throw + } + item = std::unique_ptr(new RymlDocumentNode(ryml_item)); + return item; +} + +bool RymlDocumentNodeConstIteratorImpl::Equal(const DocumentNodeConstIteratorImpl *rhs) const +{ + const RymlDocumentNodeConstIteratorImpl *other = + static_cast(rhs); + return m_index == other->m_index; +} + +RymlPropertiesNodeConstIteratorImpl::RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, + size_t index) + : m_parent(parent), m_index(index) +{} + +RymlPropertiesNodeConstIteratorImpl::~RymlPropertiesNodeConstIteratorImpl() {} + +void RymlPropertiesNodeConstIteratorImpl::Next() +{ + OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Next()"); + ++m_index; +} + +std::string RymlPropertiesNodeConstIteratorImpl::Name() const +{ + ryml::ConstNodeRef ryml_item = m_parent[m_index]; + ryml::csubstr k = ryml_item.key(); + std::string name(k.str, k.len); + + OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Name() = " << name); + + return name; +} + +std::unique_ptr RymlPropertiesNodeConstIteratorImpl::Value() const +{ + std::unique_ptr item; + + ryml::ConstNodeRef ryml_item = m_parent[m_index]; + item = std::unique_ptr(new RymlDocumentNode(ryml_item)); + + OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Value()"); + + return item; +} + +bool RymlPropertiesNodeConstIteratorImpl::Equal(const PropertiesNodeConstIteratorImpl *rhs) const +{ + const RymlPropertiesNodeConstIteratorImpl *other = + static_cast(rhs); + return m_index == other->m_index; +} + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc new file mode 100644 index 0000000000..8d0486eb5d --- /dev/null +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -0,0 +1,117 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/ryml_document.h" +#include "opentelemetry/sdk/configuration/ryml_document_node.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_document.h" +#include "opentelemetry/sdk/configuration/yaml_document_node.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +std::unique_ptr YamlConfigurationFactory::ParseFile(std::string filename) +{ + std::unique_ptr conf; + std::ifstream in(filename, std::ios::binary); + if (!in.is_open()) + { + OTEL_INTERNAL_LOG_ERROR("Failed to open yaml file <" << filename << ">."); + } + else + { + std::ostringstream content; + content << in.rdbuf(); + conf = YamlConfigurationFactory::ParseString(content.str()); + } + + return conf; +} + +static std::unique_ptr YamlCppParse(const std::string &content) +{ + std::unique_ptr doc; + + try + { + doc = YamlDocument::Parse(content); + } + catch (const YAML::BadFile &e) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml, " << e.what()); + return nullptr; + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml."); + return nullptr; + } + + return doc; +} + +static std::unique_ptr RymlParse(const std::string &content) +{ + std::unique_ptr doc; + + try + { + doc = RymlDocument::Parse(content); + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml."); + return nullptr; + } + + return doc; +} + +std::unique_ptr YamlConfigurationFactory::ParseString(std::string content) +{ + std::unique_ptr doc; + std::unique_ptr root; + std::unique_ptr config; + + // #define WITH_YAML_CPP + +#ifdef WITH_YAML_CPP + doc = YamlCppParse(content); +#else + doc = RymlParse(content); +#endif + + try + { + if (doc) + { + root = doc->GetRootNode(); + config = ConfigurationFactory::ParseConfiguration(root); + } + } + catch (const YAML::Exception &e) + { + OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml, " << e.what()); + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml."); + } + + return config; +} + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/yaml_document.cc b/sdk/src/configuration/yaml_document.cc index 393de87340..959b7f883f 100644 --- a/sdk/src/configuration/yaml_document.cc +++ b/sdk/src/configuration/yaml_document.cc @@ -15,14 +15,14 @@ namespace sdk namespace configuration { -std::unique_ptr YamlDocument::Parse(std::istream &in) +std::unique_ptr YamlDocument::Parse(std::string content) { YAML::Node yaml; std::unique_ptr doc; try { - yaml = YAML::Load(in); + yaml = YAML::Load(content); } catch (const YAML::BadFile &e) { diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index bf7173a30e..54d7ff910e 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -20,19 +20,39 @@ std::unique_ptr ConfiguredSdk::Create( std::shared_ptr registry, const std::unique_ptr &model) { - SdkBuilder builder(registry); - return builder.CreateConfiguredSdk(model); + std::unique_ptr sdk; + + if (model) + { + try + { + SdkBuilder builder(registry); + sdk = builder.CreateConfiguredSdk(model); + } + catch (...) + { + OTEL_INTERNAL_LOG_ERROR("Failed to build from the model."); + } + } + + return sdk; } void ConfiguredSdk::Install() { - opentelemetry::trace::Provider::SetTracerProvider(m_tracer_provider); + if (m_tracer_provider) + { + opentelemetry::trace::Provider::SetTracerProvider(m_tracer_provider); + } } void ConfiguredSdk::UnInstall() { - std::shared_ptr none; - opentelemetry::trace::Provider::SetTracerProvider(none); + if (m_tracer_provider) + { + std::shared_ptr none; + opentelemetry::trace::Provider::SetTracerProvider(none); + } } } // namespace init diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index d1aaeee2b4..ec7f198245 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -511,8 +511,15 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (!model->disabled) { - sdk->m_tracer_provider = CreateTracerProvider(model->tracer_provider); - sdk->m_propagator = CreatePropagator(model->propagator); + if (model->tracer_provider) + { + sdk->m_tracer_provider = CreateTracerProvider(model->tracer_provider); + } + + if (model->propagator) + { + sdk->m_propagator = CreatePropagator(model->propagator); + } } return sdk; diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index 945b388564..3c364b7c8f 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -3,11 +3,11 @@ #include -#include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" std::unique_ptr DoParse(std::string yaml) { - return opentelemetry::sdk::configuration::ConfigurationFactory::ParseString(yaml); + return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(yaml); } TEST(Yaml, empty) From 7c81b0b57a98b9f9cc92bbec36b292034e78b312 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 18 Feb 2024 00:10:06 +0100 Subject: [PATCH 018/166] POC - replace Yaml-cpp with Ryml --- .../sdk/configuration/document_node.h | 3 ++ .../sdk/configuration/ryml_document_node.h | 3 ++ .../sdk/configuration/yaml_document_node.h | 3 ++ sdk/src/configuration/ryml_document_node.cc | 30 +++++++++++-------- sdk/src/configuration/yaml_document_node.cc | 13 ++++++++ sdk/src/init/sdk_builder.cc | 2 +- sdk/test/configuration/yaml_test.cc | 3 +- 7 files changed, 43 insertions(+), 14 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index dd49ad4100..dfc21df0ca 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -51,6 +51,9 @@ class DocumentNode virtual DocumentNodeConstIterator begin() const = 0; virtual DocumentNodeConstIterator end() const = 0; + virtual size_t num_children() const = 0; + virtual std::unique_ptr GetChild(size_t index) const = 0; + virtual PropertiesNodeConstIterator begin_properties() const = 0; virtual PropertiesNodeConstIterator end_properties() const = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index ba46f4b37e..2f1ad01067 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -43,6 +43,9 @@ class RymlDocumentNode : public DocumentNode DocumentNodeConstIterator begin() const override; DocumentNodeConstIterator end() const override; + size_t num_children() const override; + std::unique_ptr GetChild(size_t index) const override; + PropertiesNodeConstIterator begin_properties() const override; PropertiesNodeConstIterator end_properties() const override; diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h index a8352c6e2c..81b421a563 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h @@ -48,6 +48,9 @@ class YamlDocumentNode : public DocumentNode DocumentNodeConstIterator begin() const override; DocumentNodeConstIterator end() const override; + size_t num_children() const override; + std::unique_ptr GetChild(size_t index) const override; + PropertiesNodeConstIterator begin_properties() const override; PropertiesNodeConstIterator end_properties() const override; diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index fa06c2e122..1cc2c2839f 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -122,8 +122,7 @@ ryml::ConstNodeRef RymlDocumentNode::GetRymlChildNode(const std::string &name) { if (!m_node.is_map()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); - throw InvalidSchemaException(name); + return ryml::ConstNodeRef{}; } const char *name_str = name.c_str(); @@ -365,17 +364,14 @@ DocumentNodeConstIterator RymlDocumentNode::begin() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin()"); +#if 0 DebugNode("::begin()", m_node); - for (auto it = m_node.cbegin(); it != m_node.cend(); ++it) - { - DebugNode("(iter)", *it); - } - for (int index = 0; index < m_node.num_children(); index++) { DebugNode("(child)", m_node[index]); } +#endif return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(m_node, 0)); } @@ -388,21 +384,31 @@ DocumentNodeConstIterator RymlDocumentNode::end() const new RymlDocumentNodeConstIteratorImpl(m_node, m_node.num_children())); } +size_t RymlDocumentNode::num_children() const +{ + return m_node.num_children(); +} + +std::unique_ptr RymlDocumentNode::GetChild(size_t index) const +{ + std::unique_ptr child; + ryml::ConstNodeRef ryml_child = m_node[index]; + child = std::unique_ptr(new RymlDocumentNode(ryml_child)); + return child; +} + PropertiesNodeConstIterator RymlDocumentNode::begin_properties() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin_properties()"); +#if 0 DebugNode("::begin_properties()", m_node); - for (auto it = m_node.cbegin(); it != m_node.cend(); ++it) - { - DebugNode("(iter)", *it); - } - for (int index = 0; index < m_node.num_children(); index++) { DebugNode("(child)", m_node[index]); } +#endif return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(m_node, 0)); } diff --git a/sdk/src/configuration/yaml_document_node.cc b/sdk/src/configuration/yaml_document_node.cc index d8d6371fc9..777fbbddbc 100644 --- a/sdk/src/configuration/yaml_document_node.cc +++ b/sdk/src/configuration/yaml_document_node.cc @@ -303,6 +303,19 @@ DocumentNodeConstIterator YamlDocumentNode::end() const return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.end())); } +size_t YamlDocumentNode::num_children() const +{ + OTEL_INTERNAL_LOG_ERROR("YamlDocumentNode::num_children(): FIXME"); + return 0; +} + +std::unique_ptr YamlDocumentNode::GetChild(size_t index) const +{ + std::unique_ptr child; + OTEL_INTERNAL_LOG_ERROR("YamlDocumentNode::GetChild(): FIXME"); + return child; +} + PropertiesNodeConstIterator YamlDocumentNode::begin_properties() const { OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::begin_properties()"); diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index ec7f198245..c7a7f95a53 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -450,7 +450,7 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateTextMapPropagator() using registered builder"); + OTEL_INTERNAL_LOG_DEBUG("CreateTextMapPropagator() using registered builder " << name); sdk = builder->Build(); } else diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index 3c364b7c8f..210265d752 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -25,7 +25,8 @@ TEST(Yaml, no_format) )"; auto config = DoParse(yaml); - ASSERT_EQ(config, nullptr); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, ""); } TEST(Yaml, just_format) From eb1155d91ad6e22c965947632a329896560f5da5 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 18 Feb 2024 00:54:04 +0100 Subject: [PATCH 019/166] POC - CI --- .github/workflows/ci.yml | 2 +- CMakeLists.txt | 21 ++++++++----- ci/install_ryml.sh | 31 +++++++++++++++++++ .../configuration/invalid_schema_exception.h | 1 - sdk/src/CMakeLists.txt | 7 +++-- sdk/src/configuration/CMakeLists.txt | 12 ++++--- .../configuration/configuration_factory.cc | 2 -- .../yaml_configuration_factory.cc | 18 +++++------ sdk/src/init/sdk_builder.cc | 1 - 9 files changed, 66 insertions(+), 29 deletions(-) create mode 100755 ci/install_ryml.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eceb182571..bb612fc3a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -140,7 +140,7 @@ jobs: sudo -E ./ci/setup_cmake.sh sudo -E ./ci/setup_ci_environment.sh sudo -E ./ci/install_protobuf.sh - sudo -E ./ci/install_yaml_cpp.sh + sudo -E ./ci/install_ryml.sh - name: run cmake clang (maintainer mode, sync) env: CC: /usr/bin/clang-15 diff --git a/CMakeLists.txt b/CMakeLists.txt index fdfe1c2f78..8878b86c1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,8 +95,7 @@ endif() option(WITH_ABI_VERSION_1 "ABI version 1" ON) option(WITH_ABI_VERSION_2 "EXPERIMENTAL: ABI version 2 preview" OFF) -option(WITH_CONFIGURATION "EXPERIMENTAL: configuration model" OFF) -option(WITH_CONFIGURATION_YAML "EXPERIMENTAL: YAML configuration file" OFF) +option(WITH_CONFIGURATION "EXPERIMENTAL: YAML configuration file" OFF) file(READ "${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h" OPENTELEMETRY_CPP_HEADER_VERSION_H) @@ -287,10 +286,6 @@ option(WITH_METRICS_EXEMPLAR_PREVIEW # Verify options dependencies # -if(WITH_CONFIGURATION_YAML AND NOT WITH_CONFIGURATION) - message(FATAL_ERROR "CONFIGURATION_YAML=ON requires WITH_CONFIGURATION=ON") -endif() - if(WITH_EXAMPLES_HTTP AND NOT WITH_EXAMPLES) message(FATAL_ERROR "WITH_EXAMPLES_HTTP=ON requires WITH_EXAMPLES=ON") endif() @@ -473,8 +468,18 @@ if((NOT WITH_API_ONLY) AND USE_NLOHMANN_JSON) include(cmake/nlohmann-json.cmake) endif() -find_package(yaml-cpp REQUIRED) -find_package(ryml REQUIRED) +# +# Do we need RapidYaml ? +# + +if((NOT WITH_API_ONLY) AND WITH_CONFIGURATION) + # No specific version required. + find_package(ryml REQUIRED) + message(STATUS "Found ryml: include ${RYML_INCLUDE_DIR}, lib ${RYML_LIB_DIR}, version ${ryml_VERSION}") +endif() + +# DEAD +# find_package(yaml-cpp REQUIRED) if(OTELCPP_MAINTAINER_MODE) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh new file mode 100755 index 0000000000..dfa1ba20a5 --- /dev/null +++ b/ci/install_ryml.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +set -ex +export DEBIAN_FRONTEND=noninteractive +[ -z "${RYML_VERSION}" ] && export RYML_VERSION="0.5.0" + +BUILD_DIR=/tmp/ +INSTALL_DIR=/usr/local/ +pushd $BUILD_DIR +git clone --recursive -b ${RYML_VERSION} https://github.com/biojppm/rapidyaml.git +cd yaml-cpp +RYML_BUILD_OPTIONS=( + "-DBUILD_TESTING=OFF" + "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" + "-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR" +) + +if [ ! -z "${CXX_STANDARD}" ]; then + RYML_BUILD_OPTIONS=(${RYML_BUILD_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}") +fi + +mkdir build && pushd build +cmake ${RYML_BUILD_OPTIONS[@]} .. +make -j $(nproc) +make install +popd +popd +export PATH=${INSTALL_DIR}/bin:$PATH # ensure to use the installed ryml diff --git a/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h index 7fbe31493d..e17cf42341 100644 --- a/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h +++ b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h @@ -3,7 +3,6 @@ #pragma once -#include #include #include "opentelemetry/sdk/configuration/document.h" diff --git a/sdk/src/CMakeLists.txt b/sdk/src/CMakeLists.txt index d46c5b005f..67fac35208 100644 --- a/sdk/src/CMakeLists.txt +++ b/sdk/src/CMakeLists.txt @@ -7,5 +7,8 @@ add_subdirectory(metrics) add_subdirectory(logs) add_subdirectory(version) add_subdirectory(resource) -add_subdirectory(configuration) -add_subdirectory(init) + +if(WITH_CONFIGURATION) + add_subdirectory(configuration) + add_subdirectory(init) +endif() diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index 05aae825de..c9292dee58 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -1,10 +1,13 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 +# DEAD +# yaml_document.cc yaml_document_node.cc + add_library( opentelemetry_configuration configuration_factory.cc - yaml_configuration_factory.cc yaml_document.cc yaml_document_node.cc + yaml_configuration_factory.cc ryml_document.cc ryml_document_node.cc) set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) @@ -18,10 +21,9 @@ target_link_libraries( opentelemetry_configuration PUBLIC opentelemetry_api opentelemetry_common) -target_link_libraries( - opentelemetry_configuration - PUBLIC yaml-cpp::yaml-cpp) - +# target_link_libraries( +# opentelemetry_configuration +# PUBLIC yaml-cpp::yaml-cpp) target_link_libraries( opentelemetry_configuration diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 7a1f384994..4ec74094b5 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -1,7 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include #include #include "opentelemetry/sdk/common/global_log_handler.h" @@ -27,7 +26,6 @@ #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" -#include "opentelemetry/sdk/configuration/yaml_document.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index 8d0486eb5d..a11dd02ce4 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -1,9 +1,10 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include #include +// #define WITH_YAML_CPP + #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" @@ -11,10 +12,13 @@ #include "opentelemetry/sdk/configuration/ryml_document.h" #include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -#include "opentelemetry/sdk/configuration/yaml_document.h" -#include "opentelemetry/sdk/configuration/yaml_document_node.h" #include "opentelemetry/version.h" +#ifdef WITH_YAML_CPP +# include "opentelemetry/sdk/configuration/yaml_document.h" +# include "opentelemetry/sdk/configuration/yaml_document_node.h" +#endif + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -39,6 +43,7 @@ std::unique_ptr YamlConfigurationFactory::ParseFile(std::string f return conf; } +#ifdef WITH_YAML_CPP static std::unique_ptr YamlCppParse(const std::string &content) { std::unique_ptr doc; @@ -60,6 +65,7 @@ static std::unique_ptr YamlCppParse(const std::string &content) return doc; } +#endif static std::unique_ptr RymlParse(const std::string &content) { @@ -84,8 +90,6 @@ std::unique_ptr YamlConfigurationFactory::ParseString(std::string std::unique_ptr root; std::unique_ptr config; - // #define WITH_YAML_CPP - #ifdef WITH_YAML_CPP doc = YamlCppParse(content); #else @@ -100,10 +104,6 @@ std::unique_ptr YamlConfigurationFactory::ParseString(std::string config = ConfigurationFactory::ParseConfiguration(root); } } - catch (const YAML::Exception &e) - { - OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml, " << e.what()); - } catch (...) { OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml."); diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index c7a7f95a53..7271d2e783 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -24,7 +24,6 @@ #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" -#include "opentelemetry/sdk/configuration/yaml_document.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" From 172e212c54253b1059347ab398edfbe09f5fd7ce Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 18 Feb 2024 01:01:59 +0100 Subject: [PATCH 020/166] CI --- ci/install_ryml.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index dfa1ba20a5..176a79cfaa 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -5,7 +5,7 @@ set -ex export DEBIAN_FRONTEND=noninteractive -[ -z "${RYML_VERSION}" ] && export RYML_VERSION="0.5.0" +[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.5.0" BUILD_DIR=/tmp/ INSTALL_DIR=/usr/local/ From 09d81222accf003cb3b94dfbace83aa450b795d3 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 18 Feb 2024 01:10:27 +0100 Subject: [PATCH 021/166] CI --- ci/install_ryml.sh | 2 +- examples/CMakeLists.txt | 2 +- sdk/test/CMakeLists.txt | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index 176a79cfaa..60422f46e6 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -11,7 +11,7 @@ BUILD_DIR=/tmp/ INSTALL_DIR=/usr/local/ pushd $BUILD_DIR git clone --recursive -b ${RYML_VERSION} https://github.com/biojppm/rapidyaml.git -cd yaml-cpp +cd rapidyaml RYML_BUILD_OPTIONS=( "-DBUILD_TESTING=OFF" "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 2321eb2b7e..b0c857797b 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -30,6 +30,6 @@ if(WITH_EXAMPLES_HTTP) add_subdirectory(http) endif() -if(WITH_CONFIGURATION_YAML) +if(WITH_CONFIGURATION) add_subdirectory(yaml) endif() diff --git a/sdk/test/CMakeLists.txt b/sdk/test/CMakeLists.txt index 3ea45b36e5..dd957fae1f 100644 --- a/sdk/test/CMakeLists.txt +++ b/sdk/test/CMakeLists.txt @@ -7,4 +7,7 @@ add_subdirectory(metrics) add_subdirectory(logs) add_subdirectory(resource) add_subdirectory(instrumentationscope) -add_subdirectory(configuration) + +if(WITH_CONFIGURATION) + add_subdirectory(configuration) +endif() From e5372874949fd543427312c92951a46950304e0b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 18 Feb 2024 01:58:15 +0100 Subject: [PATCH 022/166] Cleanup --- .../opentelemetry/exporters/ostream/console_builder.h | 2 ++ .../otlp/include/opentelemetry/exporters/otlp/otlp_builder.h | 3 ++- .../include/opentelemetry/exporters/zipkin/zipkin_builder.h | 3 ++- .../opentelemetry/sdk/configuration/headers_configuration.h | 3 +++ .../sdk/configuration/zipkin_span_exporter_configuration.h | 2 ++ .../opentelemetry/sdk/init/console_span_exporter_builder.h | 4 ++-- .../opentelemetry/sdk/init/otlp_span_exporter_builder.h | 4 ++-- sdk/include/opentelemetry/sdk/init/registry.h | 5 +++-- .../opentelemetry/sdk/init/zipkin_span_exporter_builder.h | 4 ++-- 9 files changed, 20 insertions(+), 10 deletions(-) diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h index a5b8879c56..6f7ab793b1 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h @@ -5,9 +5,11 @@ #include +#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h index 6c647b006d..03f037f179 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h @@ -5,10 +5,11 @@ #include -#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" +#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter diff --git a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h index 6761f93282..0b50e2fe46 100644 --- a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h +++ b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h @@ -5,10 +5,11 @@ #include -#include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter diff --git a/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h index b54dbff34b..b227b5f251 100644 --- a/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/headers_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h index 870f4eaba6..155a73257c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h index 8a90d6228c..60f159f373 100644 --- a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h @@ -3,8 +3,8 @@ #pragma once -#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,7 +16,7 @@ namespace init class ConsoleSpanExporterBuilder { public: - ConsoleSpanExporterBuilder() = default; + ConsoleSpanExporterBuilder() = default; virtual ~ConsoleSpanExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h index 0de0f79892..1607b595d2 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h @@ -3,8 +3,8 @@ #pragma once -#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,7 +16,7 @@ namespace init class OtlpSpanExporterBuilder { public: - OtlpSpanExporterBuilder() = default; + OtlpSpanExporterBuilder() = default; virtual ~OtlpSpanExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 77b3fb931d..4d94b7b316 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -3,9 +3,10 @@ #pragma once -#include "opentelemetry/version.h" - #include +#include + +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h index c426547d45..b2b745152e 100644 --- a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h @@ -3,8 +3,8 @@ #pragma once -#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,7 +16,7 @@ namespace init class ZipkinSpanExporterBuilder { public: - ZipkinSpanExporterBuilder() = default; + ZipkinSpanExporterBuilder() = default; virtual ~ZipkinSpanExporterBuilder() = default; virtual std::unique_ptr Build( From 5351d2083a29b1c0c8e2c0306bdb082dfd3c0d73 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 20 Feb 2024 01:58:16 +0100 Subject: [PATCH 023/166] POC - Implemented extension points (sampler, span processor, span exporter) --- examples/yaml/CMakeLists.txt | 6 ++- examples/yaml/custom_sampler.cc | 35 +++++++++++++ examples/yaml/custom_sampler.h | 24 +++++++++ examples/yaml/custom_sampler_builder.cc | 28 +++++++++++ examples/yaml/custom_sampler_builder.h | 18 +++++++ examples/yaml/custom_span_exporter.cc | 36 +++++++++++++ examples/yaml/custom_span_exporter.h | 24 +++++++++ examples/yaml/custom_span_exporter_builder.cc | 28 +++++++++++ examples/yaml/custom_span_exporter_builder.h | 19 +++++++ examples/yaml/custom_span_processor.cc | 40 +++++++++++++++ examples/yaml/custom_span_processor.h | 28 +++++++++++ .../yaml/custom_span_processor_builder.cc | 28 +++++++++++ examples/yaml/custom_span_processor_builder.h | 19 +++++++ examples/yaml/main.cc | 8 +++ .../sdk/configuration/configuration.h | 7 +++ .../sdk/configuration/configuration_factory.h | 3 +- .../sdk/init/extension_sampler_builder.h | 28 +++++++++++ .../init/extension_span_exporter_builder.h | 28 +++++++++++ .../init/extension_span_processor_builder.h | 29 +++++++++++ .../configuration/configuration_factory.cc | 46 ++++++++--------- .../yaml_configuration_factory.cc | 3 +- sdk/src/init/sdk_builder.cc | 50 ++++++++++++++++--- 22 files changed, 499 insertions(+), 36 deletions(-) create mode 100644 examples/yaml/custom_sampler.cc create mode 100644 examples/yaml/custom_sampler.h create mode 100644 examples/yaml/custom_sampler_builder.cc create mode 100644 examples/yaml/custom_sampler_builder.h create mode 100644 examples/yaml/custom_span_exporter.cc create mode 100644 examples/yaml/custom_span_exporter.h create mode 100644 examples/yaml/custom_span_exporter_builder.cc create mode 100644 examples/yaml/custom_span_exporter_builder.h create mode 100644 examples/yaml/custom_span_processor.cc create mode 100644 examples/yaml/custom_span_processor.h create mode 100644 examples/yaml/custom_span_processor_builder.cc create mode 100644 examples/yaml/custom_span_processor_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index b748418780..4e34bff6d4 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -7,7 +7,11 @@ endif() include_directories(${CMAKE_SOURCE_DIR}/sdk/include) -add_executable(example_yaml main.cc) +add_executable(example_yaml main.cc + custom_sampler.cc custom_sampler_builder.cc + custom_span_exporter.cc custom_span_exporter_builder.cc + custom_span_processor.cc custom_span_processor_builder.cc) + target_link_libraries(example_yaml ${CMAKE_THREAD_LIBS_INIT} common_foo_library opentelemetry_exporter_ostream_span) diff --git a/examples/yaml/custom_sampler.cc b/examples/yaml/custom_sampler.cc new file mode 100644 index 0000000000..47aba45c95 --- /dev/null +++ b/examples/yaml/custom_sampler.cc @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/init/configured_sdk.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/trace/span_context.h" + +#include "custom_sampler.h" + +opentelemetry::sdk::trace::SamplingResult CustomSampler::ShouldSample( + const opentelemetry::trace::SpanContext &parent_context, + opentelemetry::trace::TraceId trace_id, + opentelemetry::nostd::string_view name, + opentelemetry::trace::SpanKind span_kind, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::trace::SpanContextKeyValueIterable &links) noexcept +{ + if (!parent_context.IsValid()) + { + return {opentelemetry::sdk::trace::Decision::RECORD_AND_SAMPLE, nullptr, + opentelemetry::trace::TraceState::GetDefault()}; + } + else + { + return {opentelemetry::sdk::trace::Decision::RECORD_AND_SAMPLE, nullptr, + parent_context.trace_state()}; + } +} + +opentelemetry::nostd::string_view CustomSampler::GetDescription() const noexcept +{ + return "CustomSampler"; +} diff --git a/examples/yaml/custom_sampler.h b/examples/yaml/custom_sampler.h new file mode 100644 index 0000000000..552cecba1a --- /dev/null +++ b/examples/yaml/custom_sampler.h @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/init/extension_sampler_builder.h" +#include "opentelemetry/sdk/trace/sampler.h" + +class CustomSampler : public opentelemetry::sdk::trace::Sampler +{ +public: + CustomSampler(std::string comment) {} + ~CustomSampler() override = default; + + opentelemetry::sdk::trace::SamplingResult ShouldSample( + const opentelemetry::trace::SpanContext &parent_context, + opentelemetry::trace::TraceId trace_id, + opentelemetry::nostd::string_view name, + opentelemetry::trace::SpanKind span_kind, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::trace::SpanContextKeyValueIterable &links) noexcept override; + + opentelemetry::nostd::string_view GetDescription() const noexcept override; +}; diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc new file mode 100644 index 0000000000..4d28527d38 --- /dev/null +++ b/examples/yaml/custom_sampler_builder.cc @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/init/configured_sdk.h" +#include "opentelemetry/sdk/init/registry.h" + +#include "custom_sampler.h" +#include "custom_sampler_builder.h" + +std::unique_ptr CustomSamplerBuilder::Build( + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const +{ + // Read yaml attributes + std::string comment = model->node->GetRequiredString("comment"); + + std::unique_ptr sdk(new CustomSampler(comment)); + + return sdk; +} + +static CustomSamplerBuilder singleton; + +void CustomSamplerBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->AddExtensionSamplerBuilder("custom", &singleton); +}; diff --git a/examples/yaml/custom_sampler_builder.h b/examples/yaml/custom_sampler_builder.h new file mode 100644 index 0000000000..838f5864d1 --- /dev/null +++ b/examples/yaml/custom_sampler_builder.h @@ -0,0 +1,18 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/init/extension_sampler_builder.h" + +class CustomSamplerBuilder : public opentelemetry::sdk::init::ExtensionSamplerBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + CustomSamplerBuilder() = default; + ~CustomSamplerBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const override; +}; diff --git a/examples/yaml/custom_span_exporter.cc b/examples/yaml/custom_span_exporter.cc new file mode 100644 index 0000000000..b02c912ddd --- /dev/null +++ b/examples/yaml/custom_span_exporter.cc @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/recordable.h" +#include "opentelemetry/sdk/trace/span_data.h" +#include "opentelemetry/trace/span_context.h" + +#include "custom_span_exporter.h" + +std::unique_ptr CustomSpanExporter::MakeRecordable() noexcept +{ + return std::unique_ptr( + new opentelemetry::sdk::trace::SpanData); +} + +opentelemetry::sdk::common::ExportResult CustomSpanExporter::Export( + const opentelemetry::nostd::span> + &spans) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Export(): FIXME"); + return opentelemetry::sdk::common::ExportResult::kSuccess; +} + +bool CustomSpanExporter::ForceFlush(std::chrono::microseconds timeout) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::ForceFlush(): FIXME"); + return false; +} + +bool CustomSpanExporter::Shutdown(std::chrono::microseconds timeout) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Shutdown(): FIXME"); + return false; +} diff --git a/examples/yaml/custom_span_exporter.h b/examples/yaml/custom_span_exporter.h new file mode 100644 index 0000000000..a0875f36fb --- /dev/null +++ b/examples/yaml/custom_span_exporter.h @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/init/extension_span_exporter_builder.h" +#include "opentelemetry/sdk/trace/exporter.h" + +class CustomSpanExporter : public opentelemetry::sdk::trace::SpanExporter +{ +public: + CustomSpanExporter(std::string comment) {} + ~CustomSpanExporter() override = default; + + std::unique_ptr MakeRecordable() noexcept override; + + opentelemetry::sdk::common::ExportResult Export( + const opentelemetry::nostd::span> + &spans) noexcept override; + + bool ForceFlush(std::chrono::microseconds timeout) noexcept override; + + bool Shutdown(std::chrono::microseconds timeout) noexcept override; +}; diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc new file mode 100644 index 0000000000..ffacee637b --- /dev/null +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" + +#include "custom_span_exporter.h" +#include "custom_span_exporter_builder.h" + +std::unique_ptr CustomSpanExporterBuilder::Build( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) const +{ + // Read yaml attributes + std::string comment = model->node->GetRequiredString("comment"); + + std::unique_ptr sdk(new CustomSpanExporter(comment)); + + return sdk; +} + +static CustomSpanExporterBuilder singleton; + +void CustomSpanExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->AddExtensionSpanExporterBuilder("custom", &singleton); +}; diff --git a/examples/yaml/custom_span_exporter_builder.h b/examples/yaml/custom_span_exporter_builder.h new file mode 100644 index 0000000000..4525871dd7 --- /dev/null +++ b/examples/yaml/custom_span_exporter_builder.h @@ -0,0 +1,19 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/init/extension_span_exporter_builder.h" + +class CustomSpanExporterBuilder : public opentelemetry::sdk::init::ExtensionSpanExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + CustomSpanExporterBuilder() = default; + ~CustomSpanExporterBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) + const override; +}; diff --git a/examples/yaml/custom_span_processor.cc b/examples/yaml/custom_span_processor.cc new file mode 100644 index 0000000000..893ca25735 --- /dev/null +++ b/examples/yaml/custom_span_processor.cc @@ -0,0 +1,40 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/trace/recordable.h" +#include "opentelemetry/sdk/trace/span_data.h" +#include "opentelemetry/trace/span_context.h" + +#include "custom_span_processor.h" + +std::unique_ptr +CustomSpanProcessor::MakeRecordable() noexcept +{ + return std::unique_ptr( + new opentelemetry::sdk::trace::SpanData); +} + +void CustomSpanProcessor::OnStart(opentelemetry::sdk::trace::Recordable &span, + const opentelemetry::trace::SpanContext &parent_context) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnStart(): FIXME"); +} + +void CustomSpanProcessor::OnEnd( + std::unique_ptr &&span) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnEnd(): FIXME"); +} + +bool CustomSpanProcessor::ForceFlush(std::chrono::microseconds timeout) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::ForceFlush(): FIXME"); + return false; +} + +bool CustomSpanProcessor::Shutdown(std::chrono::microseconds timeout) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::Shutdown(): FIXME"); + return false; +} diff --git a/examples/yaml/custom_span_processor.h b/examples/yaml/custom_span_processor.h new file mode 100644 index 0000000000..12ae9f52fc --- /dev/null +++ b/examples/yaml/custom_span_processor.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/init/extension_span_processor_builder.h" +#include "opentelemetry/sdk/trace/processor.h" + +class CustomSpanProcessor : public opentelemetry::sdk::trace::SpanProcessor +{ +public: + CustomSpanProcessor(std::string comment) : m_comment(comment) {} + ~CustomSpanProcessor() override = default; + + std::unique_ptr MakeRecordable() noexcept override; + + void OnStart(opentelemetry::sdk::trace::Recordable &span, + const opentelemetry::trace::SpanContext &parent_context) noexcept override; + + void OnEnd(std::unique_ptr &&span) noexcept override; + + bool ForceFlush(std::chrono::microseconds timeout) noexcept override; + + bool Shutdown(std::chrono::microseconds timeout) noexcept override; + +private: + std::string m_comment; +}; diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc new file mode 100644 index 0000000000..657bc64a0a --- /dev/null +++ b/examples/yaml/custom_span_processor_builder.cc @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/processor.h" + +#include "custom_span_processor.h" +#include "custom_span_processor_builder.h" + +std::unique_ptr CustomSpanProcessorBuilder::Build( + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) const +{ + // Read yaml attributes + std::string comment = model->node->GetRequiredString("comment"); + + std::unique_ptr sdk(new CustomSpanProcessor(comment)); + + return sdk; +} + +static CustomSpanProcessorBuilder singleton; + +void CustomSpanProcessorBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->AddExtensionSpanProcessorBuilder("custom", &singleton); +}; diff --git a/examples/yaml/custom_span_processor_builder.h b/examples/yaml/custom_span_processor_builder.h new file mode 100644 index 0000000000..1e83fb49ce --- /dev/null +++ b/examples/yaml/custom_span_processor_builder.h @@ -0,0 +1,19 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/init/extension_span_processor_builder.h" + +class CustomSpanProcessorBuilder : public opentelemetry::sdk::init::ExtensionSpanProcessorBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + CustomSpanProcessorBuilder() = default; + ~CustomSpanProcessorBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) + const override; +}; diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index d8f40db4b3..ff640ef5de 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -6,6 +6,10 @@ #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" +#include "custom_sampler_builder.h" +#include "custom_span_exporter_builder.h" +#include "custom_span_processor_builder.h" + #ifdef BAZEL_BUILD # include "examples/common/foo_library/foo_library.h" #else @@ -51,6 +55,10 @@ void InitOtel() /* 3 - Populate the registry with external extensions plugins */ + CustomSamplerBuilder::Register(registry.get()); + CustomSpanExporterBuilder::Register(registry.get()); + CustomSpanProcessorBuilder::Register(registry.get()); + /* 4 - Parse a config.yaml */ // See diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h index 400aa5094a..46681f9d03 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -6,6 +6,7 @@ #include #include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" +#include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" @@ -22,6 +23,9 @@ namespace configuration class Configuration { public: + Configuration(std::unique_ptr doc) : m_doc(std::move(doc)) {} + ~Configuration() = default; + std::string file_format; bool disabled{false}; @@ -31,6 +35,9 @@ class Configuration std::unique_ptr propagator; std::unique_ptr tracer_provider; std::unique_ptr resource; + +private: + std::unique_ptr m_doc; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h index 9dbfa68000..985bf6b538 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h @@ -20,8 +20,7 @@ namespace configuration class ConfigurationFactory { public: - static std::unique_ptr ParseConfiguration( - const std::unique_ptr &node); + static std::unique_ptr ParseConfiguration(std::unique_ptr doc); }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h b/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h new file mode 100644 index 0000000000..dcd8498aaf --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" +#include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ExtensionSamplerBuilder +{ +public: + ExtensionSamplerBuilder() = default; + virtual ~ExtensionSamplerBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h new file mode 100644 index 0000000000..95e08b2a9b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ExtensionSpanExporterBuilder +{ +public: + ExtensionSpanExporterBuilder() = default; + virtual ~ExtensionSpanExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h b/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h new file mode 100644 index 0000000000..d4d6ac7ec2 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ExtensionSpanProcessorBuilder +{ +public: + ExtensionSpanProcessorBuilder() = default; + virtual ~ExtensionSpanProcessorBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 4ec74094b5..528c965449 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -266,13 +266,13 @@ static std::unique_ptr ParseTraceIdRatioBasedSamplerConfig } static std::unique_ptr ParseSamplerExtensionConfiguration( - std::string /* name */, - const std::unique_ptr & /* node */) + const std::string &name, + std::unique_ptr node) { - std::unique_ptr model(new ExtensionSamplerConfiguration); - - OTEL_INTERNAL_LOG_ERROR("SamplerExtensionConfiguration: FIXME"); - + auto extension = new ExtensionSamplerConfiguration; + extension->name = name; + extension->node = std::move(node); + std::unique_ptr model(extension); return model; } @@ -320,7 +320,7 @@ static std::unique_ptr ParseSamplerConfiguration( } else { - model = ParseSamplerExtensionConfiguration(name, child); + model = ParseSamplerExtensionConfiguration(name, std::move(child)); } return model; @@ -392,13 +392,12 @@ static std::unique_ptr ParseZipkinSpanExporterC static std::unique_ptr ParseExtensionSpanExporterConfiguration( const std::string &name, - const std::unique_ptr & /* node */) + std::unique_ptr node) { - std::unique_ptr model(new ExtensionSpanExporterConfiguration); - - OTEL_INTERNAL_LOG_ERROR("ParseExtensionSpanExporterConfiguration: FIXME"); - model->name = name; - + auto extension = new ExtensionSpanExporterConfiguration; + extension->name = name; + extension->node = std::move(node); + std::unique_ptr model(extension); return model; } @@ -438,7 +437,7 @@ static std::unique_ptr ParseSpanExporterConfiguration } else { - model = ParseExtensionSpanExporterConfiguration(name, child); + model = ParseExtensionSpanExporterConfiguration(name, std::move(child)); } return model; @@ -475,14 +474,12 @@ static std::unique_ptr ParseSimpleSpanProcesso static std::unique_ptr ParseExtensionSpanProcessorConfiguration(const std::string &name, - const std::unique_ptr & /* node */) + std::unique_ptr node) { - std::unique_ptr model( - new ExtensionSpanProcessorConfiguration); - - OTEL_INTERNAL_LOG_ERROR("ParseExtensionSpanProcessorConfiguration: FIXME"); - model->name = name; - + auto extension = new ExtensionSpanProcessorConfiguration; + extension->name = name; + extension->node = std::move(node); + std::unique_ptr model(extension); return model; } @@ -518,7 +515,7 @@ static std::unique_ptr ParseSpanProcessorConfigurati } else { - model = ParseExtensionSpanProcessorConfiguration(name, child); + model = ParseExtensionSpanProcessorConfiguration(name, std::move(child)); } return model; @@ -592,9 +589,10 @@ static std::unique_ptr ParseResourceConfiguration( } std::unique_ptr ConfigurationFactory::ParseConfiguration( - const std::unique_ptr &node) + std::unique_ptr doc) { - std::unique_ptr model(new Configuration); + std::unique_ptr node = doc->GetRootNode(); + std::unique_ptr model(new Configuration(std::move(doc))); model->file_format = node->GetRequiredString("file_format"); model->disabled = node->GetBoolean("disabled", false); diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index a11dd02ce4..974db33557 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -100,8 +100,7 @@ std::unique_ptr YamlConfigurationFactory::ParseString(std::string { if (doc) { - root = doc->GetRootNode(); - config = ConfigurationFactory::ParseConfiguration(root); + config = ConfigurationFactory::ParseConfiguration(std::move(doc)); } } catch (...) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 7271d2e783..df653db44a 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -14,6 +14,7 @@ #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" @@ -27,6 +28,9 @@ #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" +#include "opentelemetry/sdk/init/extension_sampler_builder.h" +#include "opentelemetry/sdk/init/extension_span_exporter_builder.h" +#include "opentelemetry/sdk/init/extension_span_processor_builder.h" #include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" @@ -255,12 +259,23 @@ std::unique_ptr SdkBuilder::CreateTraceIdRat } std::unique_ptr SdkBuilder::CreateExtensionSampler( - const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration * /* model */) const + const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const { std::unique_ptr sdk; + std::string name = model->name; - OTEL_INTERNAL_LOG_ERROR("CreateExtensionSampler: FIXME"); + const ExtensionSamplerBuilder *builder = m_registry->GetExtensionSamplerBuilder(name); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionSampler() using registered builder " << name); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("CreateExtensionSampler() no builder for " << name); + throw UnsupportedException("CreateExtensionSampler() no builder for " + name); + } return sdk; } @@ -337,12 +352,23 @@ std::unique_ptr SdkBuilder::CreateZipki } std::unique_ptr SdkBuilder::CreateExtensionSpanExporter( - const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration * /* model */) const + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) const { std::unique_ptr sdk; + std::string name = model->name; - OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanExporter: FIXME"); + const ExtensionSpanExporterBuilder *builder = m_registry->GetExtensionSpanExporterBuilder(name); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionSpanExporter() using registered builder " << name); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanExporter() no builder for " << name); + throw UnsupportedException("CreateExtensionSpanExporter() no builder for " + name); + } return sdk; } @@ -394,13 +420,23 @@ std::unique_ptr SdkBuilder::CreateSimp } std::unique_ptr SdkBuilder::CreateExtensionSpanProcessor( - const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) const { std::unique_ptr sdk; + std::string name = model->name; - OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanProcessor: FIXME"); + const ExtensionSpanProcessorBuilder *builder = m_registry->GetExtensionSpanProcessorBuilder(name); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionSpanProcessor() using registered builder " << name); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanProcessor() no builder for " << name); + throw UnsupportedException("CreateExtensionSpanProcessor() no builder for " + name); + } return sdk; } From fde10256c2ba4ab93fc7735bb7f7bbb529a8618c Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 20 Feb 2024 02:37:34 +0100 Subject: [PATCH 024/166] CMakeFormat --- CMakeLists.txt | 8 +++++--- examples/yaml/CMakeLists.txt | 25 ++++++++++++++----------- exporters/ostream/CMakeLists.txt | 6 +++--- exporters/otlp/CMakeLists.txt | 19 +++++++------------ sdk/src/configuration/CMakeLists.txt | 24 +++++++++--------------- sdk/src/init/CMakeLists.txt | 9 +++------ sdk/test/configuration/CMakeLists.txt | 11 +++-------- 7 files changed, 44 insertions(+), 58 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8878b86c1e..ab1eec2722 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -475,11 +475,13 @@ endif() if((NOT WITH_API_ONLY) AND WITH_CONFIGURATION) # No specific version required. find_package(ryml REQUIRED) - message(STATUS "Found ryml: include ${RYML_INCLUDE_DIR}, lib ${RYML_LIB_DIR}, version ${ryml_VERSION}") + message( + STATUS + "Found ryml: include ${RYML_INCLUDE_DIR}, lib ${RYML_LIB_DIR}, version ${ryml_VERSION}" + ) endif() -# DEAD -# find_package(yaml-cpp REQUIRED) +# DEAD find_package(yaml-cpp REQUIRED) if(OTELCPP_MAINTAINER_MODE) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index 4e34bff6d4..e86f7cd2b4 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -7,13 +7,17 @@ endif() include_directories(${CMAKE_SOURCE_DIR}/sdk/include) -add_executable(example_yaml main.cc - custom_sampler.cc custom_sampler_builder.cc - custom_span_exporter.cc custom_span_exporter_builder.cc - custom_span_processor.cc custom_span_processor_builder.cc) - -target_link_libraries(example_yaml ${CMAKE_THREAD_LIBS_INIT} - common_foo_library +add_executable( + example_yaml + main.cc + custom_sampler.cc + custom_sampler_builder.cc + custom_span_exporter.cc + custom_span_exporter_builder.cc + custom_span_processor.cc + custom_span_processor_builder.cc) + +target_link_libraries(example_yaml ${CMAKE_THREAD_LIBS_INIT} common_foo_library opentelemetry_exporter_ostream_span) if(WITH_OTLP_HTTP) @@ -28,11 +32,10 @@ if(WITH_ZIPKIN) target_link_libraries(example_yaml opentelemetry_exporter_zipkin_trace) endif() - if(DEFINED OPENTELEMETRY_BUILD_DLL) target_link_libraries(example_yaml opentelemetry_cpp) else() - target_link_libraries(example_yaml opentelemetry_configuration -opentelemetry_init -opentelemetry_common opentelemetry_trace) + target_link_libraries( + example_yaml opentelemetry_configuration opentelemetry_init + opentelemetry_common opentelemetry_trace) endif() diff --git a/exporters/ostream/CMakeLists.txt b/exporters/ostream/CMakeLists.txt index be106594e0..2b51e61126 100644 --- a/exporters/ostream/CMakeLists.txt +++ b/exporters/ostream/CMakeLists.txt @@ -1,9 +1,9 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -add_library(opentelemetry_exporter_ostream_span src/span_exporter.cc - src/span_exporter_factory.cc - src/console_builder.cc) +add_library( + opentelemetry_exporter_ostream_span + src/span_exporter.cc src/span_exporter_factory.cc src/console_builder.cc) set_target_properties(opentelemetry_exporter_ostream_span PROPERTIES EXPORT_NAME ostream_span_exporter) diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 0917b2e716..71252fe4cc 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -189,10 +189,9 @@ target_link_libraries( opentelemetry_otlp_recordable PUBLIC opentelemetry_trace opentelemetry_resources opentelemetry_proto) -add_library( - opentelemetry_otlp_builder src/otlp_builder.cc) +add_library(opentelemetry_otlp_builder src/otlp_builder.cc) set_target_properties(opentelemetry_otlp_builder PROPERTIES EXPORT_NAME - otlp_builder) + otlp_builder) set_target_version(opentelemetry_otlp_builder) target_include_directories( @@ -201,20 +200,16 @@ target_include_directories( "$") # Make sure to build with the proper ABI -target_link_libraries( - opentelemetry_otlp_builder - PUBLIC opentelemetry_api) +target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_api) if(WITH_OTLP_HTTP) - target_link_libraries( - opentelemetry_otlp_builder - PUBLIC opentelemetry_exporter_otlp_http) + target_link_libraries(opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_http) endif() if(WITH_OTLP_GRPC) - target_link_libraries( - opentelemetry_otlp_builder - PUBLIC opentelemetry_exporter_otlp_grpc) + target_link_libraries(opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_grpc) endif() if(OPENTELEMETRY_INSTALL) diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index c9292dee58..03e70f9723 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -1,33 +1,27 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -# DEAD -# yaml_document.cc yaml_document_node.cc +# DEAD yaml_document.cc yaml_document_node.cc add_library( opentelemetry_configuration - configuration_factory.cc - yaml_configuration_factory.cc - ryml_document.cc ryml_document_node.cc) + configuration_factory.cc yaml_configuration_factory.cc ryml_document.cc + ryml_document_node.cc) -set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) +set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME + configuration) set_target_version(opentelemetry_configuration) target_include_directories( opentelemetry_configuration PUBLIC "$") -target_link_libraries( - opentelemetry_configuration - PUBLIC opentelemetry_api opentelemetry_common) +target_link_libraries(opentelemetry_configuration PUBLIC opentelemetry_api + opentelemetry_common) -# target_link_libraries( -# opentelemetry_configuration -# PUBLIC yaml-cpp::yaml-cpp) +# target_link_libraries( opentelemetry_configuration PUBLIC yaml-cpp::yaml-cpp) -target_link_libraries( - opentelemetry_configuration - PUBLIC ryml::ryml) +target_link_libraries(opentelemetry_configuration PUBLIC ryml::ryml) if(OPENTELEMETRY_INSTALL) install( diff --git a/sdk/src/init/CMakeLists.txt b/sdk/src/init/CMakeLists.txt index 5a480dd3fc..efeac9139f 100644 --- a/sdk/src/init/CMakeLists.txt +++ b/sdk/src/init/CMakeLists.txt @@ -1,9 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -add_library( - opentelemetry_init - configured_sdk.cc sdk_builder.cc registry.cc) +add_library(opentelemetry_init configured_sdk.cc sdk_builder.cc registry.cc) set_target_properties(opentelemetry_init PROPERTIES EXPORT_NAME init) set_target_version(opentelemetry_init) @@ -12,9 +10,8 @@ target_include_directories( opentelemetry_init PUBLIC "$") -target_link_libraries( - opentelemetry_init - PUBLIC opentelemetry_configuration opentelemetry_trace) +target_link_libraries(opentelemetry_init PUBLIC opentelemetry_configuration + opentelemetry_trace) if(OPENTELEMETRY_INSTALL) install( diff --git a/sdk/test/configuration/CMakeLists.txt b/sdk/test/configuration/CMakeLists.txt index 580c1457b4..d7833b1a79 100644 --- a/sdk/test/configuration/CMakeLists.txt +++ b/sdk/test/configuration/CMakeLists.txt @@ -1,15 +1,10 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -foreach( - testname - yaml_test) +foreach(testname yaml_test) add_executable(${testname} "${testname}.cc") - target_link_libraries( - ${testname} - ${GTEST_BOTH_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT} - opentelemetry_configuration) + target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} opentelemetry_configuration) gtest_add_tests( TARGET ${testname} TEST_PREFIX trace. From 3c0465feb1912027cc85f5961bd97c023d823b9c Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 25 Feb 2024 21:42:10 +0100 Subject: [PATCH 025/166] POC - env var substitution --- .../sdk/configuration/document_node.h | 7 ++ sdk/src/configuration/CMakeLists.txt | 2 +- sdk/src/configuration/document_node.cc | 103 ++++++++++++++++++ sdk/src/configuration/ryml_document_node.cc | 5 + sdk/test/configuration/yaml_test.cc | 40 +++++++ 5 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 sdk/src/configuration/document_node.cc diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index dfc21df0ca..0ca1046542 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -58,6 +58,13 @@ class DocumentNode virtual PropertiesNodeConstIterator end_properties() const = 0; virtual std::string Dump() const = 0; + +protected: + void DoSubstitution(std::string &value); + + bool BooleanFromString(const std::string &value); + size_t IntegerFromString(const std::string &value); + double DoubleFromString(const std::string &value); }; class DocumentNodeConstIteratorImpl diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index 03e70f9723..15efe1d364 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -5,7 +5,7 @@ add_library( opentelemetry_configuration - configuration_factory.cc yaml_configuration_factory.cc ryml_document.cc + configuration_factory.cc document_node.cc yaml_configuration_factory.cc ryml_document.cc ryml_document_node.cc) set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc new file mode 100644 index 0000000000..a89242a504 --- /dev/null +++ b/sdk/src/configuration/document_node.cc @@ -0,0 +1,103 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/invalid_schema_exception.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +void DocumentNode::DoSubstitution(std::string &value) +{ + size_t len = value.length(); + char c; + + if (len < 4) + { + return; + } + + c = value[0]; + if (c != '$') + { + return; + } + + c = value[1]; + if (c != '{') + { + return; + } + + c = value[len - 1]; + if (c != '}') + { + return; + } + + c = value[2]; + if (!std::isalpha(c) && c != '_') + { + return; + } + + for (int i = 3; i <= len - 2; i++) + { + c = value[i]; + if (!std::isalnum(c) && c != '_') + { + return; + } + } + + // value is of the form ${ENV_NAME} + + std::string name = value.substr(2, len - 3); + + const char *sub = std::getenv(name.c_str()); + if (sub != nullptr) + { + value = sub; + } + else + { + value = ""; + } +} + +bool DocumentNode::BooleanFromString(const std::string &value) +{ + if (value == "true") + { + return true; + } + + if (value == "false") + { + return false; + } + + throw InvalidSchemaException("Illegal bool value"); +} + +size_t DocumentNode::IntegerFromString(const std::string &value) +{ + size_t val = atoll(value.c_str()); + return val; +} + +double DocumentNode::DoubleFromString(const std::string &value) +{ + double val = atof(value.c_str()); + return val; +} + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 1cc2c2839f..0fc61dd36a 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -256,6 +256,8 @@ std::string RymlDocumentNode::GetRequiredString(const std::string &name) ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); + DoSubstitution(value); + return value; } @@ -272,6 +274,9 @@ std::string RymlDocumentNode::GetString(const std::string &name, const std::stri ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); + + DoSubstitution(value); + return value; } diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index 210265d752..8c69f022a0 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" @@ -143,3 +144,42 @@ file_format: xx.yy auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } + +TEST(Yaml, no_substitution) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, ""); +} + +TEST(Yaml, empty_substitution) +{ + setenv("ENV_NAME", "", 1); + + std::string yaml = R"( +file_format: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, ""); +} + +TEST(Yaml, with_substitution) +{ + setenv("ENV_NAME", "foo.bar", 1); + + std::string yaml = R"( +file_format: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "foo.bar"); +} From d147b62b4a2aa4398fa1db08b0cba4be82b6453c Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 26 Feb 2024 00:23:38 +0100 Subject: [PATCH 026/166] Add yaml test cases --- examples/yaml/anchors.yaml | 42 ++ examples/yaml/custom_sampler_builder.cc | 2 +- examples/yaml/custom_span_exporter_builder.cc | 2 +- .../yaml/custom_span_processor_builder.cc | 2 +- examples/yaml/extensions.yaml | 55 +++ examples/yaml/kitchen-sink.yaml | 397 ++++++++++++++++++ examples/yaml/main.cc | 84 +++- .../yaml_configuration_factory.h | 4 +- .../configuration/configuration_factory.cc | 21 +- sdk/src/configuration/ryml_document.cc | 1 + .../yaml_configuration_factory.cc | 59 +-- sdk/src/init/sdk_builder.cc | 8 +- 12 files changed, 624 insertions(+), 53 deletions(-) create mode 100644 examples/yaml/anchors.yaml create mode 100644 examples/yaml/extensions.yaml create mode 100644 examples/yaml/kitchen-sink.yaml diff --git a/examples/yaml/anchors.yaml b/examples/yaml/anchors.yaml new file mode 100644 index 0000000000..1a6d3c707f --- /dev/null +++ b/examples/yaml/anchors.yaml @@ -0,0 +1,42 @@ +# anchors.yaml demonstrates anchor substitution to reuse OTLP exporter configuration across signals. + +file_format: "0.1" +exporters: + otlp: &otlp-exporter + protocol: http/protobuf + endpoint: http://localhost:4318 + certificate: /app/cert.pem + client_key: /app/cert.pem + client_certificate: /app/cert.pem + headers: + api-key: !!str 1234 + compression: gzip + timeout: 10000 + +logger_provider: + processors: + - batch: + exporter: + otlp: + # expand the otlp-exporter anchor + <<: *otlp-exporter + +meter_provider: + readers: + - periodic: + interval: 5000 + timeout: 30000 + exporter: + otlp: + # expand the otlp-exporter anchor and add metric specific configuration + <<: *otlp-exporter + temporality_preference: delta + default_histogram_aggregation: base2_exponential_bucket_histogram + +tracer_provider: + processors: + - batch: + exporter: + otlp: + # expand the otlp-exporter anchor + <<: *otlp-exporter diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc index 4d28527d38..7f94e516cf 100644 --- a/examples/yaml/custom_sampler_builder.cc +++ b/examples/yaml/custom_sampler_builder.cc @@ -24,5 +24,5 @@ static CustomSamplerBuilder singleton; void CustomSamplerBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->AddExtensionSamplerBuilder("custom", &singleton); + registry->AddExtensionSamplerBuilder("my_custom_sampler", &singleton); }; diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc index ffacee637b..352ac64cef 100644 --- a/examples/yaml/custom_span_exporter_builder.cc +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -24,5 +24,5 @@ static CustomSpanExporterBuilder singleton; void CustomSpanExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->AddExtensionSpanExporterBuilder("custom", &singleton); + registry->AddExtensionSpanExporterBuilder("my_custom_span_exporter", &singleton); }; diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc index 657bc64a0a..7bb8fb7dee 100644 --- a/examples/yaml/custom_span_processor_builder.cc +++ b/examples/yaml/custom_span_processor_builder.cc @@ -24,5 +24,5 @@ static CustomSpanProcessorBuilder singleton; void CustomSpanProcessorBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->AddExtensionSpanProcessorBuilder("custom", &singleton); + registry->AddExtensionSpanProcessorBuilder("my_custom_span_processor", &singleton); }; diff --git a/examples/yaml/extensions.yaml b/examples/yaml/extensions.yaml new file mode 100644 index 0000000000..4e3b733340 --- /dev/null +++ b/examples/yaml/extensions.yaml @@ -0,0 +1,55 @@ +# The file format version +file_format: "0.1" + +# Configure if the SDK is disabled or not. This is not required to be provided +# to ensure the SDK isn't disabled, the default value when this is not provided +# is for the SDK to be enabled. +# +# Environment variable: OTEL_SDK_DISABLED +disabled: false + +# Configure text map context propagators. +# +# Environment variable: OTEL_PROPAGATORS +propagator: + # composite: [tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace] + simple: tracecontext + +# Configure tracer provider. +tracer_provider: + # Configure span processors. + processors: + # Configure a batch span processor. + - batch: + # Configure exporter. + # + # Environment variable: OTEL_TRACES_EXPORTER + exporter: + # Configure exporter to be zipkin. + zipkin: + # Configure endpoint. + # + # Environment variable: OTEL_EXPORTER_ZIPKIN_ENDPOINT + endpoint: http://localhost:9411/api/v2/spans + # Configure max time (in milliseconds) to wait for each export. + # + # Environment variable: OTEL_EXPORTER_ZIPKIN_TIMEOUT + timeout: 10000 + # Configure a simple span processor. + - simple: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: {} + - my_custom_span_processor: + comment: "This is a span processor extension point, with properties." + - batch: + exporter: + my_custom_span_exporter: + comment: "This is a span exporter extension point, with properties." + + # Configure the sampler. + sampler: + my_custom_sampler: + comment: "This is a sampler extension point, with properties." + diff --git a/examples/yaml/kitchen-sink.yaml b/examples/yaml/kitchen-sink.yaml new file mode 100644 index 0000000000..5539ecc1f7 --- /dev/null +++ b/examples/yaml/kitchen-sink.yaml @@ -0,0 +1,397 @@ +# kitchen-sink.yaml demonstrates all configurable surface area, including explanatory comments. +# +# It DOES NOT represent expected real world configuration, as it makes strange configuration +# choices in an effort to exercise the full surface area. +# +# Configuration values are set to their defaults when default values are defined. + +# The file format version +file_format: "0.1" + +# Configure if the SDK is disabled or not. This is not required to be provided +# to ensure the SDK isn't disabled, the default value when this is not provided +# is for the SDK to be enabled. +# +# Environment variable: OTEL_SDK_DISABLED +disabled: false + +# Configure general attribute limits. See also tracer_provider.limits, logger_provider.limits. +attribute_limits: + # Configure max attribute value size. + # + # Environment variable: OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT + attribute_value_length_limit: 4096 + # Configure max attribute count. + # + # Environment variable: OTEL_ATTRIBUTE_COUNT_LIMIT + attribute_count_limit: 128 + +# Configure logger provider. +logger_provider: + # Configure log record processors. + processors: + # Configure a batch log record processor. + - batch: + # Configure delay interval (in milliseconds) between two consecutive exports. + # + # Environment variable: OTEL_BLRP_SCHEDULE_DELAY + schedule_delay: 5000 + # Configure maximum allowed time (in milliseconds) to export data. + # + # Environment variable: OTEL_BLRP_EXPORT_TIMEOUT + export_timeout: 30000 + # Configure maximum queue size. + # + # Environment variable: OTEL_BLRP_MAX_QUEUE_SIZE + max_queue_size: 2048 + # Configure maximum batch size. + # + # Environment variable: OTEL_BLRP_MAX_EXPORT_BATCH_SIZE + max_export_batch_size: 512 + # Configure exporter. + # + # Environment variable: OTEL_LOGS_EXPORTER + exporter: + # Configure exporter to be OTLP. + otlp: + # Configure protocol. + # + # Environment variable: OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_LOGS_PROTOCOL + protocol: http/protobuf + # Configure endpoint. + # + # Environment variable: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_LOGS_ENDPOINT + endpoint: http://localhost:4318 + # Configure certificate. + # + # Environment variable: OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE + certificate: /app/cert.pem + # Configure mTLS private client key. + # + # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY + client_key: /app/cert.pem + # Configure mTLS client certificate. + # + # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE + client_certificate: /app/cert.pem + # Configure headers. + # + # Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_LOGS_HEADERS + headers: + api-key: "1234" + # Configure compression. + # + # Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_LOGS_COMPRESSION + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # + # Environment variable: OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_LOGS_TIMEOUT + timeout: 10000 + # Configure client transport security for the exporter's connection. + # + # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_LOGS_INSECURE + insecure: false + # Configure log record limits. See also attribute_limits. + limits: + # Configure max log record attribute value size. Overrides attribute_limits.attribute_value_length_limit. + # + # Environment variable: OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT + attribute_value_length_limit: 4096 + # Configure max log record attribute count. Overrides attribute_limits.attribute_count_limit. + # + # Environment variable: OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT + attribute_count_limit: 128 + +# Configure meter provider. +meter_provider: + # Configure metric readers. + readers: + # Configure a pull-based metric reader. + - pull: + # Configure exporter. + # + # Environment variable: OTEL_METRICS_EXPORTER + exporter: + # Configure exporter to be prometheus. + prometheus: + # Configure host. + # + # Environment variable: OTEL_EXPORTER_PROMETHEUS_HOST + host: localhost + # Configure port. + # + # Environment variable: OTEL_EXPORTER_PROMETHEUS_PORT + port: 9464 + # Configure Prometheus Exporter to produce metrics without a unit suffix or UNIT metadata. + without_units: false + # Configure Prometheus Exporter to produce metrics without a type suffix. + without_type_suffix: false + # Configure Prometheus Exporter to produce metrics without a scope info metric. + without_scope_info: false + # Configure a periodic metric reader. + - periodic: + # Configure delay interval (in milliseconds) between start of two consecutive exports. + # + # Environment variable: OTEL_METRIC_EXPORT_INTERVAL + interval: 5000 + # Configure maximum allowed time (in milliseconds) to export data. + # + # Environment variable: OTEL_METRIC_EXPORT_TIMEOUT + timeout: 30000 + # Configure exporter. + # + # Environment variable: OTEL_METRICS_EXPORTER + exporter: + # Configure exporter to be OTLP. + otlp: + # Configure protocol. + # + # Environment variable: OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_METRICS_PROTOCOL + protocol: http/protobuf + # Configure endpoint. + # + # Environment variable: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_METRICS_ENDPOINT + endpoint: http://localhost:4318 + # Configure certificate. + # + # Environment variable: OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE + certificate: /app/cert.pem + # Configure mTLS private client key. + # + # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY + client_key: /app/cert.pem + # Configure mTLS client certificate. + # + # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE + client_certificate: /app/cert.pem + # Configure headers. + # + # Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_METRICS_HEADERS + headers: + api-key: !!str 1234 + # Configure compression. + # + # Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_METRICS_COMPRESSION + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # + # Environment variable: OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_METRICS_TIMEOUT + timeout: 10000 + # Configure client transport security for the exporter's connection. + # + # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_METRICS_INSECURE + insecure: false + # Configure temporality preference. + # + # Environment variable: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + temporality_preference: delta + # Configure default histogram aggregation. + # + # Environment variable: OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION + default_histogram_aggregation: base2_exponential_bucket_histogram + # Configure a periodic metric reader. + - periodic: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: {} + # Configure views. Each view has a selector which determines the instrument(s) it applies to, and a configuration for the resulting stream(s). + views: + # Configure a view. + - selector: + # Configure instrument name selection criteria. + instrument_name: my-instrument + # Configure instrument type selection criteria. + instrument_type: histogram + # Configure the instrument unit selection criteria. + unit: ms + # Configure meter name selection criteria. + meter_name: my-meter + # Configure meter version selection criteria. + meter_version: 1.0.0 + # Configure meter schema url selection criteria. + meter_schema_url: https://opentelemetry.io/schemas/1.16.0 + # Configure stream. + stream: + # Configure metric name of the resulting stream(s). + name: new_instrument_name + # Configure metric description of the resulting stream(s). + description: new_description + # Configure aggregation of the resulting stream(s). Known values include: default, drop, explicit_bucket_histogram, base2_exponential_bucket_histogram, last_value, sum. + aggregation: + # Configure aggregation to be explicit_bucket_histogram. + explicit_bucket_histogram: + # Configure bucket boundaries. + boundaries: [ 0.0, 5.0, 10.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 7500.0, 10000.0 ] + # Configure record min and max. + record_min_max: true + # Configure attribute keys retained in the resulting stream(s). + attribute_keys: + - key1 + - key2 + +# Configure text map context propagators. +# +# Environment variable: OTEL_PROPAGATORS +propagator: + # composite: [tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace] + composite: [tracecontext, baggage, b3, b3multi, jaeger] + +# Configure tracer provider. +tracer_provider: + # Configure span processors. + processors: + # Configure a batch span processor. + - batch: + # Configure delay interval (in milliseconds) between two consecutive exports. + # + # Environment variable: OTEL_BSP_SCHEDULE_DELAY + schedule_delay: 5000 + # Configure maximum allowed time (in milliseconds) to export data. + # + # Environment variable: OTEL_BSP_EXPORT_TIMEOUT + export_timeout: 30000 + # Configure maximum queue size. + # + # Environment variable: OTEL_BSP_MAX_QUEUE_SIZE + max_queue_size: 2048 + # Configure maximum batch size. + # + # Environment variable: OTEL_BSP_MAX_EXPORT_BATCH_SIZE + max_export_batch_size: 512 + # Configure exporter. + # + # Environment variable: OTEL_TRACES_EXPORTER + exporter: + # Configure exporter to be OTLP. + otlp: + # Configure protocol. + # + # Environment variable: OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_TRACES_PROTOCOL + protocol: http/protobuf + # Configure endpoint. + # + # Environment variable: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + endpoint: http://localhost:4318 + # Configure certificate. + # + # Environment variable: OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE + certificate: /app/cert.pem + # Configure mTLS private client key. + # + # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY + client_key: /app/cert.pem + # Configure mTLS client certificate. + # + # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE + client_certificate: /app/cert.pem + # Configure headers. + # + # Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_TRACES_HEADERS + headers: + api-key: !!str 1234 + # Configure compression. + # + # Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_TRACES_COMPRESSION + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # + # Environment variable: OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_TRACES_TIMEOUT + timeout: 10000 + # Configure client transport security for the exporter's connection. + # + # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_TRACES_INSECURE + insecure: false + # Configure a batch span processor. + - batch: + # Configure exporter. + # + # Environment variable: OTEL_TRACES_EXPORTER + exporter: + # Configure exporter to be zipkin. + zipkin: + # Configure endpoint. + # + # Environment variable: OTEL_EXPORTER_ZIPKIN_ENDPOINT + endpoint: http://localhost:9411/api/v2/spans + # Configure max time (in milliseconds) to wait for each export. + # + # Environment variable: OTEL_EXPORTER_ZIPKIN_TIMEOUT + timeout: 10000 + # Configure a simple span processor. + - simple: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: {} + # Configure span limits. See also attribute_limits. + limits: + # Configure max span attribute value size. Overrides attribute_limits.attribute_value_length_limit. + # + # Environment variable: OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT + attribute_value_length_limit: 4096 + # Configure max span attribute count. Overrides attribute_limits.attribute_count_limit. + # + # Environment variable: OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT + attribute_count_limit: 128 + # Configure max span event count. + # + # Environment variable: OTEL_SPAN_EVENT_COUNT_LIMIT + event_count_limit: 128 + # Configure max span link count. + # + # Environment variable: OTEL_SPAN_LINK_COUNT_LIMIT + link_count_limit: 128 + # Configure max attributes per span event. + # + # Environment variable: OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT + event_attribute_count_limit: 128 + # Configure max attributes per span link. + # + # Environment variable: OTEL_LINK_ATTRIBUTE_COUNT_LIMIT + link_attribute_count_limit: 128 + # Configure the sampler. + sampler: + # Configure sampler to be parent_based. Known values include: always_off, always_on, jaeger_remote, parent_based, trace_id_ratio_based. + # + # Environment variable: OTEL_TRACES_SAMPLER=parentbased_* + parent_based: + # Configure root sampler. + # + # Environment variable: OTEL_TRACES_SAMPLER=parentbased_traceidratio + root: + # Configure sampler to be trace_id_ratio_based. + trace_id_ratio_based: + # Configure trace_id_ratio. + # + # Environment variable: OTEL_TRACES_SAMPLER_ARG=traceidratio=0.0001 + ratio: 0.0001 + # Configure remote_parent_sampled sampler. + remote_parent_sampled: + # Configure sampler to be always_on. + always_on: {} + # Configure remote_parent_not_sampled sampler. + remote_parent_not_sampled: + # Configure sampler to be always_off. + always_off: {} + # Configure local_parent_sampled sampler. + local_parent_sampled: + # Configure sampler to be always_on. + always_on: {} + # Configure local_parent_not_sampled sampler. + local_parent_not_sampled: + # Configure sampler to be always_off. + always_off: {} + +# Configure resource for all signals. +resource: + # Configure resource attributes. + # + # Environment variable: OTEL_RESOURCE_ATTRIBUTES + attributes: + # Configure `service.name` resource attribute + # + # Environment variable: OTEL_SERVICE_NAME + service.name: !!str "unknown_service" + # Configure the resource schema URL. + schema_url: https://opentelemetry.io/schemas/1.16.0 diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index ff640ef5de..3943db7b4a 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -26,11 +26,18 @@ # include "opentelemetry/exporters/zipkin/zipkin_builder.h" #endif +#include +#include + +static bool opt_help = false; +static std::string yaml_file_path = ""; + std::unique_ptr sdk; namespace { -void InitOtel() + +void InitOtel(const std::string &config_file) { auto level = opentelemetry::sdk::common::internal_log::LogLevel::Debug; @@ -63,7 +70,6 @@ void InitOtel() // See // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml - std::string config_file = "config.yaml"; auto model = opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseFile(config_file); /* 5 - Build the SDK from the parsed config.yaml */ @@ -88,9 +94,79 @@ void CleanupOtel() } } // namespace -int main() +void usage(FILE *out) +{ + static const char *msg = + "Usage: example_yaml [options]\n" + "Valid options are:\n" + " --help Print this help\n" + " --yaml Path to a yaml configuration file\n" + "\n" + "The configuration file used will be:\n" + " 1) the file provided in the command line\n" + " 2) the file provided in environment variable ${OTEL_CONFIG_FILE}\n" + " 3) file config.yaml\n"; + + fprintf(out, "%s", msg); +} + +int parse_args(int argc, char *argv[]) { - InitOtel(); + int remaining_argc = argc; + char **remaining_argv = argv; + + while (remaining_argc > 0) + { + if (strcmp(*remaining_argv, "--help") == 0) + { + opt_help = true; + return 0; + } + + if (remaining_argc >= 2) + { + if (strcmp(*remaining_argv, "--yaml") == 0) + { + remaining_argc--; + remaining_argv++; + yaml_file_path = *remaining_argv; + remaining_argc--; + remaining_argv++; + continue; + } + } + + if (remaining_argc) + { + // Unknown option + return 1; + } + } + + return 0; +} + +int main(int argc, char *argv[]) +{ + // Program name + argc--; + argv++; + + int rc = parse_args(argc, argv); + + if (rc != 0) + { + usage(stderr); + return 1; + } + + if (opt_help) + { + usage(stdout); + return 0; + } + + InitOtel(yaml_file_path); foo_library(); diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h index 87bfababb5..b583fee777 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h @@ -19,8 +19,8 @@ namespace configuration class YamlConfigurationFactory { public: - static std::unique_ptr ParseFile(std::string filename); - static std::unique_ptr ParseString(std::string content); + static std::unique_ptr ParseFile(const std::string &filename); + static std::unique_ptr ParseString(const std::string &content); }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 528c965449..ae91afeba4 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -534,11 +534,24 @@ static std::unique_ptr ParseTracerProviderConfigura model->processors.push_back(ParseSpanProcessorConfiguration(*it)); } - child = node->GetRequiredChildNode("limits"); - model->limits = ParseSpanLimitsConfiguration(child); + size_t count = model->processors.size(); + if (count == 0) + { + OTEL_INTERNAL_LOG_ERROR("ParseTracerProviderConfiguration: 0 processors "); + throw InvalidSchemaException("Illegal processors"); + } - child = node->GetRequiredChildNode("sampler"); - model->sampler = ParseSamplerConfiguration(child); + child = node->GetChildNode("limits"); + if (child) + { + model->limits = ParseSpanLimitsConfiguration(child); + } + + child = node->GetChildNode("sampler"); + if (child) + { + model->sampler = ParseSamplerConfiguration(child); + } return model; } diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index 4f4e862779..b9bcf82ea7 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -24,6 +24,7 @@ std::unique_ptr RymlDocument::Parse(std::string content) try { tree = ryml::parse_in_arena(ryml::to_csubstr(content)); + tree.resolve(); } catch (...) { diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index 974db33557..a1b21f9f56 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -3,8 +3,6 @@ #include -// #define WITH_YAML_CPP - #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" @@ -14,24 +12,35 @@ #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" #include "opentelemetry/version.h" -#ifdef WITH_YAML_CPP -# include "opentelemetry/sdk/configuration/yaml_document.h" -# include "opentelemetry/sdk/configuration/yaml_document_node.h" -#endif - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace configuration { -std::unique_ptr YamlConfigurationFactory::ParseFile(std::string filename) +std::unique_ptr YamlConfigurationFactory::ParseFile(const std::string &filename) { + std::string input_file = filename; + + if (input_file.empty()) + { + const char *env_var = std::getenv("OTEL_CONFIG_FILE"); + if (env_var != nullptr) + { + input_file = env_var; + } + } + + if (input_file.empty()) + { + input_file = "config.yaml"; + } + std::unique_ptr conf; - std::ifstream in(filename, std::ios::binary); + std::ifstream in(input_file, std::ios::binary); if (!in.is_open()) { - OTEL_INTERNAL_LOG_ERROR("Failed to open yaml file <" << filename << ">."); + OTEL_INTERNAL_LOG_ERROR("Failed to open yaml file <" << input_file << ">."); } else { @@ -43,30 +52,6 @@ std::unique_ptr YamlConfigurationFactory::ParseFile(std::string f return conf; } -#ifdef WITH_YAML_CPP -static std::unique_ptr YamlCppParse(const std::string &content) -{ - std::unique_ptr doc; - - try - { - doc = YamlDocument::Parse(content); - } - catch (const YAML::BadFile &e) - { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml, " << e.what()); - return nullptr; - } - catch (...) - { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml."); - return nullptr; - } - - return doc; -} -#endif - static std::unique_ptr RymlParse(const std::string &content) { std::unique_ptr doc; @@ -84,17 +69,13 @@ static std::unique_ptr RymlParse(const std::string &content) return doc; } -std::unique_ptr YamlConfigurationFactory::ParseString(std::string content) +std::unique_ptr YamlConfigurationFactory::ParseString(const std::string &content) { std::unique_ptr doc; std::unique_ptr root; std::unique_ptr config; -#ifdef WITH_YAML_CPP - doc = YamlCppParse(content); -#else doc = RymlParse(content); -#endif try { diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index df653db44a..9bd30634a4 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -462,7 +462,12 @@ std::unique_ptr SdkBuilder::CreateTracerPr // https://github.com/open-telemetry/opentelemetry-configuration/issues/70 OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME (IdGenerator)"); - auto sampler = CreateSampler(model->sampler); + std::unique_ptr sampler; + + if (model->sampler) + { + sampler = CreateSampler(model->sampler); + } std::vector> sdk_processors; @@ -471,6 +476,7 @@ std::unique_ptr SdkBuilder::CreateTracerPr sdk_processors.push_back(CreateProcessor(processor_model)); } + // FIXME: use sampler, limits, id_generator, ... sdk = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(sdk_processors)); return sdk; From 5d65ac2371ee00f091dcfe743ba8f7db71dd9553 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 28 Feb 2024 01:02:43 +0100 Subject: [PATCH 027/166] POC - Now starting on metrics --- .../console_metric_exporter_configuration.h | 31 +++ .../extension_metric_exporter_configuration.h | 34 ++++ .../meter_provider_configuration.h | 7 + .../metric_exporter_configuration.h | 26 +++ .../metric_exporter_configuration_visitor.h | 33 ++++ .../metric_reader_configuration.h | 25 +++ .../otlp_metric_exporter_configuration.h | 43 ++++ .../periodic_metric_reader_configuration.h | 31 +++ ...prometheus_metric_exporter_configuration.h | 37 ++++ .../pull_metric_reader_configuration.h | 29 +++ .../sdk/configuration/ryml_document_node.h | 3 - .../sdk/configuration/view_configuration.h | 23 +++ .../configuration/configuration_factory.cc | 186 +++++++++++++++++- sdk/src/configuration/ryml_document_node.cc | 85 -------- 14 files changed, 503 insertions(+), 90 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/view_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h new file mode 100644 index 0000000000..45a1a23e5c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ConsoleMetricExporterConfiguration : public MetricExporterConfiguration +{ +public: + ConsoleMetricExporterConfiguration() = default; + ~ConsoleMetricExporterConfiguration() override = default; + + void Accept(MetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitConsole(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h new file mode 100644 index 0000000000..8f7120905b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionMetricExporterConfiguration : public MetricExporterConfiguration +{ +public: + ExtensionMetricExporterConfiguration() = default; + ~ExtensionMetricExporterConfiguration() override = default; + + void Accept(MetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h index 081e70d3ab..c9fa1ede84 100644 --- a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -3,6 +3,11 @@ #pragma once +#include +#include + +#include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -14,6 +19,8 @@ namespace configuration class MeterProviderConfiguration { public: + std::vector> readers; + std::vector> views; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration.h new file mode 100644 index 0000000000..670da28a7d --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class MetricExporterConfigurationVisitor; + +class MetricExporterConfiguration +{ +public: + MetricExporterConfiguration() = default; + virtual ~MetricExporterConfiguration() = default; + + virtual void Accept(MetricExporterConfigurationVisitor *visitor) const = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h new file mode 100644 index 0000000000..7cb4a593d2 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpMetricExporterConfiguration; +class ConsoleMetricExporterConfiguration; +class PrometheusMetricExporterConfiguration; +class ExtensionMetricExporterConfiguration; + +class MetricExporterConfigurationVisitor +{ +public: + MetricExporterConfigurationVisitor() = default; + virtual ~MetricExporterConfigurationVisitor() = default; + + virtual void VisitOtlp(const OtlpMetricExporterConfiguration *model) = 0; + virtual void VisitConsole(const ConsoleMetricExporterConfiguration *model) = 0; + virtual void VisitPrometheus(const PrometheusMetricExporterConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionMetricExporterConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h new file mode 100644 index 0000000000..e47167051f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class MetricReaderConfiguration +{ +public: + MetricReaderConfiguration() = default; + virtual ~MetricReaderConfiguration() = default; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h new file mode 100644 index 0000000000..e9f157334f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h @@ -0,0 +1,43 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpMetricExporterConfiguration : public MetricExporterConfiguration +{ +public: + OtlpMetricExporterConfiguration() = default; + ~OtlpMetricExporterConfiguration() override = default; + + void Accept(MetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlp(this); + } + + std::string protocol; + std::string endpoint; + std::string certificate; + std::string client_key; + std::string client_certificate; + std::unique_ptr headers; + std::string compression; + size_t timeout; + std::string temporality_preference; + int default_histogram_aggregation; // FIXME enum + bool insecure; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h new file mode 100644 index 0000000000..e09c5ca431 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration +{ +public: + PeriodicMetricReaderConfiguration() = default; + ~PeriodicMetricReaderConfiguration() override = default; + + size_t interval; + size_t timeout; + std::unique_ptr exporter; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h new file mode 100644 index 0000000000..b3fabae67d --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class PrometheusMetricExporterConfiguration : public MetricExporterConfiguration +{ +public: + PrometheusMetricExporterConfiguration() = default; + ~PrometheusMetricExporterConfiguration() override = default; + + void Accept(MetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitPrometheus(this); + } + + std::string host; + size_t port; + bool without_units; + bool without_type_suffix; + bool without_scope_info; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h new file mode 100644 index 0000000000..4f8e5856e6 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class PullMetricReaderConfiguration : public MetricReaderConfiguration +{ +public: + PullMetricReaderConfiguration() = default; + ~PullMetricReaderConfiguration() override = default; + + std::unique_ptr exporter; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index 2f1ad01067..a4e0fdb1ff 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -55,9 +55,6 @@ class RymlDocumentNode : public DocumentNode ryml::ConstNodeRef GetRequiredRymlChildNode(const std::string &name); ryml::ConstNodeRef GetRymlChildNode(const std::string &name); - std::string GetRequiredRaw(const std::string &name); - std::pair GetRaw(const std::string &name); - ryml::ConstNodeRef m_node; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/view_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h new file mode 100644 index 0000000000..4636c5ac6a --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h @@ -0,0 +1,23 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ViewConfiguration +{ +public: +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index ae91afeba4..19c821d1ec 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -11,21 +11,30 @@ #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/console_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" @@ -56,12 +65,185 @@ static std::unique_ptr ParseLoggerProviderConfigura return model; } -static std::unique_ptr ParseMeterProviderConfiguration( +static std::unique_ptr ParseOtlpMetricExporterConfiguration( + const std::unique_ptr & /* node */) +{ + std::unique_ptr model(new OtlpMetricExporterConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParseOtlpMetricExporterConfiguration: FIXME"); + + return model; +} + +static std::unique_ptr ParseConsoleMetricExporterConfiguration( + const std::unique_ptr & /* node */) +{ + std::unique_ptr model(new ConsoleMetricExporterConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParseConsoleMetricExporterConfiguration: FIXME"); + + return model; +} + +static std::unique_ptr +ParsePrometheusMetricExporterConfiguration(const std::unique_ptr & /* node */) +{ + std::unique_ptr model( + new PrometheusMetricExporterConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParsePrometheusMetricExporterConfiguration: FIXME"); + + return model; +} + +static std::unique_ptr +ParseMetricExporterExtensionConfiguration(const std::string &name, + std::unique_ptr node) +{ + auto extension = new ExtensionMetricExporterConfiguration; + extension->name = name; + extension->node = std::move(node); + std::unique_ptr model(extension); + return model; +} + +static std::unique_ptr ParseMetricExporterConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model; + + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParseMetricExporterConfiguration: count " << count); + throw InvalidSchemaException("Illegal metric exporter"); + } + + if (name == "otlp") + { + model = ParseOtlpMetricExporterConfiguration(child); + } + else if (name == "console") + { + model = ParseConsoleMetricExporterConfiguration(child); + } + else if (name == "prometheus") + { + model = ParsePrometheusMetricExporterConfiguration(child); + } + else + { + model = ParseMetricExporterExtensionConfiguration(name, std::move(child)); + } + + return model; +} + +static std::unique_ptr ParsePeriodicMetricReaderConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new PeriodicMetricReaderConfiguration); + std::unique_ptr child; + + model->interval = node->GetInteger("interval", 5000); + model->timeout = node->GetInteger("timeout", 30000); + + child = node->GetRequiredChildNode("exporter"); + model->exporter = ParseMetricExporterConfiguration(child); + + return model; +} + +static std::unique_ptr ParsePullMetricReaderConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new PullMetricReaderConfiguration); + std::unique_ptr child; + + child = node->GetRequiredChildNode("exporter"); + model->exporter = ParseMetricExporterConfiguration(child); + + return model; +} + +static std::unique_ptr ParseMetricReaderConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model; + + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParseMetricReaderConfiguration: count " << count); + throw InvalidSchemaException("Illegal metric reader"); + } + + if (name == "periodic") + { + model = ParsePeriodicMetricReaderConfiguration(child); + } + else if (name == "pull") + { + model = ParsePullMetricReaderConfiguration(child); + } + else + { + OTEL_INTERNAL_LOG_ERROR("ParseMetricReaderConfiguration: name " << name); + throw InvalidSchemaException("Illegal metric reader"); + } + + return model; +} + +static std::unique_ptr ParseViewConfiguration( const std::unique_ptr & /* node */) +{ + std::unique_ptr model(new ViewConfiguration); + + OTEL_INTERNAL_LOG_ERROR("ParseViewConfiguration: FIXME"); + + return model; +} + +static std::unique_ptr ParseMeterProviderConfiguration( + const std::unique_ptr &node) { std::unique_ptr model(new MeterProviderConfiguration); + std::unique_ptr child; - OTEL_INTERNAL_LOG_ERROR("ParseMeterProviderConfiguration: FIXME"); + child = node->GetRequiredChildNode("readers"); + + for (auto it = child->begin(); it != child->end(); ++it) + { + model->readers.push_back(ParseMetricReaderConfiguration(*it)); + } + + child = node->GetRequiredChildNode("views"); + + for (auto it = child->begin(); it != child->end(); ++it) + { + model->views.push_back(ParseViewConfiguration(*it)); + } return model; } diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 0fc61dd36a..505757ec72 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -280,91 +280,6 @@ std::string RymlDocumentNode::GetString(const std::string &name, const std::stri return value; } -std::string RymlDocumentNode::GetRequiredRaw(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredRaw(" << name << ")"); - - if (!m_node.is_map()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); - throw InvalidSchemaException(name); - } - - const char *name_str = name.c_str(); - if (!m_node.has_child(name_str)) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - throw InvalidSchemaException(name); - } - - ryml::ConstNodeRef attr = m_node[name_str]; - if (attr.empty()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: empty node: " << name); - throw InvalidSchemaException(name); - } - - if (!attr.has_val()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: no value node: " << name); - throw InvalidSchemaException(name); - } - - ryml::csubstr view = attr.val(); - if (view.len == 0) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: 0 length node: " << name); - throw InvalidSchemaException(name); - } - - std::string value(view.str, view.len); - return value; -} - -std::pair RymlDocumentNode::GetRaw(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRaw(" << name << ")"); - - std::pair result{false, ""}; - - if (!m_node.is_map()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); - throw InvalidSchemaException(name); - } - - const char *name_str = name.c_str(); - if (!m_node.has_child(name_str)) - { - return result; - } - - ryml::ConstNodeRef attr = m_node[name_str]; - if (attr.empty()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: empty node: " << name); - throw InvalidSchemaException(name); - } - - if (!attr.has_val()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: no value node: " << name); - throw InvalidSchemaException(name); - } - - ryml::csubstr view = attr.val(); - if (view.len == 0) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: 0 length node: " << name); - throw InvalidSchemaException(name); - } - - std::string value(view.str, view.len); - result.first = true; - result.second = value; - return result; -} - DocumentNodeConstIterator RymlDocumentNode::begin() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin()"); From ee0cc1e29701e3dd158c8afd55b8497d711d6873 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 29 Feb 2024 23:49:42 +0100 Subject: [PATCH 028/166] env var substitution, with unit tests. --- sdk/src/configuration/document_node.cc | 27 +- sdk/src/configuration/ryml_document_node.cc | 75 +++-- sdk/test/configuration/CMakeLists.txt | 2 +- sdk/test/configuration/yaml_test.cc | 341 +++++++++++++++++++- sdk/test/configuration/yaml_trace_test.cc | 35 ++ 5 files changed, 443 insertions(+), 37 deletions(-) create mode 100644 sdk/test/configuration/yaml_trace_test.cc diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index a89242a504..fec688dfc5 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -13,6 +13,12 @@ namespace sdk namespace configuration { +/** + Perform substitution on a string scalar. + Only if the entire scalar string is: ${ENV_NAME}, + this code does not perform substitution in: + "some text with ${ENV_NAME} in it". +*/ void DocumentNode::DoSubstitution(std::string &value) { size_t len = value.length(); @@ -83,18 +89,35 @@ bool DocumentNode::BooleanFromString(const std::string &value) return false; } + OTEL_INTERNAL_LOG_ERROR("Illegal integer value: " << value); throw InvalidSchemaException("Illegal bool value"); } size_t DocumentNode::IntegerFromString(const std::string &value) { - size_t val = atoll(value.c_str()); + const char *ptr = value.c_str(); + char *end = nullptr; + int len = value.length(); + size_t val = strtoll(ptr, &end, 10); + if (ptr + len != end) + { + OTEL_INTERNAL_LOG_ERROR("Illegal integer value: " << value); + throw InvalidSchemaException("Illegal integer value"); + } return val; } double DocumentNode::DoubleFromString(const std::string &value) { - double val = atof(value.c_str()); + const char *ptr = value.c_str(); + char *end = nullptr; + int len = value.length(); + double val = strtod(ptr, &end); + if (ptr + len != end) + { + OTEL_INTERNAL_LOG_ERROR("Illegal double value: " << value); + throw InvalidSchemaException("Illegal double value"); + } return val; } diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 505757ec72..e71b584088 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -173,9 +173,12 @@ bool RymlDocumentNode::GetRequiredBoolean(const std::string &name) auto ryml_child = GetRequiredRymlChildNode(name); - bool value; - ryml_child >> value; - return value; + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + + DoSubstitution(value); + + return BooleanFromString(value); } bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) @@ -189,9 +192,17 @@ bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) return default_value; } - bool value; - ryml_child >> value; - return value; + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + + DoSubstitution(value); + + if (value.empty()) + { + return default_value; + } + + return BooleanFromString(value); } size_t RymlDocumentNode::GetRequiredInteger(const std::string &name) @@ -200,9 +211,12 @@ size_t RymlDocumentNode::GetRequiredInteger(const std::string &name) auto ryml_child = GetRequiredRymlChildNode(name); - size_t value; - ryml_child >> value; - return value; + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + + DoSubstitution(value); + + return IntegerFromString(value); } size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_value) @@ -216,9 +230,17 @@ size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_valu return default_value; } - size_t value; - ryml_child >> value; - return value; + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + + DoSubstitution(value); + + if (value.empty()) + { + return default_value; + } + + return IntegerFromString(value); } double RymlDocumentNode::GetRequiredDouble(const std::string &name) @@ -227,9 +249,12 @@ double RymlDocumentNode::GetRequiredDouble(const std::string &name) auto ryml_child = GetRequiredRymlChildNode(name); - double value; - ryml_child >> value; - return value; + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + + DoSubstitution(value); + + return DoubleFromString(value); } double RymlDocumentNode::GetDouble(const std::string &name, double default_value) @@ -243,9 +268,17 @@ double RymlDocumentNode::GetDouble(const std::string &name, double default_value return default_value; } - double value; - ryml_child >> value; - return value; + ryml::csubstr view = ryml_child.val(); + std::string value(view.str, view.len); + + DoSubstitution(value); + + if (value.empty()) + { + return default_value; + } + + return DoubleFromString(value); } std::string RymlDocumentNode::GetRequiredString(const std::string &name) @@ -258,6 +291,12 @@ std::string RymlDocumentNode::GetRequiredString(const std::string &name) DoSubstitution(value); + if (value.empty()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: string value is empty: " << name); + throw InvalidSchemaException(name); + } + return value; } diff --git a/sdk/test/configuration/CMakeLists.txt b/sdk/test/configuration/CMakeLists.txt index d7833b1a79..2dd04c6d91 100644 --- a/sdk/test/configuration/CMakeLists.txt +++ b/sdk/test/configuration/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -foreach(testname yaml_test) +foreach(testname yaml_test yaml_trace_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} opentelemetry_configuration) diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index 8c69f022a0..3b84a3a6bd 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -4,6 +4,7 @@ #include #include +#include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" std::unique_ptr DoParse(std::string yaml) @@ -26,8 +27,7 @@ TEST(Yaml, no_format) )"; auto config = DoParse(yaml); - ASSERT_NE(config, nullptr); - ASSERT_EQ(config->file_format, ""); + ASSERT_EQ(config, nullptr); } TEST(Yaml, just_format) @@ -122,30 +122,109 @@ file_format: xx.yy ASSERT_EQ(config->attribute_limits->attribute_count_limit, 5678); } -TEST(Yaml, no_processors) +TEST(Yaml, no_optional_boolean) { std::string yaml = R"( -file_format: xx.yy -tracer_provider: +file_format: 0.0 +disabled: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, illegal_boolean) +{ + std::string yaml = R"( +file_format: 0.0 +disabled: illegal )"; auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } -TEST(Yaml, empty_processors) +TEST(Yaml, no_boolean_substitution) { + unsetenv("ENV_NAME"); + std::string yaml = R"( -file_format: xx.yy -tracer_provider: - processors: +file_format: 0.0 +disabled: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, empty_boolean_substitution) +{ + setenv("ENV_NAME", "", 1); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, true_boolean_substitution) +{ + setenv("ENV_NAME", "true", 1); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, true); +} + +TEST(Yaml, false_boolean_substitution) +{ + setenv("ENV_NAME", "false", 1); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, illegal_boolean_substitution) +{ + setenv("ENV_NAME", "illegal", 1); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, no_required_string) +{ + std::string yaml = R"( +file_format: )"; auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } -TEST(Yaml, no_substitution) +TEST(Yaml, no_string_substitution) { unsetenv("ENV_NAME"); @@ -154,11 +233,10 @@ file_format: ${ENV_NAME} )"; auto config = DoParse(yaml); - ASSERT_NE(config, nullptr); - ASSERT_EQ(config->file_format, ""); + ASSERT_EQ(config, nullptr); } -TEST(Yaml, empty_substitution) +TEST(Yaml, empty_string_substitution) { setenv("ENV_NAME", "", 1); @@ -167,11 +245,10 @@ file_format: ${ENV_NAME} )"; auto config = DoParse(yaml); - ASSERT_NE(config, nullptr); - ASSERT_EQ(config->file_format, ""); + ASSERT_EQ(config, nullptr); } -TEST(Yaml, with_substitution) +TEST(Yaml, with_string_substitution) { setenv("ENV_NAME", "foo.bar", 1); @@ -183,3 +260,235 @@ file_format: ${ENV_NAME} ASSERT_NE(config, nullptr); ASSERT_EQ(config->file_format, "foo.bar"); } + +TEST(Yaml, no_optional_integer) +{ + std::string yaml = R"( +file_format: 0.0 +attribute_limits: + attribute_count_limit: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->attribute_limits, nullptr); + ASSERT_EQ(config->attribute_limits->attribute_count_limit, 128); +} + +TEST(Yaml, illegal_integer) +{ + std::string yaml = R"( +file_format: 0.0 +attribute_limits: + attribute_count_limit: "just enough" +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, no_integer_substitution) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: 0.0 +attribute_limits: + attribute_count_limit: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->attribute_limits, nullptr); + ASSERT_EQ(config->attribute_limits->attribute_count_limit, 128); +} + +TEST(Yaml, empty_integer_substitution) +{ + setenv("ENV_NAME", "", 1); + + std::string yaml = R"( +file_format: 0.0 +attribute_limits: + attribute_count_limit: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->attribute_limits, nullptr); + ASSERT_EQ(config->attribute_limits->attribute_count_limit, 128); +} + +TEST(Yaml, with_integer_substitution) +{ + setenv("ENV_NAME", "7777", 1); + + std::string yaml = R"( +file_format: 0.0 +attribute_limits: + attribute_count_limit: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->attribute_limits, nullptr); + ASSERT_EQ(config->attribute_limits->attribute_count_limit, 7777); +} + +TEST(Yaml, with_illegal_integer_substitution) +{ + setenv("ENV_NAME", "still not enough", 1); + + std::string yaml = R"( +file_format: 0.0 +attribute_limits: + attribute_count_limit: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, no_optional_double) +{ + std::string yaml = R"( +file_format: 0.0 +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: + ratio: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto sampler = config->tracer_provider->sampler.get(); + auto ratio_sampler = + static_cast( + sampler); + ASSERT_EQ(ratio_sampler->ratio, 0.0); +} + +TEST(Yaml, illegal_double) +{ + std::string yaml = R"( +file_format: 0.0 +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: + ratio: something +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, no_double_substitution) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: 0.0 +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: + ratio: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto sampler = config->tracer_provider->sampler.get(); + auto ratio_sampler = + static_cast( + sampler); + ASSERT_EQ(ratio_sampler->ratio, 0.0); +} + +TEST(Yaml, empty_double_substitution) +{ + setenv("ENV_NAME", "", 1); + + std::string yaml = R"( +file_format: 0.0 +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: + ratio: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto sampler = config->tracer_provider->sampler.get(); + auto ratio_sampler = + static_cast( + sampler); + ASSERT_EQ(ratio_sampler->ratio, 0.0); +} + +TEST(Yaml, with_double_substitution) +{ + setenv("ENV_NAME", "3.14", 1); + + std::string yaml = R"( +file_format: 0.0 +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: + ratio: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto sampler = config->tracer_provider->sampler.get(); + auto ratio_sampler = + static_cast( + sampler); + ASSERT_EQ(ratio_sampler->ratio, 3.14); +} + +TEST(Yaml, with_illegal_double_substitution) +{ + setenv("ENV_NAME", "something else", 1); + + std::string yaml = R"( +file_format: 0.0 +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: + ratio: ${ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc new file mode 100644 index 0000000000..f0fc10a214 --- /dev/null +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include + +#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" + +std::unique_ptr DoParse(std::string yaml) +{ + return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(yaml); +} + +TEST(YamlTrace, no_processors) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlTrace, empty_processors) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} From 91fccb3c8891a167ac2440015ff18f5264fa01dd Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 2 Mar 2024 14:26:54 +0100 Subject: [PATCH 029/166] CI cleanup --- examples/yaml/anchors.yaml | 3 +++ examples/yaml/extensions.yaml | 3 +++ examples/yaml/kitchen-sink.yaml | 3 +++ sdk/src/configuration/CMakeLists.txt | 4 ++-- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/examples/yaml/anchors.yaml b/examples/yaml/anchors.yaml index 1a6d3c707f..b0ce674278 100644 --- a/examples/yaml/anchors.yaml +++ b/examples/yaml/anchors.yaml @@ -1,3 +1,6 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + # anchors.yaml demonstrates anchor substitution to reuse OTLP exporter configuration across signals. file_format: "0.1" diff --git a/examples/yaml/extensions.yaml b/examples/yaml/extensions.yaml index 4e3b733340..97a8d0cf4a 100644 --- a/examples/yaml/extensions.yaml +++ b/examples/yaml/extensions.yaml @@ -1,3 +1,6 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + # The file format version file_format: "0.1" diff --git a/examples/yaml/kitchen-sink.yaml b/examples/yaml/kitchen-sink.yaml index 5539ecc1f7..1d31facab8 100644 --- a/examples/yaml/kitchen-sink.yaml +++ b/examples/yaml/kitchen-sink.yaml @@ -1,3 +1,6 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + # kitchen-sink.yaml demonstrates all configurable surface area, including explanatory comments. # # It DOES NOT represent expected real world configuration, as it makes strange configuration diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index 15efe1d364..aa277b5499 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -5,8 +5,8 @@ add_library( opentelemetry_configuration - configuration_factory.cc document_node.cc yaml_configuration_factory.cc ryml_document.cc - ryml_document_node.cc) + configuration_factory.cc document_node.cc yaml_configuration_factory.cc + ryml_document.cc ryml_document_node.cc) set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) From ecf6f1c3cf860eb2ff3f09d498e4f4bf6e7d6816 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 4 Mar 2024 16:53:19 +0100 Subject: [PATCH 030/166] Remove service_name, per configuration PR 68 https://github.com/open-telemetry/opentelemetry-configuration/pull/68 --- .../sdk/configuration/attributes_configuration.h | 1 - sdk/src/configuration/configuration_factory.cc | 12 +++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h index 9f2e9fad21..e3b6282dc2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h @@ -16,7 +16,6 @@ namespace configuration class AttributesConfiguration { public: - std::string service_name; std::map kv_map; }; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 19c821d1ec..6737c272d3 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -752,15 +752,9 @@ static std::unique_ptr ParseAttributesConfiguration( OTEL_INTERNAL_LOG_DEBUG( "ParseAttributesConfiguration() name = " << name << ", value = " << string_value); - if (name == "service.name") - { - model->service_name = name; - } - else - { - std::pair entry(name, string_value); - model->kv_map.insert(entry); - } + + std::pair entry(name, string_value); + model->kv_map.insert(entry); } return model; From 9987f231239dda5e4a2cea2a66af55b96720b6d5 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 5 Mar 2024 23:13:14 +0100 Subject: [PATCH 031/166] YAML parser for metrics --- .../configuration/aggregation_configuration.h | 25 ++ ...cket_histogram_aggregation_configuration.h | 30 ++ .../default_aggregation_configuration.h | 26 ++ .../sdk/configuration/document_node.h | 2 + .../drop_aggregation_configuration.h | 26 ++ ...cket_histogram_aggregation_configuration.h | 29 ++ .../last_value_aggregation_configuration.h | 26 ++ .../otlp_metric_exporter_configuration.h | 8 +- .../sdk/configuration/ryml_document_node.h | 2 + .../configuration/selector_configuration.h | 42 ++ .../sdk/configuration/stream_configuration.h | 31 ++ .../sum_aggregation_configuration.h | 26 ++ .../sdk/configuration/view_configuration.h | 7 + .../configuration/configuration_factory.cc | 362 ++++++++++++++---- sdk/src/configuration/ryml_document_node.cc | 15 + 15 files changed, 583 insertions(+), 74 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/selector_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/stream_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h new file mode 100644 index 0000000000..7825485555 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class AggregationConfiguration +{ +public: + AggregationConfiguration() = default; + virtual ~AggregationConfiguration() = default; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h new file mode 100644 index 0000000000..d783aead2f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class Base2ExponentialBucketHistogramAggregationConfiguration : public AggregationConfiguration +{ +public: + Base2ExponentialBucketHistogramAggregationConfiguration() = default; + ~Base2ExponentialBucketHistogramAggregationConfiguration() override = default; + + size_t max_scale; + size_t max_size; + bool record_min_max; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h new file mode 100644 index 0000000000..b76576dd4f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class DefaultAggregationConfiguration : public AggregationConfiguration +{ +public: + DefaultAggregationConfiguration() = default; + ~DefaultAggregationConfiguration() override = default; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 0ca1046542..d3e9b20bd8 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -28,6 +28,8 @@ class DocumentNode DocumentNode() = default; virtual ~DocumentNode() = default; + virtual std::string Key() const = 0; + virtual bool AsBoolean() = 0; virtual size_t AsInteger() = 0; virtual double AsDouble() = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h new file mode 100644 index 0000000000..a64e597c9c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class DropAggregationConfiguration : public AggregationConfiguration +{ +public: + DropAggregationConfiguration() = default; + ~DropAggregationConfiguration() override = default; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h new file mode 100644 index 0000000000..1d5e4c1eaa --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExplicitBucketHistogramAggregationConfiguration : public AggregationConfiguration +{ +public: + ExplicitBucketHistogramAggregationConfiguration() = default; + ~ExplicitBucketHistogramAggregationConfiguration() override = default; + + std::vector boundaries; + bool record_min_max; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h new file mode 100644 index 0000000000..86e4337314 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class LastValueAggregationConfiguration : public AggregationConfiguration +{ +public: + LastValueAggregationConfiguration() = default; + ~LastValueAggregationConfiguration() override = default; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h index e9f157334f..5a7fbe0f0e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h @@ -14,6 +14,12 @@ namespace sdk namespace configuration { +enum enum_default_histogram_aggregation +{ + explicit_bucket_histogram, + base2_exponential_bucket_histogram +}; + class OtlpMetricExporterConfiguration : public MetricExporterConfiguration { public: @@ -34,7 +40,7 @@ class OtlpMetricExporterConfiguration : public MetricExporterConfiguration std::string compression; size_t timeout; std::string temporality_preference; - int default_histogram_aggregation; // FIXME enum + enum_default_histogram_aggregation default_histogram_aggregation; bool insecure; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index a4e0fdb1ff..cb70480b87 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -20,6 +20,8 @@ class RymlDocumentNode : public DocumentNode RymlDocumentNode(ryml::ConstNodeRef node) : m_node(node) {} ~RymlDocumentNode() override = default; + std::string Key() const override; + bool AsBoolean() override; size_t AsInteger() override; double AsDouble() override; diff --git a/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h new file mode 100644 index 0000000000..600094791e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h @@ -0,0 +1,42 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +enum enum_instrument_type +{ + counter, + histogram, + observable_counter, + observable_gauge, + observable_up_down_counter, + up_down_counter +}; + +class SelectorConfiguration +{ +public: + SelectorConfiguration() = default; + ~SelectorConfiguration() = default; + + std::string instrument_name; + enum_instrument_type instrument_type; + std::string unit; + std::string meter_name; + std::string meter_version; + std::string meter_schema_url; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/stream_configuration.h b/sdk/include/opentelemetry/sdk/configuration/stream_configuration.h new file mode 100644 index 0000000000..e445db976e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/stream_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class StreamConfiguration +{ +public: + StreamConfiguration() = default; + ~StreamConfiguration() = default; + + std::string name; + std::string description; + std::unique_ptr aggregation; + std::vector attribute_keys; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h new file mode 100644 index 0000000000..f08404232a --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SumAggregationConfiguration : public AggregationConfiguration +{ +public: + SumAggregationConfiguration() = default; + ~SumAggregationConfiguration() override = default; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/view_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h index 4636c5ac6a..ab525ead17 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h @@ -5,6 +5,8 @@ #include +#include "opentelemetry/sdk/configuration/selector_configuration.h" +#include "opentelemetry/sdk/configuration/stream_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,6 +18,11 @@ namespace configuration class ViewConfiguration { public: + ViewConfiguration() = default; + ~ViewConfiguration() = default; + + std::unique_ptr selector; + std::unique_ptr stream; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 6737c272d3..7b8d4cbccc 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -5,22 +5,28 @@ #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/console_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/default_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/last_value_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h" @@ -33,6 +39,7 @@ #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/sum_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" @@ -44,6 +51,26 @@ namespace sdk namespace configuration { +static std::unique_ptr ParseHeadersConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new HeadersConfiguration); + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + std::string name = it.Name(); + std::unique_ptr child = it.Value(); + std::string string_value = child->AsString(); + + OTEL_INTERNAL_LOG_DEBUG("ParseHeadersConfiguration() name = " << name + << ", value = " << string_value); + std::pair entry(name, string_value); + model->kv_map.insert(entry); + } + + return model; +} + static std::unique_ptr ParseAttributeLimitConfiguration( const std::unique_ptr &node) { @@ -65,12 +92,49 @@ static std::unique_ptr ParseLoggerProviderConfigura return model; } +static enum_default_histogram_aggregation ParseDefaultHistogramAggregation(const std::string &name) +{ + if (name == "explicit_bucket_histogram") + { + return explicit_bucket_histogram; + } + + if (name == "base2_exponential_bucket_histogram") + { + return base2_exponential_bucket_histogram; + } + + OTEL_INTERNAL_LOG_ERROR("ParseDefaultHistogramAggregation: name = " << name); + throw InvalidSchemaException("Illegal default_histogram_aggregation"); +} + static std::unique_ptr ParseOtlpMetricExporterConfiguration( - const std::unique_ptr & /* node */) + const std::unique_ptr &node) { std::unique_ptr model(new OtlpMetricExporterConfiguration); + std::unique_ptr child; + + model->protocol = node->GetRequiredString("protocol"); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate = node->GetString("certificate", ""); + model->client_key = node->GetString("client_key", ""); + model->client_certificate = node->GetString("client_certificate", ""); + + child = node->GetChildNode("headers"); + if (child) + { + model->headers = ParseHeadersConfiguration(child); + } + + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->temporality_preference = node->GetString("temporality_preference", ""); + + std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); + model->default_histogram_aggregation = + ParseDefaultHistogramAggregation(default_histogram_aggregation); - OTEL_INTERNAL_LOG_ERROR("ParseOtlpMetricExporterConfiguration: FIXME"); + model->insecure = node->GetBoolean("insecure", false); return model; } @@ -80,18 +144,20 @@ static std::unique_ptr ParseConsoleMetricExp { std::unique_ptr model(new ConsoleMetricExporterConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParseConsoleMetricExporterConfiguration: FIXME"); - return model; } static std::unique_ptr -ParsePrometheusMetricExporterConfiguration(const std::unique_ptr & /* node */) +ParsePrometheusMetricExporterConfiguration(const std::unique_ptr &node) { std::unique_ptr model( new PrometheusMetricExporterConfiguration); - OTEL_INTERNAL_LOG_ERROR("ParsePrometheusMetricExporterConfiguration: FIXME"); + model->host = node->GetString("host", "localhost"); + model->port = node->GetInteger("port", 9464); + model->without_units = node->GetBoolean("without_units", false); + model->without_type_suffix = node->GetBoolean("without_type_suffix", false); + model->without_scope_info = node->GetBoolean("without_scope_info", false); return model; } @@ -215,12 +281,225 @@ static std::unique_ptr ParseMetricReaderConfiguration return model; } +static enum_instrument_type ParseInstrumentType(const std::string &name) +{ + if (name == "counter") + { + return counter; + } + + if (name == "histogram") + { + return histogram; + } + + if (name == "observable_counter") + { + return observable_counter; + } + + if (name == "observable_gauge") + { + return observable_gauge; + } + + if (name == "observable_up_down_counter") + { + return observable_up_down_counter; + } + + if (name == "up_down_counter") + { + return up_down_counter; + } + + OTEL_INTERNAL_LOG_ERROR("ParseInstrumentType: name = " << name); + throw InvalidSchemaException("Illegal instrument_type"); +} + +static std::unique_ptr ParseSelectorConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new SelectorConfiguration); + + model->instrument_name = node->GetString("instrument_name", ""); + + std::string instrument_type = node->GetString("instrument_type", ""); + model->instrument_type = ParseInstrumentType(instrument_type); + + model->unit = node->GetString("unit", ""); + model->meter_name = node->GetString("meter_name", ""); + model->meter_version = node->GetString("meter_version", ""); + model->meter_schema_url = node->GetString("meter_schema_url", ""); + + return model; +} + +static std::unique_ptr ParseDefaultAggregationConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new DefaultAggregationConfiguration); + + return model; +} + +static std::unique_ptr ParseDropAggregationConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new DropAggregationConfiguration); + + return model; +} + +static std::unique_ptr +ParseExplicitBucketHistogramAggregationConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new ExplicitBucketHistogramAggregationConfiguration); + std::unique_ptr child; + + child = node->GetChildNode("boundaries"); + + if (child) + { + for (auto it = child->begin(); it != child->end(); ++it) + { + std::unique_ptr attribute_key(*it); + + double boundary = attribute_key->AsDouble(); + + model->boundaries.push_back(boundary); + } + } + + model->record_min_max = node->GetBoolean("record_min_max", true); + + return model; +} + +static std::unique_ptr +ParseBase2ExponentialBucketHistogramAggregationConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model( + new Base2ExponentialBucketHistogramAggregationConfiguration); + + model->max_scale = node->GetInteger("max_scale", 0); // FIXME: default ? + model->max_size = node->GetInteger("max_size", 0); // FIXME: default ? + model->record_min_max = node->GetBoolean("record_min_max", true); + + return model; +} + +static std::unique_ptr ParseLastValueAggregationConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new LastValueAggregationConfiguration); + + return model; +} + +static std::unique_ptr ParseSumAggregationConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new SumAggregationConfiguration); + + return model; +} + +static std::unique_ptr ParseAggregationConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model; + std::unique_ptr child; + + size_t count = node->num_children(); + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParseAggregationConfiguration: count " << count); + throw InvalidSchemaException("Illegal aggregation"); + } + + child = node->GetChild(0); + std::string name = child->Key(); + + if (name == "default") + { + model = ParseDefaultAggregationConfiguration(child); + } + else if (name == "drop") + { + model = ParseDropAggregationConfiguration(child); + } + else if (name == "explicit_bucket_histogram") + { + model = ParseExplicitBucketHistogramAggregationConfiguration(child); + } + else if (name == "base2_exponential_bucket_histogram") + { + model = ParseBase2ExponentialBucketHistogramAggregationConfiguration(child); + } + else if (name == "last_value") + { + model = ParseLastValueAggregationConfiguration(child); + } + else if (name == "sum") + { + model = ParseSumAggregationConfiguration(child); + } + else + { + OTEL_INTERNAL_LOG_ERROR("ParseAggregationConfiguration: name " << name); + throw InvalidSchemaException("Illegal aggregation"); + } + + return model; +} + +static std::unique_ptr ParseStreamConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new StreamConfiguration); + std::unique_ptr child; + + model->name = node->GetString("name", ""); + model->description = node->GetString("description", ""); + + child = node->GetChildNode("aggregation"); + if (child) + { + model->aggregation = ParseAggregationConfiguration(child); + } + + child = node->GetChildNode("attribute_keys"); + + if (child) + { + for (auto it = child->begin(); it != child->end(); ++it) + { + std::unique_ptr attribute_key(*it); + + std::string name = attribute_key->AsString(); + + model->attribute_keys.push_back(name); + } + } + + return model; +} + static std::unique_ptr ParseViewConfiguration( - const std::unique_ptr & /* node */) + const std::unique_ptr &node) { std::unique_ptr model(new ViewConfiguration); + std::unique_ptr child; + + child = node->GetRequiredChildNode("selector"); + model->selector = ParseSelectorConfiguration(child); - OTEL_INTERNAL_LOG_ERROR("ParseViewConfiguration: FIXME"); + child = node->GetRequiredChildNode("stream"); + model->stream = ParseStreamConfiguration(child); return model; } @@ -248,19 +527,7 @@ static std::unique_ptr ParseMeterProviderConfigurati return model; } -#ifdef NEVER -static std::unique_ptr ParseSinglePropagatorConfiguration( - const std::string &name) -{ - std::unique_ptr model(new SimplePropagatorConfiguration); - - model->name = name; - - return model; -} -#endif - -static std::unique_ptr ParseSinglePropagatorConfiguration( +static std::unique_ptr ParseSimplePropagatorConfiguration( const std::unique_ptr &node) { std::unique_ptr model(new SimplePropagatorConfiguration); @@ -302,43 +569,12 @@ static std::unique_ptr ParsePropagatorConfiguration( child = node->GetChildNode("simple"); if (child) { - return ParseSinglePropagatorConfiguration(child); + return ParseSimplePropagatorConfiguration(child); } OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: illegal propagator"); throw InvalidSchemaException("Illegal propagator"); return nullptr; - -#ifdef NEVER - // This is the code that complies with the current model spec - std::string name; - std::unique_ptr child; - size_t count = 0; - - for (auto it = node->begin_properties(); it != node->end_properties(); ++it) - { - name = it.Name(); - child = it.Value(); - count++; - } - - if (count != 1) - { - OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: count " << count); - throw InvalidSchemaException("Illegal propagator"); - } - - if (name == "composite") - { - model = ParseCompositePropagatorConfiguration(child); - } - else - { - model = ParseSinglePropagatorConfiguration(name); - } - - return model; -#endif } static std::unique_ptr ParseSpanLimitsConfiguration( @@ -508,26 +744,6 @@ static std::unique_ptr ParseSamplerConfiguration( return model; } -static std::unique_ptr ParseHeadersConfiguration( - const std::unique_ptr &node) -{ - std::unique_ptr model(new HeadersConfiguration); - - for (auto it = node->begin_properties(); it != node->end_properties(); ++it) - { - std::string name = it.Name(); - std::unique_ptr child = it.Value(); - std::string string_value = child->AsString(); - - OTEL_INTERNAL_LOG_DEBUG("ParseHeadersConfiguration() name = " << name - << ", value = " << string_value); - std::pair entry(name, string_value); - model->kv_map.insert(entry); - } - - return model; -} - static std::unique_ptr ParseOtlpSpanExporterConfiguration( const std::unique_ptr &node) { diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index e71b584088..11ee4cc3e0 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -37,6 +37,21 @@ static void DebugNode(std::string_view name, ryml::ConstNodeRef node) } } +std::string RymlDocumentNode::Key() const +{ + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::Key()"); + + if (!m_node.has_key()) + { + OTEL_INTERNAL_LOG_ERROR("Yaml: no key"); + throw InvalidSchemaException(""); + } + + ryml::csubstr k = m_node.key(); + std::string name(k.str, k.len); + return name; +} + bool RymlDocumentNode::AsBoolean() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsBoolean()"); From 62f0d352f1c68708e48199ecc96918f51620a658 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 3 Apr 2024 22:24:24 +0200 Subject: [PATCH 032/166] WIP --- .../opentelemetry/sdk/init/configured_sdk.h | 2 + .../opentelemetry/sdk/init/sdk_builder.h | 9 ++ sdk/src/init/sdk_builder.cc | 97 +++++++++++++++++++ 3 files changed, 108 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h index fe8e2d69a6..1f48027f42 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -6,6 +6,7 @@ #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" @@ -28,6 +29,7 @@ class ConfiguredSdk // FIXME: should be sdk::trace::TracerProvider std::shared_ptr m_tracer_provider; std::shared_ptr m_propagator; + std::shared_ptr m_meter_provider; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 5694823814..7da1cc7997 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -15,6 +15,7 @@ #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/sampler.h" @@ -100,6 +101,14 @@ class SdkBuilder const std::unique_ptr &model) const; + void AddView( + opentelemetry::sdk::metrics::ViewRegistry *registry, + const std::unique_ptr &model) const; + + std::unique_ptr CreateMeterProvider( + const std::unique_ptr &model) + const; + std::unique_ptr CreateConfiguredSdk( const std::unique_ptr &model) const; diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 9bd30634a4..19cd991f5a 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -20,6 +20,7 @@ #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/selector_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" @@ -37,6 +38,10 @@ #include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/sdk/init/unsupported_exception.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" +#include "opentelemetry/sdk/metrics/aggregation/aggregation.h" +#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" +#include "opentelemetry/sdk/metrics/view/attributes_processor.h" +#include "opentelemetry/sdk/metrics/view/view_registry_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_options.h" #include "opentelemetry/sdk/trace/processor.h" @@ -545,6 +550,93 @@ SdkBuilder::CreatePropagator( return sdk; } +static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType( + enum opentelemetry::sdk::configuration::enum_instrument_type config) +{ + opentelemetry::sdk::metrics::InstrumentType sdk; + + switch (config) + { + case opentelemetry::sdk::configuration::counter: + sdk = opentelemetry::sdk::metrics::InstrumentType::kCounter; + break; + case opentelemetry::sdk::configuration::histogram: + sdk = opentelemetry::sdk::metrics::InstrumentType::kHistogram; + break; + case opentelemetry::sdk::configuration::observable_counter: + sdk = opentelemetry::sdk::metrics::InstrumentType::kObservableCounter; + break; + case opentelemetry::sdk::configuration::observable_gauge: + sdk = opentelemetry::sdk::metrics::InstrumentType::kObservableGauge; + break; + case opentelemetry::sdk::configuration::observable_up_down_counter: + sdk = opentelemetry::sdk::metrics::InstrumentType::kObservableUpDownCounter; + break; + case opentelemetry::sdk::configuration::up_down_counter: + sdk = opentelemetry::sdk::metrics::InstrumentType::kUpDownCounter; + break; + } + + return sdk; +} + +void SdkBuilder::AddView( + opentelemetry::sdk::metrics::ViewRegistry *registry, + const std::unique_ptr &model) const +{ + auto *selector = model->selector.get(); + + auto sdk_instrument_type = ConvertInstrumentType(selector->instrument_type); + + std::unique_ptr sdk_instrument_selector( + new opentelemetry::sdk::metrics::InstrumentSelector( + sdk_instrument_type, selector->instrument_name, selector->unit)); + + std::unique_ptr sdk_meter_selector( + new opentelemetry::sdk::metrics::MeterSelector(selector->meter_name, selector->meter_version, + selector->meter_schema_url)); + + auto *stream = model->stream.get(); + + std::string unit("FIXME"); + + opentelemetry::sdk::metrics::AggregationType sdk_aggregation_type = + opentelemetry::sdk::metrics::AggregationType::kDefault; // FIXME + + std::shared_ptr sdk_aggregation_config = + nullptr; // FIXME + + std::unique_ptr + sdk_attribute_processor; // FIXME + + std::unique_ptr sdk_view(new opentelemetry::sdk::metrics::View( + stream->name, stream->description, unit, sdk_aggregation_type, sdk_aggregation_config, + std::move(sdk_attribute_processor))); + + registry->AddView(std::move(sdk_instrument_selector), std::move(sdk_meter_selector), + std::move(sdk_view)); + + OTEL_INTERNAL_LOG_ERROR("AddView() FIXME"); +} + +std::unique_ptr SdkBuilder::CreateMeterProvider( + const std::unique_ptr &model) + const +{ + std::unique_ptr sdk; + + auto view_registry = opentelemetry::sdk::metrics::ViewRegistryFactory::Create(); + + for (const auto &view_configuration : model->views) + { + AddView(view_registry.get(), view_configuration); + } + + OTEL_INTERNAL_LOG_ERROR("CreateMeterProvider() FIXME"); + + return sdk; +} + std::unique_ptr SdkBuilder::CreateConfiguredSdk( const std::unique_ptr &model) const { @@ -561,6 +653,11 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( { sdk->m_propagator = CreatePropagator(model->propagator); } + + if (model->meter_provider) + { + sdk->m_meter_provider = CreateMeterProvider(model->meter_provider); + } } return sdk; From b33fc823c6f92339cd80f81986fa824f10f16ff2 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 19 Apr 2024 23:52:36 +0200 Subject: [PATCH 033/166] Fixed shellcheck issues. --- ci/install_ryml.sh | 2 +- ci/install_yaml_cpp.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index 60422f46e6..4871602ab3 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -23,7 +23,7 @@ if [ ! -z "${CXX_STANDARD}" ]; then fi mkdir build && pushd build -cmake ${RYML_BUILD_OPTIONS[@]} .. +cmake "${RYML_BUILD_OPTIONS[@]}" .. make -j $(nproc) make install popd diff --git a/ci/install_yaml_cpp.sh b/ci/install_yaml_cpp.sh index 6bea736a49..f7321955a2 100755 --- a/ci/install_yaml_cpp.sh +++ b/ci/install_yaml_cpp.sh @@ -23,7 +23,7 @@ if [ ! -z "${CXX_STANDARD}" ]; then fi mkdir build && pushd build -cmake ${YAML_CPP_BUILD_OPTIONS[@]} .. +cmake "${YAML_CPP_BUILD_OPTIONS[@]}" .. make -j $(nproc) make install popd From 1960d29fab3731c3d03982c84bcfa05d451652f7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 19 Apr 2024 23:56:02 +0200 Subject: [PATCH 034/166] Fix CI after merge. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62cfaa40e9..5737eebf7f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -137,7 +137,7 @@ jobs: CXX: /usr/bin/clang++-15 PROTOBUF_VERSION: 21.12 run: | - sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh sudo -E ./ci/setup_ci_environment.sh sudo -E ./ci/install_protobuf.sh sudo -E ./ci/install_ryml.sh From 4bb5fe4cb06a8770973b0688f1d5daf8e26eeeef Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 14 May 2024 22:50:04 +0200 Subject: [PATCH 035/166] Remove all code for yaml-cpp Upgrade to rapidyaml 0.6.0 --- CMakeLists.txt | 4 +- ci/install_ryml.sh | 2 +- ci/install_yaml_cpp.sh | 31 -- .../sdk/configuration/yaml_document.h | 35 -- .../sdk/configuration/yaml_document_node.h | 94 ---- sdk/src/configuration/yaml_document.cc | 58 --- sdk/src/configuration/yaml_document_node.cc | 421 ------------------ 7 files changed, 2 insertions(+), 643 deletions(-) delete mode 100755 ci/install_yaml_cpp.sh delete mode 100644 sdk/include/opentelemetry/sdk/configuration/yaml_document.h delete mode 100644 sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h delete mode 100644 sdk/src/configuration/yaml_document.cc delete mode 100644 sdk/src/configuration/yaml_document_node.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d6eb44718..34bee179d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -498,15 +498,13 @@ endif() if((NOT WITH_API_ONLY) AND WITH_CONFIGURATION) # No specific version required. - find_package(ryml REQUIRED) + find_package(ryml 0.6.0 REQUIRED) message( STATUS "Found ryml: include ${RYML_INCLUDE_DIR}, lib ${RYML_LIB_DIR}, version ${ryml_VERSION}" ) endif() -# DEAD find_package(yaml-cpp REQUIRED) - if(OTELCPP_MAINTAINER_MODE) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") message(STATUS "Building with gcc in maintainer mode.") diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index 4871602ab3..0da1671cf4 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -5,7 +5,7 @@ set -ex export DEBIAN_FRONTEND=noninteractive -[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.5.0" +[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.6.0" BUILD_DIR=/tmp/ INSTALL_DIR=/usr/local/ diff --git a/ci/install_yaml_cpp.sh b/ci/install_yaml_cpp.sh deleted file mode 100755 index f7321955a2..0000000000 --- a/ci/install_yaml_cpp.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -set -ex -export DEBIAN_FRONTEND=noninteractive -[ -z "${YAML_CPP_VERSION}" ] && export YAML_CPP_VERSION="0.8.0" - -BUILD_DIR=/tmp/ -INSTALL_DIR=/usr/local/ -pushd $BUILD_DIR -git clone --depth=1 -b ${YAML_CPP_VERSION} https://github.com/jbeder/yaml-cpp.git -cd yaml-cpp -YAML_CPP_BUILD_OPTIONS=( - "-DBUILD_TESTING=OFF" - "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" - "-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR" -) - -if [ ! -z "${CXX_STANDARD}" ]; then - YAML_CPP_BUILD_OPTIONS=(${YAML_CPP_BUILD_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}") -fi - -mkdir build && pushd build -cmake "${YAML_CPP_BUILD_OPTIONS[@]}" .. -make -j $(nproc) -make install -popd -popd -export PATH=${INSTALL_DIR}/bin:$PATH # ensure to use the installed yaml-cpp diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document.h deleted file mode 100644 index 0dfc6a098c..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include -#include - -#include "opentelemetry/sdk/configuration/document.h" -#include "opentelemetry/sdk/configuration/document_node.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class YamlDocument : public Document -{ -public: - static std::unique_ptr Parse(std::string content); - - YamlDocument(YAML::Node root) : m_root(root) {} - ~YamlDocument() override = default; - - std::unique_ptr GetRootNode() override; - -private: - YAML::Node m_root; -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h deleted file mode 100644 index 81b421a563..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_document_node.h +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include - -#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" -#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" -#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" -#include "opentelemetry/sdk/configuration/propagator_configuration.h" -#include "opentelemetry/sdk/configuration/resource_configuration.h" -#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class YamlDocumentNode : public DocumentNode -{ -public: - YamlDocumentNode(YAML::Node yaml) : m_yaml(yaml) {} - ~YamlDocumentNode() override = default; - - bool AsBoolean() override; - size_t AsInteger() override; - double AsDouble() override; - std::string AsString() override; - - std::unique_ptr GetRequiredChildNode(const std::string &name) override; - std::unique_ptr GetChildNode(const std::string &name) override; - - bool GetRequiredBoolean(const std::string &name) override; - bool GetBoolean(const std::string &name, bool default_value) override; - - size_t GetRequiredInteger(const std::string &name) override; - size_t GetInteger(const std::string &name, size_t default_value) override; - - double GetRequiredDouble(const std::string &name) override; - double GetDouble(const std::string &name, double default_value) override; - - std::string GetRequiredString(const std::string &name) override; - std::string GetString(const std::string &name, const std::string &default_value) override; - - DocumentNodeConstIterator begin() const override; - DocumentNodeConstIterator end() const override; - - size_t num_children() const override; - std::unique_ptr GetChild(size_t index) const override; - - PropertiesNodeConstIterator begin_properties() const override; - PropertiesNodeConstIterator end_properties() const override; - - std::string Dump() const override; - -private: - YAML::Node m_yaml; -}; - -class YamlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl -{ -public: - YamlDocumentNodeConstIteratorImpl(const YAML::const_iterator &iter); - ~YamlDocumentNodeConstIteratorImpl() override; - - void Next() override; - std::unique_ptr Item() const override; - bool Equal(const DocumentNodeConstIteratorImpl *rhs) const override; - -private: - YAML::const_iterator m_iter; -}; - -class YamlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorImpl -{ -public: - YamlPropertiesNodeConstIteratorImpl(const YAML::const_iterator &iter); - ~YamlPropertiesNodeConstIteratorImpl() override; - - void Next() override; - std::string Name() const override; - std::unique_ptr Value() const override; - bool Equal(const PropertiesNodeConstIteratorImpl *rhs) const override; - -private: - YAML::const_iterator m_iter; -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/yaml_document.cc b/sdk/src/configuration/yaml_document.cc deleted file mode 100644 index 959b7f883f..0000000000 --- a/sdk/src/configuration/yaml_document.cc +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#include - -#include "opentelemetry/sdk/common/global_log_handler.h" - -#include "opentelemetry/sdk/configuration/yaml_document.h" -#include "opentelemetry/sdk/configuration/yaml_document_node.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -std::unique_ptr YamlDocument::Parse(std::string content) -{ - YAML::Node yaml; - std::unique_ptr doc; - - try - { - yaml = YAML::Load(content); - } - catch (const YAML::BadFile &e) - { - OTEL_INTERNAL_LOG_ERROR("Failed to load yaml, " << e.what()); - return doc; - } - catch (...) - { - OTEL_INTERNAL_LOG_ERROR("Failed to load yaml."); - return doc; - } - - if (yaml.Type() == YAML::NodeType::Undefined) - { - OTEL_INTERNAL_LOG_ERROR("Failed to load yaml."); - return doc; - } - - YamlDocument *yaml_doc = new YamlDocument(yaml); - doc = std::unique_ptr(yaml_doc); - return doc; -} - -std::unique_ptr YamlDocument::GetRootNode() -{ - YamlDocumentNode *yaml_node = new YamlDocumentNode(m_root); - std::unique_ptr node(yaml_node); - return node; -} - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/yaml_document_node.cc b/sdk/src/configuration/yaml_document_node.cc deleted file mode 100644 index 777fbbddbc..0000000000 --- a/sdk/src/configuration/yaml_document_node.cc +++ /dev/null @@ -1,421 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#include - -#include "opentelemetry/sdk/common/global_log_handler.h" - -#include "opentelemetry/sdk/configuration/invalid_schema_exception.h" -#include "opentelemetry/sdk/configuration/yaml_document.h" -#include "opentelemetry/sdk/configuration/yaml_document_node.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -#if 0 -static void DebugNode(std::string_view name, const YAML::Node &yaml) -{ - if (yaml) - { - OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", IsDefined: " << yaml.IsDefined()); - OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", Size: " << yaml.size()); - - const char *msg; - switch (yaml.Type()) - { - case YAML::NodeType::Undefined: - msg = "NodeType::Undefined"; - break; - case YAML::NodeType::Null: - msg = "NodeType::Null"; - break; - case YAML::NodeType::Scalar: - msg = "NodeType::Scalar"; - break; - case YAML::NodeType::Sequence: - msg = "NodeType::Sequence"; - break; - case YAML::NodeType::Map: - msg = "NodeType::Map"; - break; - default: - msg = "NodeType::???"; - break; - } - - OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", " << msg); - OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", Scalar: " << yaml.Scalar()); - } - else - { - OTEL_INTERNAL_LOG_DEBUG("Processing: " << name << ", missing node."); - } -} -#endif - -bool YamlDocumentNode::AsBoolean() -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsBoolean()"); - - if (!m_yaml.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); - } - bool value = m_yaml.as(); - return value; -} - -size_t YamlDocumentNode::AsInteger() -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsInteger()"); - - if (!m_yaml.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); - } - size_t value = m_yaml.as(); - return value; -} - -double YamlDocumentNode::AsDouble() -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsDouble()"); - - if (!m_yaml.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); - } - double value = m_yaml.as(); - return value; -} - -std::string YamlDocumentNode::AsString() -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::AsString()"); - - if (!m_yaml.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); - } - std::string value = m_yaml.as(); - return value; -} - -std::unique_ptr YamlDocumentNode::GetRequiredChildNode(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredChildNode(" << name << ")"); - - std::unique_ptr child; - - YAML::Node yaml_child = m_yaml[name]; - // DebugNode(name, yaml_child); - if (!yaml_child) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - throw InvalidSchemaException(name); - } - child = std::unique_ptr(new YamlDocumentNode(yaml_child)); - return child; -} - -std::unique_ptr YamlDocumentNode::GetChildNode(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetChildNode(" << name << ")"); - - std::unique_ptr child; - - YAML::Node yaml_child = m_yaml[name]; - // DebugNode(name, yaml_child); - if (yaml_child) - { - child = std::unique_ptr(new YamlDocumentNode(yaml_child)); - } - return child; -} - -bool YamlDocumentNode::GetRequiredBoolean(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredBoolean(" << name << ")"); - - YAML::Node attr = m_yaml[name]; - if (!attr) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - throw InvalidSchemaException(name); - } - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: bool node: " << name); - throw InvalidSchemaException(name); - } - bool value = attr.as(); - return value; -} - -bool YamlDocumentNode::GetBoolean(const std::string &name, bool default_value) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetBoolean(" << name << ", " << default_value << ")"); - - bool value = default_value; - YAML::Node attr = m_yaml[name]; - if (attr) - { - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: bool node: " << name); - throw InvalidSchemaException(name); - } - value = attr.as(); - } - return value; -} - -size_t YamlDocumentNode::GetRequiredInteger(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredInteger(" << name << ")"); - - YAML::Node attr = m_yaml[name]; - if (!attr) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - throw InvalidSchemaException(name); - } - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); - throw InvalidSchemaException(name); - } - size_t value = attr.as(); - return value; -} - -size_t YamlDocumentNode::GetInteger(const std::string &name, size_t default_value) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetInteger(" << name << ", " << default_value << ")"); - - size_t value = default_value; - YAML::Node attr = m_yaml[name]; - if (attr) - { - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: integer node: " << name); - throw InvalidSchemaException(name); - } - value = attr.as(); - } - return value; -} - -double YamlDocumentNode::GetRequiredDouble(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredDouble(" << name << ")"); - - YAML::Node attr = m_yaml[name]; - if (!attr) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - throw InvalidSchemaException(name); - } - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: double node: " << name); - throw InvalidSchemaException(name); - } - double value = attr.as(); - return value; -} - -double YamlDocumentNode::GetDouble(const std::string &name, double default_value) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetDouble(" << name << ", " << default_value << ")"); - - double value = default_value; - YAML::Node attr = m_yaml[name]; - if (attr) - { - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: double node: " << name); - throw InvalidSchemaException(name); - } - value = attr.as(); - } - return value; -} - -std::string YamlDocumentNode::GetRequiredString(const std::string &name) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetRequiredString(" << name << ")"); - - YAML::Node attr = m_yaml[name]; - if (!attr) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - throw InvalidSchemaException(name); - } - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); - throw InvalidSchemaException(name); - } - std::string value = attr.as(); - return value; -} - -std::string YamlDocumentNode::GetString(const std::string &name, const std::string &default_value) -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::GetString(" << name << ", " << default_value << ")"); - - std::string value(default_value); - YAML::Node attr = m_yaml[name]; - if (attr) - { - if (!attr.IsScalar()) - { - OTEL_INTERNAL_LOG_ERROR("Yaml: string node: " << name); - throw InvalidSchemaException(name); - } - value = attr.as(); - } - return value; -} - -DocumentNodeConstIterator YamlDocumentNode::begin() const -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::begin()"); - - return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.begin())); -} - -DocumentNodeConstIterator YamlDocumentNode::end() const -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::end()"); - - return DocumentNodeConstIterator(new YamlDocumentNodeConstIteratorImpl(m_yaml.end())); -} - -size_t YamlDocumentNode::num_children() const -{ - OTEL_INTERNAL_LOG_ERROR("YamlDocumentNode::num_children(): FIXME"); - return 0; -} - -std::unique_ptr YamlDocumentNode::GetChild(size_t index) const -{ - std::unique_ptr child; - OTEL_INTERNAL_LOG_ERROR("YamlDocumentNode::GetChild(): FIXME"); - return child; -} - -PropertiesNodeConstIterator YamlDocumentNode::begin_properties() const -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::begin_properties()"); - -#if 0 - DebugNode("::begin_properties()", m_yaml); - - for (auto it = m_yaml.begin(); it != m_yaml.end(); ++it) - { - std::pair pair = *it; - DebugNode(" first", pair.first); - DebugNode(" second", pair.second); - } -#endif - - return PropertiesNodeConstIterator(new YamlPropertiesNodeConstIteratorImpl(m_yaml.begin())); -} - -PropertiesNodeConstIterator YamlDocumentNode::end_properties() const -{ - OTEL_INTERNAL_LOG_DEBUG("YamlDocumentNode::end_properties()"); - - return PropertiesNodeConstIterator(new YamlPropertiesNodeConstIteratorImpl(m_yaml.end())); -} - -std::string YamlDocumentNode::Dump() const -{ - return "FIXME: Dump"; -} - -YamlDocumentNodeConstIteratorImpl::YamlDocumentNodeConstIteratorImpl( - const YAML::const_iterator &iter) - : m_iter(iter) -{} - -YamlDocumentNodeConstIteratorImpl::~YamlDocumentNodeConstIteratorImpl() {} - -void YamlDocumentNodeConstIteratorImpl::Next() -{ - m_iter++; -} - -std::unique_ptr YamlDocumentNodeConstIteratorImpl::Item() const -{ - std::unique_ptr item; - YAML::Node yaml_item = *m_iter; - if (!yaml_item) - { - OTEL_INTERNAL_LOG_ERROR("iterator is lost "); - // Throw - } - item = std::unique_ptr(new YamlDocumentNode(yaml_item)); - return item; -} - -bool YamlDocumentNodeConstIteratorImpl::Equal(const DocumentNodeConstIteratorImpl *rhs) const -{ - const YamlDocumentNodeConstIteratorImpl *other = - static_cast(rhs); - return m_iter == other->m_iter; -} - -YamlPropertiesNodeConstIteratorImpl::YamlPropertiesNodeConstIteratorImpl( - const YAML::const_iterator &iter) - : m_iter(iter) -{} - -YamlPropertiesNodeConstIteratorImpl::~YamlPropertiesNodeConstIteratorImpl() {} - -void YamlPropertiesNodeConstIteratorImpl::Next() -{ - m_iter++; -} - -std::string YamlPropertiesNodeConstIteratorImpl::Name() const -{ - std::pair> result; - std::pair kv = *m_iter; - std::string name = kv.first.as(); - - OTEL_INTERNAL_LOG_DEBUG("YamlPropertiesNodeConstIteratorImpl::Name() = " << name); - - return name; -} - -std::unique_ptr YamlPropertiesNodeConstIteratorImpl::Value() const -{ - std::unique_ptr item; - std::pair kv = *m_iter; - item = std::unique_ptr(new YamlDocumentNode(kv.second)); - return item; -} - -bool YamlPropertiesNodeConstIteratorImpl::Equal(const PropertiesNodeConstIteratorImpl *rhs) const -{ - const YamlPropertiesNodeConstIteratorImpl *other = - static_cast(rhs); - return m_iter == other->m_iter; -} - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE From 559153c0ccda88c5133c04583ecec1c6343dee3d Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 30 May 2024 14:46:20 +0200 Subject: [PATCH 036/166] include-what-you-use to cover WITH_CONFIGURATION --- .github/workflows/iwyu.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/iwyu.yml b/.github/workflows/iwyu.yml index de60502794..fe2bb76135 100644 --- a/.github/workflows/iwyu.yml +++ b/.github/workflows/iwyu.yml @@ -37,6 +37,7 @@ jobs: mkdir build && cd build CC="clang" CXX="clang++" cmake \ -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="include-what-you-use;-w;-Xiwyu;--mapping_file=${TOPDIR}/.iwyu.imp;" \ + -DWITH_CONFIGURATION=ON \ -DBUILD_TESTING=OFF \ -DBUILD_W3CTRACECONTEXT_TEST=OFF \ .. From c199ff9b0f007324cee50c2265ba0c6b84565327 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 30 May 2024 14:51:26 +0200 Subject: [PATCH 037/166] Add rapidyaml in iwyu --- .github/workflows/iwyu.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/iwyu.yml b/.github/workflows/iwyu.yml index fe2bb76135..f22ca6cff9 100644 --- a/.github/workflows/iwyu.yml +++ b/.github/workflows/iwyu.yml @@ -30,6 +30,7 @@ jobs: libgmock-dev \ libgtest-dev \ libbenchmark-dev + sudo ./ci/install_ryml.sh - name: Prepare CMake run: | From f86e9a7bc0de7ef5cc157c90d536bc7e59f87d66 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 1 Jun 2024 14:13:05 +0200 Subject: [PATCH 038/166] Log signal --- ...batch_log_record_processor_configuration.h | 37 ++++ ...onsole_log_record_exporter_configuration.h | 30 +++ ...ension_log_record_exporter_configuration.h | 34 +++ ...nsion_log_record_processor_configuration.h | 34 +++ .../log_record_exporter_configuration.h | 26 +++ ...og_record_exporter_configuration_visitor.h | 31 +++ .../log_record_limits_configuration.h | 23 ++ .../log_record_processor_configuration.h | 26 +++ ...g_record_processor_configuration_visitor.h | 31 +++ .../logger_provider_configuration.h | 7 + .../otlp_log_record_exporter_configuration.h | 41 ++++ ...imple_log_record_processor_configuration.h | 32 +++ .../opentelemetry/sdk/init/configured_sdk.h | 2 + .../opentelemetry/sdk/init/sdk_builder.h | 5 + .../configuration/configuration_factory.cc | 207 +++++++++++++++++- sdk/src/init/sdk_builder.cc | 16 ++ 16 files changed, 579 insertions(+), 3 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h new file mode 100644 index 0000000000..b75dbd7601 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class BatchLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration +{ +public: + BatchLogRecordProcessorConfiguration() = default; + ~BatchLogRecordProcessorConfiguration() override = default; + + void Accept(LogRecordProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitBatch(this); + } + + size_t schedule_delay; + size_t export_timeout; + size_t max_queue_size; + size_t max_export_batch_size; + std::unique_ptr exporter; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h new file mode 100644 index 0000000000..28db3d64a5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ConsoleLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + ConsoleLogRecordExporterConfiguration() = default; + ~ConsoleLogRecordExporterConfiguration() override = default; + + void Accept(LogRecordExporterConfigurationVisitor *visitor) const override + { + visitor->VisitConsole(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h new file mode 100644 index 0000000000..b114a5a20a --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + ExtensionLogRecordExporterConfiguration() = default; + ~ExtensionLogRecordExporterConfiguration() override = default; + + void Accept(LogRecordExporterConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h new file mode 100644 index 0000000000..23d6558a19 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration +{ +public: + ExtensionLogRecordProcessorConfiguration() = default; + ~ExtensionLogRecordProcessorConfiguration() override = default; + + void Accept(LogRecordProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h new file mode 100644 index 0000000000..e413e83dbf --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class LogRecordExporterConfigurationVisitor; + +class LogRecordExporterConfiguration +{ +public: + LogRecordExporterConfiguration() = default; + virtual ~LogRecordExporterConfiguration() = default; + + virtual void Accept(LogRecordExporterConfigurationVisitor *visitor) const = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h new file mode 100644 index 0000000000..c36f8c43c9 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpLogRecordExporterConfiguration; +class ConsoleLogRecordExporterConfiguration; +class ExtensionLogRecordExporterConfiguration; + +class LogRecordExporterConfigurationVisitor +{ +public: + LogRecordExporterConfigurationVisitor() = default; + virtual ~LogRecordExporterConfigurationVisitor() = default; + + virtual void VisitOtlp(const OtlpLogRecordExporterConfiguration *model) = 0; + virtual void VisitConsole(const ConsoleLogRecordExporterConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionLogRecordExporterConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h new file mode 100644 index 0000000000..881bd1564d --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h @@ -0,0 +1,23 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class LogRecordLimitsConfiguration +{ +public: + size_t attribute_value_length_limit; + size_t attribute_count_limit; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h new file mode 100644 index 0000000000..b31622bd44 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class LogRecordProcessorConfigurationVisitor; + +class LogRecordProcessorConfiguration +{ +public: + LogRecordProcessorConfiguration() = default; + virtual ~LogRecordProcessorConfiguration() = default; + + virtual void Accept(LogRecordProcessorConfigurationVisitor *visitor) const = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h new file mode 100644 index 0000000000..263407b171 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class BatchLogRecordProcessorConfiguration; +class SimpleLogRecordProcessorConfiguration; +class ExtensionLogRecordProcessorConfiguration; + +class LogRecordProcessorConfigurationVisitor +{ +public: + LogRecordProcessorConfigurationVisitor() = default; + virtual ~LogRecordProcessorConfigurationVisitor() = default; + + virtual void VisitBatch(const BatchLogRecordProcessorConfiguration *model) = 0; + virtual void VisitSimple(const SimpleLogRecordProcessorConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionLogRecordProcessorConfiguration *model) = 0; +}; + +} // 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 bd5bf4e8b2..f316b36f9f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -3,6 +3,11 @@ #pragma once +#include +#include + +#include "opentelemetry/sdk/configuration/log_record_limits_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -14,6 +19,8 @@ namespace configuration class LoggerProviderConfiguration { public: + std::vector> processors; + std::unique_ptr limits; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h new file mode 100644 index 0000000000..94a9721572 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h @@ -0,0 +1,41 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + OtlpLogRecordExporterConfiguration() = default; + ~OtlpLogRecordExporterConfiguration() override = default; + + void Accept(LogRecordExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlp(this); + } + + std::string protocol; + std::string endpoint; + std::string certificate; + std::string client_key; + std::string client_certificate; + std::unique_ptr headers; + std::string compression; + size_t timeout; + bool insecure; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h new file mode 100644 index 0000000000..2eedb2b9ca --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SimpleLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration +{ +public: + SimpleLogRecordProcessorConfiguration() = default; + ~SimpleLogRecordProcessorConfiguration() override = default; + + void Accept(LogRecordProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitSimple(this); + } + + std::unique_ptr exporter; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h index 1f48027f42..bc18f1e1de 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -7,6 +7,7 @@ #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/metrics/meter_provider.h" +#include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" @@ -30,6 +31,7 @@ class ConfiguredSdk std::shared_ptr m_tracer_provider; std::shared_ptr m_propagator; std::shared_ptr m_meter_provider; + std::shared_ptr m_logger_provider; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 7da1cc7997..de70ab9e46 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -16,6 +16,7 @@ #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/metrics/meter_provider.h" +#include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/sampler.h" @@ -109,6 +110,10 @@ class SdkBuilder const std::unique_ptr &model) const; + std::unique_ptr CreateLoggerProvider( + const std::unique_ptr &model) + const; + std::unique_ptr CreateConfiguredSdk( const std::unique_ptr &model) const; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 7b8d4cbccc..e6710e3a84 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -4,15 +4,16 @@ #include #include "opentelemetry/sdk/common/global_log_handler.h" - #include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/default_aggregation_configuration.h" @@ -20,6 +21,8 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/drop_aggregation_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" #include "opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" @@ -27,8 +30,12 @@ #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/last_value_aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" @@ -37,6 +44,7 @@ #include "opentelemetry/sdk/configuration/propagator_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/sum_aggregation_configuration.h" @@ -82,12 +90,205 @@ static std::unique_ptr ParseAttributeLimitConfigura return model; } +static std::unique_ptr ParseOtlpLogRecordExporterConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new OtlpLogRecordExporterConfiguration); + std::unique_ptr child; + + model->protocol = node->GetRequiredString("protocol"); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate = node->GetString("certificate", ""); + model->client_key = node->GetString("client_key", ""); + model->client_certificate = node->GetString("client_certificate", ""); + + child = node->GetChildNode("headers"); + if (child) + { + model->headers = ParseHeadersConfiguration(child); + } + + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->insecure = node->GetBoolean("insecure", false); + + return model; +} + +static std::unique_ptr +ParseConsoleLogRecordExporterConfiguration(const std::unique_ptr & /* node */) +{ + std::unique_ptr model( + new ConsoleLogRecordExporterConfiguration); + + return model; +} + +static std::unique_ptr +ParseExtensionLogRecordExporterConfiguration(const std::string &name, + std::unique_ptr node) +{ + auto extension = new ExtensionLogRecordExporterConfiguration; + extension->name = name; + extension->node = std::move(node); + std::unique_ptr model(extension); + return model; +} + +static std::unique_ptr ParseLogRecordExporterConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model; + + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParseLogRecordExporterConfiguration: count " << count); + throw InvalidSchemaException("Illegal span exporter"); + } + + if (name == "otlp") + { + model = ParseOtlpLogRecordExporterConfiguration(child); + } + else if (name == "console") + { + model = ParseConsoleLogRecordExporterConfiguration(child); + } + else + { + model = ParseExtensionLogRecordExporterConfiguration(name, std::move(child)); + } + + return model; +} + +static std::unique_ptr +ParseBatchLogRecordProcessorConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new BatchLogRecordProcessorConfiguration); + std::unique_ptr child; + + model->schedule_delay = node->GetInteger("schedule_delay", 5000); + model->export_timeout = node->GetInteger("export_timeout", 30000); + model->max_queue_size = node->GetInteger("max_queue_size", 2048); + model->max_export_batch_size = node->GetInteger("max_export_batch_size", 512); + + child = node->GetRequiredChildNode("exporter"); + model->exporter = ParseLogRecordExporterConfiguration(child); + + return model; +} + +static std::unique_ptr +ParseSimpleLogRecordProcessorConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new SimpleLogRecordProcessorConfiguration); + std::unique_ptr child; + + child = node->GetRequiredChildNode("exporter"); + model->exporter = ParseLogRecordExporterConfiguration(child); + + return model; +} + +static std::unique_ptr +ParseExtensionLogRecordProcessorConfiguration(const std::string &name, + std::unique_ptr node) +{ + auto extension = new ExtensionLogRecordProcessorConfiguration; + extension->name = name; + extension->node = std::move(node); + std::unique_ptr model(extension); + return model; +} + +static std::unique_ptr ParseLogRecordProcessorConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model; + + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParseLogRecordProcessorConfiguration: count " << count); + throw InvalidSchemaException("Illegal log record processor"); + } + + if (name == "batch") + { + model = ParseBatchLogRecordProcessorConfiguration(child); + } + else if (name == "simple") + { + model = ParseSimpleLogRecordProcessorConfiguration(child); + } + else + { + model = ParseExtensionLogRecordProcessorConfiguration(name, std::move(child)); + } + + return model; +} + +static std::unique_ptr ParseLogRecordLimitsConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new LogRecordLimitsConfiguration); + + model->attribute_value_length_limit = node->GetInteger("attribute_value_length_limit", 4096); + model->attribute_count_limit = node->GetInteger("attribute_count_limit", 128); + + return model; +} + static std::unique_ptr ParseLoggerProviderConfiguration( - const std::unique_ptr & /* node */) + const std::unique_ptr &node) { std::unique_ptr model(new LoggerProviderConfiguration); + std::unique_ptr child; + + child = node->GetRequiredChildNode("processors"); - OTEL_INTERNAL_LOG_ERROR("ParseLoggerProviderConfiguration: FIXME"); + for (auto it = child->begin(); it != child->end(); ++it) + { + model->processors.push_back(ParseLogRecordProcessorConfiguration(*it)); + } + + size_t count = model->processors.size(); + if (count == 0) + { + OTEL_INTERNAL_LOG_ERROR("ParseLoggerProviderConfiguration: 0 processors "); + throw InvalidSchemaException("Illegal processors"); + } + + child = node->GetChildNode("limits"); + if (child) + { + model->limits = ParseLogRecordLimitsConfiguration(child); + } return model; } diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 19cd991f5a..1a7542548d 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -637,6 +637,17 @@ std::unique_ptr SdkBuilder::CreateMe return sdk; } +std::unique_ptr SdkBuilder::CreateLoggerProvider( + const std::unique_ptr &model) + const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateLoggerProvider() FIXME"); + + return sdk; +} + std::unique_ptr SdkBuilder::CreateConfiguredSdk( const std::unique_ptr &model) const { @@ -658,6 +669,11 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( { sdk->m_meter_provider = CreateMeterProvider(model->meter_provider); } + + if (model->logger_provider) + { + sdk->m_logger_provider = CreateLoggerProvider(model->logger_provider); + } } return sdk; From 932e26e64b0d24c8bb7b4cb77ccdb62805c9f3eb Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 7 Jun 2024 20:06:33 +0200 Subject: [PATCH 039/166] WIP --- .../opentelemetry/sdk/init/configured_sdk.h | 5 +- .../opentelemetry/sdk/init/sdk_builder.h | 22 +++- sdk/src/init/sdk_builder.cc | 100 +++++++++++++++++- 3 files changed, 117 insertions(+), 10 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h index bc18f1e1de..485294dd6b 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -6,8 +6,8 @@ #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/init/registry.h" -#include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/logs/logger_provider.h" +#include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" @@ -31,7 +31,8 @@ class ConfiguredSdk std::shared_ptr m_tracer_provider; std::shared_ptr m_propagator; std::shared_ptr m_meter_provider; - std::shared_ptr m_logger_provider; + // FIXME: should be sdk::logs::LoggerProvider + std::shared_ptr m_logger_provider; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index de70ab9e46..cac35083a1 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" @@ -15,12 +16,13 @@ #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/registry.h" -#include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/logs/logger_provider.h" +#include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/sampler.h" #include "opentelemetry/trace/tracer_provider.h" + #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -81,7 +83,7 @@ class SdkBuilder std::unique_ptr CreateExtensionSpanProcessor( const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) const; - std::unique_ptr CreateProcessor( + std::unique_ptr CreateSpanProcessor( const std::unique_ptr &model) const; @@ -110,7 +112,21 @@ class SdkBuilder const std::unique_ptr &model) const; - std::unique_ptr CreateLoggerProvider( + std::unique_ptr CreateBatchLogRecordProcessor( + const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) const; + + std::unique_ptr CreateSimpleLogRecordProcessor( + const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration *model) const; + + std::unique_ptr CreateExtensionLogRecordProcessor( + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) + const; + + std::unique_ptr CreateLogRecordProcessor( + const std::unique_ptr + &model) const; + + std::unique_ptr CreateLoggerProvider( const std::unique_ptr &model) const; diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 1a7542548d..21a492b085 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -16,6 +16,8 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" @@ -38,6 +40,8 @@ #include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/sdk/init/unsupported_exception.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" +#include "opentelemetry/sdk/logs/logger_provider_factory.h" +#include "opentelemetry/sdk/logs/processor.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -204,6 +208,38 @@ class SpanExporterBuilder const SdkBuilder *m_sdk_builder; }; +class LogRecordProcessorBuilder + : public opentelemetry::sdk::configuration::LogRecordProcessorConfigurationVisitor +{ +public: + LogRecordProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + virtual ~LogRecordProcessorBuilder() = default; + + void VisitBatch( + const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) override + { + processor = m_sdk_builder->CreateBatchLogRecordProcessor(model); + } + + void VisitSimple(const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration + *model) override + { + processor = m_sdk_builder->CreateSimpleLogRecordProcessor(model); + } + + void VisitExtension( + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) + override + { + processor = m_sdk_builder->CreateExtensionLogRecordProcessor(model); + } + + std::unique_ptr processor; + +private: + const SdkBuilder *m_sdk_builder; +}; + std::unique_ptr SdkBuilder::CreateAlwaysOffSampler( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration * /* model */) const { @@ -445,7 +481,7 @@ std::unique_ptr SdkBuilder::CreateExte return sdk; } -std::unique_ptr SdkBuilder::CreateProcessor( +std::unique_ptr SdkBuilder::CreateSpanProcessor( const std::unique_ptr &model) const { @@ -478,7 +514,7 @@ std::unique_ptr SdkBuilder::CreateTracerPr for (const auto &processor_model : model->processors) { - sdk_processors.push_back(CreateProcessor(processor_model)); + sdk_processors.push_back(CreateSpanProcessor(processor_model)); } // FIXME: use sampler, limits, id_generator, ... @@ -637,13 +673,67 @@ std::unique_ptr SdkBuilder::CreateMe return sdk; } -std::unique_ptr SdkBuilder::CreateLoggerProvider( +std::unique_ptr +SdkBuilder::CreateBatchLogRecordProcessor( + const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateBatchLogRecordProcessor() FIXME"); + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateSimpleLogRecordProcessor( + const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration *model) const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateSimpleLogRecordProcessor() FIXME"); + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateExtensionLogRecordProcessor( + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("CreateExtensionLogRecordProcessor() FIXME"); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateLogRecordProcessor( + const std::unique_ptr + &model) const +{ + std::unique_ptr sdk; + + LogRecordProcessorBuilder builder(this); + model->Accept(&builder); + sdk = std::move(builder.processor); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateLoggerProvider( const std::unique_ptr &model) const { - std::unique_ptr sdk; + std::unique_ptr sdk; + + std::vector> sdk_processors; + + for (const auto &processor_model : model->processors) + { + sdk_processors.push_back(CreateLogRecordProcessor(processor_model)); + } - OTEL_INTERNAL_LOG_ERROR("CreateLoggerProvider() FIXME"); + // FIXME: use limits + sdk = opentelemetry::sdk::logs::LoggerProviderFactory::Create(std::move(sdk_processors)); return sdk; } From cc95c0041ac72787b468504c30a23357f61e6bd8 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 13 Jun 2024 00:21:39 +0200 Subject: [PATCH 040/166] Adjust after merge from main --- .github/workflows/ci.yml | 11 ++++++----- ci/do_ci.sh | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 19e1990572..e28ce995db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -128,18 +128,19 @@ jobs: (cd ./functional/otlp; ./run_test.sh) cmake_clang_yaml_config: - name: CMake clang 15 (maintainer mode, yaml, sync) - runs-on: ubuntu-latest + name: CMake clang 18 (maintainer mode, yaml config) + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 with: submodules: 'recursive' - name: setup env: - CC: /usr/bin/clang-15 - CXX: /usr/bin/clang++-15 + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 PROTOBUF_VERSION: 21.12 run: | + sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 sudo -E ./ci/setup_googletest.sh sudo -E ./ci/setup_ci_environment.sh sudo -E ./ci/install_protobuf.sh @@ -149,7 +150,7 @@ jobs: CC: /usr/bin/clang-15 CXX: /usr/bin/clang++-15 run: | - ./ci/do_ci.sh cmake.maintainer.sync.test + ./ci/do_ci.sh cmake.maintainer.yaml.test - name: generate test cert env: CFSSL_VERSION: 1.6.3 diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 7855ed4175..c9404947e6 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -208,6 +208,30 @@ elif [[ "$1" == "cmake.maintainer.abiv2.test" ]]; then eval "$MAKE_COMMAND" make test exit 0 +elif [[ "$1" == "cmake.maintainer.yaml.test" ]]; then + cd "${BUILD_DIR}" + rm -rf * + cmake "${CMAKE_OPTIONS[@]}" \ + -DWITH_OTLP_HTTP=ON \ + -DWITH_OTLP_FILE=ON \ + -DWITH_PROMETHEUS=ON \ + -DWITH_EXAMPLES=ON \ + -DWITH_EXAMPLES_HTTP=ON \ + -DWITH_ZIPKIN=ON \ + -DBUILD_W3CTRACECONTEXT_TEST=ON \ + -DWITH_ELASTICSEARCH=ON \ + -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \ + -DWITH_ASYNC_EXPORT_PREVIEW=OFF \ + -DOTELCPP_MAINTAINER_MODE=ON \ + -DWITH_NO_DEPRECATED_CODE=ON \ + -DWITH_DEPRECATED_SDK_FACTORY=OFF \ + -DWITH_OTLP_HTTP_COMPRESSION=ON \ + -DWITH_CONFIGURATION=ON \ + ${IWYU} \ + "${SRC_DIR}" + eval "$MAKE_COMMAND" + make test + exit 0 elif [[ "$1" == "cmake.with_async_export.test" ]]; then cd "${BUILD_DIR}" rm -rf * From 8c4330bda601f8803cec09972f51328d8f1ab6d3 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 13 Jun 2024 00:25:59 +0200 Subject: [PATCH 041/166] Use clang 18 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e28ce995db..538455eef5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -147,8 +147,8 @@ jobs: sudo -E ./ci/install_ryml.sh - name: run cmake clang (maintainer mode, sync) env: - CC: /usr/bin/clang-15 - CXX: /usr/bin/clang++-15 + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 run: | ./ci/do_ci.sh cmake.maintainer.yaml.test - name: generate test cert From 84dda0e9c44fa3db0c8dbd1738cc76e069f5700c Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 25 Jun 2024 23:48:57 +0200 Subject: [PATCH 042/166] build cleanup --- sdk/src/configuration/configuration_factory.cc | 8 ++++---- sdk/src/configuration/document_node.cc | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index e6710e3a84..87adbf49f4 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -537,7 +537,7 @@ static std::unique_ptr ParseSelectorConfiguration( } static std::unique_ptr ParseDefaultAggregationConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new DefaultAggregationConfiguration); @@ -545,7 +545,7 @@ static std::unique_ptr ParseDefaultAggregationC } static std::unique_ptr ParseDropAggregationConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new DropAggregationConfiguration); @@ -593,7 +593,7 @@ ParseBase2ExponentialBucketHistogramAggregationConfiguration( } static std::unique_ptr ParseLastValueAggregationConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new LastValueAggregationConfiguration); @@ -601,7 +601,7 @@ static std::unique_ptr ParseLastValueAggregat } static std::unique_ptr ParseSumAggregationConfiguration( - const std::unique_ptr &node) + const std::unique_ptr & /* node */) { std::unique_ptr model(new SumAggregationConfiguration); diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index fec688dfc5..53e84991bd 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -53,7 +53,7 @@ void DocumentNode::DoSubstitution(std::string &value) return; } - for (int i = 3; i <= len - 2; i++) + for (size_t i = 3; i + 2 <= len; i++) { c = value[i]; if (!std::isalnum(c) && c != '_') From 9d3c36a01342e0aac9022f6da2f1bb63cb4ce0f6 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 26 Jun 2024 21:34:44 +0200 Subject: [PATCH 043/166] cleanup --- sdk/src/configuration/ryml_document_node.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 11ee4cc3e0..861b20c399 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" @@ -17,7 +19,7 @@ namespace configuration static void DebugNode(std::string_view name, ryml::ConstNodeRef node) { OTEL_INTERNAL_LOG_DEBUG("Processing: " << name); - OTEL_INTERNAL_LOG_DEBUG(" - valid() : " << node.valid()); + OTEL_INTERNAL_LOG_DEBUG(" - readable() : " << node.readable()); OTEL_INTERNAL_LOG_DEBUG(" - empty() : " << node.empty()); OTEL_INTERNAL_LOG_DEBUG(" - is_container() : " << node.is_container()); OTEL_INTERNAL_LOG_DEBUG(" - is_map() : " << node.is_map()); @@ -202,7 +204,7 @@ bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) auto ryml_child = GetRymlChildNode(name); - if (!ryml_child.valid()) + if (ryml_child.invalid()) { return default_value; } @@ -240,7 +242,7 @@ size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_valu auto ryml_child = GetRymlChildNode(name); - if (!ryml_child.valid()) + if (ryml_child.invalid()) { return default_value; } @@ -278,7 +280,7 @@ double RymlDocumentNode::GetDouble(const std::string &name, double default_value auto ryml_child = GetRymlChildNode(name); - if (!ryml_child.valid()) + if (ryml_child.invalid()) { return default_value; } @@ -321,7 +323,7 @@ std::string RymlDocumentNode::GetString(const std::string &name, const std::stri ryml::ConstNodeRef ryml_child = GetRymlChildNode(name); - if (!ryml_child.valid()) + if (ryml_child.invalid()) { return default_value; } @@ -416,7 +418,7 @@ std::unique_ptr RymlDocumentNodeConstIteratorImpl::Item() const { std::unique_ptr item; ryml::ConstNodeRef ryml_item = m_parent[m_index]; - if (!ryml_item.valid()) + if (ryml_item.invalid()) { OTEL_INTERNAL_LOG_ERROR("iterator is lost "); // Throw From fc243576567f4bb0572b57f51b7eee0ee2620a2e Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 27 Jun 2024 02:15:05 +0200 Subject: [PATCH 044/166] cleanup --- sdk/src/configuration/ryml_document_node.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 861b20c399..b931f17e89 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -1,13 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include +#include "opentelemetry/sdk/configuration/ryml_document_node.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/global_log_handler.h" - #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/ryml_document.h" -#include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,7 +15,7 @@ namespace sdk namespace configuration { -static void DebugNode(std::string_view name, ryml::ConstNodeRef node) +static void DebugNode(opentelemetry::nostd::string_view name, ryml::ConstNodeRef node) { OTEL_INTERNAL_LOG_DEBUG("Processing: " << name); OTEL_INTERNAL_LOG_DEBUG(" - readable() : " << node.readable()); From 179444c0981b60906e11d9d096692bb0afaede58 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 27 Jun 2024 02:28:48 +0200 Subject: [PATCH 045/166] build cleanup --- sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index cb70480b87..d2caceb298 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include "opentelemetry/sdk/configuration/document_node.h" From 2a5fc7b61e21b8e5f5a0e54ec8c154e51f8ea1f8 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 27 Jun 2024 02:41:52 +0200 Subject: [PATCH 046/166] build cleanup --- sdk/src/configuration/ryml_document_node.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index b931f17e89..fff204ffe4 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -15,6 +15,7 @@ namespace sdk namespace configuration { +#if 0 static void DebugNode(opentelemetry::nostd::string_view name, ryml::ConstNodeRef node) { OTEL_INTERNAL_LOG_DEBUG("Processing: " << name); @@ -37,6 +38,7 @@ static void DebugNode(opentelemetry::nostd::string_view name, ryml::ConstNodeRef OTEL_INTERNAL_LOG_DEBUG(" - val() : " << node.val()); } } +#endif std::string RymlDocumentNode::Key() const { From fcaea7f8c1eb160170c23ead15ec31ba626db380 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 27 Jun 2024 03:33:02 +0200 Subject: [PATCH 047/166] warning cleanup --- examples/yaml/custom_sampler.cc | 10 +++---- examples/yaml/custom_sampler.h | 2 +- examples/yaml/custom_span_exporter.cc | 6 ++-- examples/yaml/custom_span_exporter.h | 2 +- examples/yaml/custom_span_processor.cc | 11 ++++---- .../otlp/test/otlp_grpc_exporter_test.cc | 2 +- .../otlp_grpc_log_record_exporter_test.cc | 4 +-- .../opentelemetry/sdk/init/configured_sdk.h | 8 ++---- .../opentelemetry/sdk/init/sdk_builder.h | 4 +-- sdk/src/init/configured_sdk.cc | 3 +- sdk/src/init/sdk_builder.cc | 28 ++++++++++--------- .../sync_metric_storage_counter_test.cc | 2 +- 12 files changed, 42 insertions(+), 40 deletions(-) diff --git a/examples/yaml/custom_sampler.cc b/examples/yaml/custom_sampler.cc index 47aba45c95..a1954a230b 100644 --- a/examples/yaml/custom_sampler.cc +++ b/examples/yaml/custom_sampler.cc @@ -11,11 +11,11 @@ opentelemetry::sdk::trace::SamplingResult CustomSampler::ShouldSample( const opentelemetry::trace::SpanContext &parent_context, - opentelemetry::trace::TraceId trace_id, - opentelemetry::nostd::string_view name, - opentelemetry::trace::SpanKind span_kind, - const opentelemetry::common::KeyValueIterable &attributes, - const opentelemetry::trace::SpanContextKeyValueIterable &links) noexcept + opentelemetry::trace::TraceId /* trace_id */, + opentelemetry::nostd::string_view /* name */, + opentelemetry::trace::SpanKind /* span_kind */, + const opentelemetry::common::KeyValueIterable & /* attributes */, + const opentelemetry::trace::SpanContextKeyValueIterable & /* links */) noexcept { if (!parent_context.IsValid()) { diff --git a/examples/yaml/custom_sampler.h b/examples/yaml/custom_sampler.h index 552cecba1a..03445ed3d4 100644 --- a/examples/yaml/custom_sampler.h +++ b/examples/yaml/custom_sampler.h @@ -9,7 +9,7 @@ class CustomSampler : public opentelemetry::sdk::trace::Sampler { public: - CustomSampler(std::string comment) {} + CustomSampler(const std::string & /* comment */) {} ~CustomSampler() override = default; opentelemetry::sdk::trace::SamplingResult ShouldSample( diff --git a/examples/yaml/custom_span_exporter.cc b/examples/yaml/custom_span_exporter.cc index b02c912ddd..52a110660e 100644 --- a/examples/yaml/custom_span_exporter.cc +++ b/examples/yaml/custom_span_exporter.cc @@ -17,19 +17,19 @@ std::unique_ptr CustomSpanExporter::MakeR opentelemetry::sdk::common::ExportResult CustomSpanExporter::Export( const opentelemetry::nostd::span> - &spans) noexcept + & /* spans */) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Export(): FIXME"); return opentelemetry::sdk::common::ExportResult::kSuccess; } -bool CustomSpanExporter::ForceFlush(std::chrono::microseconds timeout) noexcept +bool CustomSpanExporter::ForceFlush(std::chrono::microseconds /* timeout */) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::ForceFlush(): FIXME"); return false; } -bool CustomSpanExporter::Shutdown(std::chrono::microseconds timeout) noexcept +bool CustomSpanExporter::Shutdown(std::chrono::microseconds /* timeout */) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Shutdown(): FIXME"); return false; diff --git a/examples/yaml/custom_span_exporter.h b/examples/yaml/custom_span_exporter.h index a0875f36fb..bb5d91d73b 100644 --- a/examples/yaml/custom_span_exporter.h +++ b/examples/yaml/custom_span_exporter.h @@ -9,7 +9,7 @@ class CustomSpanExporter : public opentelemetry::sdk::trace::SpanExporter { public: - CustomSpanExporter(std::string comment) {} + CustomSpanExporter(const std::string & /* comment */) {} ~CustomSpanExporter() override = default; std::unique_ptr MakeRecordable() noexcept override; diff --git a/examples/yaml/custom_span_processor.cc b/examples/yaml/custom_span_processor.cc index 893ca25735..1dea908585 100644 --- a/examples/yaml/custom_span_processor.cc +++ b/examples/yaml/custom_span_processor.cc @@ -15,25 +15,26 @@ CustomSpanProcessor::MakeRecordable() noexcept new opentelemetry::sdk::trace::SpanData); } -void CustomSpanProcessor::OnStart(opentelemetry::sdk::trace::Recordable &span, - const opentelemetry::trace::SpanContext &parent_context) noexcept +void CustomSpanProcessor::OnStart( + opentelemetry::sdk::trace::Recordable & /* span */, + const opentelemetry::trace::SpanContext & /* parent_context */) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnStart(): FIXME"); } void CustomSpanProcessor::OnEnd( - std::unique_ptr &&span) noexcept + std::unique_ptr && /* span */) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnEnd(): FIXME"); } -bool CustomSpanProcessor::ForceFlush(std::chrono::microseconds timeout) noexcept +bool CustomSpanProcessor::ForceFlush(std::chrono::microseconds /* timeout */) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::ForceFlush(): FIXME"); return false; } -bool CustomSpanProcessor::Shutdown(std::chrono::microseconds timeout) noexcept +bool CustomSpanProcessor::Shutdown(std::chrono::microseconds /* timeout */) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::Shutdown(): FIXME"); return false; diff --git a/exporters/otlp/test/otlp_grpc_exporter_test.cc b/exporters/otlp/test/otlp_grpc_exporter_test.cc index b8c651a8fe..6652f0fb9b 100644 --- a/exporters/otlp/test/otlp_grpc_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_exporter_test.cc @@ -103,7 +103,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe OtlpMockTraceServiceStub *stub_; }; - async_interface_base *async() { return &async_interface_; } + async_interface_base *async() override { return &async_interface_; } async_interface_base *experimental_async() { return &async_interface_; } ::grpc::Status GetLastAsyncStatus() const noexcept { return last_async_status_; } diff --git a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc index 4c7a9fd7f1..380a5eeba3 100644 --- a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc @@ -97,7 +97,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe OtlpMockTraceServiceStub *stub_; }; - async_interface_base *async() { return &async_interface_; } + async_interface_base *async() override { return &async_interface_; } async_interface_base *experimental_async() { return &async_interface_; } ::grpc::Status GetLastAsyncStatus() const noexcept { return last_async_status_; } @@ -160,7 +160,7 @@ class OtlpMockLogsServiceStub : public proto::collector::logs::v1::MockLogsServi OtlpMockLogsServiceStub *stub_; }; - async_interface_base *async() { return &async_interface_; } + async_interface_base *async() override { return &async_interface_; } async_interface_base *experimental_async() { return &async_interface_; } ::grpc::Status GetLastAsyncStatus() const noexcept { return last_async_status_; } diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h index 485294dd6b..8c8bc5cf50 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -8,7 +8,7 @@ #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/metrics/meter_provider.h" -#include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -27,12 +27,10 @@ class ConfiguredSdk void Install(); void UnInstall(); - // FIXME: should be sdk::trace::TracerProvider - std::shared_ptr m_tracer_provider; + std::shared_ptr m_tracer_provider; std::shared_ptr m_propagator; std::shared_ptr m_meter_provider; - // FIXME: should be sdk::logs::LoggerProvider - std::shared_ptr m_logger_provider; + std::shared_ptr m_logger_provider; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index cac35083a1..096b0d6101 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -87,7 +87,7 @@ class SdkBuilder const std::unique_ptr &model) const; - std::unique_ptr CreateTracerProvider( + std::unique_ptr CreateTracerProvider( const std::unique_ptr &model) const; @@ -126,7 +126,7 @@ class SdkBuilder const std::unique_ptr &model) const; - std::unique_ptr CreateLoggerProvider( + std::unique_ptr CreateLoggerProvider( const std::unique_ptr &model) const; diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index 54d7ff910e..7b5e9dd01c 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -42,7 +42,8 @@ void ConfiguredSdk::Install() { if (m_tracer_provider) { - opentelemetry::trace::Provider::SetTracerProvider(m_tracer_provider); + std::shared_ptr api_tracer_provider = m_tracer_provider; + opentelemetry::trace::Provider::SetTracerProvider(api_tracer_provider); } } diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 21a492b085..78e2032351 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -58,7 +58,6 @@ #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/propagation/b3_propagator.h" #include "opentelemetry/trace/propagation/http_trace_context.h" -#include "opentelemetry/trace/propagation/jaeger.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -71,7 +70,7 @@ class PropagatorBuilder : public opentelemetry::sdk::configuration::PropagatorCo { public: PropagatorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - virtual ~PropagatorBuilder() = default; + ~PropagatorBuilder() override = default; void VisitSimple( const opentelemetry::sdk::configuration::SimplePropagatorConfiguration *model) override @@ -95,7 +94,7 @@ class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigur { public: SamplerBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - virtual ~SamplerBuilder() = default; + ~SamplerBuilder() override = default; void VisitAlwaysOff( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) override @@ -145,7 +144,7 @@ class SpanProcessorBuilder { public: SpanProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - virtual ~SpanProcessorBuilder() = default; + ~SpanProcessorBuilder() override = default; void VisitBatch( const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) override @@ -176,7 +175,7 @@ class SpanExporterBuilder { public: SpanExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - virtual ~SpanExporterBuilder() = default; + ~SpanExporterBuilder() override = default; void VisitOtlp( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) override @@ -213,7 +212,7 @@ class LogRecordProcessorBuilder { public: LogRecordProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - virtual ~LogRecordProcessorBuilder() = default; + ~LogRecordProcessorBuilder() override = default; void VisitBatch( const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) override @@ -494,11 +493,11 @@ std::unique_ptr SdkBuilder::CreateSpan return sdk; } -std::unique_ptr SdkBuilder::CreateTracerProvider( +std::unique_ptr SdkBuilder::CreateTracerProvider( const std::unique_ptr &model) const { - std::unique_ptr sdk; + std::unique_ptr sdk; // https://github.com/open-telemetry/opentelemetry-configuration/issues/70 OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME (IdGenerator)"); @@ -675,7 +674,8 @@ std::unique_ptr SdkBuilder::CreateMe std::unique_ptr SdkBuilder::CreateBatchLogRecordProcessor( - const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) const + const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration * /* model */) + const { std::unique_ptr sdk; @@ -686,7 +686,8 @@ SdkBuilder::CreateBatchLogRecordProcessor( std::unique_ptr SdkBuilder::CreateSimpleLogRecordProcessor( - const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration *model) const + const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration * /* model */) + const { std::unique_ptr sdk; @@ -697,7 +698,8 @@ SdkBuilder::CreateSimpleLogRecordProcessor( std::unique_ptr SdkBuilder::CreateExtensionLogRecordProcessor( - const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) const + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration * /* model */) + const { std::unique_ptr sdk; @@ -719,11 +721,11 @@ std::unique_ptr SdkBuilder::Create return sdk; } -std::unique_ptr SdkBuilder::CreateLoggerProvider( +std::unique_ptr SdkBuilder::CreateLoggerProvider( const std::unique_ptr &model) const { - std::unique_ptr sdk; + std::unique_ptr sdk; std::vector> sdk_processors; diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index 2593b69719..5d563aea41 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -8,7 +8,7 @@ #include "opentelemetry/context/context.h" #include "opentelemetry/nostd/shared_ptr.h" -#if ENABLE_METRICS_EXEMPLAR_PREVIEW +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW # include "opentelemetry/sdk/metrics/exemplar/filter_type.h" # include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif From d25ead0e3569e8988e7beeed869a906fc74dfd6d Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 27 Jun 2024 03:52:27 +0200 Subject: [PATCH 048/166] build cleanup, deprecated code --- sdk/src/init/registry.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index 1ad8aa897d..5cc8e024a6 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -9,9 +9,12 @@ #include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/trace/propagation/b3_propagator.h" #include "opentelemetry/trace/propagation/http_trace_context.h" -#include "opentelemetry/trace/propagation/jaeger.h" #include "opentelemetry/version.h" +#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE +# include "opentelemetry/trace/propagation/jaeger.h" +#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -70,6 +73,7 @@ class B3MultiBuilder : public TextMapPropagatorBuilder } }; +#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE class JaegerBuilder : public TextMapPropagatorBuilder { public: @@ -82,12 +86,16 @@ class JaegerBuilder : public TextMapPropagatorBuilder new opentelemetry::trace::propagation::JaegerPropagator()); } }; +#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ static TraceContextBuilder trace_context_builder; static BaggageBuilder baggage_builder; static B3Builder b3_builder; static B3MultiBuilder b3_multi_builder; + +#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE static JaegerBuilder jaeger_builder; +#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ Registry::Registry() { @@ -105,8 +113,10 @@ Registry::Registry() entry = {"b3multi", &b3_multi_builder}; m_propagator_builders.insert(entry); +#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE entry = {"jaeger", &jaeger_builder}; m_propagator_builders.insert(entry); +#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ } const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) From c8d39801ab8b0e2e5deabbcc50055c783033017f Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 27 Jun 2024 04:03:04 +0200 Subject: [PATCH 049/166] build warnings --- examples/yaml/custom_sampler_builder.cc | 2 +- examples/yaml/custom_span_exporter_builder.cc | 2 +- examples/yaml/custom_span_processor_builder.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc index 7f94e516cf..3f3a4875f6 100644 --- a/examples/yaml/custom_sampler_builder.cc +++ b/examples/yaml/custom_sampler_builder.cc @@ -25,4 +25,4 @@ static CustomSamplerBuilder singleton; void CustomSamplerBuilder::Register(opentelemetry::sdk::init::Registry *registry) { registry->AddExtensionSamplerBuilder("my_custom_sampler", &singleton); -}; +} diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc index 352ac64cef..a17c32ace6 100644 --- a/examples/yaml/custom_span_exporter_builder.cc +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -25,4 +25,4 @@ static CustomSpanExporterBuilder singleton; void CustomSpanExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) { registry->AddExtensionSpanExporterBuilder("my_custom_span_exporter", &singleton); -}; +} diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc index 7bb8fb7dee..ccb5229394 100644 --- a/examples/yaml/custom_span_processor_builder.cc +++ b/examples/yaml/custom_span_processor_builder.cc @@ -25,4 +25,4 @@ static CustomSpanProcessorBuilder singleton; void CustomSpanProcessorBuilder::Register(opentelemetry::sdk::init::Registry *registry) { registry->AddExtensionSpanProcessorBuilder("my_custom_span_processor", &singleton); -}; +} From ab95a6ba84e2fd810aa80c2b4e71884d22125b24 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 6 Jul 2024 21:44:12 +0200 Subject: [PATCH 050/166] include-what-you-use cleanup --- .iwyu.imp | 6 +++ CMakeLists.txt | 1 - examples/yaml/custom_sampler.cc | 9 +++-- examples/yaml/custom_sampler.h | 9 ++++- examples/yaml/custom_sampler_builder.cc | 6 +-- examples/yaml/custom_sampler_builder.h | 5 +++ examples/yaml/custom_span_exporter.cc | 2 - examples/yaml/custom_span_exporter.h | 8 +++- examples/yaml/custom_span_exporter_builder.cc | 4 +- examples/yaml/custom_span_exporter_builder.h | 5 +++ examples/yaml/custom_span_processor.h | 7 +++- .../yaml/custom_span_processor_builder.cc | 4 +- examples/yaml/custom_span_processor_builder.h | 5 +++ examples/yaml/main.cc | 11 +++--- exporters/ostream/src/console_builder.cc | 1 - exporters/otlp/src/otlp_builder.cc | 1 - exporters/zipkin/src/zipkin_builder.cc | 3 +- .../sdk/configuration/ryml_document_node.h | 2 + .../configuration/configuration_factory.cc | 24 ++++++++++-- sdk/src/configuration/document_node.cc | 5 ++- sdk/src/configuration/ryml_document.cc | 5 ++- sdk/src/configuration/ryml_document_node.cc | 5 +-- .../yaml_configuration_factory.cc | 8 +++- sdk/src/init/configured_sdk.cc | 4 +- sdk/src/init/registry.cc | 7 +++- sdk/src/init/sdk_builder.cc | 38 ++++++++++++++----- 26 files changed, 140 insertions(+), 45 deletions(-) diff --git a/.iwyu.imp b/.iwyu.imp index 53fddd24aa..76702a75b3 100644 --- a/.iwyu.imp +++ b/.iwyu.imp @@ -7,6 +7,12 @@ # Work around for C++ STL { "include": ["", "private", "", "public"] }, + # Work around for ryml + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + # Local opentelemetry-cpp ] diff --git a/CMakeLists.txt b/CMakeLists.txt index df644e4063..0c5972f179 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -509,7 +509,6 @@ endif() # if((NOT WITH_API_ONLY) AND WITH_CONFIGURATION) - # No specific version required. find_package(ryml 0.6.0 REQUIRED) message( STATUS diff --git a/examples/yaml/custom_sampler.cc b/examples/yaml/custom_sampler.cc index a1954a230b..9485a93650 100644 --- a/examples/yaml/custom_sampler.cc +++ b/examples/yaml/custom_sampler.cc @@ -1,11 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -#include "opentelemetry/sdk/init/configured_sdk.h" -#include "opentelemetry/sdk/init/registry.h" +#include +#include + +#include "opentelemetry/common/attribute_value.h" #include "opentelemetry/trace/span_context.h" +#include "opentelemetry/trace/trace_state.h" #include "custom_sampler.h" diff --git a/examples/yaml/custom_sampler.h b/examples/yaml/custom_sampler.h index 03445ed3d4..e2d3f8d087 100644 --- a/examples/yaml/custom_sampler.h +++ b/examples/yaml/custom_sampler.h @@ -3,8 +3,15 @@ #pragma once -#include "opentelemetry/sdk/init/extension_sampler_builder.h" +#include + +#include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/trace/span_context.h" +#include "opentelemetry/trace/span_context_kv_iterable.h" +#include "opentelemetry/trace/span_metadata.h" +#include "opentelemetry/trace/trace_id.h" class CustomSampler : public opentelemetry::sdk::trace::Sampler { diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc index 3f3a4875f6..e36be056db 100644 --- a/examples/yaml/custom_sampler_builder.cc +++ b/examples/yaml/custom_sampler_builder.cc @@ -1,9 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -#include "opentelemetry/sdk/init/configured_sdk.h" +#include + +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/init/registry.h" #include "custom_sampler.h" diff --git a/examples/yaml/custom_sampler_builder.h b/examples/yaml/custom_sampler_builder.h index 838f5864d1..e347a4cc48 100644 --- a/examples/yaml/custom_sampler_builder.h +++ b/examples/yaml/custom_sampler_builder.h @@ -3,7 +3,12 @@ #pragma once +#include + +#include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/init/extension_sampler_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/sampler.h" class CustomSamplerBuilder : public opentelemetry::sdk::init::ExtensionSamplerBuilder { diff --git a/examples/yaml/custom_span_exporter.cc b/examples/yaml/custom_span_exporter.cc index 52a110660e..70c2eb4aa7 100644 --- a/examples/yaml/custom_span_exporter.cc +++ b/examples/yaml/custom_span_exporter.cc @@ -2,10 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/recordable.h" #include "opentelemetry/sdk/trace/span_data.h" -#include "opentelemetry/trace/span_context.h" #include "custom_span_exporter.h" diff --git a/examples/yaml/custom_span_exporter.h b/examples/yaml/custom_span_exporter.h index bb5d91d73b..24797e0b01 100644 --- a/examples/yaml/custom_span_exporter.h +++ b/examples/yaml/custom_span_exporter.h @@ -3,8 +3,14 @@ #pragma once -#include "opentelemetry/sdk/init/extension_span_exporter_builder.h" +#include +#include +#include + +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/sdk/common/exporter_utils.h" #include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/recordable.h" class CustomSpanExporter : public opentelemetry::sdk::trace::SpanExporter { diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc index a17c32ace6..38e090a8d3 100644 --- a/examples/yaml/custom_span_exporter_builder.cc +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" +#include + +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" diff --git a/examples/yaml/custom_span_exporter_builder.h b/examples/yaml/custom_span_exporter_builder.h index 4525871dd7..c8246942cd 100644 --- a/examples/yaml/custom_span_exporter_builder.h +++ b/examples/yaml/custom_span_exporter_builder.h @@ -3,7 +3,12 @@ #pragma once +#include + +#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/init/extension_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" class CustomSpanExporterBuilder : public opentelemetry::sdk::init::ExtensionSpanExporterBuilder { diff --git a/examples/yaml/custom_span_processor.h b/examples/yaml/custom_span_processor.h index 12ae9f52fc..cd1f06f45a 100644 --- a/examples/yaml/custom_span_processor.h +++ b/examples/yaml/custom_span_processor.h @@ -3,8 +3,13 @@ #pragma once -#include "opentelemetry/sdk/init/extension_span_processor_builder.h" +#include +#include +#include + #include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/sdk/trace/recordable.h" +#include "opentelemetry/trace/span_context.h" class CustomSpanProcessor : public opentelemetry::sdk::trace::SpanProcessor { diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc index ccb5229394..9df169230f 100644 --- a/examples/yaml/custom_span_processor_builder.cc +++ b/examples/yaml/custom_span_processor_builder.cc @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" +#include + +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/processor.h" diff --git a/examples/yaml/custom_span_processor_builder.h b/examples/yaml/custom_span_processor_builder.h index 1e83fb49ce..8438531ab1 100644 --- a/examples/yaml/custom_span_processor_builder.h +++ b/examples/yaml/custom_span_processor_builder.h @@ -3,7 +3,12 @@ #pragma once +#include + +#include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/init/extension_span_processor_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/processor.h" class CustomSpanProcessorBuilder : public opentelemetry::sdk::init::ExtensionSpanProcessorBuilder { diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 3943db7b4a..f293dcfa45 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -1,6 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include +#include +#include +#include + +#include "opentelemetry/exporters/ostream/console_builder.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" #include "opentelemetry/sdk/init/configured_sdk.h" @@ -16,8 +22,6 @@ # include "foo_library/foo_library.h" #endif -#include "opentelemetry/exporters/ostream/console_builder.h" - #ifdef OTEL_HAVE_OTLP # include "opentelemetry/exporters/otlp/otlp_builder.h" #endif @@ -26,9 +30,6 @@ # include "opentelemetry/exporters/zipkin/zipkin_builder.h" #endif -#include -#include - static bool opt_help = false; static std::string yaml_file_path = ""; diff --git a/exporters/ostream/src/console_builder.cc b/exporters/ostream/src/console_builder.cc index 579325233e..949a0781ba 100644 --- a/exporters/ostream/src/console_builder.cc +++ b/exporters/ostream/src/console_builder.cc @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/ostream/console_builder.h" -#include "opentelemetry/exporters/ostream/span_exporter.h" #include "opentelemetry/exporters/ostream/span_exporter_factory.h" #include "opentelemetry/version.h" diff --git a/exporters/otlp/src/otlp_builder.cc b/exporters/otlp/src/otlp_builder.cc index 36766397ea..760ec323ea 100644 --- a/exporters/otlp/src/otlp_builder.cc +++ b/exporters/otlp/src/otlp_builder.cc @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/otlp/otlp_builder.h" -#include "opentelemetry/exporters/otlp/otlp_http_exporter.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/version.h" diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 79a3977373..7de95e17d5 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -1,8 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/exporters/zipkin/zipkin_builder.h" -#include "opentelemetry/exporters/zipkin/zipkin_exporter.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index d2caceb298..7328a3e1ee 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -3,6 +3,8 @@ #pragma once +#include +#include #include #include diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 87adbf49f4..6ab67a095e 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -1,12 +1,20 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include +#include +#include +#include +#include #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" +#include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" @@ -27,12 +35,15 @@ #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/last_value_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" -#include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/log_record_limits_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" +#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" @@ -42,13 +53,20 @@ #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" -#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/resource_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/selector_configuration.h" #include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/span_limits_configuration.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/stream_configuration.h" #include "opentelemetry/sdk/configuration/sum_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index 53e84991bd..ebcaaa7b70 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -1,8 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" +#include +#include +#include +#include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/version.h" diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index b9bcf82ea7..732bac6238 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -1,11 +1,14 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include +#include #include "opentelemetry/sdk/common/global_log_handler.h" - +#include "opentelemetry/sdk/configuration/document.h" +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/ryml_document.h" #include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/version.h" diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index fff204ffe4..9fd3b8c0af 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -1,12 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/configuration/ryml_document_node.h" +#include -#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" -#include "opentelemetry/sdk/configuration/ryml_document.h" +#include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index a1b21f9f56..c0b815fa4b 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -1,14 +1,18 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include +#include +#include #include "opentelemetry/sdk/common/global_log_handler.h" - #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/document.h" +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/ryml_document.h" -#include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" #include "opentelemetry/version.h" diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index 7b5e9dd01c..e71627a149 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -1,10 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" +#include +#include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" +#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" #include "opentelemetry/trace/provider.h" #include "opentelemetry/trace/tracer_provider.h" diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index 5cc8e024a6..92c0ad03fb 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -1,10 +1,13 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" +#include +#include +#include +#include #include "opentelemetry/baggage/propagation/baggage_propagator.h" -#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/trace/propagation/b3_propagator.h" diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 78e2032351..c41dc5311a 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -1,33 +1,47 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/common/global_log_handler.h" +#include +#include +#include +#include +#include -#include "opentelemetry/baggage/propagation/baggage_propagator.h" #include "opentelemetry/context/propagation/composite_propagator.h" +#include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/document.h" -#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" -#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" +#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/stream_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" +#include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" @@ -40,14 +54,21 @@ #include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/sdk/init/unsupported_exception.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" +#include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/logs/logger_provider_factory.h" #include "opentelemetry/sdk/logs/processor.h" -#include "opentelemetry/sdk/metrics/aggregation/aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" +#include "opentelemetry/sdk/metrics/instruments.h" +#include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" +#include "opentelemetry/sdk/metrics/view/instrument_selector.h" +#include "opentelemetry/sdk/metrics/view/meter_selector.h" +#include "opentelemetry/sdk/metrics/view/view.h" +#include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/metrics/view/view_registry_factory.h" #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/processor.h" #include "opentelemetry/sdk/trace/sampler.h" #include "opentelemetry/sdk/trace/samplers/always_off_factory.h" @@ -55,9 +76,8 @@ #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_provider.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" -#include "opentelemetry/trace/propagation/b3_propagator.h" -#include "opentelemetry/trace/propagation/http_trace_context.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE From dfcdc876a386a38a1df21f64f83fac683aff66af Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 6 Jul 2024 22:39:28 +0200 Subject: [PATCH 051/166] more iwyu cleanup --- .iwyu.imp | 3 +++ examples/yaml/main.cc | 2 +- exporters/zipkin/src/zipkin_builder.cc | 3 +++ sdk/src/configuration/document_node.cc | 7 +++++++ sdk/src/configuration/ryml_document_node.cc | 5 +++++ sdk/src/configuration/yaml_configuration_factory.cc | 2 +- sdk/src/init/sdk_builder.cc | 1 + 7 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.iwyu.imp b/.iwyu.imp index 76702a75b3..d99c033464 100644 --- a/.iwyu.imp +++ b/.iwyu.imp @@ -9,9 +9,12 @@ # Work around for ryml { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, # Local opentelemetry-cpp diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index f293dcfa45..2e5fdb4d46 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -105,7 +105,7 @@ void usage(FILE *out) "\n" "The configuration file used will be:\n" " 1) the file provided in the command line\n" - " 2) the file provided in environment variable ${OTEL_CONFIG_FILE}\n" + " 2) the file provided in environment variable ${OTEL_EXPERIMENTAL_CONFIG_FILE}\n" " 3) file config.yaml\n"; fprintf(out, "%s", msg); diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 7de95e17d5..0ccc719114 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -1,12 +1,15 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/zipkin/zipkin_builder.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index ebcaaa7b70..2e86f8b4bc 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -24,6 +24,13 @@ namespace configuration */ void DocumentNode::DoSubstitution(std::string &value) { + // FIXME: + // The following needs to be supported (spec changes) + // ${env:ENV_NAME} + // ${ENV_NAME:-fallback} + // some text with ${ENV_NAME} in it + // multiple ${env:HOST:-localhost}${env:PORT:-:4318} substitutions + size_t len = value.length(); char c; diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 9fd3b8c0af..72862573a5 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -1,9 +1,14 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include +#include #include +#include +#include #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/version.h" diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index c0b815fa4b..23f37f974f 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -28,7 +28,7 @@ std::unique_ptr YamlConfigurationFactory::ParseFile(const std::st if (input_file.empty()) { - const char *env_var = std::getenv("OTEL_CONFIG_FILE"); + const char *env_var = std::getenv("OTEL_EXPERIMENTAL_CONFIG_FILE"); if (env_var != nullptr) { input_file = env_var; diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index c41dc5311a..5b6f934e44 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include #include From 6007bd4ba68bfc5adcb978b7bcad267c6c4f19e5 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 7 Jul 2024 01:38:17 +0200 Subject: [PATCH 052/166] Continue log record implementation. --- examples/yaml/CMakeLists.txt | 7 +- examples/yaml/kitchen-sink.yaml | 6 + examples/yaml/main.cc | 12 +- exporters/ostream/CMakeLists.txt | 8 +- .../ostream/console_log_record_builder.h | 36 +++++ ...nsole_builder.h => console_span_builder.h} | 6 +- .../ostream/src/console_log_record_builder.cc | 30 ++++ ...ole_builder.cc => console_span_builder.cc} | 10 +- exporters/otlp/CMakeLists.txt | 7 +- .../exporters/otlp/otlp_log_record_builder.h | 36 +++++ .../{otlp_builder.h => otlp_span_builder.h} | 7 +- exporters/otlp/src/otlp_log_record_builder.cc | 32 ++++ .../{otlp_builder.cc => otlp_span_builder.cc} | 10 +- exporters/zipkin/src/zipkin_builder.cc | 2 +- .../console_log_record_exporter_builder.h | 29 ++++ .../extension_log_record_exporter_builder.h | 29 ++++ .../init/otlp_log_record_exporter_builder.h | 28 ++++ sdk/include/opentelemetry/sdk/init/registry.h | 66 ++++++-- .../opentelemetry/sdk/init/sdk_builder.h | 17 ++ .../logs/batch_log_record_processor_options.h | 2 +- sdk/src/init/registry.cc | 38 +++++ sdk/src/init/sdk_builder.cc | 148 ++++++++++++++++-- 22 files changed, 517 insertions(+), 49 deletions(-) create mode 100644 exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h rename exporters/ostream/include/opentelemetry/exporters/ostream/{console_builder.h => console_span_builder.h} (86%) create mode 100644 exporters/ostream/src/console_log_record_builder.cc rename exporters/ostream/src/{console_builder.cc => console_span_builder.cc} (68%) create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_record_builder.h rename exporters/otlp/include/opentelemetry/exporters/otlp/{otlp_builder.h => otlp_span_builder.h} (80%) create mode 100644 exporters/otlp/src/otlp_log_record_builder.cc rename exporters/otlp/src/{otlp_builder.cc => otlp_span_builder.cc} (67%) create mode 100644 sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_log_record_exporter_builder.h diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index e86f7cd2b4..63054f56ca 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -17,8 +17,9 @@ add_executable( custom_span_processor.cc custom_span_processor_builder.cc) -target_link_libraries(example_yaml ${CMAKE_THREAD_LIBS_INIT} common_foo_library - opentelemetry_exporter_ostream_span) +target_link_libraries( + example_yaml ${CMAKE_THREAD_LIBS_INIT} common_foo_library + opentelemetry_exporter_ostream_span opentelemetry_exporter_ostream_logs) if(WITH_OTLP_HTTP) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) @@ -37,5 +38,5 @@ if(DEFINED OPENTELEMETRY_BUILD_DLL) else() target_link_libraries( example_yaml opentelemetry_configuration opentelemetry_init - opentelemetry_common opentelemetry_trace) + opentelemetry_common opentelemetry_trace opentelemetry_logs) endif() diff --git a/examples/yaml/kitchen-sink.yaml b/examples/yaml/kitchen-sink.yaml index 1d31facab8..49d9c85e95 100644 --- a/examples/yaml/kitchen-sink.yaml +++ b/examples/yaml/kitchen-sink.yaml @@ -94,6 +94,12 @@ logger_provider: # # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_LOGS_INSECURE insecure: false + # Configure a simple log record processor. + - simple: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: {} # Configure log record limits. See also attribute_limits. limits: # Configure max log record attribute value size. Overrides attribute_limits.attribute_value_length_limit. diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 2e5fdb4d46..308bfb628b 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -6,7 +6,8 @@ #include #include -#include "opentelemetry/exporters/ostream/console_builder.h" +#include "opentelemetry/exporters/ostream/console_log_record_builder.h" +#include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" #include "opentelemetry/sdk/init/configured_sdk.h" @@ -23,7 +24,8 @@ #endif #ifdef OTEL_HAVE_OTLP -# include "opentelemetry/exporters/otlp/otlp_builder.h" +# include "opentelemetry/exporters/otlp/otlp_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_span_builder.h" #endif #ifdef OTEL_HAVE_ZIPKIN @@ -51,10 +53,12 @@ void InitOtel(const std::string &config_file) /* 2 - Populate the registry with the core components supported */ - opentelemetry::exporter::trace::ConsoleBuilder::Register(registry.get()); + opentelemetry::exporter::trace::ConsoleSpanBuilder::Register(registry.get()); + opentelemetry::exporter::logs::ConsoleLogRecordBuilder::Register(registry.get()); #ifdef OTEL_HAVE_OTLP - opentelemetry::exporter::otlp::OtlpBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpLogRecordBuilder::Register(registry.get()); #endif #ifdef OTEL_HAVE_ZIPKIN diff --git a/exporters/ostream/CMakeLists.txt b/exporters/ostream/CMakeLists.txt index 2b51e61126..ddcd4a4eb1 100644 --- a/exporters/ostream/CMakeLists.txt +++ b/exporters/ostream/CMakeLists.txt @@ -3,7 +3,7 @@ add_library( opentelemetry_exporter_ostream_span - src/span_exporter.cc src/span_exporter_factory.cc src/console_builder.cc) + src/span_exporter.cc src/span_exporter_factory.cc src/console_span_builder.cc) set_target_properties(opentelemetry_exporter_ostream_span PROPERTIES EXPORT_NAME ostream_span_exporter) @@ -77,8 +77,10 @@ if(BUILD_TESTING) TEST_LIST ostream_metric_test) endif() -add_library(opentelemetry_exporter_ostream_logs - src/log_record_exporter.cc src/log_record_exporter_factory.cc) +add_library( + opentelemetry_exporter_ostream_logs + src/log_record_exporter.cc src/log_record_exporter_factory.cc + src/console_log_record_builder.cc) set_target_properties(opentelemetry_exporter_ostream_logs PROPERTIES EXPORT_NAME ostream_log_record_exporter) set_target_version(opentelemetry_exporter_ostream_logs) diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h new file mode 100644 index 0000000000..a5ae66fcb2 --- /dev/null +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/console_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace logs +{ + +class OPENTELEMETRY_EXPORT ConsoleLogRecordBuilder + : public opentelemetry::sdk::init::ConsoleLogRecordExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + ConsoleLogRecordBuilder() = default; + ~ConsoleLogRecordBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) + const override; +}; + +} // namespace logs +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h similarity index 86% rename from exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h rename to exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h index 6f7ab793b1..356d180d87 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h @@ -17,14 +17,14 @@ namespace exporter namespace trace { -class OPENTELEMETRY_EXPORT ConsoleBuilder +class OPENTELEMETRY_EXPORT ConsoleSpanBuilder : public opentelemetry::sdk::init::ConsoleSpanExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); - ConsoleBuilder() = default; - ~ConsoleBuilder() override = default; + ConsoleSpanBuilder() = default; + ~ConsoleSpanBuilder() override = default; std::unique_ptr Build( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) diff --git a/exporters/ostream/src/console_log_record_builder.cc b/exporters/ostream/src/console_log_record_builder.cc new file mode 100644 index 0000000000..3f78c02cff --- /dev/null +++ b/exporters/ostream/src/console_log_record_builder.cc @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/ostream/console_log_record_builder.h" +#include "opentelemetry/exporters/ostream/log_record_exporter_factory.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace logs +{ + +static ConsoleLogRecordBuilder singleton; + +void ConsoleLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetConsoleLogRecordBuilder(&singleton); +} + +std::unique_ptr ConsoleLogRecordBuilder::Build( + const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration * /* model */) + const +{ + return OStreamLogRecordExporterFactory::Create(); +} + +} // namespace logs +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/ostream/src/console_builder.cc b/exporters/ostream/src/console_span_builder.cc similarity index 68% rename from exporters/ostream/src/console_builder.cc rename to exporters/ostream/src/console_span_builder.cc index 949a0781ba..8e61234d27 100644 --- a/exporters/ostream/src/console_builder.cc +++ b/exporters/ostream/src/console_span_builder.cc @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/ostream/console_builder.h" +#include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/exporters/ostream/span_exporter_factory.h" #include "opentelemetry/version.h" @@ -11,14 +11,14 @@ namespace exporter namespace trace { -static ConsoleBuilder singleton; +static ConsoleSpanBuilder singleton; -void ConsoleBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void ConsoleSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->SetConsoleBuilder(&singleton); + registry->SetConsoleSpanBuilder(&singleton); } -std::unique_ptr ConsoleBuilder::Build( +std::unique_ptr ConsoleSpanBuilder::Build( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration * /* model */) const { return OStreamSpanExporterFactory::Create(); diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 0c218fdfa4..39a2d02a92 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -267,7 +267,8 @@ target_link_libraries( opentelemetry_otlp_recordable PUBLIC opentelemetry_trace opentelemetry_resources opentelemetry_proto) -add_library(opentelemetry_otlp_builder src/otlp_builder.cc) +add_library(opentelemetry_otlp_builder src/otlp_span_builder.cc + src/otlp_log_record_builder.cc) set_target_properties(opentelemetry_otlp_builder PROPERTIES EXPORT_NAME otlp_builder) set_target_version(opentelemetry_otlp_builder) @@ -283,11 +284,15 @@ target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_api) if(WITH_OTLP_HTTP) target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_exporter_otlp_http) + target_link_libraries(opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_http_log) endif() if(WITH_OTLP_GRPC) target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_exporter_otlp_grpc) + target_link_libraries(opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_grpc_log) endif() if(OPENTELEMETRY_INSTALL) diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_record_builder.h new file mode 100644 index 0000000000..e038bb8d32 --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_record_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpLogRecordBuilder + : public opentelemetry::sdk::init::OtlpLogRecordExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpLogRecordBuilder() = default; + ~OtlpLogRecordBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) + const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_span_builder.h similarity index 80% rename from exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h rename to exporters/otlp/include/opentelemetry/exporters/otlp/otlp_span_builder.h index 03f037f179..77893ad1f1 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_span_builder.h @@ -17,13 +17,14 @@ namespace exporter namespace otlp { -class OPENTELEMETRY_EXPORT OtlpBuilder : public opentelemetry::sdk::init::OtlpSpanExporterBuilder +class OPENTELEMETRY_EXPORT OtlpSpanBuilder + : public opentelemetry::sdk::init::OtlpSpanExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); - OtlpBuilder() = default; - ~OtlpBuilder() override = default; + OtlpSpanBuilder() = default; + ~OtlpSpanBuilder() override = default; std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const override; diff --git a/exporters/otlp/src/otlp_log_record_builder.cc b/exporters/otlp/src/otlp_log_record_builder.cc new file mode 100644 index 0000000000..f0fca4506f --- /dev/null +++ b/exporters/otlp/src/otlp_log_record_builder.cc @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_log_record_builder.h" +#include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpLogRecordBuilder singleton; + +void OtlpLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpLogRecordBuilder(&singleton); +} + +std::unique_ptr OtlpLogRecordBuilder::Build( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration * /* model */) const +{ + // FIXME, use model + OtlpHttpLogRecordExporterOptions options; + return OtlpHttpLogRecordExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_builder.cc b/exporters/otlp/src/otlp_span_builder.cc similarity index 67% rename from exporters/otlp/src/otlp_builder.cc rename to exporters/otlp/src/otlp_span_builder.cc index 760ec323ea..092626bc2c 100644 --- a/exporters/otlp/src/otlp_builder.cc +++ b/exporters/otlp/src/otlp_span_builder.cc @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_builder.h" +#include "opentelemetry/exporters/otlp/otlp_span_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/version.h" @@ -12,14 +12,14 @@ namespace exporter namespace otlp { -static OtlpBuilder singleton; +static OtlpSpanBuilder singleton; -void OtlpBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->SetOtlpBuilder(&singleton); + registry->SetOtlpSpanBuilder(&singleton); } -std::unique_ptr OtlpBuilder::Build( +std::unique_ptr OtlpSpanBuilder::Build( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration * /* model */) const { // FIXME, use model diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 0ccc719114..3c0fec966b 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -22,7 +22,7 @@ static ZipkinBuilder singleton; void ZipkinBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->SetZipkinBuilder(&singleton); + registry->SetZipkinSpanBuilder(&singleton); } std::unique_ptr ZipkinBuilder::Build( diff --git a/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h new file mode 100644 index 0000000000..aeab09ed4c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ConsoleLogRecordExporterBuilder +{ +public: + ConsoleLogRecordExporterBuilder() = default; + virtual ~ConsoleLogRecordExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h new file mode 100644 index 0000000000..5540f05c54 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ExtensionLogRecordExporterBuilder +{ +public: + ExtensionLogRecordExporterBuilder() = default; + virtual ~ExtensionLogRecordExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_log_record_exporter_builder.h new file mode 100644 index 0000000000..effea6a196 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_log_record_exporter_builder.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpLogRecordExporterBuilder +{ +public: + OtlpLogRecordExporterBuilder() = default; + virtual ~OtlpLogRecordExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 4d94b7b316..8c7343676a 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -21,6 +21,11 @@ class ExtensionSamplerBuilder; class ExtensionSpanExporterBuilder; class ExtensionSpanProcessorBuilder; +class OtlpLogRecordExporterBuilder; +class ConsoleLogRecordExporterBuilder; +class ExtensionLogRecordExporterBuilder; +class ExtensionLogRecordProcessorBuilder; + class Registry { public: @@ -29,14 +34,38 @@ class Registry /* Core optional components. */ - const OtlpSpanExporterBuilder *GetOtlpBuilder() { return m_otlp_builder; } - void SetOtlpBuilder(const OtlpSpanExporterBuilder *builder) { m_otlp_builder = builder; } - - const ConsoleSpanExporterBuilder *GetConsoleBuilder() { return m_console_builder; } - void SetConsoleBuilder(const ConsoleSpanExporterBuilder *builder) { m_console_builder = builder; } - - const ZipkinSpanExporterBuilder *GetZipkinBuilder() { return m_zipkin_builder; } - void SetZipkinBuilder(const ZipkinSpanExporterBuilder *builder) { m_zipkin_builder = builder; } + const OtlpSpanExporterBuilder *GetOtlpSpanBuilder() { return m_otlp_span_builder; } + void SetOtlpSpanBuilder(const OtlpSpanExporterBuilder *builder) { m_otlp_span_builder = builder; } + + const ConsoleSpanExporterBuilder *GetConsoleSpanBuilder() { return m_console_span_builder; } + void SetConsoleSpanBuilder(const ConsoleSpanExporterBuilder *builder) + { + m_console_span_builder = builder; + } + + const ZipkinSpanExporterBuilder *GetZipkinSpanBuilder() { return m_zipkin_span_builder; } + void SetZipkinSpanBuilder(const ZipkinSpanExporterBuilder *builder) + { + m_zipkin_span_builder = builder; + } + + const OtlpLogRecordExporterBuilder *GetOtlpLogRecordBuilder() + { + return m_otlp_log_record_builder; + } + void SetOtlpLogRecordBuilder(const OtlpLogRecordExporterBuilder *builder) + { + m_otlp_log_record_builder = builder; + } + + const ConsoleLogRecordExporterBuilder *GetConsoleLogRecordBuilder() + { + return m_console_log_record_builder; + } + void SetConsoleLogRecordBuilder(const ConsoleLogRecordExporterBuilder *builder) + { + m_console_log_record_builder = builder; + } /* Extension points */ @@ -54,15 +83,30 @@ class Registry void AddExtensionSpanProcessorBuilder(const std::string &name, ExtensionSpanProcessorBuilder *builder); + const ExtensionLogRecordExporterBuilder *GetExtensionLogRecordExporterBuilder( + const std::string &name); + void AddExtensionLogRecordExporterBuilder(const std::string &name, + ExtensionLogRecordExporterBuilder *builder); + + const ExtensionLogRecordProcessorBuilder *GetExtensionLogRecordProcessorBuilder( + const std::string &name); + void AddExtensionLogRecordProcessorBuilder(const std::string &name, + ExtensionLogRecordProcessorBuilder *builder); + private: - const OtlpSpanExporterBuilder *m_otlp_builder{nullptr}; - const ConsoleSpanExporterBuilder *m_console_builder{nullptr}; - const ZipkinSpanExporterBuilder *m_zipkin_builder{nullptr}; + const OtlpSpanExporterBuilder *m_otlp_span_builder{nullptr}; + const ConsoleSpanExporterBuilder *m_console_span_builder{nullptr}; + const ZipkinSpanExporterBuilder *m_zipkin_span_builder{nullptr}; + + const OtlpLogRecordExporterBuilder *m_otlp_log_record_builder{nullptr}; + const ConsoleLogRecordExporterBuilder *m_console_log_record_builder{nullptr}; std::map m_propagator_builders; std::map m_sampler_builders; std::map m_span_exporter_builders; std::map m_span_processor_builders; + std::map m_log_record_exporter_builders; + std::map m_log_record_processor_builders; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 096b0d6101..c982dfc108 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -8,14 +8,17 @@ #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/trace/exporter.h" @@ -112,6 +115,20 @@ class SdkBuilder const std::unique_ptr &model) const; + std::unique_ptr CreateOtlpLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const; + + std::unique_ptr CreateConsoleLogRecordExporter( + const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) const; + + std::unique_ptr CreateExtensionLogRecordExporter( + const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) + const; + + std::unique_ptr CreateLogRecordExporter( + const std::unique_ptr + &model) const; + std::unique_ptr CreateBatchLogRecordProcessor( const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) const; diff --git a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h index b130f947af..84e03bcf37 100644 --- a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h +++ b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h @@ -16,7 +16,7 @@ namespace logs { /** - * Struct to hold batch SpanProcessor options. + * Struct to hold batch LogRecordProcessor options. */ struct BatchLogRecordProcessorOptions { diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index 92c0ad03fb..9f75fabae9 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -195,6 +195,44 @@ void Registry::AddExtensionSpanProcessorBuilder(const std::string &name, m_span_processor_builders.insert(entry); } +const ExtensionLogRecordExporterBuilder *Registry::GetExtensionLogRecordExporterBuilder( + const std::string &name) +{ + ExtensionLogRecordExporterBuilder *builder = nullptr; + auto search = m_log_record_exporter_builders.find(name); + if (search != m_log_record_exporter_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddExtensionLogRecordExporterBuilder(const std::string &name, + ExtensionLogRecordExporterBuilder *builder) +{ + std::pair entry{name, builder}; + m_log_record_exporter_builders.insert(entry); +} + +const ExtensionLogRecordProcessorBuilder *Registry::GetExtensionLogRecordProcessorBuilder( + const std::string &name) +{ + ExtensionLogRecordProcessorBuilder *builder = nullptr; + auto search = m_log_record_processor_builders.find(name); + if (search != m_log_record_processor_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddExtensionLogRecordProcessorBuilder(const std::string &name, + ExtensionLogRecordProcessorBuilder *builder) +{ + std::pair entry{name, builder}; + m_log_record_processor_builders.insert(entry); +} + } // namespace init } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 5b6f934e44..51d0246679 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -18,10 +18,14 @@ #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" @@ -33,6 +37,7 @@ #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" +#include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" @@ -45,19 +50,26 @@ #include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" +#include "opentelemetry/sdk/init/console_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" +#include "opentelemetry/sdk/init/extension_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/extension_sampler_builder.h" #include "opentelemetry/sdk/init/extension_span_exporter_builder.h" #include "opentelemetry/sdk/init/extension_span_processor_builder.h" +#include "opentelemetry/sdk/init/otlp_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" #include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/sdk/init/unsupported_exception.h" #include "opentelemetry/sdk/init/zipkin_span_exporter_builder.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_provider.h" #include "opentelemetry/sdk/logs/logger_provider_factory.h" #include "opentelemetry/sdk/logs/processor.h" +#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/meter_provider.h" @@ -260,6 +272,38 @@ class LogRecordProcessorBuilder const SdkBuilder *m_sdk_builder; }; +class LogRecordExporterBuilder + : public opentelemetry::sdk::configuration::LogRecordExporterConfigurationVisitor +{ +public: + LogRecordExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + ~LogRecordExporterBuilder() override = default; + + void VisitOtlp( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) override + { + exporter = m_sdk_builder->CreateOtlpLogRecordExporter(model); + } + + void VisitConsole(const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration + *model) override + { + exporter = m_sdk_builder->CreateConsoleLogRecordExporter(model); + } + + void VisitExtension( + const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) + override + { + exporter = m_sdk_builder->CreateExtensionLogRecordExporter(model); + } + + std::unique_ptr exporter; + +private: + const SdkBuilder *m_sdk_builder; +}; + std::unique_ptr SdkBuilder::CreateAlwaysOffSampler( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration * /* model */) const { @@ -356,7 +400,7 @@ std::unique_ptr SdkBuilder::CreateOtlpS const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const OtlpSpanExporterBuilder *builder = m_registry->GetOtlpBuilder(); + const OtlpSpanExporterBuilder *builder = m_registry->GetOtlpSpanBuilder(); if (builder != nullptr) { @@ -376,7 +420,7 @@ std::unique_ptr SdkBuilder::CreateConso const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const ConsoleSpanExporterBuilder *builder = m_registry->GetConsoleBuilder(); + const ConsoleSpanExporterBuilder *builder = m_registry->GetConsoleSpanBuilder(); if (builder != nullptr) { @@ -396,7 +440,7 @@ std::unique_ptr SdkBuilder::CreateZipki const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const ZipkinSpanExporterBuilder *builder = m_registry->GetZipkinBuilder(); + const ZipkinSpanExporterBuilder *builder = m_registry->GetZipkinSpanBuilder(); if (builder != nullptr) { @@ -693,26 +737,112 @@ std::unique_ptr SdkBuilder::CreateMe return sdk; } +std::unique_ptr +SdkBuilder::CreateOtlpLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const OtlpLogRecordExporterBuilder *builder = m_registry->GetOtlpLogRecordBuilder(); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered builder"); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("No builder for OtlpLogRecordExporter"); + throw UnsupportedException("No builder for OtlpLogRecordExporter"); + } + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateConsoleLogRecordExporter( + const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const ConsoleLogRecordExporterBuilder *builder = m_registry->GetConsoleLogRecordBuilder(); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateConsoleLogRecordExporter() using registered builder"); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("No builder for ConsoleLogRecordExporter"); + throw UnsupportedException("No builder for ConsoleLogRecordExporter"); + } + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateExtensionLogRecordExporter( + const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) const +{ + std::unique_ptr sdk; + std::string name = model->name; + + const ExtensionLogRecordExporterBuilder *builder = + m_registry->GetExtensionLogRecordExporterBuilder(name); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionLogRecordExporter() using registered builder " << name); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("CreateExtensionLogRecordExporter() no builder for " << name); + throw UnsupportedException("CreateExtensionLogRecordExporter() no builder for " + name); + } + return sdk; +} + +std::unique_ptr SdkBuilder::CreateLogRecordExporter( + const std::unique_ptr &model) + const +{ + std::unique_ptr sdk; + + LogRecordExporterBuilder builder(this); + model->Accept(&builder); + sdk = std::move(builder.exporter); + + return sdk; +} + std::unique_ptr SdkBuilder::CreateBatchLogRecordProcessor( - const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) const { std::unique_ptr sdk; + opentelemetry::sdk::logs::BatchLogRecordProcessorOptions options; - OTEL_INTERNAL_LOG_ERROR("CreateBatchLogRecordProcessor() FIXME"); + options.schedule_delay_millis = std::chrono::milliseconds(model->schedule_delay); + options.max_queue_size = model->max_queue_size; + options.max_export_batch_size = model->max_export_batch_size; + + auto exporter_sdk = CreateLogRecordExporter(model->exporter); + + sdk = opentelemetry::sdk::logs::BatchLogRecordProcessorFactory::Create(std::move(exporter_sdk), + options); return sdk; } std::unique_ptr SdkBuilder::CreateSimpleLogRecordProcessor( - const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration *model) const { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("CreateSimpleLogRecordProcessor() FIXME"); + auto exporter_sdk = CreateLogRecordExporter(model->exporter); + + sdk = opentelemetry::sdk::logs::SimpleLogRecordProcessorFactory::Create(std::move(exporter_sdk)); return sdk; } From cbbe91367d9f4e54e498f0f52971fdfb7b669140 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 9 Jul 2024 22:40:09 +0200 Subject: [PATCH 053/166] Cleanup --- sdk/src/init/sdk_builder.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 51d0246679..936b45e45f 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -17,6 +17,7 @@ #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" @@ -30,6 +31,7 @@ #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" From 075b27a44c85fa4fcd405048f9323c23a4a58118 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 10 Jul 2024 01:44:18 +0200 Subject: [PATCH 054/166] Expanded variable substitution. --- .../sdk/configuration/document_node.h | 3 +- sdk/src/configuration/document_node.cc | 178 +++++++++++++++--- sdk/src/configuration/ryml_document_node.cc | 16 +- sdk/test/configuration/yaml_test.cc | 162 ++++++++++++++++ 4 files changed, 323 insertions(+), 36 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index d3e9b20bd8..147364c5fb 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -62,7 +62,8 @@ class DocumentNode virtual std::string Dump() const = 0; protected: - void DoSubstitution(std::string &value); + std::string DoSubstitution(const std::string &text); + std::string DoOneSubstitution(const std::string &text); bool BooleanFromString(const std::string &value); size_t IntegerFromString(const std::string &value); diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index 2e86f8b4bc..acac79e01f 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -17,74 +17,198 @@ namespace configuration { /** - Perform substitution on a string scalar. - Only if the entire scalar string is: ${ENV_NAME}, - this code does not perform substitution in: - "some text with ${ENV_NAME} in it". + * Perform environment variables substitution on a full line. + * Supported: + * - Text line with no substitution + * - ${SUBSTITUTION} + * - Some text with ${SUBSTITUTION} in it + * - Multiple ${SUBSTITUTION_A} substitutions ${SUBSTITUTION_B} in the line + */ +std::string DocumentNode::DoSubstitution(const std::string &text) +{ + static std::string begin_token{"${"}; + static std::string end_token{"}"}; + + std::string result; + + std::string::size_type current_pos; + std::string::size_type begin_pos; + std::string::size_type end_pos; + std::string copy; + std::string substitution; + + current_pos = 0; + begin_pos = text.find(begin_token); + + while (begin_pos != std::string::npos) + { + + if (current_pos < begin_pos) + { + /* + * ^ < COPY_ME > ${... + * ...} < COPY_ME > ${... + * + * copy [current_pos, begin_pos[ + */ + copy = text.substr(current_pos, begin_pos - current_pos); + result.append(copy); + current_pos = begin_pos; + } + + end_pos = text.find(end_token, begin_pos); + + if (end_pos == std::string::npos) + { + /* ... < ${NOT_A_SUBSTITUTION > */ + copy = text.substr(current_pos); + result.append(copy); + return result; + } + + /* ... < ${SUBSTITUTION} > ... */ + substitution = text.substr(current_pos, end_pos - current_pos + 1); + + copy = DoOneSubstitution(substitution); + result.append(copy); + begin_pos = text.find(begin_token, end_pos); + current_pos = end_pos + 1; + } + + copy = text.substr(current_pos); + result.append(copy); + + return result; +} + +/** + Perform one substitution on a string scalar. + Supported: + - ${ENV_NAME} + - ${env:ENV_NAME} + - ${ENV_NAME:-fallback} (including when ENV_NAME is actually "env") + - ${env:ENV_NAME:-fallback} */ -void DocumentNode::DoSubstitution(std::string &value) +std::string DocumentNode::DoOneSubstitution(const std::string &text) { // FIXME: - // The following needs to be supported (spec changes) // ${env:ENV_NAME} // ${ENV_NAME:-fallback} - // some text with ${ENV_NAME} in it - // multiple ${env:HOST:-localhost}${env:PORT:-:4318} substitutions - size_t len = value.length(); + static std::string env_token{"env:"}; + static std::string env_with_replacement{"env:-"}; + static std::string replacement_token{":-"}; + + size_t len = text.length(); char c; + std::string::size_type begin_name; + std::string::size_type end_name; + std::string::size_type begin_fallback; + std::string::size_type end_fallback; + std::string::size_type pos; + std::string name; + std::string fallback; + const char *sub; if (len < 4) { - return; + goto illegal; } - c = value[0]; + c = text[0]; if (c != '$') { - return; + goto illegal; } - c = value[1]; + c = text[1]; if (c != '{') { - return; + goto illegal; } - c = value[len - 1]; + c = text[len - 1]; if (c != '}') { - return; + goto illegal; } - c = value[2]; + begin_name = 2; + + /* If text[2] starts with "env:" */ + if (text.find(env_token, begin_name) == begin_name) + { + /* If text[2] starts with "env:-" */ + if (text.find(env_with_replacement, begin_name) == begin_name) + { + /* ${env:-fallback} is legal. It is variable "env". */ + } + else + { + begin_name += 4; // Skip "env:" + } + } + + c = text[begin_name]; if (!std::isalpha(c) && c != '_') { - return; + goto illegal; } - for (size_t i = 3; i + 2 <= len; i++) + for (size_t i = begin_name + 1; i + 2 <= len; i++) { - c = value[i]; - if (!std::isalnum(c) && c != '_') + c = text[i]; + if (std::isalnum(c) || (c == '_')) { - return; + end_name = i + 1; + } + else + { + break; } } - // value is of the form ${ENV_NAME} + // text is of the form ${ENV_NAME ... + + name = text.substr(begin_name, end_name - begin_name); - std::string name = value.substr(2, len - 3); + if (end_name + 1 == len) + { + // text is of the form ${ENV_NAME} + begin_fallback = 0; + end_fallback = 0; + } + else + { + pos = text.find(replacement_token, end_name); + if (pos != end_name) + { + goto illegal; + } + // text is of the form ${ENV_NAME:-fallback} + begin_fallback = pos + 2; + end_fallback = len - 1; + } - const char *sub = std::getenv(name.c_str()); + sub = std::getenv(name.c_str()); if (sub != nullptr) { - value = sub; + return sub; + } + + if (begin_fallback < end_fallback) + { + fallback = text.substr(begin_fallback, end_fallback - begin_fallback); } else { - value = ""; + fallback = ""; } + return fallback; + +illegal: + OTEL_INTERNAL_LOG_ERROR("Illegal substitution expression: " << text); + throw InvalidSchemaException("Illegal substitution expression"); } bool DocumentNode::BooleanFromString(const std::string &value) diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 72862573a5..4718fb5a60 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -198,7 +198,7 @@ bool RymlDocumentNode::GetRequiredBoolean(const std::string &name) ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); return BooleanFromString(value); } @@ -217,7 +217,7 @@ bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); if (value.empty()) { @@ -236,7 +236,7 @@ size_t RymlDocumentNode::GetRequiredInteger(const std::string &name) ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); return IntegerFromString(value); } @@ -255,7 +255,7 @@ size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_valu ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); if (value.empty()) { @@ -274,7 +274,7 @@ double RymlDocumentNode::GetRequiredDouble(const std::string &name) ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); return DoubleFromString(value); } @@ -293,7 +293,7 @@ double RymlDocumentNode::GetDouble(const std::string &name, double default_value ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); if (value.empty()) { @@ -311,7 +311,7 @@ std::string RymlDocumentNode::GetRequiredString(const std::string &name) ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); if (value.empty()) { @@ -336,7 +336,7 @@ std::string RymlDocumentNode::GetString(const std::string &name, const std::stri ryml::csubstr view = ryml_child.val(); std::string value(view.str, view.len); - DoSubstitution(value); + value = DoSubstitution(value); return value; } diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index 3b84a3a6bd..f71f4de546 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -159,6 +159,20 @@ disabled: ${ENV_NAME} ASSERT_EQ(config->disabled, false); } +TEST(Yaml, no_boolean_substitution_env) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${env:ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + TEST(Yaml, empty_boolean_substitution) { setenv("ENV_NAME", "", 1); @@ -173,6 +187,20 @@ disabled: ${ENV_NAME} ASSERT_EQ(config->disabled, false); } +TEST(Yaml, empty_boolean_substitution_env) +{ + setenv("ENV_NAME", "", 1); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${env:ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + TEST(Yaml, true_boolean_substitution) { setenv("ENV_NAME", "true", 1); @@ -214,6 +242,75 @@ disabled: ${ENV_NAME} ASSERT_EQ(config, nullptr); } +TEST(Yaml, empty_boolean_substitution_fallback) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME:-} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, true_boolean_substitution_fallback) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME:-true} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, true); +} + +TEST(Yaml, false_boolean_substitution_fallback) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME:-false} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, false); +} + +TEST(Yaml, illegal_boolean_substitution_fallback) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${ENV_NAME:-illegal} +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(Yaml, torture_boolean_substitution_fallback) +{ + setenv("env", "true", 1); + + std::string yaml = R"( +file_format: 0.0 +disabled: ${env:-false} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->disabled, true); +} + TEST(Yaml, no_required_string) { std::string yaml = R"( @@ -236,6 +333,18 @@ file_format: ${ENV_NAME} ASSERT_EQ(config, nullptr); } +TEST(Yaml, no_string_substitution_env) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: ${env:ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + TEST(Yaml, empty_string_substitution) { setenv("ENV_NAME", "", 1); @@ -248,6 +357,18 @@ file_format: ${ENV_NAME} ASSERT_EQ(config, nullptr); } +TEST(Yaml, empty_string_substitution_env) +{ + setenv("ENV_NAME", "", 1); + + std::string yaml = R"( +file_format: ${env:ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + TEST(Yaml, with_string_substitution) { setenv("ENV_NAME", "foo.bar", 1); @@ -261,6 +382,47 @@ file_format: ${ENV_NAME} ASSERT_EQ(config->file_format, "foo.bar"); } +TEST(Yaml, with_string_substitution_env) +{ + setenv("ENV_NAME", "foo.bar", 1); + + std::string yaml = R"( +file_format: ${env:ENV_NAME} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "foo.bar"); +} + +TEST(Yaml, with_string_substitution_fallback) +{ + unsetenv("ENV_NAME"); + + std::string yaml = R"( +file_format: ${env:ENV_NAME:-foo.bar} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "foo.bar"); +} + +TEST(Yaml, multiple_string_substitution) +{ + setenv("PREFIX", "foo", 1); + unsetenv("DOT"); + setenv("SUFFIX", "bar", 1); + + std::string yaml = R"( +file_format: ${env:PREFIX:-failed}${DOT:-.}${SUFFIX:-failed} +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_EQ(config->file_format, "foo.bar"); +} + TEST(Yaml, no_optional_integer) { std::string yaml = R"( From 52234d01e094c6223c23e49875e3e1f881c57f40 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 10 Jul 2024 02:09:02 +0200 Subject: [PATCH 055/166] Fixed build warning. --- sdk/src/configuration/document_node.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index acac79e01f..8a28f37d96 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -91,10 +91,6 @@ std::string DocumentNode::DoSubstitution(const std::string &text) */ std::string DocumentNode::DoOneSubstitution(const std::string &text) { - // FIXME: - // ${env:ENV_NAME} - // ${ENV_NAME:-fallback} - static std::string env_token{"env:"}; static std::string env_with_replacement{"env:-"}; static std::string replacement_token{":-"}; @@ -145,7 +141,7 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) } else { - begin_name += 4; // Skip "env:" + begin_name += env_token.length(); // Skip "env:" } } @@ -155,6 +151,8 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) goto illegal; } + end_name = begin_name + 1; + for (size_t i = begin_name + 1; i + 2 <= len; i++) { c = text[i]; @@ -186,7 +184,7 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) goto illegal; } // text is of the form ${ENV_NAME:-fallback} - begin_fallback = pos + 2; + begin_fallback = pos + replacement_token.length(); end_fallback = len - 1; } From e4ff2c473d95738a2cd0f000a11bc999f34a5b72 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 18 Jul 2024 01:33:15 +0200 Subject: [PATCH 056/166] Cleanup after merge. --- .github/workflows/clang-tidy.yaml | 3 ++- ci/do_ci.sh | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/clang-tidy.yaml b/.github/workflows/clang-tidy.yaml index 9e5f6c26db..4fee27c92a 100644 --- a/.github/workflows/clang-tidy.yaml +++ b/.github/workflows/clang-tidy.yaml @@ -62,6 +62,7 @@ jobs: -DBUILD_W3CTRACECONTEXT_TEST=ON \ -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \ -DWITH_ASYNC_EXPORT_PREVIEW=ON \ + -DWITH_CONFIGURATION=ON \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_CXX_CLANG_TIDY="clang-tidy" @@ -81,4 +82,4 @@ jobs: COUNT=$(grep -c "warning:" clang-tidy.log) echo "clang-tidy reported ${COUNT} warning(s)" -# TODO: include WITH_OTLP_GRPC and WITH_ABSEIL flags. \ No newline at end of file +# TODO: include WITH_OTLP_GRPC and WITH_ABSEIL flags. diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 4b70627956..5dfa9ba237 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -220,7 +220,6 @@ elif [[ "$1" == "cmake.maintainer.yaml.test" ]]; then -DWITH_ASYNC_EXPORT_PREVIEW=OFF \ -DOTELCPP_MAINTAINER_MODE=ON \ -DWITH_NO_DEPRECATED_CODE=ON \ - -DWITH_DEPRECATED_SDK_FACTORY=OFF \ -DWITH_OTLP_HTTP_COMPRESSION=ON \ -DWITH_CONFIGURATION=ON \ ${IWYU} \ From a42704d7fd86625aa34d02126f8488c9be99dcab Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 18 Jul 2024 01:37:03 +0200 Subject: [PATCH 057/166] Fix clang-tidy --- .github/workflows/clang-tidy.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/clang-tidy.yaml b/.github/workflows/clang-tidy.yaml index 4fee27c92a..818809d35f 100644 --- a/.github/workflows/clang-tidy.yaml +++ b/.github/workflows/clang-tidy.yaml @@ -32,6 +32,7 @@ jobs: libgmock-dev \ libgtest-dev \ libbenchmark-dev + sudo ./ci/install_ryml.sh if ! command -v clang-tidy &> /dev/null; then echo "clang-tidy could not be found" From d3a998665cfb86727e22d585d835dec5c20271d7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 31 Jul 2024 01:20:26 +0200 Subject: [PATCH 058/166] cleanup --- .../extension_log_record_processor_builder.h | 29 ++++++++++++++++++ .../configuration/configuration_factory.cc | 2 +- sdk/src/configuration/ryml_document_node.cc | 30 ++++++++----------- sdk/src/init/sdk_builder.cc | 21 ++++++++++--- 4 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h diff --git a/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h b/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h new file mode 100644 index 0000000000..16b251ad21 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" +#include "opentelemetry/sdk/logs/processor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ExtensionLogRecordProcessorBuilder +{ +public: + ExtensionLogRecordProcessorBuilder() = default; + virtual ~ExtensionLogRecordProcessorBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 6ab67a095e..fbae1a3aae 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -784,7 +784,7 @@ static std::unique_ptr ParsePropagatorConfiguration( return ParseCompositePropagatorConfiguration(child); } - // FIXME: File bug with opentelemetry-configuration + // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/75 child = node->GetChildNode("simple"); if (child) { diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 4718fb5a60..54c069963c 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -63,48 +63,42 @@ bool RymlDocumentNode::AsBoolean() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsBoolean()"); -#ifdef LATER - if (!m_yaml.IsScalar()) + if (!m_node.is_val() && !m_node.is_keyval()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); throw InvalidSchemaException(""); } - bool value = m_yaml.as(); - return value; -#endif - return false; + ryml::csubstr view = m_node.val(); + std::string value(view.str, view.len); + return BooleanFromString(value); } size_t RymlDocumentNode::AsInteger() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsInteger()"); -#ifdef LATER - if (!m_yaml.IsScalar()) + if (!m_node.is_val() && !m_node.is_keyval()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); throw InvalidSchemaException(""); } - size_t value = m_yaml.as(); - return value; -#endif - return 0; + ryml::csubstr view = m_node.val(); + std::string value(view.str, view.len); + return IntegerFromString(value); } double RymlDocumentNode::AsDouble() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsDouble()"); -#ifdef LATER - if (!m_yaml.IsScalar()) + if (!m_node.is_val() && !m_node.is_keyval()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); throw InvalidSchemaException(""); } - double value = m_yaml.as(); - return value; -#endif - return 0.0; + ryml::csubstr view = m_node.val(); + std::string value(view.str, view.len); + return DoubleFromString(value); } std::string RymlDocumentNode::AsString() diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 936b45e45f..49cf204d01 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -55,6 +55,7 @@ #include "opentelemetry/sdk/init/console_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" #include "opentelemetry/sdk/init/extension_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/extension_log_record_processor_builder.h" #include "opentelemetry/sdk/init/extension_sampler_builder.h" #include "opentelemetry/sdk/init/extension_span_exporter_builder.h" #include "opentelemetry/sdk/init/extension_span_processor_builder.h" @@ -566,7 +567,7 @@ std::unique_ptr SdkBuilder::CreateTra { std::unique_ptr sdk; - // https://github.com/open-telemetry/opentelemetry-configuration/issues/70 + // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/70 OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME (IdGenerator)"); std::unique_ptr sampler; @@ -851,13 +852,25 @@ SdkBuilder::CreateSimpleLogRecordProcessor( std::unique_ptr SdkBuilder::CreateExtensionLogRecordProcessor( - const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) const { std::unique_ptr sdk; + std::string name = model->name; - OTEL_INTERNAL_LOG_ERROR("CreateExtensionLogRecordProcessor() FIXME"); + const ExtensionLogRecordProcessorBuilder *builder = + m_registry->GetExtensionLogRecordProcessorBuilder(name); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionLogRecordProcessor() using registered builder " + << name); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("CreateExtensionLogRecordProcessor() no builder for " << name); + throw UnsupportedException("CreateExtensionLogRecordProcessor() no builder for " + name); + } return sdk; } From 6ac6fe25d913ecd6a809a8bf29271ce95d784342 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 3 Aug 2024 13:11:43 +0200 Subject: [PATCH 059/166] Continued. --- .../sdk/configuration/document_node.h | 11 +- .../extension_sampler_configuration.h | 1 + .../sdk/configuration/ryml_document.h | 2 +- .../sdk/configuration/ryml_document_node.h | 9 +- .../yaml_configuration_factory.h | 3 +- sdk/src/configuration/CMakeLists.txt | 10 +- .../configuration/configuration_factory.cc | 126 ++++++++++-------- sdk/src/configuration/document_node.cc | 5 +- sdk/src/configuration/ryml_document.cc | 37 ++++- sdk/src/configuration/ryml_document_node.cc | 45 ++++--- .../yaml_configuration_factory.cc | 27 ++-- sdk/src/init/configured_sdk.cc | 6 +- sdk/test/configuration/yaml_test.cc | 5 +- sdk/test/configuration/yaml_trace_test.cc | 5 +- 14 files changed, 183 insertions(+), 109 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 147364c5fb..bbd50dfd0e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -25,6 +25,9 @@ class PropertiesNodeConstIterator; class DocumentNode { public: + // FIXME: proper sizing + static constexpr size_t MAX_NODE_DEPTH = 100; + DocumentNode() = default; virtual ~DocumentNode() = default; @@ -117,14 +120,6 @@ class DocumentNodeConstIterator return *this; } -#ifdef NEVER - DocumentNodeConstIterator &operator++(int) - { - m_impl->Next(); - return *this; - } -#endif - private: DocumentNodeConstIteratorImpl *m_impl; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h index f591e573aa..9f0df785c7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h @@ -27,6 +27,7 @@ class ExtensionSamplerConfiguration : public SamplerConfiguration std::string name; std::unique_ptr node; + size_t depth; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h index f37471356e..a6fe7658d7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h @@ -19,7 +19,7 @@ namespace configuration class RymlDocument : public Document { public: - static std::unique_ptr Parse(std::string content); + static std::unique_ptr Parse(const std::string &source, const std::string &content); RymlDocument(ryml::Tree tree) : m_tree(tree) {} ~RymlDocument() override = default; diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index 7328a3e1ee..824fc6fb64 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -20,7 +20,7 @@ namespace configuration class RymlDocumentNode : public DocumentNode { public: - RymlDocumentNode(ryml::ConstNodeRef node) : m_node(node) {} + RymlDocumentNode(ryml::ConstNodeRef node, size_t depth) : m_node(node), m_depth(depth) {} ~RymlDocumentNode() override = default; std::string Key() const override; @@ -61,12 +61,13 @@ class RymlDocumentNode : public DocumentNode ryml::ConstNodeRef GetRymlChildNode(const std::string &name); ryml::ConstNodeRef m_node; + size_t m_depth; }; class RymlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl { public: - RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index); + RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index, size_t depth); ~RymlDocumentNodeConstIteratorImpl() override; void Next() override; @@ -76,12 +77,13 @@ class RymlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl private: ryml::ConstNodeRef m_parent; size_t m_index; + size_t m_depth; }; class RymlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorImpl { public: - RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index); + RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index, size_t depth); ~RymlPropertiesNodeConstIteratorImpl() override; void Next() override; @@ -92,6 +94,7 @@ class RymlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorIm private: ryml::ConstNodeRef m_parent; size_t m_index; + size_t m_depth; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h index b583fee777..5666df7c3f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h @@ -20,7 +20,8 @@ class YamlConfigurationFactory { public: static std::unique_ptr ParseFile(const std::string &filename); - static std::unique_ptr ParseString(const std::string &content); + static std::unique_ptr ParseString(const std::string &source, + const std::string &content); }; } // namespace configuration diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index aa277b5499..c1fb2c3afc 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -1,13 +1,19 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -# DEAD yaml_document.cc yaml_document_node.cc - add_library( opentelemetry_configuration configuration_factory.cc document_node.cc yaml_configuration_factory.cc ryml_document.cc ryml_document_node.cc) +if (ryml_VERSION VERSION_GREATER_EQUAL 0.7.0) + # https://github.com/biojppm/rapidyaml/issues/455 + message(WARNING "Detected ryml >= 0.7.0, it may be unstable") + add_definitions(-DOTEL_HAVE_RYML=7) +else() + add_definitions(-DOTEL_HAVE_RYML=6) +endif() + set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) set_target_version(opentelemetry_configuration) diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index fbae1a3aae..f71b801308 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -77,6 +77,9 @@ namespace sdk namespace configuration { +// FIXME: proper sizing +constexpr size_t MAX_SAMPLER_DEPTH = 10; + static std::unique_ptr ParseHeadersConfiguration( const std::unique_ptr &node) { @@ -146,10 +149,10 @@ static std::unique_ptr ParseExtensionLogRecordExporterConfiguration(const std::string &name, std::unique_ptr node) { - auto extension = new ExtensionLogRecordExporterConfiguration; - extension->name = name; - extension->node = std::move(node); - std::unique_ptr model(extension); + std::unique_ptr model( + new ExtensionLogRecordExporterConfiguration); + model->name = name; + model->node = std::move(node); return model; } @@ -226,10 +229,10 @@ static std::unique_ptr ParseExtensionLogRecordProcessorConfiguration(const std::string &name, std::unique_ptr node) { - auto extension = new ExtensionLogRecordProcessorConfiguration; - extension->name = name; - extension->node = std::move(node); - std::unique_ptr model(extension); + std::unique_ptr model( + new ExtensionLogRecordProcessorConfiguration); + model->name = name; + model->node = std::move(node); return model; } @@ -385,10 +388,10 @@ static std::unique_ptr ParseMetricExporterExtensionConfiguration(const std::string &name, std::unique_ptr node) { - auto extension = new ExtensionMetricExporterConfiguration; - extension->name = name; - extension->node = std::move(node); - std::unique_ptr model(extension); + std::unique_ptr model( + new ExtensionMetricExporterConfiguration); + model->name = name; + model->node = std::move(node); return model; } @@ -812,26 +815,30 @@ static std::unique_ptr ParseSpanLimitsConfiguration( } static std::unique_ptr ParseSamplerConfiguration( - const std::unique_ptr &node); + const std::unique_ptr &node, + size_t depth); -static std::unique_ptr ParseAlwaysOffSamplerConfiguration( - const std::unique_ptr & /* node */) +static std::unique_ptr ParseAlwaysOffSamplerConfiguration( + const std::unique_ptr & /* node */, + size_t /* depth */) { - std::unique_ptr model(new AlwaysOffSamplerConfiguration); + std::unique_ptr model(new AlwaysOffSamplerConfiguration); return model; } -static std::unique_ptr ParseAlwaysOnSamplerConfiguration( - const std::unique_ptr & /* node */) +static std::unique_ptr ParseAlwaysOnSamplerConfiguration( + const std::unique_ptr & /* node */, + size_t /* depth */) { - std::unique_ptr model(new AlwaysOnSamplerConfiguration); + std::unique_ptr model(new AlwaysOnSamplerConfiguration); return model; } -static std::unique_ptr ParseJaegerRemoteSamplerConfiguration( - const std::unique_ptr &node) +static std::unique_ptr ParseJaegerRemoteSamplerConfiguration( + const std::unique_ptr &node, + size_t depth) { std::unique_ptr model(new JaegerRemoteSamplerConfiguration); std::unique_ptr child; @@ -845,14 +852,15 @@ static std::unique_ptr ParseJaegerRemoteSamplerConfigurati child = node->GetChildNode("initial_sampler"); if (child) { - model->initial_sampler = ParseSamplerConfiguration(child); + model->initial_sampler = ParseSamplerConfiguration(child, depth + 1); } return model; } -static std::unique_ptr ParseParentBasedSamplerConfiguration( - const std::unique_ptr &node) +static std::unique_ptr ParseParentBasedSamplerConfiguration( + const std::unique_ptr &node, + size_t depth) { std::unique_ptr model(new ParentBasedSamplerConfiguration); std::unique_ptr child; @@ -860,38 +868,39 @@ static std::unique_ptr ParseParentBasedSamplerConfiguratio child = node->GetChildNode("root"); if (child) { - model->root = ParseSamplerConfiguration(child); + model->root = ParseSamplerConfiguration(child, depth + 1); } child = node->GetChildNode("remote_parent_sampled"); if (child) { - model->remote_parent_sampled = ParseSamplerConfiguration(child); + model->remote_parent_sampled = ParseSamplerConfiguration(child, depth + 1); } child = node->GetChildNode("remote_parent_not_sampled"); if (child) { - model->remote_parent_not_sampled = ParseSamplerConfiguration(child); + model->remote_parent_not_sampled = ParseSamplerConfiguration(child, depth + 1); } child = node->GetChildNode("local_parent_sampled"); if (child) { - model->local_parent_sampled = ParseSamplerConfiguration(child); + model->local_parent_sampled = ParseSamplerConfiguration(child, depth + 1); } child = node->GetChildNode("local_parent_not_sampled"); if (child) { - model->local_parent_not_sampled = ParseSamplerConfiguration(child); + model->local_parent_not_sampled = ParseSamplerConfiguration(child, depth + 1); } return model; } -static std::unique_ptr ParseTraceIdRatioBasedSamplerConfiguration( - const std::unique_ptr &node) +static std::unique_ptr +ParseTraceIdRatioBasedSamplerConfiguration(const std::unique_ptr &node, + size_t /* depth */) { std::unique_ptr model( new TraceIdRatioBasedSamplerConfiguration); @@ -902,20 +911,32 @@ static std::unique_ptr ParseTraceIdRatioBasedSamplerConfig return model; } -static std::unique_ptr ParseSamplerExtensionConfiguration( +static std::unique_ptr ParseSamplerExtensionConfiguration( const std::string &name, - std::unique_ptr node) + std::unique_ptr node, + size_t depth) { - auto extension = new ExtensionSamplerConfiguration; - extension->name = name; - extension->node = std::move(node); - std::unique_ptr model(extension); + std::unique_ptr model(new ExtensionSamplerConfiguration); + model->name = name; + model->node = std::move(node); + model->depth = depth; return model; } static std::unique_ptr ParseSamplerConfiguration( - const std::unique_ptr &node) + const std::unique_ptr &node, + size_t depth) { + /* + * ParseSamplerConfiguration() is recursive, + * enforce a limit to prevent attacks from yaml. + */ + if (depth >= MAX_SAMPLER_DEPTH) + { + OTEL_INTERNAL_LOG_ERROR("ParseSamplerConfiguration: depth " << depth); + throw InvalidSchemaException("Samplers nested too deeply"); + } + std::unique_ptr model; std::string name; @@ -937,27 +958,27 @@ static std::unique_ptr ParseSamplerConfiguration( if (name == "always_off") { - model = ParseAlwaysOffSamplerConfiguration(child); + model = ParseAlwaysOffSamplerConfiguration(child, depth); } else if (name == "always_on") { - model = ParseAlwaysOnSamplerConfiguration(child); + model = ParseAlwaysOnSamplerConfiguration(child, depth); } else if (name == "jaeger_remote") { - model = ParseJaegerRemoteSamplerConfiguration(child); + model = ParseJaegerRemoteSamplerConfiguration(child, depth); } else if (name == "parent_based") { - model = ParseParentBasedSamplerConfiguration(child); + model = ParseParentBasedSamplerConfiguration(child, depth); } else if (name == "trace_id_ratio_based") { - model = ParseTraceIdRatioBasedSamplerConfiguration(child); + model = ParseTraceIdRatioBasedSamplerConfiguration(child, depth); } else { - model = ParseSamplerExtensionConfiguration(name, std::move(child)); + model = ParseSamplerExtensionConfiguration(name, std::move(child), depth); } return model; @@ -1011,10 +1032,9 @@ static std::unique_ptr ParseExtensionSpanExp const std::string &name, std::unique_ptr node) { - auto extension = new ExtensionSpanExporterConfiguration; - extension->name = name; - extension->node = std::move(node); - std::unique_ptr model(extension); + std::unique_ptr model(new ExtensionSpanExporterConfiguration); + model->name = name; + model->node = std::move(node); return model; } @@ -1093,10 +1113,10 @@ static std::unique_ptr ParseExtensionSpanProcessorConfiguration(const std::string &name, std::unique_ptr node) { - auto extension = new ExtensionSpanProcessorConfiguration; - extension->name = name; - extension->node = std::move(node); - std::unique_ptr model(extension); + std::unique_ptr model( + new ExtensionSpanProcessorConfiguration); + model->name = name; + model->node = std::move(node); return model; } @@ -1167,7 +1187,7 @@ static std::unique_ptr ParseTracerProviderConfigura child = node->GetChildNode("sampler"); if (child) { - model->sampler = ParseSamplerConfiguration(child); + model->sampler = ParseSamplerConfiguration(child, 0); } return model; diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index 8a28f37d96..8ebe7a552b 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -42,7 +42,6 @@ std::string DocumentNode::DoSubstitution(const std::string &text) while (begin_pos != std::string::npos) { - if (current_pos < begin_pos) { /* @@ -229,7 +228,7 @@ size_t DocumentNode::IntegerFromString(const std::string &value) { const char *ptr = value.c_str(); char *end = nullptr; - int len = value.length(); + size_t len = value.length(); size_t val = strtoll(ptr, &end, 10); if (ptr + len != end) { @@ -243,7 +242,7 @@ double DocumentNode::DoubleFromString(const std::string &value) { const char *ptr = value.c_str(); char *end = nullptr; - int len = value.length(); + size_t len = value.length(); double val = strtod(ptr, &end); if (ptr + len != end) { diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index 732bac6238..09182204ce 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -19,19 +19,48 @@ namespace sdk namespace configuration { -std::unique_ptr RymlDocument::Parse(std::string content) +std::unique_ptr RymlDocument::Parse(const std::string &source, const std::string &content) { + ryml::ParserOptions opts; + opts.locations(true); + +#if OTEL_HAVE_RYML == 6 + ryml::Parser parser(opts); +#endif + +#if OTEL_HAVE_RYML == 7 + ryml::Parser::handler_type event_handler; + ryml::Parser parser(&event_handler, opts); +#endif + ryml::Tree tree; + ryml::csubstr filename; + ryml::csubstr csubstr_content; std::unique_ptr doc; + filename = ryml::to_csubstr(source); + csubstr_content = ryml::to_csubstr(content); + try { - tree = ryml::parse_in_arena(ryml::to_csubstr(content)); +#if OTEL_HAVE_RYML == 6 + tree = parser.parse_in_arena(filename, csubstr_content); +#endif + +#if OTEL_HAVE_RYML == 7 + tree = parse_in_arena(&parser, filename, csubstr_content); +#endif + tree.resolve(); } + catch (const std::exception &e) + { + OTEL_INTERNAL_LOG_ERROR("[Ryml Document] Parse failed with exception: " << e.what()); + return doc; + } catch (...) { - OTEL_INTERNAL_LOG_ERROR("Failed to load yaml."); + OTEL_INTERNAL_LOG_ERROR("[Ryml Document] Parse failed with unknown exception."); return doc; } @@ -42,7 +71,7 @@ std::unique_ptr RymlDocument::Parse(std::string content) std::unique_ptr RymlDocument::GetRootNode() { - RymlDocumentNode *ryml_node = new RymlDocumentNode(m_tree.rootref()); + RymlDocumentNode *ryml_node = new RymlDocumentNode(m_tree.rootref(), 0); std::unique_ptr node(ryml_node); return node; } diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 54c069963c..88dfabb44f 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -153,16 +153,29 @@ ryml::ConstNodeRef RymlDocumentNode::GetRymlChildNode(const std::string &name) std::unique_ptr RymlDocumentNode::GetRequiredChildNode(const std::string &name) { - OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredChildNode(" << name << ")"); + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredChildNode(" << m_depth << ", " << name + << ")"); + + if (m_depth >= MAX_NODE_DEPTH) + { + OTEL_INTERNAL_LOG_ERROR("Yaml nested too deeply " << name); + throw InvalidSchemaException(name); + } auto ryml_child = GetRequiredRymlChildNode(name); - auto child = std::unique_ptr(new RymlDocumentNode(ryml_child)); + auto child = std::unique_ptr(new RymlDocumentNode(ryml_child, m_depth + 1)); return child; } std::unique_ptr RymlDocumentNode::GetChildNode(const std::string &name) { - OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetChildNode(" << name << ")"); + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetChildNode(" << m_depth << ", " << name << ")"); + + if (m_depth >= MAX_NODE_DEPTH) + { + OTEL_INTERNAL_LOG_ERROR("Yaml nested too deeply " << name); + throw InvalidSchemaException(name); + } std::unique_ptr child; @@ -179,7 +192,7 @@ std::unique_ptr RymlDocumentNode::GetChildNode(const std::string & } ryml::ConstNodeRef ryml_child = m_node[name_str]; - child = std::unique_ptr(new RymlDocumentNode(ryml_child)); + child = std::unique_ptr(new RymlDocumentNode(ryml_child, m_depth + 1)); return child; } @@ -348,7 +361,7 @@ DocumentNodeConstIterator RymlDocumentNode::begin() const } #endif - return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(m_node, 0)); + return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(m_node, 0, m_depth)); } DocumentNodeConstIterator RymlDocumentNode::end() const @@ -356,7 +369,7 @@ DocumentNodeConstIterator RymlDocumentNode::end() const OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end()"); return DocumentNodeConstIterator( - new RymlDocumentNodeConstIteratorImpl(m_node, m_node.num_children())); + new RymlDocumentNodeConstIteratorImpl(m_node, m_node.num_children(), m_depth)); } size_t RymlDocumentNode::num_children() const @@ -368,7 +381,7 @@ std::unique_ptr RymlDocumentNode::GetChild(size_t index) const { std::unique_ptr child; ryml::ConstNodeRef ryml_child = m_node[index]; - child = std::unique_ptr(new RymlDocumentNode(ryml_child)); + child = std::unique_ptr(new RymlDocumentNode(ryml_child, m_depth + 1)); return child; } @@ -385,7 +398,7 @@ PropertiesNodeConstIterator RymlDocumentNode::begin_properties() const } #endif - return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(m_node, 0)); + return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(m_node, 0, m_depth)); } PropertiesNodeConstIterator RymlDocumentNode::end_properties() const @@ -393,7 +406,7 @@ PropertiesNodeConstIterator RymlDocumentNode::end_properties() const OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end_properties()"); return PropertiesNodeConstIterator( - new RymlPropertiesNodeConstIteratorImpl(m_node, m_node.num_children())); + new RymlPropertiesNodeConstIteratorImpl(m_node, m_node.num_children(), m_depth)); } std::string RymlDocumentNode::Dump() const @@ -402,8 +415,9 @@ std::string RymlDocumentNode::Dump() const } RymlDocumentNodeConstIteratorImpl::RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, - size_t index) - : m_parent(parent), m_index(index) + size_t index, + size_t depth) + : m_parent(parent), m_index(index), m_depth(depth) {} RymlDocumentNodeConstIteratorImpl::~RymlDocumentNodeConstIteratorImpl() {} @@ -422,7 +436,7 @@ std::unique_ptr RymlDocumentNodeConstIteratorImpl::Item() const OTEL_INTERNAL_LOG_ERROR("iterator is lost "); // Throw } - item = std::unique_ptr(new RymlDocumentNode(ryml_item)); + item = std::unique_ptr(new RymlDocumentNode(ryml_item, m_depth + 1)); return item; } @@ -434,8 +448,9 @@ bool RymlDocumentNodeConstIteratorImpl::Equal(const DocumentNodeConstIteratorImp } RymlPropertiesNodeConstIteratorImpl::RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, - size_t index) - : m_parent(parent), m_index(index) + size_t index, + size_t depth) + : m_parent(parent), m_index(index), m_depth(depth) {} RymlPropertiesNodeConstIteratorImpl::~RymlPropertiesNodeConstIteratorImpl() {} @@ -462,7 +477,7 @@ std::unique_ptr RymlPropertiesNodeConstIteratorImpl::Value() const std::unique_ptr item; ryml::ConstNodeRef ryml_item = m_parent[m_index]; - item = std::unique_ptr(new RymlDocumentNode(ryml_item)); + item = std::unique_ptr(new RymlDocumentNode(ryml_item, m_depth + 1)); OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Value()"); diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index 23f37f974f..ad31fa65dd 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -50,36 +50,29 @@ std::unique_ptr YamlConfigurationFactory::ParseFile(const std::st { std::ostringstream content; content << in.rdbuf(); - conf = YamlConfigurationFactory::ParseString(content.str()); + conf = YamlConfigurationFactory::ParseString(input_file, content.str()); } return conf; } -static std::unique_ptr RymlParse(const std::string &content) +static std::unique_ptr RymlParse(const std::string &source, const std::string &content) { std::unique_ptr doc; - try - { - doc = RymlDocument::Parse(content); - } - catch (...) - { - OTEL_INTERNAL_LOG_ERROR("Failed to parse yaml."); - return nullptr; - } + doc = RymlDocument::Parse(source, content); return doc; } -std::unique_ptr YamlConfigurationFactory::ParseString(const std::string &content) +std::unique_ptr YamlConfigurationFactory::ParseString(const std::string &source, + const std::string &content) { std::unique_ptr doc; std::unique_ptr root; std::unique_ptr config; - doc = RymlParse(content); + doc = RymlParse(source, content); try { @@ -88,9 +81,15 @@ std::unique_ptr YamlConfigurationFactory::ParseString(const std:: config = ConfigurationFactory::ParseConfiguration(std::move(doc)); } } + catch (const std::exception &e) + { + OTEL_INTERNAL_LOG_ERROR( + "[Yaml Configuration Factory] ParseConfiguration failed with exception: " << e.what()); + } catch (...) { - OTEL_INTERNAL_LOG_ERROR("Failed to interpret yaml."); + OTEL_INTERNAL_LOG_ERROR( + "[Yaml Configuration Factory] ParseConfiguration failed with unknown exception."); } return config; diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index e71627a149..002e522626 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -31,9 +31,13 @@ std::unique_ptr ConfiguredSdk::Create( SdkBuilder builder(registry); sdk = builder.CreateConfiguredSdk(model); } + catch (const std::exception &e) + { + OTEL_INTERNAL_LOG_ERROR("[Configured Sdk] builder failed with exception: " << e.what()); + } catch (...) { - OTEL_INTERNAL_LOG_ERROR("Failed to build from the model."); + OTEL_INTERNAL_LOG_ERROR("[Configured Sdk] builder failed with unknown exception."); } } diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index f71f4de546..55e5edc916 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -7,9 +7,10 @@ #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -std::unique_ptr DoParse(std::string yaml) +std::unique_ptr DoParse(const std::string &yaml) { - return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(yaml); + static const std::string source("test"); + return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); } TEST(Yaml, empty) diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc index f0fc10a214..5d82bb6a49 100644 --- a/sdk/test/configuration/yaml_trace_test.cc +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -6,9 +6,10 @@ #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -std::unique_ptr DoParse(std::string yaml) +std::unique_ptr DoParse(const std::string &yaml) { - return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(yaml); + static const std::string source("test"); + return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); } TEST(YamlTrace, no_processors) From a3e5e0520c77dec624ed2444e6a24853ac6667dd Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 3 Aug 2024 19:59:15 +0200 Subject: [PATCH 060/166] format --- sdk/src/configuration/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index c1fb2c3afc..1e91a5798e 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -6,7 +6,7 @@ add_library( configuration_factory.cc document_node.cc yaml_configuration_factory.cc ryml_document.cc ryml_document_node.cc) -if (ryml_VERSION VERSION_GREATER_EQUAL 0.7.0) +if(ryml_VERSION VERSION_GREATER_EQUAL 0.7.0) # https://github.com/biojppm/rapidyaml/issues/455 message(WARNING "Detected ryml >= 0.7.0, it may be unstable") add_definitions(-DOTEL_HAVE_RYML=7) From c6f150313c5d99213d72a7bd42c67050c2c9000f Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 4 Aug 2024 16:17:05 +0200 Subject: [PATCH 061/166] Implemented builder for metrics (in progress) Add ressource in SDK. --- examples/yaml/CMakeLists.txt | 5 +- examples/yaml/kitchen-sink.yaml | 2 + examples/yaml/main.cc | 9 +- .../metric_reader_configuration.h | 3 + .../metric_reader_configuration_visitor.h | 29 +++ .../periodic_metric_reader_configuration.h | 6 + .../pull_metric_reader_configuration.h | 6 + .../opentelemetry/sdk/init/configured_sdk.h | 4 + .../opentelemetry/sdk/init/sdk_builder.h | 35 ++- ...periodic_exporting_metric_reader_factory.h | 1 + sdk/src/init/configured_sdk.cc | 28 +++ sdk/src/init/sdk_builder.cc | 205 +++++++++++++++++- 12 files changed, 312 insertions(+), 21 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index 63054f56ca..a9a78e3f5e 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -18,8 +18,9 @@ add_executable( custom_span_processor_builder.cc) target_link_libraries( - example_yaml ${CMAKE_THREAD_LIBS_INIT} common_foo_library - opentelemetry_exporter_ostream_span opentelemetry_exporter_ostream_logs) + example_yaml ${CMAKE_THREAD_LIBS_INIT} common_metrics_foo_library + common_logs_foo_library opentelemetry_exporter_ostream_span + opentelemetry_exporter_ostream_logs) if(WITH_OTLP_HTTP) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) diff --git a/examples/yaml/kitchen-sink.yaml b/examples/yaml/kitchen-sink.yaml index 49d9c85e95..ded8bbc08d 100644 --- a/examples/yaml/kitchen-sink.yaml +++ b/examples/yaml/kitchen-sink.yaml @@ -402,5 +402,7 @@ resource: # # Environment variable: OTEL_SERVICE_NAME service.name: !!str "unknown_service" + foo: the_foo + bar: the_bar # Configure the resource schema URL. schema_url: https://opentelemetry.io/schemas/1.16.0 diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 308bfb628b..fd80f3f9c8 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -18,9 +18,11 @@ #include "custom_span_processor_builder.h" #ifdef BAZEL_BUILD -# include "examples/common/foo_library/foo_library.h" +# include "examples/common/logs_foo_library/foo_library.h" +# include "examples/common/metrics_foo_library/foo_library.h" #else -# include "foo_library/foo_library.h" +# include "logs_foo_library/foo_library.h" +# include "metrics_foo_library/foo_library.h" #endif #ifdef OTEL_HAVE_OTLP @@ -174,6 +176,9 @@ int main(int argc, char *argv[]) InitOtel(yaml_file_path); foo_library(); + foo_library::counter_example("yaml"); + foo_library::observable_counter_example("yaml"); + foo_library::histogram_example("yaml"); CleanupOtel(); } diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h index e47167051f..1ab2d5ad1c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h @@ -12,12 +12,15 @@ namespace sdk { namespace configuration { +class MetricReaderConfigurationVisitor; class MetricReaderConfiguration { public: MetricReaderConfiguration() = default; virtual ~MetricReaderConfiguration() = default; + + virtual void Accept(MetricReaderConfigurationVisitor *visitor) const = 0; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h new file mode 100644 index 0000000000..83b74c1b0b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class PeriodicMetricReaderConfiguration; +class PullMetricReaderConfiguration; + +class MetricReaderConfigurationVisitor +{ +public: + MetricReaderConfigurationVisitor() = default; + virtual ~MetricReaderConfigurationVisitor() = default; + + virtual void VisitPeriodic(const PeriodicMetricReaderConfiguration *model) = 0; + virtual void VisitPull(const PullMetricReaderConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index e09c5ca431..1cfea270de 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -7,6 +7,7 @@ #include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -21,6 +22,11 @@ class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration PeriodicMetricReaderConfiguration() = default; ~PeriodicMetricReaderConfiguration() override = default; + void Accept(MetricReaderConfigurationVisitor *visitor) const override + { + visitor->VisitPeriodic(this); + } + size_t interval; size_t timeout; std::unique_ptr exporter; diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index 4f8e5856e6..3c23774e27 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -7,6 +7,7 @@ #include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -21,6 +22,11 @@ class PullMetricReaderConfiguration : public MetricReaderConfiguration PullMetricReaderConfiguration() = default; ~PullMetricReaderConfiguration() override = default; + void Accept(MetricReaderConfigurationVisitor *visitor) const override + { + visitor->VisitPull(this); + } + std::unique_ptr exporter; }; diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/init/configured_sdk.h index 8c8bc5cf50..941269a801 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/init/configured_sdk.h @@ -8,6 +8,7 @@ #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/metrics/meter_provider.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/version.h" @@ -24,9 +25,12 @@ class ConfiguredSdk std::shared_ptr registry, const std::unique_ptr &model); + ConfiguredSdk() : m_resource(opentelemetry::sdk::resource::Resource::GetEmpty()) {} + void Install(); void UnInstall(); + opentelemetry::sdk::resource::Resource m_resource; std::shared_ptr m_tracer_provider; std::shared_ptr m_propagator; std::shared_ptr m_meter_provider; diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index c982dfc108..b64e22fd3a 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -11,8 +11,11 @@ #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" @@ -20,7 +23,9 @@ #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/sdk/logs/logger_provider.h" +#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.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" @@ -91,8 +96,8 @@ class SdkBuilder const; std::unique_ptr CreateTracerProvider( - const std::unique_ptr &model) - const; + const std::unique_ptr &model, + const opentelemetry::sdk::resource::Resource &resource) const; std::unique_ptr CreateTextMapPropagator( const std::string &name) const; @@ -107,13 +112,27 @@ class SdkBuilder const std::unique_ptr &model) const; + std::unique_ptr CreatePushMetricExporter( + const std::unique_ptr &model) + const; + + std::unique_ptr CreatePeriodicMetricReader( + const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model) const; + + std::unique_ptr CreatePullMetricReader( + const opentelemetry::sdk::configuration::PullMetricReaderConfiguration *model) const; + + std::unique_ptr CreateMetricReader( + const std::unique_ptr &model) + const; + void AddView( opentelemetry::sdk::metrics::ViewRegistry *registry, const std::unique_ptr &model) const; std::unique_ptr CreateMeterProvider( - const std::unique_ptr &model) - const; + const std::unique_ptr &model, + const opentelemetry::sdk::resource::Resource &resource) const; std::unique_ptr CreateOtlpLogRecordExporter( const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const; @@ -144,8 +163,12 @@ class SdkBuilder &model) const; std::unique_ptr CreateLoggerProvider( - const std::unique_ptr &model) - const; + const std::unique_ptr &model, + const opentelemetry::sdk::resource::Resource &resource) const; + + void SetResource(opentelemetry::sdk::resource::Resource &resource, + const std::unique_ptr + &opt_model) const; std::unique_ptr CreateConfiguredSdk( const std::unique_ptr &model) const; diff --git a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h index 8cb439599e..c908295f1a 100644 --- a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h +++ b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h @@ -19,6 +19,7 @@ namespace metrics class OPENTELEMETRY_EXPORT PeriodicExportingMetricReaderFactory { public: + // FIXME, return type static std::unique_ptr Create(std::unique_ptr exporter, const PeriodicExportingMetricReaderOptions &option); }; diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index 002e522626..10167a7fb7 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -3,6 +3,10 @@ #include +#include "opentelemetry/logs/logger_provider.h" +#include "opentelemetry/logs/provider.h" +#include "opentelemetry/metrics/meter_provider.h" +#include "opentelemetry/metrics/provider.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" @@ -51,6 +55,18 @@ void ConfiguredSdk::Install() std::shared_ptr api_tracer_provider = m_tracer_provider; opentelemetry::trace::Provider::SetTracerProvider(api_tracer_provider); } + + if (m_meter_provider) + { + std::shared_ptr api_meter_provider = m_meter_provider; + opentelemetry::metrics::Provider::SetMeterProvider(api_meter_provider); + } + + if (m_logger_provider) + { + std::shared_ptr api_logger_provider = m_logger_provider; + opentelemetry::logs::Provider::SetLoggerProvider(api_logger_provider); + } } void ConfiguredSdk::UnInstall() @@ -60,6 +76,18 @@ void ConfiguredSdk::UnInstall() std::shared_ptr none; opentelemetry::trace::Provider::SetTracerProvider(none); } + + if (m_meter_provider) + { + std::shared_ptr none; + opentelemetry::metrics::Provider::SetMeterProvider(none); + } + + if (m_logger_provider) + { + std::shared_ptr none; + opentelemetry::logs::Provider::SetLoggerProvider(none); + } } } // namespace init diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 49cf204d01..5dcbe334ce 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -31,11 +31,14 @@ #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" @@ -74,8 +77,12 @@ #include "opentelemetry/sdk/logs/processor.h" #include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" +#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h" +#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h" #include "opentelemetry/sdk/metrics/instruments.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/view/attributes_processor.h" #include "opentelemetry/sdk/metrics/view/instrument_selector.h" #include "opentelemetry/sdk/metrics/view/meter_selector.h" @@ -243,6 +250,70 @@ class SpanExporterBuilder const SdkBuilder *m_sdk_builder; }; +class MetricReaderBuilder + : public opentelemetry::sdk::configuration::MetricReaderConfigurationVisitor +{ +public: + MetricReaderBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + ~MetricReaderBuilder() override = default; + + void VisitPeriodic( + const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model) override + { + metric_reader = m_sdk_builder->CreatePeriodicMetricReader(model); + } + + void VisitPull( + const opentelemetry::sdk::configuration::PullMetricReaderConfiguration *model) override + { + metric_reader = m_sdk_builder->CreatePullMetricReader(model); + } + + std::unique_ptr metric_reader; + +private: + const SdkBuilder *m_sdk_builder; +}; + +#ifdef LATER +class MetricExporterBuilder + : public opentelemetry::sdk::configuration::MetricExporterConfigurationVisitor +{ +public: + MetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + ~MetricExporterBuilder() override = default; + + void VisitOtlp( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) override + { + exporter = m_sdk_builder->CreateOtlpSpanExporter(model); + } + + void VisitConsole( + const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) override + { + exporter = m_sdk_builder->CreateConsoleSpanExporter(model); + } + + void VisitZipkin( + const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) override + { + exporter = m_sdk_builder->CreateZipkinSpanExporter(model); + } + + void VisitExtension( + const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) override + { + exporter = m_sdk_builder->CreateExtensionSpanExporter(model); + } + + std::unique_ptr exporter; + +private: + const SdkBuilder *m_sdk_builder; +}; +#endif + class LogRecordProcessorBuilder : public opentelemetry::sdk::configuration::LogRecordProcessorConfigurationVisitor { @@ -562,8 +633,8 @@ std::unique_ptr SdkBuilder::CreateSpan } std::unique_ptr SdkBuilder::CreateTracerProvider( - const std::unique_ptr &model) - const + const std::unique_ptr &model, + const opentelemetry::sdk::resource::Resource &resource) const { std::unique_ptr sdk; @@ -585,7 +656,8 @@ std::unique_ptr SdkBuilder::CreateTra } // FIXME: use sampler, limits, id_generator, ... - sdk = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(sdk_processors)); + sdk = + opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(sdk_processors), resource); return sdk; } @@ -683,6 +755,65 @@ static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType( return sdk; } +std::unique_ptr +SdkBuilder::CreatePushMetricExporter( + const std::unique_ptr &model) + const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePushMetricExporter: FIXME"); + +#ifdef LATER + MetricExporterBuilder builder(this); + model->Accept(&builder); + sdk = std::move(builder.exporter); +#endif + + return sdk; +} + +std::unique_ptr SdkBuilder::CreatePeriodicMetricReader( + const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model) const +{ + std::unique_ptr sdk; + + opentelemetry::sdk::metrics::PeriodicExportingMetricReaderOptions options; + + options.export_interval_millis = std::chrono::milliseconds(model->interval); + options.export_timeout_millis = std::chrono::milliseconds(model->timeout); + + auto exporter_sdk = CreatePushMetricExporter(model->exporter); + + sdk = opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create( + std::move(exporter_sdk), options); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreatePullMetricReader( + const opentelemetry::sdk::configuration::PullMetricReaderConfiguration *model) const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePullMetricReader: FIXME"); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateMetricReader( + const std::unique_ptr &model) + const +{ + std::unique_ptr sdk; + + MetricReaderBuilder builder(this); + model->Accept(&builder); + sdk = std::move(builder.metric_reader); + + return sdk; +} + void SdkBuilder::AddView( opentelemetry::sdk::metrics::ViewRegistry *registry, const std::unique_ptr &model) const @@ -723,8 +854,8 @@ void SdkBuilder::AddView( } std::unique_ptr SdkBuilder::CreateMeterProvider( - const std::unique_ptr &model) - const + const std::unique_ptr &model, + const opentelemetry::sdk::resource::Resource &resource) const { std::unique_ptr sdk; @@ -735,8 +866,20 @@ std::unique_ptr SdkBuilder::CreateMe AddView(view_registry.get(), view_configuration); } + auto meter_context = + opentelemetry::sdk::metrics::MeterContextFactory::Create(std::move(view_registry), resource); + OTEL_INTERNAL_LOG_ERROR("CreateMeterProvider() FIXME"); + for (const auto &reader_configuration : model->readers) + { + std::shared_ptr metric_reader; + metric_reader = CreateMetricReader(reader_configuration); + meter_context->AddMetricReader(metric_reader); + } + + sdk = opentelemetry::sdk::metrics::MeterProviderFactory::Create(std::move(meter_context)); + return sdk; } @@ -888,8 +1031,8 @@ std::unique_ptr SdkBuilder::Create } std::unique_ptr SdkBuilder::CreateLoggerProvider( - const std::unique_ptr &model) - const + const std::unique_ptr &model, + const opentelemetry::sdk::resource::Resource &resource) const { std::unique_ptr sdk; @@ -901,11 +1044,39 @@ std::unique_ptr SdkBuilder::CreateLogg } // FIXME: use limits - sdk = opentelemetry::sdk::logs::LoggerProviderFactory::Create(std::move(sdk_processors)); + sdk = + opentelemetry::sdk::logs::LoggerProviderFactory::Create(std::move(sdk_processors), resource); return sdk; } +void SdkBuilder::SetResource( + opentelemetry::sdk::resource::Resource &resource, + const std::unique_ptr &opt_model) + const +{ + if (opt_model) + { + opentelemetry::sdk::resource::ResourceAttributes sdk_attributes; + + if (opt_model->attributes) + { + for (const auto &kv : opt_model->attributes->kv_map) + { + sdk_attributes.SetAttribute(kv.first, kv.second); + } + } + + auto sdk_resource = + opentelemetry::sdk::resource::Resource::Create(sdk_attributes, opt_model->schema_url); + resource = resource.Merge(sdk_resource); + } + else + { + resource = opentelemetry::sdk::resource::Resource::GetDefault(); + } +} + std::unique_ptr SdkBuilder::CreateConfiguredSdk( const std::unique_ptr &model) const { @@ -913,9 +1084,18 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (!model->disabled) { + SetResource(sdk->m_resource, model->resource); + + if (model->attribute_limits) + { + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreateConfiguredSdk: FIXME limits"); + // Ignore limits + // throw UnsupportedException("attribute_limits not available in opentelemetry-cpp"); + } + if (model->tracer_provider) { - sdk->m_tracer_provider = CreateTracerProvider(model->tracer_provider); + sdk->m_tracer_provider = CreateTracerProvider(model->tracer_provider, sdk->m_resource); } if (model->propagator) @@ -925,12 +1105,15 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (model->meter_provider) { - sdk->m_meter_provider = CreateMeterProvider(model->meter_provider); + // FIXME: work in progress +#ifdef LATER + sdk->m_meter_provider = CreateMeterProvider(model->meter_provider, sdk->m_resource); +#endif } if (model->logger_provider) { - sdk->m_logger_provider = CreateLoggerProvider(model->logger_provider); + sdk->m_logger_provider = CreateLoggerProvider(model->logger_provider, sdk->m_resource); } } From a768f8dc6134b44dea101de72f936dc0468b4117 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 4 Aug 2024 19:12:24 +0200 Subject: [PATCH 062/166] Split MetricExporterConfiguration into: - PushMetricExporterConfiguration - PullMetricExporterConfiguration Use builders for metric exporters --- .../console_metric_exporter_configuration.h | 31 --- ...nsole_push_metric_exporter_configuration.h | 31 +++ .../extension_metric_exporter_configuration.h | 34 --- ...nsion_pull_metric_exporter_configuration.h | 34 +++ ...nsion_push_metric_exporter_configuration.h | 34 +++ .../metric_exporter_configuration_visitor.h | 33 --- ...otlp_push_metric_exporter_configuration.h} | 12 +- .../periodic_metric_reader_configuration.h | 4 +- ...heus_pull_metric_exporter_configuration.h} | 12 +- ...h => pull_metric_exporter_configuration.h} | 10 +- ...ll_metric_exporter_configuration_visitor.h | 29 +++ .../pull_metric_reader_configuration.h | 4 +- .../push_metric_exporter_configuration.h | 26 +++ ...sh_metric_exporter_configuration_visitor.h | 31 +++ .../console_push_metric_exporter_builder.h | 29 +++ .../extension_pull_metric_exporter_builder.h | 29 +++ .../extension_push_metric_exporter_builder.h | 29 +++ .../init/otlp_push_metric_exporter_builder.h | 29 +++ .../prometheus_pull_metric_exporter_builder.h | 29 +++ sdk/include/opentelemetry/sdk/init/registry.h | 49 +++++ .../opentelemetry/sdk/init/sdk_builder.h | 34 ++- .../configuration/configuration_factory.cc | 105 ++++++--- sdk/src/init/registry.cc | 38 ++++ sdk/src/init/sdk_builder.cc | 206 +++++++++++++++--- 24 files changed, 726 insertions(+), 176 deletions(-) delete mode 100644 sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h delete mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h delete mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h rename sdk/include/opentelemetry/sdk/configuration/{otlp_metric_exporter_configuration.h => otlp_push_metric_exporter_configuration.h} (65%) rename sdk/include/opentelemetry/sdk/configuration/{prometheus_metric_exporter_configuration.h => prometheus_pull_metric_exporter_configuration.h} (52%) rename sdk/include/opentelemetry/sdk/configuration/{metric_exporter_configuration.h => pull_metric_exporter_configuration.h} (51%) create mode 100644 sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h diff --git a/sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h deleted file mode 100644 index 45a1a23e5c..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/console_metric_exporter_configuration.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/sdk/configuration/headers_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class ConsoleMetricExporterConfiguration : public MetricExporterConfiguration -{ -public: - ConsoleMetricExporterConfiguration() = default; - ~ConsoleMetricExporterConfiguration() override = default; - - void Accept(MetricExporterConfigurationVisitor *visitor) const override - { - visitor->VisitConsole(this); - } -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h new file mode 100644 index 0000000000..119b816e4c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ConsolePushMetricExporterConfiguration : public PushMetricExporterConfiguration +{ +public: + ConsolePushMetricExporterConfiguration() = default; + ~ConsolePushMetricExporterConfiguration() override = default; + + void Accept(PushMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitConsole(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h deleted file mode 100644 index 8f7120905b..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/sdk/configuration/document_node.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class ExtensionMetricExporterConfiguration : public MetricExporterConfiguration -{ -public: - ExtensionMetricExporterConfiguration() = default; - ~ExtensionMetricExporterConfiguration() override = default; - - void Accept(MetricExporterConfigurationVisitor *visitor) const override - { - visitor->VisitExtension(this); - } - - std::string name; - std::unique_ptr node; -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h new file mode 100644 index 0000000000..208dc2e4e3 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionPullMetricExporterConfiguration : public PullMetricExporterConfiguration +{ +public: + ExtensionPullMetricExporterConfiguration() = default; + ~ExtensionPullMetricExporterConfiguration() override = default; + + void Accept(PullMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h new file mode 100644 index 0000000000..87174087e1 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionPushMetricExporterConfiguration : public PushMetricExporterConfiguration +{ +public: + ExtensionPushMetricExporterConfiguration() = default; + ~ExtensionPushMetricExporterConfiguration() override = default; + + void Accept(PushMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h deleted file mode 100644 index 7cb4a593d2..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class OtlpMetricExporterConfiguration; -class ConsoleMetricExporterConfiguration; -class PrometheusMetricExporterConfiguration; -class ExtensionMetricExporterConfiguration; - -class MetricExporterConfigurationVisitor -{ -public: - MetricExporterConfigurationVisitor() = default; - virtual ~MetricExporterConfigurationVisitor() = default; - - virtual void VisitOtlp(const OtlpMetricExporterConfiguration *model) = 0; - virtual void VisitConsole(const ConsoleMetricExporterConfiguration *model) = 0; - virtual void VisitPrometheus(const PrometheusMetricExporterConfiguration *model) = 0; - virtual void VisitExtension(const ExtensionMetricExporterConfiguration *model) = 0; -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h similarity index 65% rename from sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h index 5a7fbe0f0e..050f1ac3b4 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h @@ -4,8 +4,8 @@ #pragma once #include "opentelemetry/sdk/configuration/headers_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -20,13 +20,13 @@ enum enum_default_histogram_aggregation base2_exponential_bucket_histogram }; -class OtlpMetricExporterConfiguration : public MetricExporterConfiguration +class OtlpPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: - OtlpMetricExporterConfiguration() = default; - ~OtlpMetricExporterConfiguration() override = default; + OtlpPushMetricExporterConfiguration() = default; + ~OtlpPushMetricExporterConfiguration() override = default; - void Accept(MetricExporterConfigurationVisitor *visitor) const override + void Accept(PushMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlp(this); } diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index 1cfea270de..83797537f6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -5,9 +5,9 @@ #include -#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -29,7 +29,7 @@ class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration size_t interval; size_t timeout; - std::unique_ptr exporter; + std::unique_ptr exporter; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h similarity index 52% rename from sdk/include/opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h index b3fabae67d..d8b96ef57b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h @@ -4,8 +4,8 @@ #pragma once #include "opentelemetry/sdk/configuration/headers_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -14,13 +14,13 @@ namespace sdk namespace configuration { -class PrometheusMetricExporterConfiguration : public MetricExporterConfiguration +class PrometheusPullMetricExporterConfiguration : public PullMetricExporterConfiguration { public: - PrometheusMetricExporterConfiguration() = default; - ~PrometheusMetricExporterConfiguration() override = default; + PrometheusPullMetricExporterConfiguration() = default; + ~PrometheusPullMetricExporterConfiguration() override = default; - void Accept(MetricExporterConfigurationVisitor *visitor) const override + void Accept(PullMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitPrometheus(this); } diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h similarity index 51% rename from sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h index 670da28a7d..9fda353948 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h @@ -10,15 +10,15 @@ namespace sdk { namespace configuration { -class MetricExporterConfigurationVisitor; +class PullMetricExporterConfigurationVisitor; -class MetricExporterConfiguration +class PullMetricExporterConfiguration { public: - MetricExporterConfiguration() = default; - virtual ~MetricExporterConfiguration() = default; + PullMetricExporterConfiguration() = default; + virtual ~PullMetricExporterConfiguration() = default; - virtual void Accept(MetricExporterConfigurationVisitor *visitor) const = 0; + virtual void Accept(PullMetricExporterConfigurationVisitor *visitor) const = 0; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h new file mode 100644 index 0000000000..1904db5954 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class PrometheusPullMetricExporterConfiguration; +class ExtensionPullMetricExporterConfiguration; + +class PullMetricExporterConfigurationVisitor +{ +public: + PullMetricExporterConfigurationVisitor() = default; + virtual ~PullMetricExporterConfigurationVisitor() = default; + + virtual void VisitPrometheus(const PrometheusPullMetricExporterConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionPullMetricExporterConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index 3c23774e27..3009dd2ce5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -5,9 +5,9 @@ #include -#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -27,7 +27,7 @@ class PullMetricReaderConfiguration : public MetricReaderConfiguration visitor->VisitPull(this); } - std::unique_ptr exporter; + std::unique_ptr exporter; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h new file mode 100644 index 0000000000..e977f58929 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class PushMetricExporterConfigurationVisitor; + +class PushMetricExporterConfiguration +{ +public: + PushMetricExporterConfiguration() = default; + virtual ~PushMetricExporterConfiguration() = default; + + virtual void Accept(PushMetricExporterConfigurationVisitor *visitor) const = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h new file mode 100644 index 0000000000..f88f7c3320 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpPushMetricExporterConfiguration; +class ConsolePushMetricExporterConfiguration; +class ExtensionPushMetricExporterConfiguration; + +class PushMetricExporterConfigurationVisitor +{ +public: + PushMetricExporterConfigurationVisitor() = default; + virtual ~PushMetricExporterConfigurationVisitor() = default; + + virtual void VisitOtlp(const OtlpPushMetricExporterConfiguration *model) = 0; + virtual void VisitConsole(const ConsolePushMetricExporterConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionPushMetricExporterConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h new file mode 100644 index 0000000000..f00cb7ac43 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ConsolePushMetricExporterBuilder +{ +public: + ConsolePushMetricExporterBuilder() = default; + virtual ~ConsolePushMetricExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h new file mode 100644 index 0000000000..f1b55de2ac --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ExtensionPullMetricExporterBuilder +{ +public: + ExtensionPullMetricExporterBuilder() = default; + virtual ~ExtensionPullMetricExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h new file mode 100644 index 0000000000..af1890de25 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class ExtensionPushMetricExporterBuilder +{ +public: + ExtensionPushMetricExporterBuilder() = default; + virtual ~ExtensionPushMetricExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h new file mode 100644 index 0000000000..f1ff3a544b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpPushMetricExporterBuilder +{ +public: + OtlpPushMetricExporterBuilder() = default; + virtual ~OtlpPushMetricExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h new file mode 100644 index 0000000000..56d9e1d39b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class PrometheusPullMetricExporterBuilder +{ +public: + PrometheusPullMetricExporterBuilder() = default; + virtual ~PrometheusPullMetricExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 8c7343676a..926d9e8940 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -21,6 +21,12 @@ class ExtensionSamplerBuilder; class ExtensionSpanExporterBuilder; class ExtensionSpanProcessorBuilder; +class OtlpPushMetricExporterBuilder; +class ConsolePushMetricExporterBuilder; +class ExtensionPushMetricExporterBuilder; +class PrometheusPullMetricExporterBuilder; +class ExtensionPullMetricExporterBuilder; + class OtlpLogRecordExporterBuilder; class ConsoleLogRecordExporterBuilder; class ExtensionLogRecordExporterBuilder; @@ -49,6 +55,33 @@ class Registry m_zipkin_span_builder = builder; } + const OtlpPushMetricExporterBuilder *GetOtlpPushMetricExporterBuilder() + { + return m_otlp_metric_builder; + } + void SetOtlpPushMetricExporterBuilder(const OtlpPushMetricExporterBuilder *builder) + { + m_otlp_metric_builder = builder; + } + + const ConsolePushMetricExporterBuilder *GetConsolePushMetricExporterBuilder() + { + return m_console_metric_builder; + } + void SetConsolePushMetricExporterBuilder(const ConsolePushMetricExporterBuilder *builder) + { + m_console_metric_builder = builder; + } + + const PrometheusPullMetricExporterBuilder *GetPrometheusPullMetricExporterBuilder() + { + return m_prometheus_metric_builder; + } + void SetPrometheusPullMetricExporterBuilder(const PrometheusPullMetricExporterBuilder *builder) + { + m_prometheus_metric_builder = builder; + } + const OtlpLogRecordExporterBuilder *GetOtlpLogRecordBuilder() { return m_otlp_log_record_builder; @@ -83,6 +116,16 @@ class Registry void AddExtensionSpanProcessorBuilder(const std::string &name, ExtensionSpanProcessorBuilder *builder); + const ExtensionPushMetricExporterBuilder *GetExtensionPushMetricExporterBuilder( + const std::string &name); + void AddExtensionPushMetricExporterBuilder(const std::string &name, + ExtensionPushMetricExporterBuilder *builder); + + const ExtensionPullMetricExporterBuilder *GetExtensionPullMetricExporterBuilder( + const std::string &name); + void AddExtensionPullMetricExporterBuilder(const std::string &name, + ExtensionPullMetricExporterBuilder *builder); + const ExtensionLogRecordExporterBuilder *GetExtensionLogRecordExporterBuilder( const std::string &name); void AddExtensionLogRecordExporterBuilder(const std::string &name, @@ -98,6 +141,10 @@ class Registry const ConsoleSpanExporterBuilder *m_console_span_builder{nullptr}; const ZipkinSpanExporterBuilder *m_zipkin_span_builder{nullptr}; + const OtlpPushMetricExporterBuilder *m_otlp_metric_builder{nullptr}; + const ConsolePushMetricExporterBuilder *m_console_metric_builder{nullptr}; + const PrometheusPullMetricExporterBuilder *m_prometheus_metric_builder{nullptr}; + const OtlpLogRecordExporterBuilder *m_otlp_log_record_builder{nullptr}; const ConsoleLogRecordExporterBuilder *m_console_log_record_builder{nullptr}; @@ -105,6 +152,8 @@ class Registry std::map m_sampler_builders; std::map m_span_exporter_builders; std::map m_span_processor_builders; + std::map m_push_metric_exporter_builders; + std::map m_pull_metric_exporter_builders; std::map m_log_record_exporter_builders; std::map m_log_record_processor_builders; }; diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index b64e22fd3a..a4e0ea2b31 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -9,13 +9,20 @@ #include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" @@ -112,10 +119,33 @@ class SdkBuilder const std::unique_ptr &model) const; - std::unique_ptr CreatePushMetricExporter( - const std::unique_ptr &model) + std::unique_ptr CreateOtlpPushMetricExporter( + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) const; + + std::unique_ptr CreateConsolePushMetricExporter( + const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) const; + + std::unique_ptr + CreateExtensionPushMetricExporter( + const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) + const; + + std::unique_ptr CreatePrometheusPullMetricExporter( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) + const; + + std::unique_ptr CreateExtensionPullMetricExporter( + const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) const; + std::unique_ptr CreatePushMetricExporter( + const std::unique_ptr + &model) const; + + std::unique_ptr CreatePullMetricExporter( + const std::unique_ptr + &model) const; + std::unique_ptr CreatePeriodicMetricReader( const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model) const; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index f71b801308..2b64bc49c8 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -22,7 +22,7 @@ #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/console_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/default_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/document.h" @@ -31,7 +31,8 @@ #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" -#include "opentelemetry/sdk/configuration/extension_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" @@ -44,16 +45,17 @@ #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" -#include "opentelemetry/sdk/configuration/metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" -#include "opentelemetry/sdk/configuration/prometheus_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/resource_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" @@ -330,10 +332,11 @@ static enum_default_histogram_aggregation ParseDefaultHistogramAggregation(const throw InvalidSchemaException("Illegal default_histogram_aggregation"); } -static std::unique_ptr ParseOtlpMetricExporterConfiguration( - const std::unique_ptr &node) +static std::unique_ptr +ParseOtlpPushMetricExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model(new OtlpMetricExporterConfiguration); + std::unique_ptr model( + new OtlpPushMetricExporterConfiguration); std::unique_ptr child; model->protocol = node->GetRequiredString("protocol"); @@ -361,19 +364,20 @@ static std::unique_ptr ParseOtlpMetricExporterC return model; } -static std::unique_ptr ParseConsoleMetricExporterConfiguration( - const std::unique_ptr & /* node */) +static std::unique_ptr +ParseConsolePushMetricExporterConfiguration(const std::unique_ptr & /* node */) { - std::unique_ptr model(new ConsoleMetricExporterConfiguration); + std::unique_ptr model( + new ConsolePushMetricExporterConfiguration); return model; } -static std::unique_ptr -ParsePrometheusMetricExporterConfiguration(const std::unique_ptr &node) +static std::unique_ptr +ParsePrometheusPullMetricExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new PrometheusMetricExporterConfiguration); + std::unique_ptr model( + new PrometheusPullMetricExporterConfiguration); model->host = node->GetString("host", "localhost"); model->port = node->GetInteger("port", 9464); @@ -384,21 +388,32 @@ ParsePrometheusMetricExporterConfiguration(const std::unique_ptr & return model; } -static std::unique_ptr -ParseMetricExporterExtensionConfiguration(const std::string &name, - std::unique_ptr node) +static std::unique_ptr +ParsePushMetricExporterExtensionConfiguration(const std::string &name, + std::unique_ptr node) +{ + std::unique_ptr model( + new ExtensionPushMetricExporterConfiguration); + model->name = name; + model->node = std::move(node); + return model; +} + +static std::unique_ptr +ParsePullMetricExporterExtensionConfiguration(const std::string &name, + std::unique_ptr node) { - std::unique_ptr model( - new ExtensionMetricExporterConfiguration); + std::unique_ptr model( + new ExtensionPullMetricExporterConfiguration); model->name = name; model->node = std::move(node); return model; } -static std::unique_ptr ParseMetricExporterConfiguration( +static std::unique_ptr ParsePushMetricExporterConfiguration( const std::unique_ptr &node) { - std::unique_ptr model; + std::unique_ptr model; std::string name; std::unique_ptr child; @@ -413,25 +428,55 @@ static std::unique_ptr ParseMetricExporterConfigura if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseMetricExporterConfiguration: count " << count); + OTEL_INTERNAL_LOG_ERROR("ParsePushMetricExporterConfiguration: count " << count); throw InvalidSchemaException("Illegal metric exporter"); } if (name == "otlp") { - model = ParseOtlpMetricExporterConfiguration(child); + model = ParseOtlpPushMetricExporterConfiguration(child); } else if (name == "console") { - model = ParseConsoleMetricExporterConfiguration(child); + model = ParseConsolePushMetricExporterConfiguration(child); + } + else + { + model = ParsePushMetricExporterExtensionConfiguration(name, std::move(child)); + } + + return model; +} + +static std::unique_ptr ParsePullMetricExporterConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model; + + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; } - else if (name == "prometheus") + + if (count != 1) + { + OTEL_INTERNAL_LOG_ERROR("ParsePullMetricExporterConfiguration: count " << count); + throw InvalidSchemaException("Illegal metric exporter"); + } + + if (name == "prometheus") { - model = ParsePrometheusMetricExporterConfiguration(child); + model = ParsePrometheusPullMetricExporterConfiguration(child); } else { - model = ParseMetricExporterExtensionConfiguration(name, std::move(child)); + model = ParsePullMetricExporterExtensionConfiguration(name, std::move(child)); } return model; @@ -447,7 +492,7 @@ static std::unique_ptr ParsePeriodicMetricRea model->timeout = node->GetInteger("timeout", 30000); child = node->GetRequiredChildNode("exporter"); - model->exporter = ParseMetricExporterConfiguration(child); + model->exporter = ParsePushMetricExporterConfiguration(child); return model; } @@ -459,7 +504,7 @@ static std::unique_ptr ParsePullMetricReaderConfi std::unique_ptr child; child = node->GetRequiredChildNode("exporter"); - model->exporter = ParseMetricExporterConfiguration(child); + model->exporter = ParsePullMetricExporterConfiguration(child); return model; } diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index 9f75fabae9..f10cb40840 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -195,6 +195,44 @@ void Registry::AddExtensionSpanProcessorBuilder(const std::string &name, m_span_processor_builders.insert(entry); } +const ExtensionPushMetricExporterBuilder *Registry::GetExtensionPushMetricExporterBuilder( + const std::string &name) +{ + ExtensionPushMetricExporterBuilder *builder = nullptr; + auto search = m_push_metric_exporter_builders.find(name); + if (search != m_push_metric_exporter_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddExtensionPushMetricExporterBuilder(const std::string &name, + ExtensionPushMetricExporterBuilder *builder) +{ + std::pair entry{name, builder}; + m_push_metric_exporter_builders.insert(entry); +} + +const ExtensionPullMetricExporterBuilder *Registry::GetExtensionPullMetricExporterBuilder( + const std::string &name) +{ + ExtensionPullMetricExporterBuilder *builder = nullptr; + auto search = m_pull_metric_exporter_builders.find(name); + if (search != m_pull_metric_exporter_builders.end()) + { + builder = search->second; + } + return builder; +} + +void Registry::AddExtensionPullMetricExporterBuilder(const std::string &name, + ExtensionPullMetricExporterBuilder *builder) +{ + std::pair entry{name, builder}; + m_pull_metric_exporter_builders.insert(entry); +} + const ExtensionLogRecordExporterBuilder *Registry::GetExtensionLogRecordExporterBuilder( const std::string &name) { diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 5dcbe334ce..7ca0b3e23b 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -38,7 +38,11 @@ #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" @@ -56,14 +60,19 @@ #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/console_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/console_push_metric_exporter_builder.h" #include "opentelemetry/sdk/init/console_span_exporter_builder.h" #include "opentelemetry/sdk/init/extension_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/extension_log_record_processor_builder.h" +#include "opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/extension_push_metric_exporter_builder.h" #include "opentelemetry/sdk/init/extension_sampler_builder.h" #include "opentelemetry/sdk/init/extension_span_exporter_builder.h" #include "opentelemetry/sdk/init/extension_span_processor_builder.h" #include "opentelemetry/sdk/init/otlp_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h" #include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" #include "opentelemetry/sdk/init/text_map_propagator_builder.h" @@ -275,44 +284,64 @@ class MetricReaderBuilder const SdkBuilder *m_sdk_builder; }; -#ifdef LATER -class MetricExporterBuilder - : public opentelemetry::sdk::configuration::MetricExporterConfigurationVisitor +class PushMetricExporterBuilder + : public opentelemetry::sdk::configuration::PushMetricExporterConfigurationVisitor { public: - MetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~MetricExporterBuilder() override = default; + PushMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + ~PushMetricExporterBuilder() override = default; void VisitOtlp( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) override + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpSpanExporter(model); + exporter = m_sdk_builder->CreateOtlpPushMetricExporter(model); } - void VisitConsole( - const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) override + void VisitConsole(const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration + *model) override { - exporter = m_sdk_builder->CreateConsoleSpanExporter(model); + exporter = m_sdk_builder->CreateConsolePushMetricExporter(model); } - void VisitZipkin( - const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) override + void VisitExtension( + const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) + override { - exporter = m_sdk_builder->CreateZipkinSpanExporter(model); + exporter = m_sdk_builder->CreateExtensionPushMetricExporter(model); + } + + std::unique_ptr exporter; + +private: + const SdkBuilder *m_sdk_builder; +}; + +class PullMetricExporterBuilder + : public opentelemetry::sdk::configuration::PullMetricExporterConfigurationVisitor +{ +public: + PullMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + ~PullMetricExporterBuilder() override = default; + + void VisitPrometheus( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) + override + { + exporter = m_sdk_builder->CreatePrometheusPullMetricExporter(model); } void VisitExtension( - const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) override + const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) + override { - exporter = m_sdk_builder->CreateExtensionSpanExporter(model); + exporter = m_sdk_builder->CreateExtensionPullMetricExporter(model); } - std::unique_ptr exporter; + std::unique_ptr exporter; private: const SdkBuilder *m_sdk_builder; }; -#endif class LogRecordProcessorBuilder : public opentelemetry::sdk::configuration::LogRecordProcessorConfigurationVisitor @@ -755,20 +784,149 @@ static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType( return sdk; } +std::unique_ptr +SdkBuilder::CreateOtlpPushMetricExporter( + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) const +{ + std::unique_ptr sdk; + + const OtlpPushMetricExporterBuilder *builder = m_registry->GetOtlpPushMetricExporterBuilder(); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered builder"); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("No builder for OtlpPushMetricExporter"); + throw UnsupportedException("No builder for OtlpPushMetricExporter"); + } + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateConsolePushMetricExporter( + const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) const +{ + std::unique_ptr sdk; + + const ConsolePushMetricExporterBuilder *builder = + m_registry->GetConsolePushMetricExporterBuilder(); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateConsolePushMetricExporter() using registered builder"); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("No builder for ConsolePushMetricExporter"); + throw UnsupportedException("No builder for ConsolePushMetricExporter"); + } + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateExtensionPushMetricExporter( + const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) const +{ + std::unique_ptr sdk; + std::string name = model->name; + + const ExtensionPushMetricExporterBuilder *builder = + m_registry->GetExtensionPushMetricExporterBuilder(name); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPushMetricExporter() using registered builder" << name); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("No builder for ExtensionPushMetricExporter" << name); + throw UnsupportedException("No builder for " + name); + } + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreatePrometheusPullMetricExporter( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) const +{ + std::unique_ptr sdk; + + const PrometheusPullMetricExporterBuilder *builder = + m_registry->GetPrometheusPullMetricExporterBuilder(); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreatePrometheusPullMetricExporter() using registered builder"); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("No builder for PrometheusMetricExporter"); + throw UnsupportedException("No builder for PrometheusMetricExporter"); + } + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateExtensionPullMetricExporter( + const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) const +{ + std::unique_ptr sdk; + std::string name = model->name; + + const ExtensionPullMetricExporterBuilder *builder = + m_registry->GetExtensionPullMetricExporterBuilder(name); + + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPullMetricExporter() using registered builder" << name); + sdk = builder->Build(model); + } + else + { + OTEL_INTERNAL_LOG_ERROR("No builder for ExtensionPullMetricExporter" << name); + throw UnsupportedException("No builder for " + name); + } + + return sdk; +} + std::unique_ptr SdkBuilder::CreatePushMetricExporter( - const std::unique_ptr &model) - const + const std::unique_ptr + &model) const { std::unique_ptr sdk; OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePushMetricExporter: FIXME"); -#ifdef LATER - MetricExporterBuilder builder(this); + PushMetricExporterBuilder builder(this); + model->Accept(&builder); + sdk = std::move(builder.exporter); + + return sdk; +} + +std::unique_ptr SdkBuilder::CreatePullMetricExporter( + const std::unique_ptr + &model) const +{ + std::unique_ptr sdk; + + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePullMetricExporter: FIXME"); + + PullMetricExporterBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.exporter); -#endif return sdk; } @@ -797,6 +955,7 @@ std::unique_ptr SdkBuilder::CreatePul std::unique_ptr sdk; OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePullMetricReader: FIXME"); + sdk = CreatePullMetricExporter(model->exporter); return sdk; } @@ -1105,10 +1264,7 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (model->meter_provider) { - // FIXME: work in progress -#ifdef LATER sdk->m_meter_provider = CreateMeterProvider(model->meter_provider, sdk->m_resource); -#endif } if (model->logger_provider) From 1f7110e23c733c65cfce5da6dd0ff417648a377f Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 5 Aug 2024 21:10:15 +0200 Subject: [PATCH 063/166] Add prometheus exporter builder --- examples/yaml/CMakeLists.txt | 6 +++ examples/yaml/main.cc | 8 +++ exporters/prometheus/BUILD | 2 + exporters/prometheus/CMakeLists.txt | 2 +- .../prometheus/prometheus_pull_builder.h | 36 +++++++++++++ .../prometheus/src/prometheus_pull_builder.cc | 52 +++++++++++++++++++ 6 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h create mode 100644 exporters/prometheus/src/prometheus_pull_builder.cc diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index a9a78e3f5e..55aec8702e 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -34,6 +34,12 @@ if(WITH_ZIPKIN) target_link_libraries(example_yaml opentelemetry_exporter_zipkin_trace) endif() +if(WITH_PROMETHEUS) + include_directories(${CMAKE_SOURCE_DIR}/exporters/prometheus/include) + add_definitions(-DOTEL_HAVE_PROMETHEUS) + target_link_libraries(example_yaml opentelemetry_exporter_prometheus) +endif() + if(DEFINED OPENTELEMETRY_BUILD_DLL) target_link_libraries(example_yaml opentelemetry_cpp) else() diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index fd80f3f9c8..23fc291e3c 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -34,6 +34,10 @@ # include "opentelemetry/exporters/zipkin/zipkin_builder.h" #endif +#ifdef OTEL_HAVE_PROMETHEUS +# include "opentelemetry/exporters/prometheus/prometheus_pull_builder.h" +#endif + static bool opt_help = false; static std::string yaml_file_path = ""; @@ -67,6 +71,10 @@ void InitOtel(const std::string &config_file) opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); #endif +#ifdef OTEL_HAVE_PROMETHEUS + opentelemetry::exporter::metrics::PrometheusPullBuilder::Register(registry.get()); +#endif + /* 3 - Populate the registry with external extensions plugins */ CustomSamplerBuilder::Register(registry.get()); diff --git a/exporters/prometheus/BUILD b/exporters/prometheus/BUILD index fc981921d9..67ffdba95d 100644 --- a/exporters/prometheus/BUILD +++ b/exporters/prometheus/BUILD @@ -9,11 +9,13 @@ cc_library( "src/exporter.cc", "src/exporter_factory.cc", "src/exporter_options.cc", + "src/prometheus_pull_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/prometheus/exporter.h", "include/opentelemetry/exporters/prometheus/exporter_factory.h", "include/opentelemetry/exporters/prometheus/exporter_options.h", + "include/opentelemetry/exporters/prometheus/prometheus_builder.h", ], strip_include_prefix = "include", tags = ["prometheus"], diff --git a/exporters/prometheus/CMakeLists.txt b/exporters/prometheus/CMakeLists.txt index 6c872be3ab..f34f46f458 100644 --- a/exporters/prometheus/CMakeLists.txt +++ b/exporters/prometheus/CMakeLists.txt @@ -9,7 +9,7 @@ endif() add_library( opentelemetry_exporter_prometheus src/exporter.cc src/exporter_options.cc src/exporter_factory.cc - src/collector.cc src/exporter_utils.cc) + src/collector.cc src/exporter_utils.cc src/prometheus_pull_builder.cc) set_target_properties(opentelemetry_exporter_prometheus PROPERTIES EXPORT_NAME prometheus_exporter) diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h new file mode 100644 index 0000000000..b953feef36 --- /dev/null +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace metrics +{ + +class OPENTELEMETRY_EXPORT PrometheusPullBuilder + : public opentelemetry::sdk::init::PrometheusPullMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + PrometheusPullBuilder() = default; + ~PrometheusPullBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) + const override; +}; + +} // namespace metrics +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc new file mode 100644 index 0000000000..72c42c9c7f --- /dev/null +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -0,0 +1,52 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include + +#include "opentelemetry/exporters/prometheus/exporter_factory.h" +#include "opentelemetry/exporters/prometheus/exporter_options.h" +#include "opentelemetry/exporters/prometheus/prometheus_pull_builder.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace metrics +{ + +static PrometheusPullBuilder singleton; + +void PrometheusPullBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetPrometheusPullMetricExporterBuilder(&singleton); +} + +std::unique_ptr PrometheusPullBuilder::Build( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) const +{ + opentelemetry::exporter::metrics::PrometheusExporterOptions options; + +#ifdef LATER + // Expected + options.url = model->xxx; + options.populate_target_info = model->xxx; + options.without_otel_scope = model->xxx; + + // Configuration model + options.xxx = model->host; + options.xxx = model->port; + options.xxx = model->without_units; + options.xxx = model->without_type_suffix; + options.xxx = model->without_scope_info; +#endif + + return PrometheusExporterFactory::Create(options); +} + +} // namespace metrics +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE From a2047806f75ccd5edc3bb71f02ab75891898c316 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 5 Aug 2024 23:17:30 +0200 Subject: [PATCH 064/166] Add metric builders: console and otlp --- examples/yaml/CMakeLists.txt | 8 +++-- examples/yaml/main.cc | 4 +++ exporters/ostream/CMakeLists.txt | 6 ++-- .../ostream/console_push_metric_builder.h | 36 +++++++++++++++++++ .../src/console_push_metric_builder.cc | 30 ++++++++++++++++ exporters/otlp/CMakeLists.txt | 10 ++++-- .../exporters/otlp/otlp_push_metric_builder.h | 36 +++++++++++++++++++ .../otlp/src/otlp_push_metric_builder.cc | 33 +++++++++++++++++ sdk/src/init/sdk_builder.cc | 2 +- 9 files changed, 158 insertions(+), 7 deletions(-) create mode 100644 exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h create mode 100644 exporters/ostream/src/console_push_metric_builder.cc create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h create mode 100644 exporters/otlp/src/otlp_push_metric_builder.cc diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index 55aec8702e..ee376bd47d 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -18,8 +18,12 @@ add_executable( custom_span_processor_builder.cc) target_link_libraries( - example_yaml ${CMAKE_THREAD_LIBS_INIT} common_metrics_foo_library - common_logs_foo_library opentelemetry_exporter_ostream_span + example_yaml + ${CMAKE_THREAD_LIBS_INIT} + common_metrics_foo_library + common_logs_foo_library + opentelemetry_exporter_ostream_span + opentelemetry_exporter_ostream_metrics opentelemetry_exporter_ostream_logs) if(WITH_OTLP_HTTP) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 23fc291e3c..e22a3bfe05 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -7,6 +7,7 @@ #include #include "opentelemetry/exporters/ostream/console_log_record_builder.h" +#include "opentelemetry/exporters/ostream/console_push_metric_builder.h" #include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" @@ -27,6 +28,7 @@ #ifdef OTEL_HAVE_OTLP # include "opentelemetry/exporters/otlp/otlp_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_push_metric_builder.h" # include "opentelemetry/exporters/otlp/otlp_span_builder.h" #endif @@ -60,11 +62,13 @@ void InitOtel(const std::string &config_file) /* 2 - Populate the registry with the core components supported */ opentelemetry::exporter::trace::ConsoleSpanBuilder::Register(registry.get()); + opentelemetry::exporter::metrics::ConsolePushMetricBuilder::Register(registry.get()); opentelemetry::exporter::logs::ConsoleLogRecordBuilder::Register(registry.get()); #ifdef OTEL_HAVE_OTLP opentelemetry::exporter::otlp::OtlpSpanBuilder::Register(registry.get()); opentelemetry::exporter::otlp::OtlpLogRecordBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpPushMetricBuilder::Register(registry.get()); #endif #ifdef OTEL_HAVE_ZIPKIN diff --git a/exporters/ostream/CMakeLists.txt b/exporters/ostream/CMakeLists.txt index ddcd4a4eb1..8ba58a8cba 100644 --- a/exporters/ostream/CMakeLists.txt +++ b/exporters/ostream/CMakeLists.txt @@ -41,8 +41,10 @@ if(BUILD_TESTING) TEST_LIST ostream_span_test) endif() # BUILD_TESTING -add_library(opentelemetry_exporter_ostream_metrics - src/metric_exporter.cc src/metric_exporter_factory.cc) +add_library( + opentelemetry_exporter_ostream_metrics + src/metric_exporter.cc src/metric_exporter_factory.cc + src/console_push_metric_builder.cc) set_target_properties(opentelemetry_exporter_ostream_metrics PROPERTIES EXPORT_NAME ostream_metrics_exporter) set_target_version(opentelemetry_exporter_ostream_metrics) diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h new file mode 100644 index 0000000000..4c411e30cc --- /dev/null +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/console_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace metrics +{ + +class OPENTELEMETRY_EXPORT ConsolePushMetricBuilder + : public opentelemetry::sdk::init::ConsolePushMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + ConsolePushMetricBuilder() = default; + ~ConsolePushMetricBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) + const override; +}; + +} // namespace metrics +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/ostream/src/console_push_metric_builder.cc b/exporters/ostream/src/console_push_metric_builder.cc new file mode 100644 index 0000000000..8b053a660b --- /dev/null +++ b/exporters/ostream/src/console_push_metric_builder.cc @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/ostream/console_push_metric_builder.h" +#include "opentelemetry/exporters/ostream/metric_exporter_factory.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace metrics +{ + +static ConsolePushMetricBuilder singleton; + +void ConsolePushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetConsolePushMetricExporterBuilder(&singleton); +} + +std::unique_ptr ConsolePushMetricBuilder::Build( + const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration * /* model */) + const +{ + return OStreamMetricExporterFactory::Create(); +} + +} // namespace metrics +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 39a2d02a92..c3ef9fbf44 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -267,8 +267,10 @@ target_link_libraries( opentelemetry_otlp_recordable PUBLIC opentelemetry_trace opentelemetry_resources opentelemetry_proto) -add_library(opentelemetry_otlp_builder src/otlp_span_builder.cc - src/otlp_log_record_builder.cc) +add_library( + opentelemetry_otlp_builder + src/otlp_span_builder.cc src/otlp_push_metric_builder.cc + src/otlp_log_record_builder.cc) set_target_properties(opentelemetry_otlp_builder PROPERTIES EXPORT_NAME otlp_builder) set_target_version(opentelemetry_otlp_builder) @@ -284,6 +286,8 @@ target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_api) if(WITH_OTLP_HTTP) target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_exporter_otlp_http) + target_link_libraries(opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_http_metric) target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_exporter_otlp_http_log) endif() @@ -291,6 +295,8 @@ endif() if(WITH_OTLP_GRPC) target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_exporter_otlp_grpc) + target_link_libraries(opentelemetry_otlp_builder + PUBLIC opentelemetry_exporter_otlp_grpc_metrics) target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_exporter_otlp_grpc_log) endif() diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h new file mode 100644 index 0000000000..34d6e75ca0 --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpPushMetricBuilder + : public opentelemetry::sdk::init::OtlpPushMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpPushMetricBuilder() = default; + ~OtlpPushMetricBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) + const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_push_metric_builder.cc b/exporters/otlp/src/otlp_push_metric_builder.cc new file mode 100644 index 0000000000..bd917be79f --- /dev/null +++ b/exporters/otlp/src/otlp_push_metric_builder.cc @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_push_metric_builder.h" +#include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpPushMetricBuilder singleton; + +void OtlpPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpPushMetricExporterBuilder(&singleton); +} + +std::unique_ptr OtlpPushMetricBuilder::Build( + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration * /* model */) + const +{ + // FIXME, use model + OtlpHttpMetricExporterOptions options; + return OtlpHttpMetricExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 7ca0b3e23b..e0d2500d29 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -1032,7 +1032,7 @@ std::unique_ptr SdkBuilder::CreateMe for (const auto &reader_configuration : model->readers) { - std::shared_ptr metric_reader; + std::shared_ptr metric_reader; metric_reader = CreateMetricReader(reader_configuration); meter_context->AddMetricReader(metric_reader); } From 86a0b3bfab3ac6e21a419e81a3dc8c9441411755 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 7 Aug 2024 22:47:15 +0200 Subject: [PATCH 065/166] Build cleanup --- exporters/ostream/BUILD | 6 ++++++ exporters/otlp/BUILD | 6 ++++++ exporters/prometheus/BUILD | 2 +- exporters/prometheus/src/prometheus_pull_builder.cc | 3 ++- exporters/zipkin/BUILD | 2 ++ 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/exporters/ostream/BUILD b/exporters/ostream/BUILD index 177bf6a968..36f8ce9316 100644 --- a/exporters/ostream/BUILD +++ b/exporters/ostream/BUILD @@ -6,11 +6,13 @@ package(default_visibility = ["//visibility:public"]) cc_library( name = "ostream_log_record_exporter", srcs = [ + "src/console_log_record_builder.cc", "src/log_record_exporter.cc", "src/log_record_exporter_factory.cc", ], hdrs = [ "include/opentelemetry/exporters/ostream/common_utils.h", + "include/opentelemetry/exporters/ostream/console_log_record_builder.h", "include/opentelemetry/exporters/ostream/log_record_exporter.h", "include/opentelemetry/exporters/ostream/log_record_exporter_factory.h", ], @@ -37,11 +39,13 @@ cc_test( cc_library( name = "ostream_metric_exporter", srcs = [ + "src/console_push_metric_builder.cc", "src/metric_exporter.cc", "src/metric_exporter_factory.cc", ], hdrs = [ "include/opentelemetry/exporters/ostream/common_utils.h", + "include/opentelemetry/exporters/ostream/console_push_metric_builder.h", "include/opentelemetry/exporters/ostream/metric_exporter.h", "include/opentelemetry/exporters/ostream/metric_exporter_factory.h", ], @@ -71,11 +75,13 @@ cc_test( cc_library( name = "ostream_span_exporter", srcs = [ + "src/console_span_builder.cc", "src/span_exporter.cc", "src/span_exporter_factory.cc", ], hdrs = [ "include/opentelemetry/exporters/ostream/common_utils.h", + "include/opentelemetry/exporters/ostream/console_span_builder.h", "include/opentelemetry/exporters/ostream/span_exporter.h", "include/opentelemetry/exporters/ostream/span_exporter_factory.h", ], diff --git a/exporters/otlp/BUILD b/exporters/otlp/BUILD index a2dd8f8c65..cfd45f3bfa 100644 --- a/exporters/otlp/BUILD +++ b/exporters/otlp/BUILD @@ -147,12 +147,14 @@ cc_library( "src/otlp_http_exporter.cc", "src/otlp_http_exporter_factory.cc", "src/otlp_http_exporter_options.cc", + "src/otlp_span_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h", + "include/opentelemetry/exporters/otlp/otlp_span_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -262,12 +264,14 @@ cc_library( "src/otlp_http_metric_exporter.cc", "src/otlp_http_metric_exporter_factory.cc", "src/otlp_http_metric_exporter_options.cc", + "src/otlp_push_metric_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h", + "include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -318,12 +322,14 @@ cc_library( "src/otlp_http_log_record_exporter.cc", "src/otlp_http_log_record_exporter_factory.cc", "src/otlp_http_log_record_exporter_options.cc", + "src/otlp_log_record_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h", + "include/opentelemetry/exporters/otlp/otlp_log_record_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], diff --git a/exporters/prometheus/BUILD b/exporters/prometheus/BUILD index 67ffdba95d..0d6aa8c2e3 100644 --- a/exporters/prometheus/BUILD +++ b/exporters/prometheus/BUILD @@ -15,7 +15,7 @@ cc_library( "include/opentelemetry/exporters/prometheus/exporter.h", "include/opentelemetry/exporters/prometheus/exporter_factory.h", "include/opentelemetry/exporters/prometheus/exporter_options.h", - "include/opentelemetry/exporters/prometheus/prometheus_builder.h", + "include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h", ], strip_include_prefix = "include", tags = ["prometheus"], diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc index 72c42c9c7f..e8d65fb0d7 100644 --- a/exporters/prometheus/src/prometheus_pull_builder.cc +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -26,7 +26,8 @@ void PrometheusPullBuilder::Register(opentelemetry::sdk::init::Registry *registr } std::unique_ptr PrometheusPullBuilder::Build( - const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) const + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration + * /* model */) const { opentelemetry::exporter::metrics::PrometheusExporterOptions options; diff --git a/exporters/zipkin/BUILD b/exporters/zipkin/BUILD index 16774e80df..8553984450 100644 --- a/exporters/zipkin/BUILD +++ b/exporters/zipkin/BUILD @@ -23,10 +23,12 @@ cc_library( cc_library( name = "zipkin_exporter", srcs = [ + "src/zipkin_builder.cc", "src/zipkin_exporter.cc", "src/zipkin_exporter_factory.cc", ], hdrs = [ + "include/opentelemetry/exporters/zipkin/zipkin_builder.h", "include/opentelemetry/exporters/zipkin/zipkin_exporter.h", "include/opentelemetry/exporters/zipkin/zipkin_exporter_factory.h", "include/opentelemetry/exporters/zipkin/zipkin_exporter_options.h", From 15fec293f77a12c5b57693fe271a5aea9ea33434 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 7 Aug 2024 23:14:59 +0200 Subject: [PATCH 066/166] Build cleanup for resource --- .../opentelemetry/sdk/resource/resource.h | 21 +++++++------------ sdk/src/resource/resource.cc | 6 ++++++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/resource/resource.h b/sdk/include/opentelemetry/sdk/resource/resource.h index d578491d78..b89e84649e 100644 --- a/sdk/include/opentelemetry/sdk/resource/resource.h +++ b/sdk/include/opentelemetry/sdk/resource/resource.h @@ -19,7 +19,14 @@ using ResourceAttributes = opentelemetry::sdk::common::AttributeMap; class Resource { public: - Resource(const Resource &) = default; + Resource() noexcept; + + Resource(const ResourceAttributes &attributes) noexcept; + + Resource(const ResourceAttributes &attributes, const std::string &schema_url) noexcept; + + Resource(const Resource &) = default; + Resource &operator=(const Resource &) = default; const ResourceAttributes &GetAttributes() const noexcept; const std::string &GetSchemaURL() const noexcept; @@ -61,21 +68,9 @@ class Resource static Resource &GetDefault(); -protected: - /** - * The constructor is protected and only for use internally by the class and - * inside ResourceDetector class. - * Users should use the Create factory method to obtain a Resource - * instance. - */ - Resource(const ResourceAttributes &attributes = ResourceAttributes(), - const std::string &schema_url = std::string{}) noexcept; - private: ResourceAttributes attributes_; std::string schema_url_; - - friend class OTELResourceDetector; }; } // namespace resource diff --git a/sdk/src/resource/resource.cc b/sdk/src/resource/resource.cc index 919624686d..ca61e95340 100644 --- a/sdk/src/resource/resource.cc +++ b/sdk/src/resource/resource.cc @@ -18,6 +18,12 @@ namespace sdk namespace resource { +Resource::Resource() noexcept : attributes_(), schema_url_() {} + +Resource::Resource(const ResourceAttributes &attributes) noexcept + : attributes_(attributes), schema_url_() +{} + Resource::Resource(const ResourceAttributes &attributes, const std::string &schema_url) noexcept : attributes_(attributes), schema_url_(schema_url) {} From 466f54164e7838fbec36739748d60da82e108f3b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 10 Aug 2024 23:43:11 +0200 Subject: [PATCH 067/166] Split OTLP builders into: - OTLP HTTP - OTLP GRPC --- examples/yaml/CMakeLists.txt | 10 +- examples/yaml/main.cc | 28 +++-- exporters/otlp/BUILD | 18 ++- exporters/otlp/CMakeLists.txt | 58 ++++++--- ...ilder.h => otlp_grpc_log_record_builder.h} | 6 +- ...lder.h => otlp_grpc_push_metric_builder.h} | 6 +- ...pan_builder.h => otlp_grpc_span_builder.h} | 6 +- .../otlp/otlp_http_log_record_builder.h | 36 ++++++ .../otlp/otlp_http_push_metric_builder.h | 36 ++++++ .../exporters/otlp/otlp_http_span_builder.h | 35 ++++++ .../otlp/src/otlp_grpc_log_record_builder.cc | 32 +++++ .../otlp/src/otlp_grpc_push_metric_builder.cc | 33 +++++ exporters/otlp/src/otlp_grpc_span_builder.cc | 32 +++++ ...der.cc => otlp_http_log_record_builder.cc} | 10 +- ...er.cc => otlp_http_push_metric_builder.cc} | 10 +- ...n_builder.cc => otlp_http_span_builder.cc} | 10 +- sdk/include/opentelemetry/sdk/init/registry.h | 56 +++++++-- sdk/src/init/sdk_builder.cc | 116 ++++++++++++++---- 18 files changed, 443 insertions(+), 95 deletions(-) rename exporters/otlp/include/opentelemetry/exporters/otlp/{otlp_log_record_builder.h => otlp_grpc_log_record_builder.h} (85%) rename exporters/otlp/include/opentelemetry/exporters/otlp/{otlp_push_metric_builder.h => otlp_grpc_push_metric_builder.h} (85%) rename exporters/otlp/include/opentelemetry/exporters/otlp/{otlp_span_builder.h => otlp_grpc_span_builder.h} (85%) create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h create mode 100644 exporters/otlp/src/otlp_grpc_log_record_builder.cc create mode 100644 exporters/otlp/src/otlp_grpc_push_metric_builder.cc create mode 100644 exporters/otlp/src/otlp_grpc_span_builder.cc rename exporters/otlp/src/{otlp_log_record_builder.cc => otlp_http_log_record_builder.cc} (71%) rename exporters/otlp/src/{otlp_push_metric_builder.cc => otlp_http_push_metric_builder.cc} (70%) rename exporters/otlp/src/{otlp_span_builder.cc => otlp_http_span_builder.cc} (65%) diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index ee376bd47d..f0f1ad8c57 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -28,8 +28,14 @@ target_link_libraries( if(WITH_OTLP_HTTP) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) - add_definitions(-DOTEL_HAVE_OTLP) - target_link_libraries(example_yaml opentelemetry_otlp_builder) + add_definitions(-DOTEL_HAVE_OTLP_HTTP) + target_link_libraries(example_yaml opentelemetry_otlp_http_builder) +endif() + +if(WITH_OTLP_GRPC) + include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) + add_definitions(-DOTEL_HAVE_OTLP_GRPC) + target_link_libraries(example_yaml opentelemetry_otlp_grpc_builder) endif() if(WITH_ZIPKIN) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index e22a3bfe05..a7a8807454 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -26,10 +26,16 @@ # include "metrics_foo_library/foo_library.h" #endif -#ifdef OTEL_HAVE_OTLP -# include "opentelemetry/exporters/otlp/otlp_log_record_builder.h" -# include "opentelemetry/exporters/otlp/otlp_push_metric_builder.h" -# include "opentelemetry/exporters/otlp/otlp_span_builder.h" +#ifdef OTEL_HAVE_OTLP_HTTP +# include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" +# include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" +#endif + +#ifdef OTEL_HAVE_OTLP_GRPC +# include "opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" +# include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" #endif #ifdef OTEL_HAVE_ZIPKIN @@ -65,10 +71,16 @@ void InitOtel(const std::string &config_file) opentelemetry::exporter::metrics::ConsolePushMetricBuilder::Register(registry.get()); opentelemetry::exporter::logs::ConsoleLogRecordBuilder::Register(registry.get()); -#ifdef OTEL_HAVE_OTLP - opentelemetry::exporter::otlp::OtlpSpanBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpLogRecordBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpPushMetricBuilder::Register(registry.get()); +#ifdef OTEL_HAVE_OTLP_HTTP + opentelemetry::exporter::otlp::OtlpHttpSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpHttpPushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpHttpLogRecordBuilder::Register(registry.get()); +#endif + +#ifdef OTEL_HAVE_OTLP_GRPC + opentelemetry::exporter::otlp::OtlpGrpcSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpGrpcPushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpGrpcLogRecordBuilder::Register(registry.get()); #endif #ifdef OTEL_HAVE_ZIPKIN diff --git a/exporters/otlp/BUILD b/exporters/otlp/BUILD index cfd45f3bfa..6686953294 100644 --- a/exporters/otlp/BUILD +++ b/exporters/otlp/BUILD @@ -74,6 +74,7 @@ cc_library( "src/otlp_grpc_exporter.cc", "src/otlp_grpc_exporter_factory.cc", "src/otlp_grpc_exporter_options.cc", + "src/otlp_grpc_span_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", @@ -81,6 +82,7 @@ cc_library( "include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h", "include/opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h", + "include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h", "include/opentelemetry/exporters/otlp/otlp_grpc_utils.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", @@ -147,14 +149,14 @@ cc_library( "src/otlp_http_exporter.cc", "src/otlp_http_exporter_factory.cc", "src/otlp_http_exporter_options.cc", - "src/otlp_span_builder.cc", + "src/otlp_http_span_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h", - "include/opentelemetry/exporters/otlp/otlp_span_builder.h", + "include/opentelemetry/exporters/otlp/otlp_http_span_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -232,6 +234,7 @@ cc_library( "src/otlp_grpc_metric_exporter.cc", "src/otlp_grpc_metric_exporter_factory.cc", "src/otlp_grpc_metric_exporter_options.cc", + "src/otlp_grpc_push_metric_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", @@ -239,6 +242,7 @@ cc_library( "include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h", "include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h", + "include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -264,14 +268,14 @@ cc_library( "src/otlp_http_metric_exporter.cc", "src/otlp_http_metric_exporter_factory.cc", "src/otlp_http_metric_exporter_options.cc", - "src/otlp_push_metric_builder.cc", + "src/otlp_http_push_metric_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h", - "include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h", + "include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -319,17 +323,17 @@ cc_library( cc_library( name = "otlp_http_log_record_exporter", srcs = [ + "src/otlp_http_log_record_builder.cc", "src/otlp_http_log_record_exporter.cc", "src/otlp_http_log_record_exporter_factory.cc", "src/otlp_http_log_record_exporter_options.cc", - "src/otlp_log_record_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", + "include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h", - "include/opentelemetry/exporters/otlp/otlp_log_record_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -377,6 +381,7 @@ cc_library( cc_library( name = "otlp_grpc_log_record_exporter", srcs = [ + "src/otlp_grpc_log_record_builder.cc", "src/otlp_grpc_log_record_exporter.cc", "src/otlp_grpc_log_record_exporter_factory.cc", "src/otlp_grpc_log_record_exporter_options.cc", @@ -384,6 +389,7 @@ cc_library( hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_grpc_client_options.h", + "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h", "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h", "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h", diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index c3ef9fbf44..e96bb84861 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -267,37 +267,55 @@ target_link_libraries( opentelemetry_otlp_recordable PUBLIC opentelemetry_trace opentelemetry_resources opentelemetry_proto) -add_library( - opentelemetry_otlp_builder - src/otlp_span_builder.cc src/otlp_push_metric_builder.cc - src/otlp_log_record_builder.cc) -set_target_properties(opentelemetry_otlp_builder PROPERTIES EXPORT_NAME - otlp_builder) -set_target_version(opentelemetry_otlp_builder) +if(WITH_OTLP_HTTP) + add_library( + opentelemetry_otlp_http_builder + src/otlp_http_span_builder.cc src/otlp_http_push_metric_builder.cc + src/otlp_http_log_record_builder.cc) + set_target_properties(opentelemetry_otlp_http_builder + PROPERTIES EXPORT_NAME otlp_http_builder) + set_target_version(opentelemetry_otlp_http_builder) -target_include_directories( - opentelemetry_otlp_builder - PUBLIC "$" - "$") + target_include_directories( + opentelemetry_otlp_http_builder + PUBLIC "$" + "$") -# Make sure to build with the proper ABI -target_link_libraries(opentelemetry_otlp_builder PUBLIC opentelemetry_api) + # Make sure to build with the proper ABI + target_link_libraries(opentelemetry_otlp_http_builder + PUBLIC opentelemetry_api) -if(WITH_OTLP_HTTP) - target_link_libraries(opentelemetry_otlp_builder + target_link_libraries(opentelemetry_otlp_http_builder PUBLIC opentelemetry_exporter_otlp_http) - target_link_libraries(opentelemetry_otlp_builder + target_link_libraries(opentelemetry_otlp_http_builder PUBLIC opentelemetry_exporter_otlp_http_metric) - target_link_libraries(opentelemetry_otlp_builder + target_link_libraries(opentelemetry_otlp_http_builder PUBLIC opentelemetry_exporter_otlp_http_log) endif() if(WITH_OTLP_GRPC) - target_link_libraries(opentelemetry_otlp_builder + add_library( + opentelemetry_otlp_grpc_builder + src/otlp_grpc_span_builder.cc src/otlp_grpc_push_metric_builder.cc + src/otlp_grpc_log_record_builder.cc) + set_target_properties(opentelemetry_otlp_grpc_builder + PROPERTIES EXPORT_NAME otlp_grpc_builder) + set_target_version(opentelemetry_otlp_grpc_builder) + + target_include_directories( + opentelemetry_otlp_grpc_builder + PUBLIC "$" + "$") + + # Make sure to build with the proper ABI + target_link_libraries(opentelemetry_otlp_grpc_builder + PUBLIC opentelemetry_api) + + target_link_libraries(opentelemetry_otlp_grpc_builder PUBLIC opentelemetry_exporter_otlp_grpc) - target_link_libraries(opentelemetry_otlp_builder + target_link_libraries(opentelemetry_otlp_grpc_builder PUBLIC opentelemetry_exporter_otlp_grpc_metrics) - target_link_libraries(opentelemetry_otlp_builder + target_link_libraries(opentelemetry_otlp_grpc_builder PUBLIC opentelemetry_exporter_otlp_grpc_log) endif() diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h similarity index 85% rename from exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_record_builder.h rename to exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h index e038bb8d32..ae8abaf6d3 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h @@ -17,14 +17,14 @@ namespace exporter namespace otlp { -class OPENTELEMETRY_EXPORT OtlpLogRecordBuilder +class OPENTELEMETRY_EXPORT OtlpGrpcLogRecordBuilder : public opentelemetry::sdk::init::OtlpLogRecordExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); - OtlpLogRecordBuilder() = default; - ~OtlpLogRecordBuilder() override = default; + OtlpGrpcLogRecordBuilder() = default; + ~OtlpGrpcLogRecordBuilder() override = default; std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h similarity index 85% rename from exporters/otlp/include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h rename to exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h index 34d6e75ca0..59236783a3 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h @@ -17,14 +17,14 @@ namespace exporter namespace otlp { -class OPENTELEMETRY_EXPORT OtlpPushMetricBuilder +class OPENTELEMETRY_EXPORT OtlpGrpcPushMetricBuilder : public opentelemetry::sdk::init::OtlpPushMetricExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); - OtlpPushMetricBuilder() = default; - ~OtlpPushMetricBuilder() override = default; + OtlpGrpcPushMetricBuilder() = default; + ~OtlpGrpcPushMetricBuilder() override = default; std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h similarity index 85% rename from exporters/otlp/include/opentelemetry/exporters/otlp/otlp_span_builder.h rename to exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h index 77893ad1f1..6932f9797f 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h @@ -17,14 +17,14 @@ namespace exporter namespace otlp { -class OPENTELEMETRY_EXPORT OtlpSpanBuilder +class OPENTELEMETRY_EXPORT OtlpGrpcSpanBuilder : public opentelemetry::sdk::init::OtlpSpanExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); - OtlpSpanBuilder() = default; - ~OtlpSpanBuilder() override = default; + OtlpGrpcSpanBuilder() = default; + ~OtlpGrpcSpanBuilder() override = default; std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h new file mode 100644 index 0000000000..edcb8d30a7 --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpHttpLogRecordBuilder + : public opentelemetry::sdk::init::OtlpLogRecordExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpHttpLogRecordBuilder() = default; + ~OtlpHttpLogRecordBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) + const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h new file mode 100644 index 0000000000..8e694da82b --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpHttpPushMetricBuilder + : public opentelemetry::sdk::init::OtlpPushMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpHttpPushMetricBuilder() = default; + ~OtlpHttpPushMetricBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) + const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h new file mode 100644 index 0000000000..d91cd4395f --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpHttpSpanBuilder + : public opentelemetry::sdk::init::OtlpSpanExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpHttpSpanBuilder() = default; + ~OtlpHttpSpanBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc new file mode 100644 index 0000000000..cdac0f74e7 --- /dev/null +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpGrpcLogRecordBuilder singleton; + +void OtlpGrpcLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpGrpcLogRecordBuilder(&singleton); +} + +std::unique_ptr OtlpGrpcLogRecordBuilder::Build( + const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration * /* model */) const +{ + // FIXME, use model + OtlpGrpcLogRecordExporterOptions options; + return OtlpGrpcLogRecordExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc new file mode 100644 index 0000000000..5712eae070 --- /dev/null +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpGrpcPushMetricBuilder singleton; + +void OtlpGrpcPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpGrpcPushMetricExporterBuilder(&singleton); +} + +std::unique_ptr OtlpGrpcPushMetricBuilder::Build( + const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration * /* model */) + const +{ + // FIXME, use model + OtlpGrpcMetricExporterOptions options; + return OtlpGrpcMetricExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc new file mode 100644 index 0000000000..29568f3be3 --- /dev/null +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpGrpcSpanBuilder singleton; + +void OtlpGrpcSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpGrpcSpanBuilder(&singleton); +} + +std::unique_ptr OtlpGrpcSpanBuilder::Build( + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration * /* model */) const +{ + // FIXME, use model + OtlpGrpcExporterOptions options; + return OtlpGrpcExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc similarity index 71% rename from exporters/otlp/src/otlp_log_record_builder.cc rename to exporters/otlp/src/otlp_http_log_record_builder.cc index f0fca4506f..e224bcb099 100644 --- a/exporters/otlp/src/otlp_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_log_record_builder.h" +#include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h" #include "opentelemetry/version.h" @@ -12,14 +12,14 @@ namespace exporter namespace otlp { -static OtlpLogRecordBuilder singleton; +static OtlpHttpLogRecordBuilder singleton; -void OtlpLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpHttpLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->SetOtlpLogRecordBuilder(&singleton); + registry->SetOtlpHttpLogRecordBuilder(&singleton); } -std::unique_ptr OtlpLogRecordBuilder::Build( +std::unique_ptr OtlpHttpLogRecordBuilder::Build( const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration * /* model */) const { // FIXME, use model diff --git a/exporters/otlp/src/otlp_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc similarity index 70% rename from exporters/otlp/src/otlp_push_metric_builder.cc rename to exporters/otlp/src/otlp_http_push_metric_builder.cc index bd917be79f..9b165577fa 100644 --- a/exporters/otlp/src/otlp_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_push_metric_builder.h" +#include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" #include "opentelemetry/version.h" @@ -12,14 +12,14 @@ namespace exporter namespace otlp { -static OtlpPushMetricBuilder singleton; +static OtlpHttpPushMetricBuilder singleton; -void OtlpPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpHttpPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->SetOtlpPushMetricExporterBuilder(&singleton); + registry->SetOtlpHttpPushMetricExporterBuilder(&singleton); } -std::unique_ptr OtlpPushMetricBuilder::Build( +std::unique_ptr OtlpHttpPushMetricBuilder::Build( const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration * /* model */) const { diff --git a/exporters/otlp/src/otlp_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc similarity index 65% rename from exporters/otlp/src/otlp_span_builder.cc rename to exporters/otlp/src/otlp_http_span_builder.cc index 092626bc2c..4f9d056b82 100644 --- a/exporters/otlp/src/otlp_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_span_builder.h" +#include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/version.h" @@ -12,14 +12,14 @@ namespace exporter namespace otlp { -static OtlpSpanBuilder singleton; +static OtlpHttpSpanBuilder singleton; -void OtlpSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpHttpSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) { - registry->SetOtlpSpanBuilder(&singleton); + registry->SetOtlpHttpSpanBuilder(&singleton); } -std::unique_ptr OtlpSpanBuilder::Build( +std::unique_ptr OtlpHttpSpanBuilder::Build( const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration * /* model */) const { // FIXME, use model diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 926d9e8940..dc19dc8739 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -40,8 +40,17 @@ class Registry /* Core optional components. */ - const OtlpSpanExporterBuilder *GetOtlpSpanBuilder() { return m_otlp_span_builder; } - void SetOtlpSpanBuilder(const OtlpSpanExporterBuilder *builder) { m_otlp_span_builder = builder; } + const OtlpSpanExporterBuilder *GetOtlpHttpSpanBuilder() { return m_otlp_http_span_builder; } + void SetOtlpHttpSpanBuilder(const OtlpSpanExporterBuilder *builder) + { + m_otlp_http_span_builder = builder; + } + + const OtlpSpanExporterBuilder *GetOtlpGrpcSpanBuilder() { return m_otlp_grpc_span_builder; } + void SetOtlpGrpcSpanBuilder(const OtlpSpanExporterBuilder *builder) + { + m_otlp_grpc_span_builder = builder; + } const ConsoleSpanExporterBuilder *GetConsoleSpanBuilder() { return m_console_span_builder; } void SetConsoleSpanBuilder(const ConsoleSpanExporterBuilder *builder) @@ -55,13 +64,22 @@ class Registry m_zipkin_span_builder = builder; } - const OtlpPushMetricExporterBuilder *GetOtlpPushMetricExporterBuilder() + const OtlpPushMetricExporterBuilder *GetOtlpHttpPushMetricExporterBuilder() { - return m_otlp_metric_builder; + return m_otlp_http_push_metric_builder; } - void SetOtlpPushMetricExporterBuilder(const OtlpPushMetricExporterBuilder *builder) + void SetOtlpHttpPushMetricExporterBuilder(const OtlpPushMetricExporterBuilder *builder) { - m_otlp_metric_builder = builder; + m_otlp_http_push_metric_builder = builder; + } + + const OtlpPushMetricExporterBuilder *GetOtlpGrpcPushMetricExporterBuilder() + { + return m_otlp_grpc_push_metric_builder; + } + void SetOtlpGrpcPushMetricExporterBuilder(const OtlpPushMetricExporterBuilder *builder) + { + m_otlp_grpc_push_metric_builder = builder; } const ConsolePushMetricExporterBuilder *GetConsolePushMetricExporterBuilder() @@ -82,13 +100,22 @@ class Registry m_prometheus_metric_builder = builder; } - const OtlpLogRecordExporterBuilder *GetOtlpLogRecordBuilder() + const OtlpLogRecordExporterBuilder *GetOtlpHttpLogRecordBuilder() + { + return m_otlp_http_log_record_builder; + } + void SetOtlpHttpLogRecordBuilder(const OtlpLogRecordExporterBuilder *builder) + { + m_otlp_http_log_record_builder = builder; + } + + const OtlpLogRecordExporterBuilder *GetOtlpGrpcLogRecordBuilder() { - return m_otlp_log_record_builder; + return m_otlp_grpc_log_record_builder; } - void SetOtlpLogRecordBuilder(const OtlpLogRecordExporterBuilder *builder) + void SetOtlpGrpcLogRecordBuilder(const OtlpLogRecordExporterBuilder *builder) { - m_otlp_log_record_builder = builder; + m_otlp_grpc_log_record_builder = builder; } const ConsoleLogRecordExporterBuilder *GetConsoleLogRecordBuilder() @@ -137,15 +164,18 @@ class Registry ExtensionLogRecordProcessorBuilder *builder); private: - const OtlpSpanExporterBuilder *m_otlp_span_builder{nullptr}; + const OtlpSpanExporterBuilder *m_otlp_http_span_builder{nullptr}; + const OtlpSpanExporterBuilder *m_otlp_grpc_span_builder{nullptr}; const ConsoleSpanExporterBuilder *m_console_span_builder{nullptr}; const ZipkinSpanExporterBuilder *m_zipkin_span_builder{nullptr}; - const OtlpPushMetricExporterBuilder *m_otlp_metric_builder{nullptr}; + const OtlpPushMetricExporterBuilder *m_otlp_http_push_metric_builder{nullptr}; + const OtlpPushMetricExporterBuilder *m_otlp_grpc_push_metric_builder{nullptr}; const ConsolePushMetricExporterBuilder *m_console_metric_builder{nullptr}; const PrometheusPullMetricExporterBuilder *m_prometheus_metric_builder{nullptr}; - const OtlpLogRecordExporterBuilder *m_otlp_log_record_builder{nullptr}; + const OtlpLogRecordExporterBuilder *m_otlp_http_log_record_builder{nullptr}; + const OtlpLogRecordExporterBuilder *m_otlp_grpc_log_record_builder{nullptr}; const ConsoleLogRecordExporterBuilder *m_console_log_record_builder{nullptr}; std::map m_propagator_builders; diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index e0d2500d29..84ea2b4733 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -503,19 +503,43 @@ std::unique_ptr SdkBuilder::CreateOtlpS const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const OtlpSpanExporterBuilder *builder = m_registry->GetOtlpSpanBuilder(); + const OtlpSpanExporterBuilder *builder; - if (builder != nullptr) + if (model->protocol == "http") { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered builder"); - sdk = builder->Build(model); + builder = m_registry->GetOtlpHttpSpanBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered http builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No http builder for OtlpSpanExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } - else + + if (model->protocol == "grpc") { - OTEL_INTERNAL_LOG_ERROR("No builder for OtlpSpanExporter"); - throw UnsupportedException("No builder for OtlpSpanExporter"); + builder = m_registry->GetOtlpGrpcSpanBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered grpc builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No builder for OtlpSpanExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } + std::string die("OtlpSpanExporter: illegal protocol: "); + die.append(model->protocol); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); + return sdk; } @@ -789,20 +813,43 @@ SdkBuilder::CreateOtlpPushMetricExporter( const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) const { std::unique_ptr sdk; + const OtlpPushMetricExporterBuilder *builder; - const OtlpPushMetricExporterBuilder *builder = m_registry->GetOtlpPushMetricExporterBuilder(); - - if (builder != nullptr) + if (model->protocol == "http") { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered builder"); - sdk = builder->Build(model); + builder = m_registry->GetOtlpHttpPushMetricExporterBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered http builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No http builder for OtlpPushMetricExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } - else + + if (model->protocol == "grpc") { - OTEL_INTERNAL_LOG_ERROR("No builder for OtlpPushMetricExporter"); - throw UnsupportedException("No builder for OtlpPushMetricExporter"); + builder = m_registry->GetOtlpGrpcPushMetricExporterBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered grpc builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No grpc builder for OtlpPushMetricExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } + std::string die("OtlpPushMetricExporter: illegal protocol: "); + die.append(model->protocol); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); + return sdk; } @@ -1047,19 +1094,44 @@ SdkBuilder::CreateOtlpLogRecordExporter( const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const { std::unique_ptr sdk; - const OtlpLogRecordExporterBuilder *builder = m_registry->GetOtlpLogRecordBuilder(); + const OtlpLogRecordExporterBuilder *builder; - if (builder != nullptr) + if (model->protocol == "http") { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered builder"); - sdk = builder->Build(model); + builder = m_registry->GetOtlpHttpLogRecordBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered http builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No http builder for OtlpLogRecordExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } - else + + if (model->protocol == "grpc") { - OTEL_INTERNAL_LOG_ERROR("No builder for OtlpLogRecordExporter"); - throw UnsupportedException("No builder for OtlpLogRecordExporter"); + builder = m_registry->GetOtlpGrpcLogRecordBuilder(); + if (builder != nullptr) + { + builder = m_registry->GetOtlpGrpcLogRecordBuilder(); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered grpc builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No grpc builder for OtlpLogRecordExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } + std::string die("OtlpLogRecordExporter: illegal protocol: "); + die.append(model->protocol); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); + return sdk; } From 2c15009670e92e19514d9174b95f04b936237165 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 11 Aug 2024 00:28:58 +0200 Subject: [PATCH 068/166] cleanup --- sdk/src/init/sdk_builder.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 84ea2b4733..c9386b61da 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -505,7 +505,7 @@ std::unique_ptr SdkBuilder::CreateOtlpS std::unique_ptr sdk; const OtlpSpanExporterBuilder *builder; - if (model->protocol == "http") + if (model->protocol.find("http/") == 0) { builder = m_registry->GetOtlpHttpSpanBuilder(); if (builder != nullptr) @@ -520,7 +520,7 @@ std::unique_ptr SdkBuilder::CreateOtlpS throw UnsupportedException(die); } - if (model->protocol == "grpc") + if (model->protocol.find("grpc/") == 0) { builder = m_registry->GetOtlpGrpcSpanBuilder(); if (builder != nullptr) @@ -815,7 +815,7 @@ SdkBuilder::CreateOtlpPushMetricExporter( std::unique_ptr sdk; const OtlpPushMetricExporterBuilder *builder; - if (model->protocol == "http") + if (model->protocol.find("http/") == 0) { builder = m_registry->GetOtlpHttpPushMetricExporterBuilder(); if (builder != nullptr) @@ -830,7 +830,7 @@ SdkBuilder::CreateOtlpPushMetricExporter( throw UnsupportedException(die); } - if (model->protocol == "grpc") + if (model->protocol.find("grpc/") == 0) { builder = m_registry->GetOtlpGrpcPushMetricExporterBuilder(); if (builder != nullptr) @@ -1096,7 +1096,7 @@ SdkBuilder::CreateOtlpLogRecordExporter( std::unique_ptr sdk; const OtlpLogRecordExporterBuilder *builder; - if (model->protocol == "http") + if (model->protocol.find("http/") == 0) { builder = m_registry->GetOtlpHttpLogRecordBuilder(); if (builder != nullptr) @@ -1111,7 +1111,7 @@ SdkBuilder::CreateOtlpLogRecordExporter( throw UnsupportedException(die); } - if (model->protocol == "grpc") + if (model->protocol.find("grpc/") == 0) { builder = m_registry->GetOtlpGrpcLogRecordBuilder(); if (builder != nullptr) From 87b034b6eb814a15bc75acee02f8b86280b4d62b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 25 Aug 2024 20:52:21 +0200 Subject: [PATCH 069/166] Require ryml 0.7.1 --- CMakeLists.txt | 2 +- sdk/src/configuration/CMakeLists.txt | 8 -------- sdk/src/configuration/ryml_document.cc | 6 ++++++ 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b644145fb..6e241d98e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -497,7 +497,7 @@ endif() # if((NOT WITH_API_ONLY) AND WITH_CONFIGURATION) - find_package(ryml 0.6.0 REQUIRED) + find_package(ryml 0.7.1 REQUIRED) message( STATUS "Found ryml: include ${RYML_INCLUDE_DIR}, lib ${RYML_LIB_DIR}, version ${ryml_VERSION}" diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index 1e91a5798e..47d298fa19 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -6,14 +6,6 @@ add_library( configuration_factory.cc document_node.cc yaml_configuration_factory.cc ryml_document.cc ryml_document_node.cc) -if(ryml_VERSION VERSION_GREATER_EQUAL 0.7.0) - # https://github.com/biojppm/rapidyaml/issues/455 - message(WARNING "Detected ryml >= 0.7.0, it may be unstable") - add_definitions(-DOTEL_HAVE_RYML=7) -else() - add_definitions(-DOTEL_HAVE_RYML=6) -endif() - set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) set_target_version(opentelemetry_configuration) diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index 09182204ce..5988491ee9 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -13,6 +13,12 @@ #include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/version.h" +/* We require 0.7.1 or better */ +#define OTEL_HAVE_RYML 7 + +/* Code using ryml 0.6.0 preserved for regression testing. */ +/* #define OTEL_HAVE_RYML 6 */ + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { From 9e71e0101ec19d869f7db2f4222839993b5adfb5 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 25 Aug 2024 20:58:31 +0200 Subject: [PATCH 070/166] Use ryml 0.7.1 in CI --- ci/install_ryml.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index 0da1671cf4..917a2bb582 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -5,7 +5,7 @@ set -ex export DEBIAN_FRONTEND=noninteractive -[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.6.0" +[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.1" BUILD_DIR=/tmp/ INSTALL_DIR=/usr/local/ From 51c7ee02efeb9311fcb65f02e662464c1bed0cbf Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 25 Aug 2024 23:22:23 +0200 Subject: [PATCH 071/166] Work around for broken ryml tag v0.7.1 --- ci/install_ryml.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index 917a2bb582..7f8d720dc7 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -5,12 +5,22 @@ set -ex export DEBIAN_FRONTEND=noninteractive -[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.1" + +# See https://github.com/biojppm/rapidyaml/issues/468 +# [ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.1" + +# work around: +[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.1-marc" BUILD_DIR=/tmp/ INSTALL_DIR=/usr/local/ pushd $BUILD_DIR -git clone --recursive -b ${RYML_VERSION} https://github.com/biojppm/rapidyaml.git +# See https://github.com/biojppm/rapidyaml/issues/468 +# git clone --recursive -b ${RYML_VERSION} https://github.com/biojppm/rapidyaml.git + +# Work around +git clone --recursive -b ${RYML_VERSION} https://github.com/marcalff/rapidyaml.git + cd rapidyaml RYML_BUILD_OPTIONS=( "-DBUILD_TESTING=OFF" From 4c964fdff326e29ca88dc76368545ee5306b71df Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 26 Aug 2024 23:00:42 +0200 Subject: [PATCH 072/166] Implemented resource schema changes. --- .../configuration/detectors_configuration.h | 26 +++ .../configuration/resource_configuration.h | 3 + .../string_array_configuration.h | 24 ++ .../configuration/configuration_factory.cc | 51 +++- sdk/src/configuration/ryml_document_node.cc | 3 +- sdk/src/init/sdk_builder.cc | 88 ++++--- sdk/test/configuration/CMakeLists.txt | 2 +- sdk/test/configuration/yaml_resource_test.cc | 217 ++++++++++++++++++ 8 files changed, 381 insertions(+), 33 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h create mode 100644 sdk/test/configuration/yaml_resource_test.cc diff --git a/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h b/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h new file mode 100644 index 0000000000..5dfec32aab --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/string_array_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class DetectorsConfiguration +{ +public: + std::unique_ptr included; + std::unique_ptr excluded; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h index 8296757d6e..51069f2cd7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/attributes_configuration.h" +#include "opentelemetry/sdk/configuration/detectors_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,7 +17,9 @@ class ResourceConfiguration { public: std::unique_ptr attributes; + std::unique_ptr detectors; std::string schema_url; + std::string attributes_list; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h new file mode 100644 index 0000000000..242dc99104 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class StringArrayConfiguration +{ +public: + std::vector string_array; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 2b64bc49c8..31441995c3 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -25,6 +25,7 @@ #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/default_aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/detectors_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h" @@ -66,6 +67,7 @@ #include "opentelemetry/sdk/configuration/span_limits_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/stream_configuration.h" +#include "opentelemetry/sdk/configuration/string_array_configuration.h" #include "opentelemetry/sdk/configuration/sum_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" @@ -1260,20 +1262,65 @@ static std::unique_ptr ParseAttributesConfiguration( return model; } +static std::unique_ptr ParseStringArrayConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new StringArrayConfiguration); + + for (auto it = node->begin(); it != node->end(); ++it) + { + std::unique_ptr child(*it); + + std::string name = child->AsString(); + + model->string_array.push_back(name); + } + + return model; +} + +static std::unique_ptr ParseDetectorsConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new DetectorsConfiguration); + std::unique_ptr child; + + child = node->GetChildNode("included"); + if (child) + { + model->included = ParseStringArrayConfiguration(child); + } + + child = node->GetChildNode("excluded"); + if (child) + { + model->excluded = ParseStringArrayConfiguration(child); + } + + return model; +} + static std::unique_ptr ParseResourceConfiguration( const std::unique_ptr &node) { std::unique_ptr model(new ResourceConfiguration); std::unique_ptr child; - model->schema_url = node->GetString("schema_url", ""); + model->schema_url = node->GetString("schema_url", ""); + model->attributes_list = node->GetString("attributes_list", ""); - child = node->GetRequiredChildNode("attributes"); + child = node->GetChildNode("attributes"); if (child) { model->attributes = ParseAttributesConfiguration(child); } + child = node->GetChildNode("detectors"); + if (child) + { + model->detectors = ParseDetectorsConfiguration(child); + } + return model; } diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 88dfabb44f..3d9aa76fe1 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -181,8 +181,7 @@ std::unique_ptr RymlDocumentNode::GetChildNode(const std::string & if (!m_node.is_map()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); - throw InvalidSchemaException(name); + return child; } const char *name_str = name.c_str(); diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index c9386b61da..5dfcafc942 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -432,8 +432,9 @@ std::unique_ptr SdkBuilder::CreateJaegerRemo { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("CreateJaegerRemoteSampler: FIXME"); - throw UnsupportedException("JeagerRemoteSampler not available in opentelemetry-cpp"); + std::string die("JeagerRemoteSampler not available in opentelemetry-cpp"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); return sdk; } @@ -481,8 +482,10 @@ std::unique_ptr SdkBuilder::CreateExtensionS } else { - OTEL_INTERNAL_LOG_ERROR("CreateExtensionSampler() no builder for " << name); - throw UnsupportedException("CreateExtensionSampler() no builder for " + name); + std::string die("CreateExtensionSampler() no builder for "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; } @@ -556,8 +559,9 @@ std::unique_ptr SdkBuilder::CreateConso } else { - OTEL_INTERNAL_LOG_ERROR("No builder for ConsoleSpanExporter"); - throw UnsupportedException("No builder for ConsoleSpanExporter"); + std::string die("No builder for ConsoleSpanExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; @@ -576,8 +580,9 @@ std::unique_ptr SdkBuilder::CreateZipki } else { - OTEL_INTERNAL_LOG_ERROR("No builder for ZipkinSpanExporter"); - throw UnsupportedException("No builder for ZipkinSpanExporter"); + std::string die("No builder for ZipkinSpanExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; @@ -598,8 +603,10 @@ std::unique_ptr SdkBuilder::CreateExten } else { - OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanExporter() no builder for " << name); - throw UnsupportedException("CreateExtensionSpanExporter() no builder for " + name); + std::string die("CreateExtensionSpanExporter() no builder for "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; } @@ -666,8 +673,10 @@ std::unique_ptr SdkBuilder::CreateExte } else { - OTEL_INTERNAL_LOG_ERROR("CreateExtensionSpanProcessor() no builder for " << name); - throw UnsupportedException("CreateExtensionSpanProcessor() no builder for " + name); + std::string die("CreateExtensionSpanProcessor() no builder for "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; } @@ -729,8 +738,10 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const } else { - OTEL_INTERNAL_LOG_ERROR("CreateTextMapPropagator() no builder for " << name); - throw UnsupportedException("CreateTextMapPropagator() no builder for " + name); + std::string die("CreateTextMapPropagator() no builder for "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; } @@ -869,8 +880,9 @@ SdkBuilder::CreateConsolePushMetricExporter( } else { - OTEL_INTERNAL_LOG_ERROR("No builder for ConsolePushMetricExporter"); - throw UnsupportedException("No builder for ConsolePushMetricExporter"); + std::string die("No builder for ConsolePushMetricExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; @@ -893,8 +905,10 @@ SdkBuilder::CreateExtensionPushMetricExporter( } else { - OTEL_INTERNAL_LOG_ERROR("No builder for ExtensionPushMetricExporter" << name); - throw UnsupportedException("No builder for " + name); + std::string die("No builder for ExtensionPushMetricExporter "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; @@ -916,8 +930,9 @@ SdkBuilder::CreatePrometheusPullMetricExporter( } else { - OTEL_INTERNAL_LOG_ERROR("No builder for PrometheusMetricExporter"); - throw UnsupportedException("No builder for PrometheusMetricExporter"); + std::string die("No builder for PrometheusMetricExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; @@ -940,8 +955,10 @@ SdkBuilder::CreateExtensionPullMetricExporter( } else { - OTEL_INTERNAL_LOG_ERROR("No builder for ExtensionPullMetricExporter" << name); - throw UnsupportedException("No builder for " + name); + std::string die("No builder for ExtensionPullMetricExporter "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; @@ -1149,8 +1166,9 @@ SdkBuilder::CreateConsoleLogRecordExporter( } else { - OTEL_INTERNAL_LOG_ERROR("No builder for ConsoleLogRecordExporter"); - throw UnsupportedException("No builder for ConsoleLogRecordExporter"); + std::string die("No builder for ConsoleLogRecordExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; @@ -1173,8 +1191,10 @@ SdkBuilder::CreateExtensionLogRecordExporter( } else { - OTEL_INTERNAL_LOG_ERROR("CreateExtensionLogRecordExporter() no builder for " << name); - throw UnsupportedException("CreateExtensionLogRecordExporter() no builder for " + name); + std::string die("CreateExtensionLogRecordExporter() no builder for "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; } @@ -1242,8 +1262,10 @@ SdkBuilder::CreateExtensionLogRecordProcessor( } else { - OTEL_INTERNAL_LOG_ERROR("CreateExtensionLogRecordProcessor() no builder for " << name); - throw UnsupportedException("CreateExtensionLogRecordProcessor() no builder for " + name); + std::string die("CreateExtensionLogRecordProcessor() no builder for "); + die.append(name); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); } return sdk; } @@ -1298,6 +1320,16 @@ void SdkBuilder::SetResource( } } + if (opt_model->attributes_list.size() != 0) + { + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResource: FIXME attributes_list"); + } + + if (opt_model->detectors != nullptr) + { + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResource: FIXME detectors"); + } + auto sdk_resource = opentelemetry::sdk::resource::Resource::Create(sdk_attributes, opt_model->schema_url); resource = resource.Merge(sdk_resource); diff --git a/sdk/test/configuration/CMakeLists.txt b/sdk/test/configuration/CMakeLists.txt index 2dd04c6d91..6dfe2d856a 100644 --- a/sdk/test/configuration/CMakeLists.txt +++ b/sdk/test/configuration/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -foreach(testname yaml_test yaml_trace_test) +foreach(testname yaml_test yaml_trace_test yaml_resource_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} opentelemetry_configuration) diff --git a/sdk/test/configuration/yaml_resource_test.cc b/sdk/test/configuration/yaml_resource_test.cc new file mode 100644 index 0000000000..7f71f7a56b --- /dev/null +++ b/sdk/test/configuration/yaml_resource_test.cc @@ -0,0 +1,217 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include + +#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" + +std::unique_ptr DoParse(const std::string &yaml) +{ + static const std::string source("test"); + return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); +} + +TEST(YamlResource, empty_resource) +{ + std::string yaml = R"( +file_format: xx.yy +resource: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_EQ(config->resource->attributes, nullptr); + ASSERT_EQ(config->resource->attributes_list, ""); + ASSERT_EQ(config->resource->detectors, nullptr); +} + +TEST(YamlResource, empty_attributes) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + attributes: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->attributes, nullptr); + ASSERT_EQ(config->resource->attributes->kv_map.size(), 0); +} + +TEST(YamlResource, some_attributes) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + attributes: + foo: "1234" + bar: "5678" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->attributes, nullptr); + ASSERT_EQ(config->resource->attributes->kv_map.size(), 2); + ASSERT_EQ(config->resource->attributes->kv_map["foo"], "1234"); + ASSERT_EQ(config->resource->attributes->kv_map["bar"], "5678"); +} + +TEST(YamlResource, empty_attributes_list) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + attributes_list: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_EQ(config->resource->attributes_list, ""); +} + +TEST(YamlResource, some_attributes_list) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + attributes_list: "foo=1234,bar=5678" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_EQ(config->resource->attributes_list, "foo=1234,bar=5678"); +} + +TEST(YamlResource, both) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + attributes: + foo: "1234" + bar: "5678" + attributes_list: "foo=aaaa,bar=bbbb" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->attributes, nullptr); + ASSERT_EQ(config->resource->attributes->kv_map.size(), 2); + ASSERT_EQ(config->resource->attributes->kv_map["foo"], "1234"); + ASSERT_EQ(config->resource->attributes->kv_map["bar"], "5678"); + ASSERT_EQ(config->resource->attributes_list, "foo=aaaa,bar=bbbb"); +} + +TEST(YamlResource, empty_detectors) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + detectors: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->detectors, nullptr); + ASSERT_EQ(config->resource->detectors->included, nullptr); + ASSERT_EQ(config->resource->detectors->excluded, nullptr); +} + +TEST(YamlResource, empty_included_detectors) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + detectors: + included: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->detectors, nullptr); + ASSERT_NE(config->resource->detectors->included, nullptr); + ASSERT_EQ(config->resource->detectors->included->string_array.size(), 0); + ASSERT_EQ(config->resource->detectors->excluded, nullptr); +} + +TEST(YamlResource, some_included_detectors) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + detectors: + included: + - foo + - bar +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->detectors, nullptr); + ASSERT_NE(config->resource->detectors->included, nullptr); + ASSERT_EQ(config->resource->detectors->included->string_array.size(), 2); + ASSERT_EQ(config->resource->detectors->included->string_array[0], "foo"); + ASSERT_EQ(config->resource->detectors->included->string_array[1], "bar"); + ASSERT_EQ(config->resource->detectors->excluded, nullptr); +} + +TEST(YamlResource, some_excluded_detectors) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + detectors: + excluded: + - foo + - bar +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->detectors, nullptr); + ASSERT_EQ(config->resource->detectors->included, nullptr); + ASSERT_NE(config->resource->detectors->excluded, nullptr); + ASSERT_EQ(config->resource->detectors->excluded->string_array.size(), 2); + ASSERT_EQ(config->resource->detectors->excluded->string_array[0], "foo"); + ASSERT_EQ(config->resource->detectors->excluded->string_array[1], "bar"); +} + +TEST(YamlResource, some_detectors) +{ + std::string yaml = R"( +file_format: xx.yy +resource: + detectors: + included: + - foo.in + - bar.in + excluded: + - foo.ex + - bar.ex +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->resource, nullptr); + ASSERT_NE(config->resource->detectors, nullptr); + ASSERT_NE(config->resource->detectors->included, nullptr); + ASSERT_EQ(config->resource->detectors->included->string_array.size(), 2); + ASSERT_EQ(config->resource->detectors->included->string_array[0], "foo.in"); + ASSERT_EQ(config->resource->detectors->included->string_array[1], "bar.in"); + ASSERT_NE(config->resource->detectors->excluded, nullptr); + ASSERT_EQ(config->resource->detectors->excluded->string_array.size(), 2); + ASSERT_EQ(config->resource->detectors->excluded->string_array[0], "foo.ex"); + ASSERT_EQ(config->resource->detectors->excluded->string_array[1], "bar.ex"); +} From 10f1bc28b95d2eca34921a899426550402e6faa3 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 28 Aug 2024 17:40:12 +0200 Subject: [PATCH 073/166] Upgrade to ryml 0.7.2 --- CMakeLists.txt | 2 +- ci/install_ryml.sh | 13 ++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e241d98e7..3046f0858d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -497,7 +497,7 @@ endif() # if((NOT WITH_API_ONLY) AND WITH_CONFIGURATION) - find_package(ryml 0.7.1 REQUIRED) + find_package(ryml 0.7.2 REQUIRED) message( STATUS "Found ryml: include ${RYML_INCLUDE_DIR}, lib ${RYML_LIB_DIR}, version ${ryml_VERSION}" diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index 7f8d720dc7..6f94229f9c 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -5,21 +5,12 @@ set -ex export DEBIAN_FRONTEND=noninteractive - -# See https://github.com/biojppm/rapidyaml/issues/468 -# [ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.1" - -# work around: -[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.1-marc" +[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.2" BUILD_DIR=/tmp/ INSTALL_DIR=/usr/local/ pushd $BUILD_DIR -# See https://github.com/biojppm/rapidyaml/issues/468 -# git clone --recursive -b ${RYML_VERSION} https://github.com/biojppm/rapidyaml.git - -# Work around -git clone --recursive -b ${RYML_VERSION} https://github.com/marcalff/rapidyaml.git +git clone --recursive -b ${RYML_VERSION} https://github.com/biojppm/rapidyaml.git cd rapidyaml RYML_BUILD_OPTIONS=( From 75e3816671d3f812d890de6a9a4e8c157eac8566 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 20 Nov 2024 20:36:24 +0100 Subject: [PATCH 074/166] WIP --- .../otlp/otlp_http_exporter_options.h | 3 ++ .../otlp/src/otlp_http_exporter_options.cc | 29 +++++++++++++++++++ exporters/otlp/src/otlp_http_span_builder.cc | 13 +++++++-- .../attribute_limit_configuration.h | 1 + ...batch_log_record_processor_configuration.h | 1 + .../sdk/configuration/configuration.h | 2 ++ ...onsole_log_record_exporter_configuration.h | 1 + ...nsole_push_metric_exporter_configuration.h | 1 + ...ension_log_record_exporter_configuration.h | 1 + ...nsion_pull_metric_exporter_configuration.h | 1 + ...nsion_push_metric_exporter_configuration.h | 1 + .../log_record_exporter_configuration.h | 1 + .../log_record_limits_configuration.h | 1 + .../log_record_processor_configuration.h | 1 + .../logger_provider_configuration.h | 1 + .../meter_provider_configuration.h | 2 ++ .../metric_reader_configuration.h | 2 ++ .../otlp_log_record_exporter_configuration.h | 2 ++ .../otlp_push_metric_exporter_configuration.h | 2 ++ .../otlp_span_exporter_configuration.h | 1 + .../periodic_metric_reader_configuration.h | 2 ++ ...theus_pull_metric_exporter_configuration.h | 2 ++ .../pull_metric_reader_configuration.h | 2 ++ .../push_metric_exporter_configuration.h | 1 + ...imple_log_record_processor_configuration.h | 1 + .../configuration/configuration_factory.cc | 15 ++++++---- 26 files changed, 81 insertions(+), 9 deletions(-) diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h index 7f6d5a1b35..7c6fb25b1f 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h @@ -27,7 +27,10 @@ namespace otlp */ struct OPENTELEMETRY_EXPORT OtlpHttpExporterOptions { + /** Lookup environment variables. */ OtlpHttpExporterOptions(); + /** No defaults. */ + OtlpHttpExporterOptions(void * /* raw */); ~OtlpHttpExporterOptions(); /** The endpoint to export to. */ diff --git a/exporters/otlp/src/otlp_http_exporter_options.cc b/exporters/otlp/src/otlp_http_exporter_options.cc index 0b00fc9708..eb4726fa46 100644 --- a/exporters/otlp/src/otlp_http_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_exporter_options.cc @@ -47,6 +47,35 @@ OtlpHttpExporterOptions::OtlpHttpExporterOptions() compression = GetOtlpDefaultTracesCompression(); } +OtlpHttpExporterOptions::OtlpHttpExporterOptions(void *) + : json_bytes_mapping(JsonBytesMappingKind::kHexId), + use_json_name(false), + console_debug(false), + ssl_insecure_skip_verify(false) +{ + url = ""; + content_type = HttpRequestContentType::kBinary; + +#ifdef ENABLE_ASYNC_EXPORT + max_concurrent_requests = 64; + max_requests_per_connection = 8; +#endif /* ENABLE_ASYNC_EXPORT */ + + ssl_ca_cert_path = ""; + ssl_ca_cert_string = ""; + ssl_client_key_path = ""; + ssl_client_key_string = ""; + ssl_client_cert_path = ""; + ssl_client_cert_string = ""; + + ssl_min_tls = ""; + ssl_max_tls = ""; + ssl_cipher = ""; + ssl_cipher_suite = ""; + + compression = ""; +} + OtlpHttpExporterOptions::~OtlpHttpExporterOptions() {} } // namespace otlp diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index 4f9d056b82..c05d9a2857 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -20,10 +20,17 @@ void OtlpHttpSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) } std::unique_ptr OtlpHttpSpanBuilder::Build( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration * /* model */) const + const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const { - // FIXME, use model - OtlpHttpExporterOptions options; + OtlpHttpExporterOptions options(nullptr); + options.url = model->endpoint; + options.content_type = GetOtlpHttpProtocolFromString(model->protocol); + options.timeout = std::chrono::duration_cast( + std::chrono::seconds{model->timeout}); + // options.http_headers = model->xxx; + options.ssl_ca_cert_path = model->certificate; + options.ssl_client_key_path = model->client_key; + options.ssl_client_cert_path = model->client_certificate; return OtlpHttpExporterFactory::Create(options); } diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h index 8f85c56215..6cb0194766 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h @@ -13,6 +13,7 @@ namespace sdk namespace configuration { +// REF: schema/opentelemetry_configuration.json class AttributeLimitConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h index b75dbd7601..e963e1158a 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h @@ -14,6 +14,7 @@ namespace sdk namespace configuration { +// REF: schema/logger_provider.json class BatchLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h index 46681f9d03..37cb5262a5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -20,6 +20,7 @@ namespace sdk namespace configuration { +// REF: schema/opentelemetry_configuration.json class Configuration { public: @@ -35,6 +36,7 @@ class Configuration std::unique_ptr propagator; std::unique_ptr tracer_provider; std::unique_ptr resource; + // Ignored: instrumentation private: std::unique_ptr m_doc; diff --git a/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h index 28db3d64a5..fb0e16ee89 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h @@ -13,6 +13,7 @@ namespace sdk namespace configuration { +// REF: schema/common.json, Console class ConsoleLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h index 119b816e4c..182bc8063b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h @@ -14,6 +14,7 @@ namespace sdk namespace configuration { +// REF: schema/common.json, Console class ConsolePushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h index b114a5a20a..60d0b581de 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h @@ -14,6 +14,7 @@ namespace sdk namespace configuration { +// REF: schema/logger_provider.json class ExtensionLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h index 208dc2e4e3..7f950cb9e9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h @@ -14,6 +14,7 @@ namespace sdk namespace configuration { +// REF: schema/meter_provider.json class ExtensionPullMetricExporterConfiguration : public PullMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h index 87174087e1..e86acd4f7d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h @@ -14,6 +14,7 @@ namespace sdk namespace configuration { +// REF: schema/meter_provider.json class ExtensionPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h index e413e83dbf..0344a17614 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h @@ -12,6 +12,7 @@ namespace configuration { class LogRecordExporterConfigurationVisitor; +// REF: schema/logger_provider.json class LogRecordExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h index 881bd1564d..b3c5527020 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h @@ -11,6 +11,7 @@ namespace sdk namespace configuration { +// REF: schema/logger_provider.json class LogRecordLimitsConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h index b31622bd44..64001ebe06 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h @@ -12,6 +12,7 @@ namespace configuration { class LogRecordProcessorConfigurationVisitor; +// REF: schema/logger_provider.json class LogRecordProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h index f316b36f9f..d5aac9b248 100644 --- a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -16,6 +16,7 @@ namespace sdk namespace configuration { +// REF: schema/logger_provider.json class LoggerProviderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h index c9fa1ede84..3f31e89950 100644 --- a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -16,11 +16,13 @@ namespace sdk namespace configuration { +// REF: schema/meter_provider.json class MeterProviderConfiguration { public: std::vector> readers; std::vector> views; + // FIXME: exemplar_filter }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h index 1ab2d5ad1c..2a7364062d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h @@ -14,6 +14,8 @@ namespace configuration { class MetricReaderConfigurationVisitor; +// REF: schema/meter_provider.json +// FIXME: https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h index 94a9721572..3158889825 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h @@ -14,6 +14,7 @@ namespace sdk namespace configuration { +// REF: schema/common.json, Otlp class OtlpLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: @@ -31,6 +32,7 @@ class OtlpLogRecordExporterConfiguration : public LogRecordExporterConfiguration std::string client_key; std::string client_certificate; std::unique_ptr headers; + std::string headers_list; std::string compression; size_t timeout; bool insecure; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h index 050f1ac3b4..550d40f820 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h @@ -20,6 +20,7 @@ enum enum_default_histogram_aggregation base2_exponential_bucket_histogram }; +// REF: schema/meter_provider.json, OtlpMetric class OtlpPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: @@ -37,6 +38,7 @@ class OtlpPushMetricExporterConfiguration : public PushMetricExporterConfigurati std::string client_key; std::string client_certificate; std::unique_ptr headers; + std::string headers_list; std::string compression; size_t timeout; std::string temporality_preference; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h index fa4d66eba9..a5ac0f34eb 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h @@ -31,6 +31,7 @@ class OtlpSpanExporterConfiguration : public SpanExporterConfiguration std::string client_key; std::string client_certificate; std::unique_ptr headers; + std::string headers_list; std::string compression; size_t timeout; bool insecure; diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index 83797537f6..b82bcc519e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -16,6 +16,8 @@ namespace sdk namespace configuration { +// REF: schema/meter_provider.json +// FIXME: https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h index d8b96ef57b..0a580bce3d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h @@ -14,6 +14,7 @@ namespace sdk namespace configuration { +// REF: schema/meter_provider.json class PrometheusPullMetricExporterConfiguration : public PullMetricExporterConfiguration { public: @@ -30,6 +31,7 @@ class PrometheusPullMetricExporterConfiguration : public PullMetricExporterConfi bool without_units; bool without_type_suffix; bool without_scope_info; + // FIXME: with_resource_constant_labels; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index 3009dd2ce5..2eabf73485 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -16,6 +16,8 @@ namespace sdk namespace configuration { +// REF: schema/meter_provider.json +// FIXME: https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class PullMetricReaderConfiguration : public MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h index e977f58929..f98ae6149e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h @@ -12,6 +12,7 @@ namespace configuration { class PushMetricExporterConfigurationVisitor; +// REF: schema/meter_provider.json class PushMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h index 2eedb2b9ca..faa85cd97f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h @@ -13,6 +13,7 @@ namespace sdk namespace configuration { +// REF: schema/logger_provider.json class SimpleLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration { public: diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 31441995c3..4bed41694a 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -133,9 +133,10 @@ static std::unique_ptr ParseOtlpLogRecordExp model->headers = ParseHeadersConfiguration(child); } - model->compression = node->GetString("compression", ""); - model->timeout = node->GetInteger("timeout", 10000); - model->insecure = node->GetBoolean("insecure", false); + model->headers_list = node->GetString("headers_list", ""); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->insecure = node->GetBoolean("insecure", false); return model; } @@ -353,6 +354,7 @@ ParseOtlpPushMetricExporterConfiguration(const std::unique_ptr &no model->headers = ParseHeadersConfiguration(child); } + model->headers_list = node->GetString("headers_list", ""); model->compression = node->GetString("compression", ""); model->timeout = node->GetInteger("timeout", 10000); model->temporality_preference = node->GetString("temporality_preference", ""); @@ -1049,9 +1051,10 @@ static std::unique_ptr ParseOtlpSpanExporterConfi model->headers = ParseHeadersConfiguration(child); } - model->compression = node->GetString("compression", ""); - model->timeout = node->GetInteger("timeout", 10000); - model->insecure = node->GetBoolean("insecure", false); + model->headers_list = node->GetString("headers_list", ""); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->insecure = node->GetBoolean("insecure", false); return model; } From be9d57d6946539a0989e6a99a3fee4d8a769be39 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 4 Dec 2024 00:59:08 +0100 Subject: [PATCH 075/166] General cleanup. - added references to yaml schema - simplified propagators --- .../configuration/aggregation_configuration.h | 2 + .../always_off_sampler_configuration.h | 2 + .../always_on_sampler_configuration.h | 2 + ...ion.h => attribute_limits_configuration.h} | 5 +- .../configuration/attributes_configuration.h | 3 + ...cket_histogram_aggregation_configuration.h | 2 + ...batch_log_record_processor_configuration.h | 3 +- .../batch_span_processor_configuration.h | 2 + .../composite_propagator_configuration.h | 32 ----------- .../sdk/configuration/configuration.h | 28 ++++++++- ...onsole_log_record_exporter_configuration.h | 3 +- ...nsole_push_metric_exporter_configuration.h | 3 +- .../console_span_exporter_configuration.h | 2 + .../default_aggregation_configuration.h | 2 + .../configuration/detectors_configuration.h | 2 + .../sdk/configuration/document_node.h | 7 +-- .../drop_aggregation_configuration.h | 2 + ...cket_histogram_aggregation_configuration.h | 2 + ...ension_log_record_exporter_configuration.h | 3 +- ...nsion_pull_metric_exporter_configuration.h | 3 +- ...nsion_push_metric_exporter_configuration.h | 3 +- .../jaeger_remote_sampler_configuration.h | 2 + .../last_value_aggregation_configuration.h | 2 + .../log_record_exporter_configuration.h | 3 +- .../log_record_limits_configuration.h | 3 +- .../log_record_processor_configuration.h | 3 +- .../logger_provider_configuration.h | 3 +- .../meter_provider_configuration.h | 3 +- .../metric_reader_configuration.h | 6 +- .../otlp_log_record_exporter_configuration.h | 3 +- .../otlp_push_metric_exporter_configuration.h | 3 +- .../otlp_span_exporter_configuration.h | 2 + .../parent_based_sampler_configuration.h | 2 + .../periodic_metric_reader_configuration.h | 6 +- ...theus_pull_metric_exporter_configuration.h | 3 +- .../configuration/propagator_configuration.h | 6 +- .../propagator_configuration_visitor.h | 29 ---------- .../pull_metric_reader_configuration.h | 6 +- .../push_metric_exporter_configuration.h | 3 +- .../configuration/resource_configuration.h | 2 + .../sdk/configuration/sampler_configuration.h | 2 + ...imple_log_record_processor_configuration.h | 3 +- .../simple_propagator_configuration.h | 32 ----------- .../simple_span_processor_configuration.h | 2 + .../span_exporter_configuration.h | 2 + .../configuration/span_limits_configuration.h | 2 + .../span_processor_configuration.h | 2 + .../string_array_configuration.h | 3 + .../sum_aggregation_configuration.h | 2 + ...ace_id_ratio_based_sampler_configuration.h | 2 + .../tracer_provider_configuration.h | 2 + .../zipkin_span_exporter_configuration.h | 2 + .../opentelemetry/sdk/init/sdk_builder.h | 8 --- .../configuration/configuration_factory.cc | 56 ++++-------------- sdk/src/init/sdk_builder.cc | 57 +------------------ 55 files changed, 145 insertions(+), 235 deletions(-) rename sdk/include/opentelemetry/sdk/configuration/{attribute_limit_configuration.h => attribute_limits_configuration.h} (76%) delete mode 100644 sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h delete mode 100644 sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h delete mode 100644 sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h index 7825485555..65b14532c4 100644 --- a/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: aggregation class AggregationConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h index 6eac2ef7b5..8f9156ae91 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: always_off class AlwaysOffSamplerConfiguration : public SamplerConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h index f95121690d..c6cd99e078 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: always_on class AlwaysOnSamplerConfiguration : public SamplerConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h similarity index 76% rename from sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h index 6cb0194766..33f9df9417 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attribute_limit_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h @@ -13,8 +13,9 @@ namespace sdk namespace configuration { -// REF: schema/opentelemetry_configuration.json -class AttributeLimitConfiguration +// YAML-SCHEMA: schema/opentelemetry_configuration.json +// YAML-NODE: AttributeLimits +class AttributeLimitsConfiguration { public: size_t attribute_value_length_limit; diff --git a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h index e3b6282dc2..25153665ab 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h @@ -13,6 +13,9 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +// FIXME: Name/Value/Type class AttributesConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h index d783aead2f..138e090bbe 100644 --- a/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: base2_exponential_bucket_histogram class Base2ExponentialBucketHistogramAggregationConfiguration : public AggregationConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h index e963e1158a..d89441503f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h @@ -14,7 +14,8 @@ namespace sdk namespace configuration { -// REF: schema/logger_provider.json +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: BatchLogRecordProcessor class BatchLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h index a65eff686e..994ec5cc83 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: BatchSpanProcessor class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h deleted file mode 100644 index c64193d635..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/composite_propagator_configuration.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/sdk/configuration/propagator_configuration.h" -#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class CompositePropagatorConfiguration : public PropagatorConfiguration -{ -public: - CompositePropagatorConfiguration() = default; - ~CompositePropagatorConfiguration() override = default; - - void Accept(PropagatorConfigurationVisitor *visitor) const override - { - visitor->VisitComposite(this); - } - - std::vector names; -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h index 37cb5262a5..a16c928c0d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -5,7 +5,7 @@ #include -#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" +#include "opentelemetry/sdk/configuration/attribute_limits_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" @@ -14,13 +14,35 @@ #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/version.h" +/* + * General notes about configuration classes. + * + * Each Yaml node that exists in the yaml schema, + * as defined by https://github.com/open-telemetry/opentelemetry-configuration + * is represented by a C++ class. + * Special comments are used to relate the C++ class to + * the Yaml node it represents. + * + * YAML-SCHEMA: points to the relevant file within the + * opentelemetry-configuration repository + * YAML-NODE: points to the relevant node within the file. + * + * For example, + * C++ class opentelemetry::sdk::configuration::Configuration + * corresponds to + * Yaml node OpenTelemetryConfiguration, + * in file + * https://github.com/open-telemetry/opentelemetry-configuration/blob/main/schema/opentelemetry_configuration.json + */ + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace configuration { -// REF: schema/opentelemetry_configuration.json +// YAML-SCHEMA: schema/opentelemetry_configuration.json +// YAML-NODE: OpenTelemetryConfiguration class Configuration { public: @@ -30,7 +52,7 @@ class Configuration std::string file_format; bool disabled{false}; - std::unique_ptr attribute_limits; + std::unique_ptr attribute_limits; std::unique_ptr logger_provider; std::unique_ptr meter_provider; std::unique_ptr propagator; diff --git a/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h index fb0e16ee89..8175f01fc0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h @@ -13,7 +13,8 @@ namespace sdk namespace configuration { -// REF: schema/common.json, Console +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Console class ConsoleLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h index 182bc8063b..16b5bea296 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h @@ -14,7 +14,8 @@ namespace sdk namespace configuration { -// REF: schema/common.json, Console +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Console class ConsolePushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h index 1fdce12edb..98735a8fae 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Console class ConsoleSpanExporterConfiguration : public SpanExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h index b76576dd4f..b55a3d6c6c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: default class DefaultAggregationConfiguration : public AggregationConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h b/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h index 5dfec32aab..024ab78655 100644 --- a/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: Detectors class DetectorsConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index bbd50dfd0e..ac7657de05 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -3,14 +3,9 @@ #pragma once +#include #include -#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" -#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" -#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" -#include "opentelemetry/sdk/configuration/propagator_configuration.h" -#include "opentelemetry/sdk/configuration/resource_configuration.h" -#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h index a64e597c9c..22454a3db5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: drop class DropAggregationConfiguration : public AggregationConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h index 1d5e4c1eaa..cc6900e56d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: explicit_bucket_histogram class ExplicitBucketHistogramAggregationConfiguration : public AggregationConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h index 60d0b581de..d68c3b7d39 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h @@ -14,7 +14,8 @@ namespace sdk namespace configuration { -// REF: schema/logger_provider.json +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LogRecordProcessor class ExtensionLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h index 7f950cb9e9..cde2b0aa2d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h @@ -14,7 +14,8 @@ namespace sdk namespace configuration { -// REF: schema/meter_provider.json +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PullMetricExporter class ExtensionPullMetricExporterConfiguration : public PullMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h index e86acd4f7d..05e71090b8 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h @@ -14,7 +14,8 @@ namespace sdk namespace configuration { -// REF: schema/meter_provider.json +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PushMetricExporter class ExtensionPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h index bff5b05a56..3f40bfc5d0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: jaeger_remote class JaegerRemoteSamplerConfiguration : public SamplerConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h index 86e4337314..7dad563860 100644 --- a/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: last_value class LastValueAggregationConfiguration : public AggregationConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h index 0344a17614..77c98eed71 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h @@ -12,7 +12,8 @@ namespace configuration { class LogRecordExporterConfigurationVisitor; -// REF: schema/logger_provider.json +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LogRecordExporter class LogRecordExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h index b3c5527020..c8b9eb74ec 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -// REF: schema/logger_provider.json +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LogRecordLimits class LogRecordLimitsConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h index 64001ebe06..3e05ebd5af 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h @@ -12,7 +12,8 @@ namespace configuration { class LogRecordProcessorConfigurationVisitor; -// REF: schema/logger_provider.json +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LogRecordProcessor class LogRecordProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h index d5aac9b248..f9fcea7fb8 100644 --- a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -16,7 +16,8 @@ namespace sdk namespace configuration { -// REF: schema/logger_provider.json +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LoggerProvider class LoggerProviderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h index 3f31e89950..05b2e0ae29 100644 --- a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -16,7 +16,8 @@ namespace sdk namespace configuration { -// REF: schema/meter_provider.json +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: MeterProvider class MeterProviderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h index 2a7364062d..d9fea5e07d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h @@ -14,8 +14,10 @@ namespace configuration { class MetricReaderConfigurationVisitor; -// REF: schema/meter_provider.json -// FIXME: https://github.com/open-telemetry/opentelemetry-configuration/issues/138 +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: MetricReader +// FIXME: +// https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h index 3158889825..a0cc162833 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h @@ -14,7 +14,8 @@ namespace sdk namespace configuration { -// REF: schema/common.json, Otlp +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Otlp class OtlpLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h index 550d40f820..e30edd7026 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h @@ -20,7 +20,8 @@ enum enum_default_histogram_aggregation base2_exponential_bucket_histogram }; -// REF: schema/meter_provider.json, OtlpMetric +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: OtlpMetric class OtlpPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h index a5ac0f34eb..785cec96fa 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Otlp class OtlpSpanExporterConfiguration : public SpanExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h index 5cf6220232..a5a1079262 100644 --- a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: parent_based class ParentBasedSamplerConfiguration : public SamplerConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index b82bcc519e..26b0ee2994 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -16,8 +16,10 @@ namespace sdk namespace configuration { -// REF: schema/meter_provider.json -// FIXME: https://github.com/open-telemetry/opentelemetry-configuration/issues/138 +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PeriodicMetricReader +// FIXME: +// https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h index 0a580bce3d..701ab2af4a 100644 --- a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h @@ -14,7 +14,8 @@ namespace sdk namespace configuration { -// REF: schema/meter_provider.json +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: Prometheus class PrometheusPullMetricExporterConfiguration : public PullMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h index eecf9f78ce..3aa3a063ef 100644 --- a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h @@ -11,15 +11,15 @@ namespace sdk namespace configuration { -class PropagatorConfigurationVisitor; - +// YAML-SCHEMA: schema/propagator.json +// YAML-NODE: Propagator class PropagatorConfiguration { public: PropagatorConfiguration() = default; virtual ~PropagatorConfiguration() = default; - virtual void Accept(PropagatorConfigurationVisitor *visitor) const = 0; + std::vector composite; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h deleted file mode 100644 index 61669bee5c..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration_visitor.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class SimplePropagatorConfiguration; -class CompositePropagatorConfiguration; - -class PropagatorConfigurationVisitor -{ -public: - PropagatorConfigurationVisitor() = default; - virtual ~PropagatorConfigurationVisitor() = default; - - virtual void VisitSimple(const SimplePropagatorConfiguration *model) = 0; - virtual void VisitComposite(const CompositePropagatorConfiguration *model) = 0; -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index 2eabf73485..bc07d52672 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -16,8 +16,10 @@ namespace sdk namespace configuration { -// REF: schema/meter_provider.json -// FIXME: https://github.com/open-telemetry/opentelemetry-configuration/issues/138 +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PullMetricReader +// FIXME: +// https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class PullMetricReaderConfiguration : public MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h index f98ae6149e..15133b7ee8 100644 --- a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h @@ -12,7 +12,8 @@ namespace configuration { class PushMetricExporterConfigurationVisitor; -// REF: schema/meter_provider.json +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PushMetricExporter class PushMetricExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h index 51069f2cd7..12dd60131e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: Resource class ResourceConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h index d329e2cf24..862bdd6382 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h @@ -13,6 +13,8 @@ namespace configuration class SamplerConfigurationVisitor; +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: Sampler class SamplerConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h index faa85cd97f..aed3a3680c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h @@ -13,7 +13,8 @@ namespace sdk namespace configuration { -// REF: schema/logger_provider.json +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: SimpleLogRecordProcessor class SimpleLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h deleted file mode 100644 index 3aed93492d..0000000000 --- a/sdk/include/opentelemetry/sdk/configuration/simple_propagator_configuration.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/sdk/configuration/propagator_configuration.h" -#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace configuration -{ - -class SimplePropagatorConfiguration : public PropagatorConfiguration -{ -public: - SimplePropagatorConfiguration() = default; - ~SimplePropagatorConfiguration() override = default; - - void Accept(PropagatorConfigurationVisitor *visitor) const override - { - visitor->VisitSimple(this); - } - - std::string name; -}; - -} // namespace configuration -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h index 84d93cbe1e..91ed84ec02 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SimpleSpanProcessor class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h index 5ce5b1282b..1231dfc29d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h @@ -12,6 +12,8 @@ namespace configuration { class SpanExporterConfigurationVisitor; +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SpanExporter class SpanExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h index 813e5d1bef..fa7059e5ae 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h @@ -11,6 +11,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SpanLimits class SpanLimitsConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h index 2b03fc1b9f..9182a5eb52 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h @@ -12,6 +12,8 @@ namespace configuration { class SpanProcessorConfigurationVisitor; +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SpanProcessor class SpanProcessorConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h index 242dc99104..81427caf06 100644 --- a/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h @@ -13,6 +13,9 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/common.json +// YAML-NODE: included +// YAML-NODE: excluded class StringArrayConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h index f08404232a..cfcd44d620 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h @@ -14,6 +14,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: sum class SumAggregationConfiguration : public AggregationConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h index c2fa4b751d..fe17e3477e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h @@ -13,6 +13,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: trace_id_ratio_based class TraceIdRatioBasedSamplerConfiguration : public SamplerConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h index 5ec3145173..79b77bbfbf 100644 --- a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h @@ -17,6 +17,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: TracerProvider class TracerProviderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h index 155a73257c..cba83be3ce 100644 --- a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -15,6 +15,8 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: Zipkin class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index a4e0ea2b31..5666dba5f6 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -6,7 +6,6 @@ #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" -#include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" @@ -23,7 +22,6 @@ #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" @@ -109,12 +107,6 @@ class SdkBuilder std::unique_ptr CreateTextMapPropagator( const std::string &name) const; - std::unique_ptr CreateSimplePropagator( - const opentelemetry::sdk::configuration::SimplePropagatorConfiguration *model) const; - - std::unique_ptr CreateCompositePropagator( - const opentelemetry::sdk::configuration::CompositePropagatorConfiguration *model) const; - std::unique_ptr CreatePropagator( const std::unique_ptr &model) const; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 4bed41694a..96d1712ae1 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -13,12 +13,11 @@ #include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" -#include "opentelemetry/sdk/configuration/attribute_limit_configuration.h" +#include "opentelemetry/sdk/configuration/attribute_limits_configuration.h" #include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" -#include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" @@ -61,7 +60,6 @@ #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" #include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" -#include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_limits_configuration.h" @@ -104,10 +102,10 @@ static std::unique_ptr ParseHeadersConfiguration( return model; } -static std::unique_ptr ParseAttributeLimitConfiguration( +static std::unique_ptr ParseAttributeLimitsConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new AttributeLimitConfiguration); + std::unique_ptr model(new AttributeLimitsConfiguration); model->attribute_value_length_limit = node->GetInteger("attribute_value_length_limit", 4096); model->attribute_count_limit = node->GetInteger("attribute_count_limit", 128); @@ -798,56 +796,26 @@ static std::unique_ptr ParseMeterProviderConfigurati return model; } -static std::unique_ptr ParseSimplePropagatorConfiguration( +static std::unique_ptr ParsePropagatorConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new SimplePropagatorConfiguration); - - model->name = node->AsString(); + std::unique_ptr model(new PropagatorConfiguration); - return model; -} - -static std::unique_ptr ParseCompositePropagatorConfiguration( - const std::unique_ptr &node) -{ - std::unique_ptr model(new CompositePropagatorConfiguration); + std::unique_ptr child; + child = node->GetRequiredChildNode("composite"); - for (auto it = node->begin(); it != node->end(); ++it) + for (auto it = child->begin(); it != child->end(); ++it) { - std::unique_ptr child(*it); + std::unique_ptr element(*it); - std::string name = child->AsString(); + std::string name = element->AsString(); - model->names.push_back(name); + model->composite.push_back(name); } return model; } -static std::unique_ptr ParsePropagatorConfiguration( - const std::unique_ptr &node) -{ - std::unique_ptr child; - - child = node->GetChildNode("composite"); - if (child) - { - return ParseCompositePropagatorConfiguration(child); - } - - // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/75 - child = node->GetChildNode("simple"); - if (child) - { - return ParseSimplePropagatorConfiguration(child); - } - - OTEL_INTERNAL_LOG_ERROR("ParsePropagatorConfiguration: illegal propagator"); - throw InvalidSchemaException("Illegal propagator"); - return nullptr; -} - static std::unique_ptr ParseSpanLimitsConfiguration( const std::unique_ptr &node) { @@ -1341,7 +1309,7 @@ std::unique_ptr ConfigurationFactory::ParseConfiguration( child = node->GetChildNode("attribute_limits"); if (child) { - model->attribute_limits = ParseAttributeLimitConfiguration(child); + model->attribute_limits = ParseAttributeLimitsConfiguration(child); } child = node->GetChildNode("logger_provider"); diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 5dfcafc942..08146daf76 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -15,7 +15,6 @@ #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" -#include "opentelemetry/sdk/configuration/composite_propagator_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" @@ -37,7 +36,6 @@ #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" -#include "opentelemetry/sdk/configuration/propagator_configuration_visitor.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" @@ -47,7 +45,6 @@ #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" #include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" -#include "opentelemetry/sdk/configuration/simple_propagator_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" @@ -118,30 +115,6 @@ namespace sdk namespace init { -class PropagatorBuilder : public opentelemetry::sdk::configuration::PropagatorConfigurationVisitor -{ -public: - PropagatorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~PropagatorBuilder() override = default; - - void VisitSimple( - const opentelemetry::sdk::configuration::SimplePropagatorConfiguration *model) override - { - propagator = m_sdk_builder->CreateSimplePropagator(model); - } - - void VisitComposite( - const opentelemetry::sdk::configuration::CompositePropagatorConfiguration *model) override - { - propagator = m_sdk_builder->CreateCompositePropagator(model); - } - - std::unique_ptr propagator; - -private: - const SdkBuilder *m_sdk_builder; -}; - class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigurationVisitor { public: @@ -747,24 +720,13 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const } std::unique_ptr -SdkBuilder::CreateSimplePropagator( - const opentelemetry::sdk::configuration::SimplePropagatorConfiguration *model) const -{ - std::unique_ptr sdk; - - sdk = CreateTextMapPropagator(model->name); - - return sdk; -} - -std::unique_ptr -SdkBuilder::CreateCompositePropagator( - const opentelemetry::sdk::configuration::CompositePropagatorConfiguration *model) const +SdkBuilder::CreatePropagator( + const std::unique_ptr &model) const { std::vector> propagators; std::unique_ptr propagator; - for (const auto &name : model->names) + for (const auto &name : model->composite) { propagator = CreateTextMapPropagator(name); propagators.push_back(std::move(propagator)); @@ -776,19 +738,6 @@ SdkBuilder::CreateCompositePropagator( return sdk; } -std::unique_ptr -SdkBuilder::CreatePropagator( - const std::unique_ptr &model) const -{ - std::unique_ptr sdk; - - PropagatorBuilder builder(this); - model->Accept(&builder); - sdk = std::move(builder.propagator); - - return sdk; -} - static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType( enum opentelemetry::sdk::configuration::enum_instrument_type config) { From 54d7b1e2f129b86e10d1cab476ab0e1050ecc802 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 7 Dec 2024 01:12:21 +0100 Subject: [PATCH 076/166] WIP --- .../metric_producer_configuration.h | 30 +++++++++++++++++++ .../periodic_metric_reader_configuration.h | 2 ++ .../pull_metric_reader_configuration.h | 2 ++ 3 files changed, 34 insertions(+) create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h new file mode 100644 index 0000000000..9e8fb8e411 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class MetricProducerConfigurationVisitor; + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: MetricProducer +class MetricProducerConfiguration +{ +public: + MetricProducerConfiguration() = default; + virtual ~MetricProducerConfiguration() = default; + + virtual void Accept(MetricProducerConfigurationVisitor *visitor) const = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index 26b0ee2994..42c9e3798d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/metric_producer_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" @@ -34,6 +35,7 @@ class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration size_t interval; size_t timeout; std::unique_ptr exporter; + std::vector> producers; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index bc07d52672..2e57c0f917 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/metric_producer_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" @@ -32,6 +33,7 @@ class PullMetricReaderConfiguration : public MetricReaderConfiguration } std::unique_ptr exporter; + std::vector> producers; }; } // namespace configuration From d2f6c6e9425f6941b8d885b0b194054ee6001a83 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 7 Dec 2024 01:38:29 +0100 Subject: [PATCH 077/166] Cppcheck cleanup --- ...ponential_bucket_histogram_aggregation_configuration.h | 6 +++--- .../batch_log_record_processor_configuration.h | 8 ++++---- .../configuration/batch_span_processor_configuration.h | 8 ++++---- .../explicit_bucket_histogram_aggregation_configuration.h | 2 +- .../sdk/configuration/extension_sampler_configuration.h | 2 +- .../configuration/jaeger_remote_sampler_configuration.h | 2 +- .../otlp_log_record_exporter_configuration.h | 4 ++-- .../otlp_push_metric_exporter_configuration.h | 6 +++--- .../sdk/configuration/otlp_span_exporter_configuration.h | 4 ++-- .../configuration/periodic_metric_reader_configuration.h | 4 ++-- .../prometheus_pull_metric_exporter_configuration.h | 8 ++++---- .../sdk/configuration/selector_configuration.h | 2 +- .../trace_id_ratio_based_sampler_configuration.h | 2 +- .../configuration/zipkin_span_exporter_configuration.h | 2 +- 14 files changed, 30 insertions(+), 30 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h index 138e090bbe..494f1b63be 100644 --- a/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h @@ -22,9 +22,9 @@ class Base2ExponentialBucketHistogramAggregationConfiguration : public Aggregati Base2ExponentialBucketHistogramAggregationConfiguration() = default; ~Base2ExponentialBucketHistogramAggregationConfiguration() override = default; - size_t max_scale; - size_t max_size; - bool record_min_max; + size_t max_scale{0}; + size_t max_size{0}; + bool record_min_max{false}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h index d89441503f..b7d2592789 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h @@ -27,10 +27,10 @@ class BatchLogRecordProcessorConfiguration : public LogRecordProcessorConfigurat visitor->VisitBatch(this); } - size_t schedule_delay; - size_t export_timeout; - size_t max_queue_size; - size_t max_export_batch_size; + size_t schedule_delay{0}; + size_t export_timeout{0}; + size_t max_queue_size{0}; + size_t max_export_batch_size{0}; std::unique_ptr exporter; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h index 994ec5cc83..7dd563500e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -27,10 +27,10 @@ class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration visitor->VisitBatch(this); } - size_t schedule_delay; - size_t export_timeout; - size_t max_queue_size; - size_t max_export_batch_size; + size_t schedule_delay{0}; + size_t export_timeout{0}; + size_t max_queue_size{0}; + size_t max_export_batch_size{0}; std::unique_ptr exporter; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h index cc6900e56d..3419fea64d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h @@ -23,7 +23,7 @@ class ExplicitBucketHistogramAggregationConfiguration : public AggregationConfig ~ExplicitBucketHistogramAggregationConfiguration() override = default; std::vector boundaries; - bool record_min_max; + bool record_min_max{false}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h index 9f0df785c7..e2347910a1 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h @@ -27,7 +27,7 @@ class ExtensionSamplerConfiguration : public SamplerConfiguration std::string name; std::unique_ptr node; - size_t depth; + size_t depth{0}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h index 3f40bfc5d0..6a518d2f8c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -27,7 +27,7 @@ class JaegerRemoteSamplerConfiguration : public SamplerConfiguration } std::string endpoint; - size_t interval; + size_t interval{0}; std::unique_ptr initial_sampler; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h index a0cc162833..752d9c6da7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h @@ -35,8 +35,8 @@ class OtlpLogRecordExporterConfiguration : public LogRecordExporterConfiguration std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout; - bool insecure; + size_t timeout{0}; + bool insecure{false}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h index e30edd7026..3e1123b546 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h @@ -41,10 +41,10 @@ class OtlpPushMetricExporterConfiguration : public PushMetricExporterConfigurati std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout; + size_t timeout{0}; std::string temporality_preference; - enum_default_histogram_aggregation default_histogram_aggregation; - bool insecure; + enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; + bool insecure{false}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h index 785cec96fa..643bb7e435 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h @@ -35,8 +35,8 @@ class OtlpSpanExporterConfiguration : public SpanExporterConfiguration std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout; - bool insecure; + size_t timeout{0}; + bool insecure{false}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index 42c9e3798d..642dcec0b5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -32,8 +32,8 @@ class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration visitor->VisitPeriodic(this); } - size_t interval; - size_t timeout; + size_t interval{0}; + size_t timeout{0}; std::unique_ptr exporter; std::vector> producers; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h index 701ab2af4a..9c77d2366f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h @@ -28,10 +28,10 @@ class PrometheusPullMetricExporterConfiguration : public PullMetricExporterConfi } std::string host; - size_t port; - bool without_units; - bool without_type_suffix; - bool without_scope_info; + size_t port{0}; + bool without_units{false}; + bool without_type_suffix{false}; + bool without_scope_info{false}; // FIXME: with_resource_constant_labels; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h index 600094791e..43a3567c7a 100644 --- a/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h @@ -30,7 +30,7 @@ class SelectorConfiguration ~SelectorConfiguration() = default; std::string instrument_name; - enum_instrument_type instrument_type; + enum_instrument_type instrument_type{counter}; std::string unit; std::string meter_name; std::string meter_version; diff --git a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h index fe17e3477e..e9f590c77a 100644 --- a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h @@ -26,7 +26,7 @@ class TraceIdRatioBasedSamplerConfiguration : public SamplerConfiguration visitor->VisitTraceIdRatioBased(this); } - double ratio; + double ratio{0.0}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h index cba83be3ce..c5946044bb 100644 --- a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -29,7 +29,7 @@ class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration } std::string endpoint; - size_t timeout; + size_t timeout{0}; }; } // namespace configuration From faf756f55fc60e14c3ffed34b39184da2a772ac5 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 7 Dec 2024 01:53:06 +0100 Subject: [PATCH 078/166] Cppcheck --- examples/yaml/custom_span_processor.h | 2 +- .../otlp/src/otlp_http_exporter_options.cc | 36 +++++++++---------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/examples/yaml/custom_span_processor.h b/examples/yaml/custom_span_processor.h index cd1f06f45a..7d0dae38de 100644 --- a/examples/yaml/custom_span_processor.h +++ b/examples/yaml/custom_span_processor.h @@ -14,7 +14,7 @@ class CustomSpanProcessor : public opentelemetry::sdk::trace::SpanProcessor { public: - CustomSpanProcessor(std::string comment) : m_comment(comment) {} + CustomSpanProcessor(const std::string &comment) : m_comment(comment) {} ~CustomSpanProcessor() override = default; std::unique_ptr MakeRecordable() noexcept override; diff --git a/exporters/otlp/src/otlp_http_exporter_options.cc b/exporters/otlp/src/otlp_http_exporter_options.cc index e6aad1aea8..2a51a57ced 100644 --- a/exporters/otlp/src/otlp_http_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_exporter_options.cc @@ -40,32 +40,30 @@ OtlpHttpExporterOptions::OtlpHttpExporterOptions() } OtlpHttpExporterOptions::OtlpHttpExporterOptions(void *) - : json_bytes_mapping(JsonBytesMappingKind::kHexId), + : url(), + content_type(HttpRequestContentType::kBinary), + json_bytes_mapping(JsonBytesMappingKind::kHexId), use_json_name(false), console_debug(false), - ssl_insecure_skip_verify(false) + timeout(0), + http_headers(), + ssl_insecure_skip_verify(false), + ssl_ca_cert_path(), + ssl_ca_cert_string(), + ssl_client_key_path(), + ssl_client_key_string(), + ssl_client_cert_path(), + ssl_client_cert_string(), + ssl_min_tls(), + ssl_max_tls(), + ssl_cipher(), + ssl_cipher_suite(), + compression() { - url = ""; - content_type = HttpRequestContentType::kBinary; - #ifdef ENABLE_ASYNC_EXPORT max_concurrent_requests = 64; max_requests_per_connection = 8; #endif /* ENABLE_ASYNC_EXPORT */ - - ssl_ca_cert_path = ""; - ssl_ca_cert_string = ""; - ssl_client_key_path = ""; - ssl_client_key_string = ""; - ssl_client_cert_path = ""; - ssl_client_cert_string = ""; - - ssl_min_tls = ""; - ssl_max_tls = ""; - ssl_cipher = ""; - ssl_cipher_suite = ""; - - compression = ""; } OtlpHttpExporterOptions::~OtlpHttpExporterOptions() {} From 2cfdc094552f4e7169e78bf49cc44a72b50846d5 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 10 Dec 2024 23:12:30 +0100 Subject: [PATCH 079/166] iwyu cleanup --- .iwyu.imp | 1 + exporters/otlp/src/otlp_http_span_builder.cc | 6 +++++- exporters/otlp/src/otlp_metric_utils.cc | 1 + exporters/otlp/src/otlp_recordable_utils.cc | 1 - .../otlp/test/otlp_metrics_serialization_test.cc | 1 + sdk/src/configuration/ryml_document.cc | 2 ++ .../configuration/yaml_configuration_factory.cc | 1 + sdk/src/init/configured_sdk.cc | 2 ++ sdk/src/init/sdk_builder.cc | 15 ++++++++++++++- sdk/test/configuration/yaml_resource_test.cc | 12 ++++++++++-- sdk/test/configuration/yaml_test.cc | 5 +++++ sdk/test/configuration/yaml_trace_test.cc | 4 +++- 12 files changed, 45 insertions(+), 6 deletions(-) diff --git a/.iwyu.imp b/.iwyu.imp index ec2832b473..88d4a0348d 100644 --- a/.iwyu.imp +++ b/.iwyu.imp @@ -16,6 +16,7 @@ { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index c05d9a2857..2328486381 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -1,9 +1,13 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" +#include +#include + +#include "opentelemetry/exporters/otlp/otlp_http.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" +#include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_metric_utils.cc b/exporters/otlp/src/otlp_metric_utils.cc index 521a7e2f10..36c607230e 100644 --- a/exporters/otlp/src/otlp_metric_utils.cc +++ b/exporters/otlp/src/otlp_metric_utils.cc @@ -18,6 +18,7 @@ #include "opentelemetry/sdk/metrics/data/point_data.h" #include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/metrics/instruments.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" // clang-format off diff --git a/exporters/otlp/src/otlp_recordable_utils.cc b/exporters/otlp/src/otlp_recordable_utils.cc index 1be27204c7..b1f2ada401 100644 --- a/exporters/otlp/src/otlp_recordable_utils.cc +++ b/exporters/otlp/src/otlp_recordable_utils.cc @@ -14,7 +14,6 @@ #include "opentelemetry/exporters/otlp/otlp_recordable.h" #include "opentelemetry/exporters/otlp/otlp_recordable_utils.h" #include "opentelemetry/nostd/span.h" -#include "opentelemetry/sdk/common/attribute_utils.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/logs/recordable.h" #include "opentelemetry/sdk/resource/resource.h" diff --git a/exporters/otlp/test/otlp_metrics_serialization_test.cc b/exporters/otlp/test/otlp_metrics_serialization_test.cc index 55ab80d0ab..0ec1ffcd83 100644 --- a/exporters/otlp/test/otlp_metrics_serialization_test.cc +++ b/exporters/otlp/test/otlp_metrics_serialization_test.cc @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index 5988491ee9..eadd25a859 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include #include #include #include diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index ad31fa65dd..04a628308c 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include #include diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index 10167a7fb7..c7bd4b19fe 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include #include "opentelemetry/logs/logger_provider.h" #include "opentelemetry/logs/provider.h" diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 08146daf76..7388de2ff3 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -13,13 +14,17 @@ #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" @@ -31,16 +36,20 @@ #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" #include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/resource_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/sdk/configuration/selector_configuration.h" @@ -83,18 +92,22 @@ #include "opentelemetry/sdk/logs/processor.h" #include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" -#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h" #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_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/metric_reader.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" #include "opentelemetry/sdk/metrics/view/instrument_selector.h" #include "opentelemetry/sdk/metrics/view/meter_selector.h" #include "opentelemetry/sdk/metrics/view/view.h" #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/metrics/view/view_registry_factory.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" #include "opentelemetry/sdk/trace/batch_span_processor_options.h" #include "opentelemetry/sdk/trace/exporter.h" diff --git a/sdk/test/configuration/yaml_resource_test.cc b/sdk/test/configuration/yaml_resource_test.cc index 7f71f7a56b..a2c139c718 100644 --- a/sdk/test/configuration/yaml_resource_test.cc +++ b/sdk/test/configuration/yaml_resource_test.cc @@ -2,8 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 #include -#include - +#include +#include +#include +#include + +#include "opentelemetry/sdk/configuration/attributes_configuration.h" +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/detectors_configuration.h" +#include "opentelemetry/sdk/configuration/resource_configuration.h" +#include "opentelemetry/sdk/configuration/string_array_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" std::unique_ptr DoParse(const std::string &yaml) diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index 55e5edc916..e3398a3d78 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -3,8 +3,13 @@ #include #include +#include +#include +#include "opentelemetry/sdk/configuration/attribute_limits_configuration.h" +#include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" std::unique_ptr DoParse(const std::string &yaml) diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc index 5d82bb6a49..e448d3305f 100644 --- a/sdk/test/configuration/yaml_trace_test.cc +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -2,8 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 #include -#include +#include +#include +#include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" std::unique_ptr DoParse(const std::string &yaml) From 3b58494eb3c411df4128d2caacc66bc4166a8268 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 17 Dec 2024 12:24:39 +0100 Subject: [PATCH 080/166] cleanup --- exporters/otlp/test/otlp_recordable_test.cc | 2 +- .../sdk/configuration/metric_reader_configuration.h | 2 -- .../sdk/configuration/periodic_metric_reader_configuration.h | 2 -- .../sdk/configuration/pull_metric_reader_configuration.h | 2 -- 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/exporters/otlp/test/otlp_recordable_test.cc b/exporters/otlp/test/otlp_recordable_test.cc index 0a58e52243..1fdcf00217 100644 --- a/exporters/otlp/test/otlp_recordable_test.cc +++ b/exporters/otlp/test/otlp_recordable_test.cc @@ -136,7 +136,7 @@ TEST(OtlpRecordable, SetInstrumentationScopeWithAttributes) ASSERT_EQ(proto_instr_libr.attributes_size(), 1); const auto &proto_attributes = proto_instr_libr.attributes(0); - ASSERT_TRUE(proto_attributes.value().has_string_value()); + // ASSERT_TRUE(proto_attributes.value().has_string_value()); EXPECT_EQ("test_key", proto_attributes.key()); EXPECT_EQ("test_value", proto_attributes.value().string_value()); } diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h index d9fea5e07d..466cb57fd5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h @@ -16,8 +16,6 @@ class MetricReaderConfigurationVisitor; // YAML-SCHEMA: schema/meter_provider.json // YAML-NODE: MetricReader -// FIXME: -// https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index 642dcec0b5..f6b56601be 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -19,8 +19,6 @@ namespace configuration // YAML-SCHEMA: schema/meter_provider.json // YAML-NODE: PeriodicMetricReader -// FIXME: -// https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration { public: diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index 2e57c0f917..a5f37798f6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -19,8 +19,6 @@ namespace configuration // YAML-SCHEMA: schema/meter_provider.json // YAML-NODE: PullMetricReader -// FIXME: -// https://github.com/open-telemetry/opentelemetry-configuration/issues/138 class PullMetricReaderConfiguration : public MetricReaderConfiguration { public: From 8679b5ea167231944c6d23e4f1b8d9e6029fbe5c Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 9 Jan 2025 23:43:36 +0100 Subject: [PATCH 081/166] iwyu --- .iwyu.imp | 1 + examples/yaml/custom_sampler.cc | 1 - examples/yaml/main.cc | 2 ++ exporters/otlp/src/otlp_http_span_builder.cc | 4 ++++ sdk/src/configuration/document_node.cc | 1 + sdk/src/configuration/yaml_configuration_factory.cc | 1 + sdk/src/init/configured_sdk.cc | 3 +++ sdk/src/init/sdk_builder.cc | 1 + sdk/test/configuration/yaml_test.cc | 1 + 9 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.iwyu.imp b/.iwyu.imp index b68f62f4aa..a0645a4e12 100644 --- a/.iwyu.imp +++ b/.iwyu.imp @@ -18,6 +18,7 @@ { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, diff --git a/examples/yaml/custom_sampler.cc b/examples/yaml/custom_sampler.cc index 9485a93650..1957e8175a 100644 --- a/examples/yaml/custom_sampler.cc +++ b/examples/yaml/custom_sampler.cc @@ -4,7 +4,6 @@ #include #include -#include "opentelemetry/common/attribute_value.h" #include "opentelemetry/trace/span_context.h" #include "opentelemetry/trace/trace_state.h" diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index a7a8807454..89abf18949 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -10,6 +10,7 @@ #include "opentelemetry/exporters/ostream/console_push_metric_builder.h" #include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" @@ -205,4 +206,5 @@ int main(int argc, char *argv[]) foo_library::histogram_example("yaml"); CleanupOtel(); + return 0; } diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index 2328486381..e7883ecf24 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -2,12 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include "opentelemetry/exporters/otlp/otlp_http.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" +#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index 8ebe7a552b..69817baa0f 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -3,6 +3,7 @@ #include #include +#include #include #include "opentelemetry/sdk/common/global_log_handler.h" diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index 04a628308c..ca4b6dc130 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -5,6 +5,7 @@ #include #include #include +#include #include #include diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index c7bd4b19fe..be16fca4f9 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -14,6 +14,9 @@ #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" +#include "opentelemetry/sdk/logs/logger_provider.h" +#include "opentelemetry/sdk/metrics/meter_provider.h" +#include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/trace/provider.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 7388de2ff3..d1225a994d 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index e3398a3d78..aa0436790c 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -8,6 +8,7 @@ #include "opentelemetry/sdk/configuration/attribute_limits_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" From c35fc960483d00aa1ac8f28c0224224d77c362d4 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 29 Jan 2025 23:48:39 +0100 Subject: [PATCH 082/166] merge cleanup --- ci/do_ci.sh | 3 ++- exporters/prometheus/src/prometheus_pull_builder.cc | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 52936e1ed9..0da0bb084d 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -218,8 +218,9 @@ elif [[ "$1" == "cmake.maintainer.yaml.test" ]]; then -DOTELCPP_MAINTAINER_MODE=ON \ -DWITH_NO_DEPRECATED_CODE=ON \ -DWITH_OTLP_HTTP_COMPRESSION=ON \ + -DWITH_OTLP_RETRY_PREVIEW=ON \ + -DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \ -DWITH_CONFIGURATION=ON \ - ${IWYU} \ "${SRC_DIR}" eval "$MAKE_COMMAND" make test diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc index e8d65fb0d7..b42303d22d 100644 --- a/exporters/prometheus/src/prometheus_pull_builder.cc +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 #include -#include #include "opentelemetry/exporters/prometheus/exporter_factory.h" #include "opentelemetry/exporters/prometheus/exporter_options.h" From 8933501c46189377f6bcd3133c823ca1805873a6 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 5 Mar 2025 23:27:29 +0100 Subject: [PATCH 083/166] Split otlp into otlp_http and otlp_grpc --- .../otlp/otlp_grpc_log_record_builder.h | 8 +- .../otlp/otlp_grpc_push_metric_builder.h | 8 +- .../exporters/otlp/otlp_grpc_span_builder.h | 9 +- .../otlp/otlp_http_log_record_builder.h | 8 +- .../otlp/otlp_http_push_metric_builder.h | 8 +- .../exporters/otlp/otlp_http_span_builder.h | 9 +- .../otlp/src/otlp_grpc_log_record_builder.cc | 3 +- .../otlp/src/otlp_grpc_push_metric_builder.cc | 2 +- exporters/otlp/src/otlp_grpc_span_builder.cc | 2 +- .../otlp/src/otlp_http_log_record_builder.cc | 3 +- .../otlp/src/otlp_http_push_metric_builder.cc | 2 +- exporters/otlp/src/otlp_http_span_builder.cc | 4 +- .../sdk/configuration/configuration.h | 1 + .../exporter_default_histogram_aggregation.h | 25 ++ ...og_record_exporter_configuration_visitor.h | 6 +- ..._grpc_log_record_exporter_configuration.h} | 8 +- ...grpc_push_metric_exporter_configuration.h} | 17 +- ...> otlp_grpc_span_exporter_configuration.h} | 10 +- ...p_http_log_record_exporter_configuration.h | 44 ++++ ..._http_push_metric_exporter_configuration.h | 47 ++++ .../otlp_http_span_exporter_configuration.h | 44 ++++ ...sh_metric_exporter_configuration_visitor.h | 6 +- .../span_exporter_configuration_visitor.h | 6 +- ...> otlp_grpc_log_record_exporter_builder.h} | 11 +- ... otlp_grpc_push_metric_exporter_builder.h} | 8 +- ...er.h => otlp_grpc_span_exporter_builder.h} | 10 +- .../otlp_http_log_record_exporter_builder.h | 29 +++ .../otlp_http_push_metric_exporter_builder.h | 29 +++ .../init/otlp_http_span_exporter_builder.h | 28 +++ sdk/include/opentelemetry/sdk/init/registry.h | 45 ++-- .../opentelemetry/sdk/init/sdk_builder.h | 32 ++- .../configuration/configuration_factory.cc | 138 +++++++++-- sdk/src/init/sdk_builder.cc | 226 +++++++++--------- 33 files changed, 609 insertions(+), 227 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h rename sdk/include/opentelemetry/sdk/configuration/{otlp_log_record_exporter_configuration.h => otlp_grpc_log_record_exporter_configuration.h} (79%) rename sdk/include/opentelemetry/sdk/configuration/{otlp_push_metric_exporter_configuration.h => otlp_grpc_push_metric_exporter_configuration.h} (74%) rename sdk/include/opentelemetry/sdk/configuration/{otlp_span_exporter_configuration.h => otlp_grpc_span_exporter_configuration.h} (78%) create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h rename sdk/include/opentelemetry/sdk/init/{otlp_log_record_exporter_builder.h => otlp_grpc_log_record_exporter_builder.h} (53%) rename sdk/include/opentelemetry/sdk/init/{otlp_push_metric_exporter_builder.h => otlp_grpc_push_metric_exporter_builder.h} (67%) rename sdk/include/opentelemetry/sdk/init/{otlp_span_exporter_builder.h => otlp_grpc_span_exporter_builder.h} (55%) create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h index ae8abaf6d3..816ef379ba 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h @@ -5,8 +5,8 @@ #include -#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -18,7 +18,7 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpGrpcLogRecordBuilder - : public opentelemetry::sdk::init::OtlpLogRecordExporterBuilder + : public opentelemetry::sdk::init::OtlpGrpcLogRecordExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); @@ -27,7 +27,7 @@ class OPENTELEMETRY_EXPORT OtlpGrpcLogRecordBuilder ~OtlpGrpcLogRecordBuilder() override = default; std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) + const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) const override; }; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h index 59236783a3..ab136cb5a8 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h @@ -5,8 +5,8 @@ #include -#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -18,7 +18,7 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpGrpcPushMetricBuilder - : public opentelemetry::sdk::init::OtlpPushMetricExporterBuilder + : public opentelemetry::sdk::init::OtlpGrpcPushMetricExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); @@ -27,7 +27,7 @@ class OPENTELEMETRY_EXPORT OtlpGrpcPushMetricBuilder ~OtlpGrpcPushMetricBuilder() override = default; std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) + const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) const override; }; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h index 6932f9797f..cb7ce819ea 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h @@ -5,8 +5,8 @@ #include -#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -18,7 +18,7 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpGrpcSpanBuilder - : public opentelemetry::sdk::init::OtlpSpanExporterBuilder + : public opentelemetry::sdk::init::OtlpGrpcSpanExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); @@ -27,7 +27,8 @@ class OPENTELEMETRY_EXPORT OtlpGrpcSpanBuilder ~OtlpGrpcSpanBuilder() override = default; std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const override; + const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) + const override; }; } // namespace otlp diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h index edcb8d30a7..bceececeb9 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h @@ -5,8 +5,8 @@ #include -#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -18,7 +18,7 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpHttpLogRecordBuilder - : public opentelemetry::sdk::init::OtlpLogRecordExporterBuilder + : public opentelemetry::sdk::init::OtlpHttpLogRecordExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); @@ -27,7 +27,7 @@ class OPENTELEMETRY_EXPORT OtlpHttpLogRecordBuilder ~OtlpHttpLogRecordBuilder() override = default; std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) + const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) const override; }; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h index 8e694da82b..3e17d220d0 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h @@ -5,8 +5,8 @@ #include -#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -18,7 +18,7 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpHttpPushMetricBuilder - : public opentelemetry::sdk::init::OtlpPushMetricExporterBuilder + : public opentelemetry::sdk::init::OtlpHttpPushMetricExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); @@ -27,7 +27,7 @@ class OPENTELEMETRY_EXPORT OtlpHttpPushMetricBuilder ~OtlpHttpPushMetricBuilder() override = default; std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) + const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) const override; }; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h index d91cd4395f..70604d305b 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h @@ -5,8 +5,8 @@ #include -#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_http_span_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -18,7 +18,7 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpHttpSpanBuilder - : public opentelemetry::sdk::init::OtlpSpanExporterBuilder + : public opentelemetry::sdk::init::OtlpHttpSpanExporterBuilder { public: static void Register(opentelemetry::sdk::init::Registry *registry); @@ -27,7 +27,8 @@ class OPENTELEMETRY_EXPORT OtlpHttpSpanBuilder ~OtlpHttpSpanBuilder() override = default; std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const override; + const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) + const override; }; } // namespace otlp diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc index cdac0f74e7..f08e392fb6 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_builder.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -20,7 +20,8 @@ void OtlpGrpcLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *regi } std::unique_ptr OtlpGrpcLogRecordBuilder::Build( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration * /* model */) const + const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration * /* model */) + const { // FIXME, use model OtlpGrpcLogRecordExporterOptions options; diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc index 5712eae070..02ffb02b80 100644 --- a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -20,7 +20,7 @@ void OtlpGrpcPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *reg } std::unique_ptr OtlpGrpcPushMetricBuilder::Build( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration * /* model */) + const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration * /* model */) const { // FIXME, use model diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc index 29568f3be3..d525b754ae 100644 --- a/exporters/otlp/src/otlp_grpc_span_builder.cc +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -20,7 +20,7 @@ void OtlpGrpcSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) } std::unique_ptr OtlpGrpcSpanBuilder::Build( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration * /* model */) const + const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration * /* model */) const { // FIXME, use model OtlpGrpcExporterOptions options; diff --git a/exporters/otlp/src/otlp_http_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc index e224bcb099..6d0d833291 100644 --- a/exporters/otlp/src/otlp_http_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -20,7 +20,8 @@ void OtlpHttpLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *regi } std::unique_ptr OtlpHttpLogRecordBuilder::Build( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration * /* model */) const + const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration * /* model */) + const { // FIXME, use model OtlpHttpLogRecordExporterOptions options; diff --git a/exporters/otlp/src/otlp_http_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc index 9b165577fa..67dab7802b 100644 --- a/exporters/otlp/src/otlp_http_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -20,7 +20,7 @@ void OtlpHttpPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *reg } std::unique_ptr OtlpHttpPushMetricBuilder::Build( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration * /* model */) + const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration * /* model */) const { // FIXME, use model diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index e7883ecf24..0f1d2266f3 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -9,7 +9,7 @@ #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" -#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -28,7 +28,7 @@ void OtlpHttpSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) } std::unique_ptr OtlpHttpSpanBuilder::Build( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const + const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const { OtlpHttpExporterOptions options(nullptr); options.url = model->endpoint; diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h index a16c928c0d..a633c65516 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -51,6 +51,7 @@ class Configuration std::string file_format; bool disabled{false}; + std::string log_level; std::unique_ptr attribute_limits; std::unique_ptr logger_provider; diff --git a/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h b/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h new file mode 100644 index 0000000000..7fbbfca7f1 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +enum enum_default_histogram_aggregation +{ + explicit_bucket_histogram, + base2_exponential_bucket_histogram +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h index c36f8c43c9..ded7314f91 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class OtlpLogRecordExporterConfiguration; +class OtlpHttpLogRecordExporterConfiguration; +class OtlpGrpcLogRecordExporterConfiguration; class ConsoleLogRecordExporterConfiguration; class ExtensionLogRecordExporterConfiguration; @@ -21,7 +22,8 @@ class LogRecordExporterConfigurationVisitor LogRecordExporterConfigurationVisitor() = default; virtual ~LogRecordExporterConfigurationVisitor() = default; - virtual void VisitOtlp(const OtlpLogRecordExporterConfiguration *model) = 0; + virtual void VisitOtlpHttp(const OtlpHttpLogRecordExporterConfiguration *model) = 0; + virtual void VisitOtlpGrpc(const OtlpGrpcLogRecordExporterConfiguration *model) = 0; virtual void VisitConsole(const ConsoleLogRecordExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionLogRecordExporterConfiguration *model) = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h similarity index 79% rename from sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h index 752d9c6da7..fc264ed67d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h @@ -16,15 +16,15 @@ namespace configuration // YAML-SCHEMA: schema/common.json // YAML-NODE: Otlp -class OtlpLogRecordExporterConfiguration : public LogRecordExporterConfiguration +class OtlpGrpcLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: - OtlpLogRecordExporterConfiguration() = default; - ~OtlpLogRecordExporterConfiguration() override = default; + OtlpGrpcLogRecordExporterConfiguration() = default; + ~OtlpGrpcLogRecordExporterConfiguration() override = default; void Accept(LogRecordExporterConfigurationVisitor *visitor) const override { - visitor->VisitOtlp(this); + visitor->VisitOtlpGrpc(this); } std::string protocol; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h similarity index 74% rename from sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h index 3e1123b546..ac3eede47c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" @@ -14,23 +15,17 @@ namespace sdk namespace configuration { -enum enum_default_histogram_aggregation -{ - explicit_bucket_histogram, - base2_exponential_bucket_histogram -}; - // YAML-SCHEMA: schema/meter_provider.json -// YAML-NODE: OtlpMetric -class OtlpPushMetricExporterConfiguration : public PushMetricExporterConfiguration +// YAML-NODE: OtlpGrpcMetricExporter +class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: - OtlpPushMetricExporterConfiguration() = default; - ~OtlpPushMetricExporterConfiguration() override = default; + OtlpGrpcPushMetricExporterConfiguration() = default; + ~OtlpGrpcPushMetricExporterConfiguration() override = default; void Accept(PushMetricExporterConfigurationVisitor *visitor) const override { - visitor->VisitOtlp(this); + visitor->VisitOtlpGrpc(this); } std::string protocol; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h similarity index 78% rename from sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h index 643bb7e435..6f0386cfcc 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h @@ -15,16 +15,16 @@ namespace configuration { // YAML-SCHEMA: schema/common.json -// YAML-NODE: Otlp -class OtlpSpanExporterConfiguration : public SpanExporterConfiguration +// YAML-NODE: OtlpGrpcExporter +class OtlpGrpcSpanExporterConfiguration : public SpanExporterConfiguration { public: - OtlpSpanExporterConfiguration() = default; - ~OtlpSpanExporterConfiguration() override = default; + OtlpGrpcSpanExporterConfiguration() = default; + ~OtlpGrpcSpanExporterConfiguration() override = default; void Accept(SpanExporterConfigurationVisitor *visitor) const override { - visitor->VisitOtlp(this); + visitor->VisitOtlpGrpc(this); } std::string protocol; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h new file mode 100644 index 0000000000..7d56d3253b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h @@ -0,0 +1,44 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Otlp +class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + OtlpHttpLogRecordExporterConfiguration() = default; + ~OtlpHttpLogRecordExporterConfiguration() override = default; + + void Accept(LogRecordExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpHttp(this); + } + + std::string protocol; + std::string endpoint; + std::string certificate; + std::string client_key; + std::string client_certificate; + std::unique_ptr headers; + std::string headers_list; + std::string compression; + size_t timeout{0}; + bool insecure{false}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h new file mode 100644 index 0000000000..a880067152 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -0,0 +1,47 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: OtlpHttpMetricExporter +class OtlpHttpPushMetricExporterConfiguration : public PushMetricExporterConfiguration +{ +public: + OtlpHttpPushMetricExporterConfiguration() = default; + ~OtlpHttpPushMetricExporterConfiguration() override = default; + + void Accept(PushMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpHttp(this); + } + + std::string protocol; + std::string endpoint; + std::string certificate; + std::string client_key; + std::string client_certificate; + std::unique_ptr headers; + std::string headers_list; + std::string compression; + size_t timeout{0}; + std::string temporality_preference; + enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; + bool insecure{false}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h new file mode 100644 index 0000000000..53a7e0e81b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h @@ -0,0 +1,44 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: OtlpHttpExporter +class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + OtlpHttpSpanExporterConfiguration() = default; + ~OtlpHttpSpanExporterConfiguration() override = default; + + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpHttp(this); + } + + std::string protocol; + std::string endpoint; + std::string certificate; + std::string client_key; + std::string client_certificate; + std::unique_ptr headers; + std::string headers_list; + std::string compression; + size_t timeout{0}; + bool insecure{false}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h index f88f7c3320..77dfbcd7da 100644 --- a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class OtlpPushMetricExporterConfiguration; +class OtlpHttpPushMetricExporterConfiguration; +class OtlpGrpcPushMetricExporterConfiguration; class ConsolePushMetricExporterConfiguration; class ExtensionPushMetricExporterConfiguration; @@ -21,7 +22,8 @@ class PushMetricExporterConfigurationVisitor PushMetricExporterConfigurationVisitor() = default; virtual ~PushMetricExporterConfigurationVisitor() = default; - virtual void VisitOtlp(const OtlpPushMetricExporterConfiguration *model) = 0; + virtual void VisitOtlpHttp(const OtlpHttpPushMetricExporterConfiguration *model) = 0; + virtual void VisitOtlpGrpc(const OtlpGrpcPushMetricExporterConfiguration *model) = 0; virtual void VisitConsole(const ConsolePushMetricExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionPushMetricExporterConfiguration *model) = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h index 6b9c56075d..11b3492dc9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h @@ -11,7 +11,8 @@ namespace sdk namespace configuration { -class OtlpSpanExporterConfiguration; +class OtlpHttpSpanExporterConfiguration; +class OtlpGrpcSpanExporterConfiguration; class ConsoleSpanExporterConfiguration; class ZipkinSpanExporterConfiguration; class ExtensionSpanExporterConfiguration; @@ -22,7 +23,8 @@ class SpanExporterConfigurationVisitor SpanExporterConfigurationVisitor() = default; virtual ~SpanExporterConfigurationVisitor() = default; - virtual void VisitOtlp(const OtlpSpanExporterConfiguration *model) = 0; + virtual void VisitOtlpHttp(const OtlpHttpSpanExporterConfiguration *model) = 0; + virtual void VisitOtlpGrpc(const OtlpGrpcSpanExporterConfiguration *model) = 0; virtual void VisitConsole(const ConsoleSpanExporterConfiguration *model) = 0; virtual void VisitZipkin(const ZipkinSpanExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionSpanExporterConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/init/otlp_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h similarity index 53% rename from sdk/include/opentelemetry/sdk/init/otlp_log_record_exporter_builder.h rename to sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h index effea6a196..232c4c1379 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h @@ -3,7 +3,7 @@ #pragma once -#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -13,14 +13,15 @@ namespace sdk namespace init { -class OtlpLogRecordExporterBuilder +class OtlpGrpcLogRecordExporterBuilder { public: - OtlpLogRecordExporterBuilder() = default; - virtual ~OtlpLogRecordExporterBuilder() = default; + OtlpGrpcLogRecordExporterBuilder() = default; + virtual ~OtlpGrpcLogRecordExporterBuilder() = default; virtual std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const = 0; + const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) + const = 0; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h similarity index 67% rename from sdk/include/opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h index f1ff3a544b..3592356f4d 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h @@ -13,14 +13,14 @@ namespace sdk namespace init { -class OtlpPushMetricExporterBuilder +class OtlpGrpcPushMetricExporterBuilder { public: - OtlpPushMetricExporterBuilder() = default; - virtual ~OtlpPushMetricExporterBuilder() = default; + OtlpGrpcPushMetricExporterBuilder() = default; + virtual ~OtlpGrpcPushMetricExporterBuilder() = default; virtual std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) + const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h similarity index 55% rename from sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h rename to sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h index 1607b595d2..e1d41b1f69 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h @@ -3,7 +3,7 @@ #pragma once -#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -13,14 +13,14 @@ namespace sdk namespace init { -class OtlpSpanExporterBuilder +class OtlpGrpcSpanExporterBuilder { public: - OtlpSpanExporterBuilder() = default; - virtual ~OtlpSpanExporterBuilder() = default; + OtlpGrpcSpanExporterBuilder() = default; + virtual ~OtlpGrpcSpanExporterBuilder() = default; virtual std::unique_ptr Build( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const = 0; + const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const = 0; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h new file mode 100644 index 0000000000..97e6cd0afb --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpHttpLogRecordExporterBuilder +{ +public: + OtlpHttpLogRecordExporterBuilder() = default; + virtual ~OtlpHttpLogRecordExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h new file mode 100644 index 0000000000..8f1828fd75 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpHttpPushMetricExporterBuilder +{ +public: + OtlpHttpPushMetricExporterBuilder() = default; + virtual ~OtlpHttpPushMetricExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h new file mode 100644 index 0000000000..de5cbf8624 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpHttpSpanExporterBuilder +{ +public: + OtlpHttpSpanExporterBuilder() = default; + virtual ~OtlpHttpSpanExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index dc19dc8739..5218442ce4 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -13,7 +13,8 @@ namespace sdk { namespace init { -class OtlpSpanExporterBuilder; +class OtlpHttpSpanExporterBuilder; +class OtlpGrpcSpanExporterBuilder; class ConsoleSpanExporterBuilder; class ZipkinSpanExporterBuilder; class TextMapPropagatorBuilder; @@ -21,13 +22,15 @@ class ExtensionSamplerBuilder; class ExtensionSpanExporterBuilder; class ExtensionSpanProcessorBuilder; -class OtlpPushMetricExporterBuilder; +class OtlpHttpPushMetricExporterBuilder; +class OtlpGrpcPushMetricExporterBuilder; class ConsolePushMetricExporterBuilder; class ExtensionPushMetricExporterBuilder; class PrometheusPullMetricExporterBuilder; class ExtensionPullMetricExporterBuilder; -class OtlpLogRecordExporterBuilder; +class OtlpHttpLogRecordExporterBuilder; +class OtlpGrpcLogRecordExporterBuilder; class ConsoleLogRecordExporterBuilder; class ExtensionLogRecordExporterBuilder; class ExtensionLogRecordProcessorBuilder; @@ -40,14 +43,14 @@ class Registry /* Core optional components. */ - const OtlpSpanExporterBuilder *GetOtlpHttpSpanBuilder() { return m_otlp_http_span_builder; } - void SetOtlpHttpSpanBuilder(const OtlpSpanExporterBuilder *builder) + const OtlpHttpSpanExporterBuilder *GetOtlpHttpSpanBuilder() { return m_otlp_http_span_builder; } + void SetOtlpHttpSpanBuilder(const OtlpHttpSpanExporterBuilder *builder) { m_otlp_http_span_builder = builder; } - const OtlpSpanExporterBuilder *GetOtlpGrpcSpanBuilder() { return m_otlp_grpc_span_builder; } - void SetOtlpGrpcSpanBuilder(const OtlpSpanExporterBuilder *builder) + const OtlpGrpcSpanExporterBuilder *GetOtlpGrpcSpanBuilder() { return m_otlp_grpc_span_builder; } + void SetOtlpGrpcSpanBuilder(const OtlpGrpcSpanExporterBuilder *builder) { m_otlp_grpc_span_builder = builder; } @@ -64,20 +67,20 @@ class Registry m_zipkin_span_builder = builder; } - const OtlpPushMetricExporterBuilder *GetOtlpHttpPushMetricExporterBuilder() + const OtlpHttpPushMetricExporterBuilder *GetOtlpHttpPushMetricExporterBuilder() { return m_otlp_http_push_metric_builder; } - void SetOtlpHttpPushMetricExporterBuilder(const OtlpPushMetricExporterBuilder *builder) + void SetOtlpHttpPushMetricExporterBuilder(const OtlpHttpPushMetricExporterBuilder *builder) { m_otlp_http_push_metric_builder = builder; } - const OtlpPushMetricExporterBuilder *GetOtlpGrpcPushMetricExporterBuilder() + const OtlpGrpcPushMetricExporterBuilder *GetOtlpGrpcPushMetricExporterBuilder() { return m_otlp_grpc_push_metric_builder; } - void SetOtlpGrpcPushMetricExporterBuilder(const OtlpPushMetricExporterBuilder *builder) + void SetOtlpGrpcPushMetricExporterBuilder(const OtlpGrpcPushMetricExporterBuilder *builder) { m_otlp_grpc_push_metric_builder = builder; } @@ -100,20 +103,20 @@ class Registry m_prometheus_metric_builder = builder; } - const OtlpLogRecordExporterBuilder *GetOtlpHttpLogRecordBuilder() + const OtlpHttpLogRecordExporterBuilder *GetOtlpHttpLogRecordBuilder() { return m_otlp_http_log_record_builder; } - void SetOtlpHttpLogRecordBuilder(const OtlpLogRecordExporterBuilder *builder) + void SetOtlpHttpLogRecordBuilder(const OtlpHttpLogRecordExporterBuilder *builder) { m_otlp_http_log_record_builder = builder; } - const OtlpLogRecordExporterBuilder *GetOtlpGrpcLogRecordBuilder() + const OtlpGrpcLogRecordExporterBuilder *GetOtlpGrpcLogRecordBuilder() { return m_otlp_grpc_log_record_builder; } - void SetOtlpGrpcLogRecordBuilder(const OtlpLogRecordExporterBuilder *builder) + void SetOtlpGrpcLogRecordBuilder(const OtlpGrpcLogRecordExporterBuilder *builder) { m_otlp_grpc_log_record_builder = builder; } @@ -164,18 +167,18 @@ class Registry ExtensionLogRecordProcessorBuilder *builder); private: - const OtlpSpanExporterBuilder *m_otlp_http_span_builder{nullptr}; - const OtlpSpanExporterBuilder *m_otlp_grpc_span_builder{nullptr}; + const OtlpHttpSpanExporterBuilder *m_otlp_http_span_builder{nullptr}; + const OtlpGrpcSpanExporterBuilder *m_otlp_grpc_span_builder{nullptr}; const ConsoleSpanExporterBuilder *m_console_span_builder{nullptr}; const ZipkinSpanExporterBuilder *m_zipkin_span_builder{nullptr}; - const OtlpPushMetricExporterBuilder *m_otlp_http_push_metric_builder{nullptr}; - const OtlpPushMetricExporterBuilder *m_otlp_grpc_push_metric_builder{nullptr}; + const OtlpHttpPushMetricExporterBuilder *m_otlp_http_push_metric_builder{nullptr}; + const OtlpGrpcPushMetricExporterBuilder *m_otlp_grpc_push_metric_builder{nullptr}; const ConsolePushMetricExporterBuilder *m_console_metric_builder{nullptr}; const PrometheusPullMetricExporterBuilder *m_prometheus_metric_builder{nullptr}; - const OtlpLogRecordExporterBuilder *m_otlp_http_log_record_builder{nullptr}; - const OtlpLogRecordExporterBuilder *m_otlp_grpc_log_record_builder{nullptr}; + const OtlpHttpLogRecordExporterBuilder *m_otlp_http_log_record_builder{nullptr}; + const OtlpGrpcLogRecordExporterBuilder *m_otlp_grpc_log_record_builder{nullptr}; const ConsoleLogRecordExporterBuilder *m_console_log_record_builder{nullptr}; std::map m_propagator_builders; diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 5666dba5f6..8329c416a6 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -14,9 +14,12 @@ #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" @@ -71,8 +74,11 @@ class SdkBuilder std::unique_ptr CreateSampler( const std::unique_ptr &model) const; - std::unique_ptr CreateOtlpSpanExporter( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const; + std::unique_ptr CreateOtlpHttpSpanExporter( + const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const; + + std::unique_ptr CreateOtlpGrpcSpanExporter( + const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const; std::unique_ptr CreateConsoleSpanExporter( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const; @@ -111,8 +117,13 @@ class SdkBuilder const std::unique_ptr &model) const; - std::unique_ptr CreateOtlpPushMetricExporter( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) const; + std::unique_ptr CreateOtlpHttpPushMetricExporter( + const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) + const; + + std::unique_ptr CreateOtlpGrpcPushMetricExporter( + const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) + const; std::unique_ptr CreateConsolePushMetricExporter( const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) const; @@ -156,8 +167,11 @@ class SdkBuilder const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const; - std::unique_ptr CreateOtlpLogRecordExporter( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const; + std::unique_ptr CreateOtlpHttpLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) const; + + std::unique_ptr CreateOtlpGrpcLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) const; std::unique_ptr CreateConsoleLogRecordExporter( const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) const; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 96d1712ae1..7f1cc7a9be 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -46,9 +46,12 @@ #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" @@ -113,10 +116,38 @@ static std::unique_ptr ParseAttributeLimitsConfigu return model; } -static std::unique_ptr ParseOtlpLogRecordExporterConfiguration( - const std::unique_ptr &node) +static std::unique_ptr +ParseOtlpHttpLogRecordExporterConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new OtlpHttpLogRecordExporterConfiguration); + std::unique_ptr child; + + model->protocol = node->GetRequiredString("protocol"); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate = node->GetString("certificate", ""); + model->client_key = node->GetString("client_key", ""); + model->client_certificate = node->GetString("client_certificate", ""); + + child = node->GetChildNode("headers"); + if (child) + { + model->headers = ParseHeadersConfiguration(child); + } + + model->headers_list = node->GetString("headers_list", ""); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->insecure = node->GetBoolean("insecure", false); + + return model; +} + +static std::unique_ptr +ParseOtlpGrpcLogRecordExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model(new OtlpLogRecordExporterConfiguration); + std::unique_ptr model( + new OtlpGrpcLogRecordExporterConfiguration); std::unique_ptr child; model->protocol = node->GetRequiredString("protocol"); @@ -181,9 +212,13 @@ static std::unique_ptr ParseLogRecordExporterCon throw InvalidSchemaException("Illegal span exporter"); } - if (name == "otlp") + if (name == "otlp_http") { - model = ParseOtlpLogRecordExporterConfiguration(child); + model = ParseOtlpHttpLogRecordExporterConfiguration(child); + } + else if (name == "otlp_grpc") + { + model = ParseOtlpGrpcLogRecordExporterConfiguration(child); } else if (name == "console") { @@ -333,11 +368,44 @@ static enum_default_histogram_aggregation ParseDefaultHistogramAggregation(const throw InvalidSchemaException("Illegal default_histogram_aggregation"); } -static std::unique_ptr -ParseOtlpPushMetricExporterConfiguration(const std::unique_ptr &node) +static std::unique_ptr +ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new OtlpPushMetricExporterConfiguration); + std::unique_ptr model( + new OtlpHttpPushMetricExporterConfiguration); + std::unique_ptr child; + + model->protocol = node->GetRequiredString("protocol"); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate = node->GetString("certificate", ""); + model->client_key = node->GetString("client_key", ""); + model->client_certificate = node->GetString("client_certificate", ""); + + child = node->GetChildNode("headers"); + if (child) + { + model->headers = ParseHeadersConfiguration(child); + } + + model->headers_list = node->GetString("headers_list", ""); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->temporality_preference = node->GetString("temporality_preference", ""); + + std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); + model->default_histogram_aggregation = + ParseDefaultHistogramAggregation(default_histogram_aggregation); + + model->insecure = node->GetBoolean("insecure", false); + + return model; +} + +static std::unique_ptr +ParseOtlpGrpcPushMetricExporterConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new OtlpGrpcPushMetricExporterConfiguration); std::unique_ptr child; model->protocol = node->GetRequiredString("protocol"); @@ -434,9 +502,13 @@ static std::unique_ptr ParsePushMetricExporterC throw InvalidSchemaException("Illegal metric exporter"); } - if (name == "otlp") + if (name == "otlp_http") { - model = ParseOtlpPushMetricExporterConfiguration(child); + model = ParseOtlpHttpPushMetricExporterConfiguration(child); + } + else if (name == "otlp_grpc") + { + model = ParseOtlpGrpcPushMetricExporterConfiguration(child); } else if (name == "console") { @@ -1001,10 +1073,36 @@ static std::unique_ptr ParseSamplerConfiguration( return model; } -static std::unique_ptr ParseOtlpSpanExporterConfiguration( +static std::unique_ptr ParseOtlpHttpSpanExporterConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new OtlpSpanExporterConfiguration); + std::unique_ptr model(new OtlpHttpSpanExporterConfiguration); + std::unique_ptr child; + + model->protocol = node->GetRequiredString("protocol"); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate = node->GetString("certificate", ""); + model->client_key = node->GetString("client_key", ""); + model->client_certificate = node->GetString("client_certificate", ""); + + child = node->GetChildNode("headers"); + if (child) + { + model->headers = ParseHeadersConfiguration(child); + } + + model->headers_list = node->GetString("headers_list", ""); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + model->insecure = node->GetBoolean("insecure", false); + + return model; +} + +static std::unique_ptr ParseOtlpGrpcSpanExporterConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new OtlpGrpcSpanExporterConfiguration); std::unique_ptr child; model->protocol = node->GetRequiredString("protocol"); @@ -1078,9 +1176,13 @@ static std::unique_ptr ParseSpanExporterConfiguration throw InvalidSchemaException("Illegal span exporter"); } - if (name == "otlp") + if (name == "otlp_http") + { + model = ParseOtlpHttpSpanExporterConfiguration(child); + } + else if (name == "otlp_grpc") { - model = ParseOtlpSpanExporterConfiguration(child); + model = ParseOtlpGrpcSpanExporterConfiguration(child); } else if (name == "console") { diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index d1225a994d..9a7a9804f9 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -38,9 +38,12 @@ #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" -#include "opentelemetry/sdk/configuration/otlp_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/otlp_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" @@ -76,9 +79,12 @@ #include "opentelemetry/sdk/init/extension_sampler_builder.h" #include "opentelemetry/sdk/init/extension_span_exporter_builder.h" #include "opentelemetry/sdk/init/extension_span_processor_builder.h" -#include "opentelemetry/sdk/init/otlp_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_span_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_http_span_exporter_builder.h" #include "opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/init/sdk_builder.h" @@ -216,10 +222,16 @@ class SpanExporterBuilder SpanExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} ~SpanExporterBuilder() override = default; - void VisitOtlp( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) override + void VisitOtlpHttp( + const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpSpanExporter(model); + exporter = m_sdk_builder->CreateOtlpHttpSpanExporter(model); + } + + void VisitOtlpGrpc( + const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) override + { + exporter = m_sdk_builder->CreateOtlpGrpcSpanExporter(model); } void VisitConsole( @@ -278,10 +290,18 @@ class PushMetricExporterBuilder PushMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} ~PushMetricExporterBuilder() override = default; - void VisitOtlp( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) override + void VisitOtlpHttp( + const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) + override { - exporter = m_sdk_builder->CreateOtlpPushMetricExporter(model); + exporter = m_sdk_builder->CreateOtlpHttpPushMetricExporter(model); + } + + void VisitOtlpGrpc( + const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) + override + { + exporter = m_sdk_builder->CreateOtlpGrpcPushMetricExporter(model); } void VisitConsole(const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration @@ -369,10 +389,16 @@ class LogRecordExporterBuilder LogRecordExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} ~LogRecordExporterBuilder() override = default; - void VisitOtlp( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) override + void VisitOtlpHttp(const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration + *model) override + { + exporter = m_sdk_builder->CreateOtlpHttpLogRecordExporter(model); + } + + void VisitOtlpGrpc(const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration + *model) override { - exporter = m_sdk_builder->CreateOtlpLogRecordExporter(model); + exporter = m_sdk_builder->CreateOtlpGrpcLogRecordExporter(model); } void VisitConsole(const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration @@ -489,48 +515,42 @@ std::unique_ptr SdkBuilder::CreateSampler( return sdk; } -std::unique_ptr SdkBuilder::CreateOtlpSpanExporter( - const opentelemetry::sdk::configuration::OtlpSpanExporterConfiguration *model) const +std::unique_ptr SdkBuilder::CreateOtlpHttpSpanExporter( + const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const OtlpSpanExporterBuilder *builder; + const OtlpHttpSpanExporterBuilder *builder; - if (model->protocol.find("http/") == 0) + builder = m_registry->GetOtlpHttpSpanBuilder(); + if (builder != nullptr) { - builder = m_registry->GetOtlpHttpSpanBuilder(); - if (builder != nullptr) - { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered http builder"); - sdk = builder->Build(model); - return sdk; - } - - std::string die("No http builder for OtlpSpanExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered http builder"); + sdk = builder->Build(model); + return sdk; } - if (model->protocol.find("grpc/") == 0) - { - builder = m_registry->GetOtlpGrpcSpanBuilder(); - if (builder != nullptr) - { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered grpc builder"); - sdk = builder->Build(model); - return sdk; - } + std::string die("No http builder for OtlpHttpSpanExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); +} - std::string die("No builder for OtlpSpanExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); +std::unique_ptr SdkBuilder::CreateOtlpGrpcSpanExporter( + const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const OtlpGrpcSpanExporterBuilder *builder; + + builder = m_registry->GetOtlpGrpcSpanBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered grpc builder"); + sdk = builder->Build(model); + return sdk; } - std::string die("OtlpSpanExporter: illegal protocol: "); - die.append(model->protocol); + std::string die("No builder for OtlpGrpcSpanExporter"); OTEL_INTERNAL_LOG_ERROR(die); throw UnsupportedException(die); - - return sdk; } std::unique_ptr SdkBuilder::CreateConsoleSpanExporter( @@ -783,48 +803,43 @@ static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType( } std::unique_ptr -SdkBuilder::CreateOtlpPushMetricExporter( - const opentelemetry::sdk::configuration::OtlpPushMetricExporterConfiguration *model) const +SdkBuilder::CreateOtlpHttpPushMetricExporter( + const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) const { std::unique_ptr sdk; - const OtlpPushMetricExporterBuilder *builder; + const OtlpHttpPushMetricExporterBuilder *builder; - if (model->protocol.find("http/") == 0) + builder = m_registry->GetOtlpHttpPushMetricExporterBuilder(); + if (builder != nullptr) { - builder = m_registry->GetOtlpHttpPushMetricExporterBuilder(); - if (builder != nullptr) - { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered http builder"); - sdk = builder->Build(model); - return sdk; - } - - std::string die("No http builder for OtlpPushMetricExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered http builder"); + sdk = builder->Build(model); + return sdk; } - if (model->protocol.find("grpc/") == 0) - { - builder = m_registry->GetOtlpGrpcPushMetricExporterBuilder(); - if (builder != nullptr) - { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered grpc builder"); - sdk = builder->Build(model); - return sdk; - } + std::string die("No http builder for OtlpPushMetricExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); +} - std::string die("No grpc builder for OtlpPushMetricExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); +std::unique_ptr +SdkBuilder::CreateOtlpGrpcPushMetricExporter( + const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const OtlpGrpcPushMetricExporterBuilder *builder; + + builder = m_registry->GetOtlpGrpcPushMetricExporterBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered grpc builder"); + sdk = builder->Build(model); + return sdk; } - std::string die("OtlpPushMetricExporter: illegal protocol: "); - die.append(model->protocol); + std::string die("No grpc builder for OtlpPushMetricExporter"); OTEL_INTERNAL_LOG_ERROR(die); throw UnsupportedException(die); - - return sdk; } std::unique_ptr @@ -1070,49 +1085,44 @@ std::unique_ptr SdkBuilder::CreateMe } std::unique_ptr -SdkBuilder::CreateOtlpLogRecordExporter( - const opentelemetry::sdk::configuration::OtlpLogRecordExporterConfiguration *model) const +SdkBuilder::CreateOtlpHttpLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) const { std::unique_ptr sdk; - const OtlpLogRecordExporterBuilder *builder; + const OtlpHttpLogRecordExporterBuilder *builder; - if (model->protocol.find("http/") == 0) + builder = m_registry->GetOtlpHttpLogRecordBuilder(); + if (builder != nullptr) { - builder = m_registry->GetOtlpHttpLogRecordBuilder(); - if (builder != nullptr) - { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered http builder"); - sdk = builder->Build(model); - return sdk; - } - - std::string die("No http builder for OtlpLogRecordExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered http builder"); + sdk = builder->Build(model); + return sdk; } - if (model->protocol.find("grpc/") == 0) + std::string die("No http builder for OtlpLogRecordExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); +} + +std::unique_ptr +SdkBuilder::CreateOtlpGrpcLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const OtlpGrpcLogRecordExporterBuilder *builder; + + builder = m_registry->GetOtlpGrpcLogRecordBuilder(); + if (builder != nullptr) { builder = m_registry->GetOtlpGrpcLogRecordBuilder(); - if (builder != nullptr) - { - builder = m_registry->GetOtlpGrpcLogRecordBuilder(); - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered grpc builder"); - sdk = builder->Build(model); - return sdk; - } - - std::string die("No grpc builder for OtlpLogRecordExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered grpc builder"); + sdk = builder->Build(model); + return sdk; } - std::string die("OtlpLogRecordExporter: illegal protocol: "); - die.append(model->protocol); + std::string die("No grpc builder for OtlpLogRecordExporter"); OTEL_INTERNAL_LOG_ERROR(die); throw UnsupportedException(die); - - return sdk; } std::unique_ptr From 11bbcac07ca7bfc7108cc835fa370000dba21719 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 6 Mar 2025 02:03:18 +0100 Subject: [PATCH 084/166] Upgrade to format 0.3 (in progress) --- examples/yaml/kitchen-sink.yaml | 845 +++++++++++++----- exporters/otlp/src/otlp_http_span_builder.cc | 12 +- .../exporter_default_histogram_aggregation.h | 3 - ...p_grpc_log_record_exporter_configuration.h | 7 +- ..._grpc_push_metric_exporter_configuration.h | 7 +- .../otlp_grpc_span_exporter_configuration.h | 7 +- ...p_http_log_record_exporter_configuration.h | 12 +- ..._http_push_metric_exporter_configuration.h | 10 +- .../otlp_http_span_exporter_configuration.h | 10 +- .../configuration/configuration_factory.cc | 92 +- sdk/src/configuration/ryml_document_node.cc | 18 +- 11 files changed, 714 insertions(+), 309 deletions(-) diff --git a/examples/yaml/kitchen-sink.yaml b/examples/yaml/kitchen-sink.yaml index ded8bbc08d..f31ed4dbad 100644 --- a/examples/yaml/kitchen-sink.yaml +++ b/examples/yaml/kitchen-sink.yaml @@ -8,401 +8,798 @@ # # Configuration values are set to their defaults when default values are defined. -# The file format version -file_format: "0.1" - -# Configure if the SDK is disabled or not. This is not required to be provided -# to ensure the SDK isn't disabled, the default value when this is not provided -# is for the SDK to be enabled. -# -# Environment variable: OTEL_SDK_DISABLED +# The file format version. +# The yaml format is documented at +# https://github.com/open-telemetry/opentelemetry-configuration/tree/main/schema +file_format: "0.3" +# Configure if the SDK is disabled or not. +# If omitted or null, false is used. disabled: false - +# Configure the log level of the internal logger used by the SDK. +# If omitted, info is used. +log_level: info # Configure general attribute limits. See also tracer_provider.limits, logger_provider.limits. attribute_limits: # Configure max attribute value size. - # - # Environment variable: OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT + # Value must be non-negative. + # If omitted or null, there is no limit. attribute_value_length_limit: 4096 # Configure max attribute count. - # - # Environment variable: OTEL_ATTRIBUTE_COUNT_LIMIT + # Value must be non-negative. + # If omitted or null, 128 is used. attribute_count_limit: 128 - # Configure logger provider. +# If omitted, a noop logger provider is used. logger_provider: # Configure log record processors. processors: - # Configure a batch log record processor. - - batch: + - # Configure a batch log record processor. + batch: # Configure delay interval (in milliseconds) between two consecutive exports. - # - # Environment variable: OTEL_BLRP_SCHEDULE_DELAY + # Value must be non-negative. + # If omitted or null, 1000 is used. schedule_delay: 5000 # Configure maximum allowed time (in milliseconds) to export data. - # - # Environment variable: OTEL_BLRP_EXPORT_TIMEOUT + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 30000 is used. export_timeout: 30000 - # Configure maximum queue size. - # - # Environment variable: OTEL_BLRP_MAX_QUEUE_SIZE + # Configure maximum queue size. Value must be positive. + # If omitted or null, 2048 is used. max_queue_size: 2048 - # Configure maximum batch size. - # - # Environment variable: OTEL_BLRP_MAX_EXPORT_BATCH_SIZE + # Configure maximum batch size. Value must be positive. + # If omitted or null, 512 is used. max_export_batch_size: 512 # Configure exporter. - # - # Environment variable: OTEL_LOGS_EXPORTER exporter: - # Configure exporter to be OTLP. - otlp: - # Configure protocol. - # - # Environment variable: OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_LOGS_PROTOCOL - protocol: http/protobuf + # Configure exporter to be OTLP with HTTP transport. + otlp_http: + endpoint: http://localhost:4318/v1/logs + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure the encoding used for messages. + # Values include: protobuf, json. Implementations may not support json. + # If omitted or null, protobuf is used. + encoding: protobuf + - # Configure a batch log record processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with gRPC transport. + otlp_grpc: # Configure endpoint. - # - # Environment variable: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_LOGS_ENDPOINT - endpoint: http://localhost:4318 - # Configure certificate. - # - # Environment variable: OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE - certificate: /app/cert.pem + # If omitted or null, http://localhost:4317 is used. + endpoint: http://localhost:4317 + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem # Configure mTLS private client key. - # - # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY - client_key: /app/cert.pem + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem # Configure mTLS client certificate. - # - # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE - client_certificate: /app/cert.pem - # Configure headers. - # - # Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_LOGS_HEADERS + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. headers: - api-key: "1234" + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" # Configure compression. - # - # Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_LOGS_COMPRESSION + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. compression: gzip # Configure max time (in milliseconds) to wait for each export. - # - # Environment variable: OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_LOGS_TIMEOUT + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. timeout: 10000 # Configure client transport security for the exporter's connection. - # - # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_LOGS_INSECURE + # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. + # If omitted or null, false is used. insecure: false - # Configure a simple log record processor. - - simple: + - # Configure a batch log record processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: file:///var/log/logs.jsonl + - # Configure a batch log record processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: stdout + - # Configure a simple log record processor. + simple: # Configure exporter. exporter: # Configure exporter to be console. - console: {} + console: # Configure log record limits. See also attribute_limits. limits: - # Configure max log record attribute value size. Overrides attribute_limits.attribute_value_length_limit. - # - # Environment variable: OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT + # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. + # Value must be non-negative. + # If omitted or null, there is no limit. attribute_value_length_limit: 4096 - # Configure max log record attribute count. Overrides attribute_limits.attribute_count_limit. - # - # Environment variable: OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT + # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. + # Value must be non-negative. + # If omitted or null, 128 is used. attribute_count_limit: 128 - # Configure meter provider. +# If omitted, a noop meter provider is used. meter_provider: # Configure metric readers. readers: - # Configure a pull-based metric reader. - - pull: + - # Configure a pull based metric reader. + pull: # Configure exporter. - # - # Environment variable: OTEL_METRICS_EXPORTER exporter: # Configure exporter to be prometheus. prometheus: # Configure host. - # - # Environment variable: OTEL_EXPORTER_PROMETHEUS_HOST + # If omitted or null, localhost is used. host: localhost # Configure port. - # - # Environment variable: OTEL_EXPORTER_PROMETHEUS_PORT + # If omitted or null, 9464 is used. port: 9464 # Configure Prometheus Exporter to produce metrics without a unit suffix or UNIT metadata. + # If omitted or null, false is used. without_units: false # Configure Prometheus Exporter to produce metrics without a type suffix. + # If omitted or null, false is used. without_type_suffix: false # Configure Prometheus Exporter to produce metrics without a scope info metric. + # If omitted or null, false is used. without_scope_info: false - # Configure a periodic metric reader. - - periodic: + # Configure Prometheus Exporter to add resource attributes as metrics attributes. + with_resource_constant_labels: + # Configure resource attributes to be included. + # Attribute keys from resources are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, no resource attributes are included. + included: + - "service*" + # Configure resource attributes to be excluded. Applies after .with_resource_constant_labels.included (i.e. excluded has higher priority than included). + # Attribute keys from resources are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, .included resource attributes are included. + excluded: + - "service.attr1" + # Configure metric producers. + producers: + - # Configure metric producer to be opencensus. + opencensus: + - # Configure a periodic metric reader. + periodic: # Configure delay interval (in milliseconds) between start of two consecutive exports. - # - # Environment variable: OTEL_METRIC_EXPORT_INTERVAL - interval: 5000 + # Value must be non-negative. + # If omitted or null, 60000 is used. + interval: 60000 # Configure maximum allowed time (in milliseconds) to export data. - # - # Environment variable: OTEL_METRIC_EXPORT_TIMEOUT + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 30000 is used. timeout: 30000 # Configure exporter. - # - # Environment variable: OTEL_METRICS_EXPORTER exporter: - # Configure exporter to be OTLP. - otlp: - # Configure protocol. - # - # Environment variable: OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_METRICS_PROTOCOL - protocol: http/protobuf + # Configure exporter to be OTLP with HTTP transport. + otlp_http: + # Configure endpoint, including the metric specific path. + # If omitted or null, http://localhost:4318/v1/metrics is used. + endpoint: http://localhost:4318/v1/metrics + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure the encoding used for messages. + # Values include: protobuf, json. Implementations may not support json. + # If omitted or null, protobuf is used. + encoding: protobuf + # Configure temporality preference. + # Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. + temporality_preference: delta + # Configure default histogram aggregation. + # Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. + default_histogram_aggregation: base2_exponential_bucket_histogram + # Configure metric producers. + producers: + - # Configure metric producer to be prometheus. + prometheus: + - # Configure a periodic metric reader. + periodic: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with gRPC transport. + otlp_grpc: # Configure endpoint. - # - # Environment variable: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_METRICS_ENDPOINT - endpoint: http://localhost:4318 - # Configure certificate. - # - # Environment variable: OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE - certificate: /app/cert.pem + # If omitted or null, http://localhost:4317 is used. + endpoint: http://localhost:4317 + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem # Configure mTLS private client key. - # - # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY - client_key: /app/cert.pem + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem # Configure mTLS client certificate. - # - # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE - client_certificate: /app/cert.pem - # Configure headers. - # - # Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_METRICS_HEADERS + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. headers: - api-key: !!str 1234 + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" # Configure compression. - # - # Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_METRICS_COMPRESSION + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. compression: gzip # Configure max time (in milliseconds) to wait for each export. - # - # Environment variable: OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_METRICS_TIMEOUT + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. timeout: 10000 # Configure client transport security for the exporter's connection. - # - # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_METRICS_INSECURE + # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. + # If omitted or null, false is used. insecure: false # Configure temporality preference. - # - # Environment variable: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + # Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. temporality_preference: delta # Configure default histogram aggregation. - # - # Environment variable: OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION + # Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. + default_histogram_aggregation: base2_exponential_bucket_histogram + - # Configure a periodic metric reader. + periodic: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: file:///var/log/metrics.jsonl + # Configure temporality preference. Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. + temporality_preference: delta + # Configure default histogram aggregation. Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. default_histogram_aggregation: base2_exponential_bucket_histogram - # Configure a periodic metric reader. - - periodic: + - # Configure a periodic metric reader. + periodic: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: stdout + # Configure temporality preference. Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. + temporality_preference: delta + # Configure default histogram aggregation. Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. + default_histogram_aggregation: base2_exponential_bucket_histogram + - # Configure a periodic metric reader. + periodic: # Configure exporter. exporter: # Configure exporter to be console. - console: {} - # Configure views. Each view has a selector which determines the instrument(s) it applies to, and a configuration for the resulting stream(s). + console: + # Configure views. + # Each view has a selector which determines the instrument(s) it applies to, and a configuration for the resulting stream(s). views: - # Configure a view. - - selector: + - # Configure view selector. + # Selection criteria is additive as described in https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#instrument-selection-criteria. + selector: # Configure instrument name selection criteria. + # If omitted or null, all instrument names match. instrument_name: my-instrument # Configure instrument type selection criteria. + # If omitted or null, all instrument types match. instrument_type: histogram # Configure the instrument unit selection criteria. + # If omitted or null, all instrument units match. unit: ms # Configure meter name selection criteria. + # If omitted or null, all meter names match. meter_name: my-meter # Configure meter version selection criteria. + # If omitted or null, all meter versions match. meter_version: 1.0.0 # Configure meter schema url selection criteria. + # If omitted or null, all meter schema URLs match. meter_schema_url: https://opentelemetry.io/schemas/1.16.0 - # Configure stream. + # Configure view stream. stream: # Configure metric name of the resulting stream(s). + # If omitted or null, the instrument's original name is used. name: new_instrument_name # Configure metric description of the resulting stream(s). + # If omitted or null, the instrument's origin description is used. description: new_description - # Configure aggregation of the resulting stream(s). Known values include: default, drop, explicit_bucket_histogram, base2_exponential_bucket_histogram, last_value, sum. + # Configure aggregation of the resulting stream(s). + # Values include: default, drop, explicit_bucket_histogram, base2_exponential_bucket_histogram, last_value, sum. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#aggregation. + # If omitted, default is used. aggregation: # Configure aggregation to be explicit_bucket_histogram. explicit_bucket_histogram: # Configure bucket boundaries. - boundaries: [ 0.0, 5.0, 10.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 7500.0, 10000.0 ] + # If omitted, [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000] is used. + boundaries: + [ + 0.0, + 5.0, + 10.0, + 25.0, + 50.0, + 75.0, + 100.0, + 250.0, + 500.0, + 750.0, + 1000.0, + 2500.0, + 5000.0, + 7500.0, + 10000.0 + ] # Configure record min and max. + # If omitted or null, true is used. record_min_max: true # Configure attribute keys retained in the resulting stream(s). attribute_keys: - - key1 - - key2 - + # Configure list of attribute keys to include in the resulting stream(s). All other attributes are dropped. + # If omitted, all attributes are included. + included: + - key1 + - key2 + # Configure list of attribute keys to exclude from the resulting stream(s). Applies after .attribute_keys.included (i.e. excluded has higher priority than included). + # If omitted, .attribute_keys.included are included. + excluded: + - key3 + # Configure the exemplar filter. + # Values include: trace_based, always_on, always_off. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#metrics-sdk-configuration. + # If omitted or null, trace_based is used. + exemplar_filter: trace_based # Configure text map context propagators. -# -# Environment variable: OTEL_PROPAGATORS +# If omitted, tracecontext and baggage are used. propagator: - # composite: [tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace] - composite: [tracecontext, baggage, b3, b3multi, jaeger] - + # Configure the set of propagators to include in the composite text map propagator. + # Built-in values include: tracecontext, baggage, b3, b3multi, jaeger, none. Known third party values include: xray, ottrace. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration. + composite: [ tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace ] # Configure tracer provider. +# If omitted, a noop tracer provider is used. tracer_provider: # Configure span processors. processors: - # Configure a batch span processor. - - batch: + - # Configure a batch span processor. + batch: # Configure delay interval (in milliseconds) between two consecutive exports. - # - # Environment variable: OTEL_BSP_SCHEDULE_DELAY + # Value must be non-negative. + # If omitted or null, 5000 is used. schedule_delay: 5000 # Configure maximum allowed time (in milliseconds) to export data. - # - # Environment variable: OTEL_BSP_EXPORT_TIMEOUT + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 30000 is used. export_timeout: 30000 - # Configure maximum queue size. - # - # Environment variable: OTEL_BSP_MAX_QUEUE_SIZE + # Configure maximum queue size. Value must be positive. + # If omitted or null, 2048 is used. max_queue_size: 2048 - # Configure maximum batch size. - # - # Environment variable: OTEL_BSP_MAX_EXPORT_BATCH_SIZE + # Configure maximum batch size. Value must be positive. + # If omitted or null, 512 is used. max_export_batch_size: 512 # Configure exporter. - # - # Environment variable: OTEL_TRACES_EXPORTER exporter: - # Configure exporter to be OTLP. - otlp: - # Configure protocol. - # - # Environment variable: OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_TRACES_PROTOCOL - protocol: http/protobuf + # Configure exporter to be OTLP with HTTP transport. + otlp_http: + # Configure endpoint, including the trace specific path. + # If omitted or null, http://localhost:4318/v1/traces is used. + endpoint: http://localhost:4318/v1/traces + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure the encoding used for messages. + # Values include: protobuf, json. Implementations may not support json. + # If omitted or null, protobuf is used. + encoding: protobuf + - # Configure a batch span processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with gRPC transport. + otlp_grpc: # Configure endpoint. - # - # Environment variable: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - endpoint: http://localhost:4318 - # Configure certificate. - # - # Environment variable: OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE - certificate: /app/cert.pem + # If omitted or null, http://localhost:4317 is used. + endpoint: http://localhost:4317 + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem # Configure mTLS private client key. - # - # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY - client_key: /app/cert.pem + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem # Configure mTLS client certificate. - # - # Environment variable: OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE - client_certificate: /app/cert.pem - # Configure headers. - # - # Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_TRACES_HEADERS + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. headers: - api-key: !!str 1234 + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" # Configure compression. - # - # Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_TRACES_COMPRESSION + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. compression: gzip # Configure max time (in milliseconds) to wait for each export. - # - # Environment variable: OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_TRACES_TIMEOUT + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. timeout: 10000 # Configure client transport security for the exporter's connection. - # - # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_TRACES_INSECURE + # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. + # If omitted or null, false is used. insecure: false - # Configure a batch span processor. - - batch: + - # Configure a batch span processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: file:///var/log/traces.jsonl + - # Configure a batch span processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: stdout + - # Configure a batch span processor. + batch: # Configure exporter. - # - # Environment variable: OTEL_TRACES_EXPORTER exporter: # Configure exporter to be zipkin. zipkin: # Configure endpoint. - # - # Environment variable: OTEL_EXPORTER_ZIPKIN_ENDPOINT + # If omitted or null, http://localhost:9411/api/v2/spans is used. endpoint: http://localhost:9411/api/v2/spans # Configure max time (in milliseconds) to wait for each export. - # - # Environment variable: OTEL_EXPORTER_ZIPKIN_TIMEOUT + # Value must be non-negative. A value of 0 indicates indefinite. + # If omitted or null, 10000 is used. timeout: 10000 - # Configure a simple span processor. - - simple: + - # Configure a simple span processor. + simple: # Configure exporter. exporter: # Configure exporter to be console. - console: {} + console: # Configure span limits. See also attribute_limits. limits: - # Configure max span attribute value size. Overrides attribute_limits.attribute_value_length_limit. - # - # Environment variable: OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT + # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. + # Value must be non-negative. + # If omitted or null, there is no limit. attribute_value_length_limit: 4096 - # Configure max span attribute count. Overrides attribute_limits.attribute_count_limit. - # - # Environment variable: OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT + # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. + # Value must be non-negative. + # If omitted or null, 128 is used. attribute_count_limit: 128 # Configure max span event count. - # - # Environment variable: OTEL_SPAN_EVENT_COUNT_LIMIT + # Value must be non-negative. + # If omitted or null, 128 is used. event_count_limit: 128 # Configure max span link count. - # - # Environment variable: OTEL_SPAN_LINK_COUNT_LIMIT + # Value must be non-negative. + # If omitted or null, 128 is used. link_count_limit: 128 # Configure max attributes per span event. - # - # Environment variable: OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT + # Value must be non-negative. + # If omitted or null, 128 is used. event_attribute_count_limit: 128 # Configure max attributes per span link. - # - # Environment variable: OTEL_LINK_ATTRIBUTE_COUNT_LIMIT + # Value must be non-negative. + # If omitted or null, 128 is used. link_attribute_count_limit: 128 # Configure the sampler. + # If omitted, parent based sampler with a root of always_on is used. sampler: - # Configure sampler to be parent_based. Known values include: always_off, always_on, jaeger_remote, parent_based, trace_id_ratio_based. - # - # Environment variable: OTEL_TRACES_SAMPLER=parentbased_* + # Configure sampler to be parent_based. parent_based: # Configure root sampler. - # - # Environment variable: OTEL_TRACES_SAMPLER=parentbased_traceidratio + # If omitted or null, always_on is used. root: # Configure sampler to be trace_id_ratio_based. trace_id_ratio_based: # Configure trace_id_ratio. - # - # Environment variable: OTEL_TRACES_SAMPLER_ARG=traceidratio=0.0001 + # If omitted or null, 1.0 is used. ratio: 0.0001 # Configure remote_parent_sampled sampler. + # If omitted or null, always_on is used. remote_parent_sampled: # Configure sampler to be always_on. - always_on: {} + always_on: # Configure remote_parent_not_sampled sampler. + # If omitted or null, always_off is used. remote_parent_not_sampled: # Configure sampler to be always_off. - always_off: {} + always_off: # Configure local_parent_sampled sampler. + # If omitted or null, always_on is used. local_parent_sampled: # Configure sampler to be always_on. - always_on: {} + always_on: # Configure local_parent_not_sampled sampler. + # If omitted or null, always_off is used. local_parent_not_sampled: # Configure sampler to be always_off. - always_off: {} - + always_off: # Configure resource for all signals. +# If omitted, the default resource is used. resource: - # Configure resource attributes. - # - # Environment variable: OTEL_RESOURCE_ATTRIBUTES + # Configure resource attributes. Entries have higher priority than entries from .resource.attributes_list. + # Entries must contain .name and .value, and may optionally include .type. If an entry's .type omitted or null, string is used. + # The .value's type must match the .type. Values for .type include: string, bool, int, double, string_array, bool_array, int_array, double_array. attributes: - # Configure `service.name` resource attribute - # - # Environment variable: OTEL_SERVICE_NAME - service.name: !!str "unknown_service" - foo: the_foo - bar: the_bar - # Configure the resource schema URL. + - name: service.name + value: unknown_service + - name: string_key + value: value + type: string + - name: bool_key + value: true + type: bool + - name: int_key + value: 1 + type: int + - name: double_key + value: 1.1 + type: double + - name: string_array_key + value: [ "value1", "value2" ] + type: string_array + - name: bool_array_key + value: [ true, false ] + type: bool_array + - name: int_array_key + value: [ 1, 2 ] + type: int_array + - name: double_array_key + value: [ 1.1, 2.2 ] + type: double_array + # Configure resource attributes. Entries have lower priority than entries from .resource.attributes. + # The value is a list of comma separated key-value pairs matching the format of OTEL_RESOURCE_ATTRIBUTES. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details. + # If omitted or null, no resource attributes are added. + attributes_list: "service.namespace=my-namespace,service.version=1.0.0" + # Configure resource detectors. + detectors: + # Configure attributes provided by resource detectors. + attributes: + # Configure list of attribute key patterns to include from resource detectors. + # Attribute keys from resource detectors are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, all attributes are included. + included: + - process.* + # Configure list of attribute key patterns to exclude from resource detectors. Applies after .resource.detectors.attributes.included (i.e. excluded has higher priority than included). + # Attribute keys from resource detectors are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, .included attributes are included. + excluded: + - process.command_args + # Configure resource schema URL. + # If omitted or null, no schema URL is used. schema_url: https://opentelemetry.io/schemas/1.16.0 +# Configure instrumentation. +# This type is in development and subject to breaking changes in minor versions. +instrumentation/development: + # Configure general SemConv options that may apply to multiple languages and instrumentations. + # Instrumenation may merge general config options with the language specific configuration at .instrumentation.. + general: + # Configure instrumentations following the peer semantic conventions. + # See peer semantic conventions: https://opentelemetry.io/docs/specs/semconv/attributes-registry/peer/ + peer: + # Configure the service mapping for instrumentations following peer.service semantic conventions. + # Each entry is a key value pair where "peer" defines the IP address and "service" defines the corresponding logical name of the service. + # See peer.service semantic conventions: https://opentelemetry.io/docs/specs/semconv/general/attributes/#general-remote-service-attributes + service_mapping: + - peer: 1.2.3.4 + service: FooService + - peer: 2.3.4.5 + service: BarService + # Configure instrumentations following the http semantic conventions. + # See http semantic conventions: https://opentelemetry.io/docs/specs/semconv/http/ + http: + # Configure instrumentations following the http client semantic conventions. + client: + # Configure headers to capture for outbound http requests. + request_captured_headers: + - Content-Type + - Accept + # Configure headers to capture for outbound http responses. + response_captured_headers: + - Content-Type + - Content-Encoding + # Configure instrumentations following the http server semantic conventions. + server: + # Configure headers to capture for inbound http requests. + request_captured_headers: + - Content-Type + - Accept + # Configure headers to capture for outbound http responses. + response_captured_headers: + - Content-Type + - Content-Encoding + # Configure C++ language-specific instrumentation libraries. + cpp: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure .NET language-specific instrumentation libraries. + dotnet: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Erlang language-specific instrumentation libraries. + erlang: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Go language-specific instrumentation libraries. + go: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Java language-specific instrumentation libraries. + java: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure JavaScript language-specific instrumentation libraries. + js: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure PHP language-specific instrumentation libraries. + php: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Python language-specific instrumentation libraries. + python: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Ruby language-specific instrumentation libraries. + ruby: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Rust language-specific instrumentation libraries. + rust: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Swift language-specific instrumentation libraries. + swift: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index 0f1d2266f3..59e690dd36 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -31,14 +31,14 @@ std::unique_ptr OtlpHttpSpanBuilder::Bu const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const { OtlpHttpExporterOptions options(nullptr); - options.url = model->endpoint; - options.content_type = GetOtlpHttpProtocolFromString(model->protocol); - options.timeout = std::chrono::duration_cast( + options.url = model->endpoint; + // options.content_type = xxx; + options.timeout = std::chrono::duration_cast( std::chrono::seconds{model->timeout}); // options.http_headers = model->xxx; - options.ssl_ca_cert_path = model->certificate; - options.ssl_client_key_path = model->client_key; - options.ssl_client_cert_path = model->client_certificate; + options.ssl_ca_cert_path = model->certificate_file; + options.ssl_client_key_path = model->client_key_file; + options.ssl_client_cert_path = model->client_certificate_file; return OtlpHttpExporterFactory::Create(options); } diff --git a/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h b/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h index 7fbbfca7f1..71fe31bb01 100644 --- a/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h +++ b/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h @@ -3,9 +3,6 @@ #pragma once -#include "opentelemetry/sdk/configuration/headers_configuration.h" -#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h index fc264ed67d..1aee1c8df8 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h @@ -27,11 +27,10 @@ class OtlpGrpcLogRecordExporterConfiguration : public LogRecordExporterConfigura visitor->VisitOtlpGrpc(this); } - std::string protocol; std::string endpoint; - std::string certificate; - std::string client_key; - std::string client_certificate; + std::string certificate_file; + std::string client_key_file; + std::string client_certificate_file; std::unique_ptr headers; std::string headers_list; std::string compression; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h index ac3eede47c..5a08edfa68 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -28,11 +28,10 @@ class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfigu visitor->VisitOtlpGrpc(this); } - std::string protocol; std::string endpoint; - std::string certificate; - std::string client_key; - std::string client_certificate; + std::string certificate_file; + std::string client_key_file; + std::string client_certificate_file; std::unique_ptr headers; std::string headers_list; std::string compression; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h index 6f0386cfcc..da7b1afa49 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h @@ -27,11 +27,10 @@ class OtlpGrpcSpanExporterConfiguration : public SpanExporterConfiguration visitor->VisitOtlpGrpc(this); } - std::string protocol; std::string endpoint; - std::string certificate; - std::string client_key; - std::string client_certificate; + std::string certificate_file; + std::string client_key_file; + std::string client_certificate_file; std::unique_ptr headers; std::string headers_list; std::string compression; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h index 7d56d3253b..fc812dd249 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h @@ -6,6 +6,7 @@ #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,7 +16,7 @@ namespace configuration { // YAML-SCHEMA: schema/common.json -// YAML-NODE: Otlp +// YAML-NODE: OtlpHttpExporter class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: @@ -27,16 +28,15 @@ class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfigura visitor->VisitOtlpHttp(this); } - std::string protocol; std::string endpoint; - std::string certificate; - std::string client_key; - std::string client_certificate; + std::string certificate_file; + std::string client_key_file; + std::string client_certificate_file; std::unique_ptr headers; std::string headers_list; std::string compression; size_t timeout{0}; - bool insecure{false}; + enum_otlp_http_encoding encoding; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h index a880067152..860c1a6c4b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -5,6 +5,7 @@ #include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" #include "opentelemetry/version.h" @@ -28,18 +29,17 @@ class OtlpHttpPushMetricExporterConfiguration : public PushMetricExporterConfigu visitor->VisitOtlpHttp(this); } - std::string protocol; std::string endpoint; - std::string certificate; - std::string client_key; - std::string client_certificate; + std::string certificate_file; + std::string client_key_file; + std::string client_certificate_file; std::unique_ptr headers; std::string headers_list; std::string compression; size_t timeout{0}; + enum_otlp_http_encoding encoding{protobuf}; std::string temporality_preference; enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; - bool insecure{false}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h index 53a7e0e81b..25589609e0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/version.h" @@ -27,16 +28,15 @@ class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration visitor->VisitOtlpHttp(this); } - std::string protocol; std::string endpoint; - std::string certificate; - std::string client_key; - std::string client_certificate; + std::string certificate_file; + std::string client_key_file; + std::string client_certificate_file; std::unique_ptr headers; std::string headers_list; std::string compression; size_t timeout{0}; - bool insecure{false}; + enum_otlp_http_encoding encoding; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 7f1cc7a9be..f23e66e099 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -29,6 +29,7 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" @@ -89,16 +90,24 @@ static std::unique_ptr ParseHeadersConfiguration( const std::unique_ptr &node) { std::unique_ptr model(new HeadersConfiguration); + std::unique_ptr kv_pair; + std::unique_ptr name_child; + std::unique_ptr value_child; + std::string name; + std::string value; - for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + for (auto it = node->begin(); it != node->end(); ++it) { - std::string name = it.Name(); - std::unique_ptr child = it.Value(); - std::string string_value = child->AsString(); + kv_pair = *it; - OTEL_INTERNAL_LOG_DEBUG("ParseHeadersConfiguration() name = " << name - << ", value = " << string_value); - std::pair entry(name, string_value); + name_child = kv_pair->GetRequiredChildNode("name"); + value_child = kv_pair->GetRequiredChildNode("value"); + + name = name_child->AsString(); + value = value_child->AsString(); + + OTEL_INTERNAL_LOG_DEBUG("ParseHeadersConfiguration() name = " << name << ", value = " << value); + std::pair entry(name, value); model->kv_map.insert(entry); } @@ -123,11 +132,10 @@ ParseOtlpHttpLogRecordExporterConfiguration(const std::unique_ptr new OtlpHttpLogRecordExporterConfiguration); std::unique_ptr child; - model->protocol = node->GetRequiredString("protocol"); - model->endpoint = node->GetRequiredString("endpoint"); - model->certificate = node->GetString("certificate", ""); - model->client_key = node->GetString("client_key", ""); - model->client_certificate = node->GetString("client_certificate", ""); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate_file = node->GetString("certificate_file", ""); + model->client_key_file = node->GetString("client_key_file", ""); + model->client_certificate_file = node->GetString("client_certificate_file", ""); child = node->GetChildNode("headers"); if (child) @@ -138,7 +146,7 @@ ParseOtlpHttpLogRecordExporterConfiguration(const std::unique_ptr model->headers_list = node->GetString("headers_list", ""); model->compression = node->GetString("compression", ""); model->timeout = node->GetInteger("timeout", 10000); - model->insecure = node->GetBoolean("insecure", false); + // FIXME: encoding return model; } @@ -150,11 +158,10 @@ ParseOtlpGrpcLogRecordExporterConfiguration(const std::unique_ptr new OtlpGrpcLogRecordExporterConfiguration); std::unique_ptr child; - model->protocol = node->GetRequiredString("protocol"); - model->endpoint = node->GetRequiredString("endpoint"); - model->certificate = node->GetString("certificate", ""); - model->client_key = node->GetString("client_key", ""); - model->client_certificate = node->GetString("client_certificate", ""); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate_file = node->GetString("certificate_file", ""); + model->client_key_file = node->GetString("client_key_file", ""); + model->client_certificate_file = node->GetString("client_certificate_file", ""); child = node->GetChildNode("headers"); if (child) @@ -375,11 +382,10 @@ ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr new OtlpHttpPushMetricExporterConfiguration); std::unique_ptr child; - model->protocol = node->GetRequiredString("protocol"); - model->endpoint = node->GetRequiredString("endpoint"); - model->certificate = node->GetString("certificate", ""); - model->client_key = node->GetString("client_key", ""); - model->client_certificate = node->GetString("client_certificate", ""); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate_file = node->GetString("certificate_file", ""); + model->client_key_file = node->GetString("client_key_file", ""); + model->client_certificate_file = node->GetString("client_certificate_file", ""); child = node->GetChildNode("headers"); if (child) @@ -396,8 +402,6 @@ ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr model->default_histogram_aggregation = ParseDefaultHistogramAggregation(default_histogram_aggregation); - model->insecure = node->GetBoolean("insecure", false); - return model; } @@ -408,11 +412,10 @@ ParseOtlpGrpcPushMetricExporterConfiguration(const std::unique_ptr new OtlpGrpcPushMetricExporterConfiguration); std::unique_ptr child; - model->protocol = node->GetRequiredString("protocol"); - model->endpoint = node->GetRequiredString("endpoint"); - model->certificate = node->GetString("certificate", ""); - model->client_key = node->GetString("client_key", ""); - model->client_certificate = node->GetString("client_certificate", ""); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate_file = node->GetString("certificate_file", ""); + model->client_key_file = node->GetString("client_key_file", ""); + model->client_certificate_file = node->GetString("client_certificate_file", ""); child = node->GetChildNode("headers"); if (child) @@ -817,6 +820,10 @@ static std::unique_ptr ParseStreamConfiguration( if (child) { + OTEL_INTERNAL_LOG_ERROR("ParseStreamConfiguration: FIXME"); + + // Schema has changed +#ifdef NEVER for (auto it = child->begin(); it != child->end(); ++it) { std::unique_ptr attribute_key(*it); @@ -825,6 +832,7 @@ static std::unique_ptr ParseStreamConfiguration( model->attribute_keys.push_back(name); } +#endif } return model; @@ -1079,11 +1087,10 @@ static std::unique_ptr ParseOtlpHttpSpanExpor std::unique_ptr model(new OtlpHttpSpanExporterConfiguration); std::unique_ptr child; - model->protocol = node->GetRequiredString("protocol"); - model->endpoint = node->GetRequiredString("endpoint"); - model->certificate = node->GetString("certificate", ""); - model->client_key = node->GetString("client_key", ""); - model->client_certificate = node->GetString("client_certificate", ""); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate_file = node->GetString("certificate_file", ""); + model->client_key_file = node->GetString("client_key_file", ""); + model->client_certificate_file = node->GetString("client_certificate_file", ""); child = node->GetChildNode("headers"); if (child) @@ -1094,7 +1101,6 @@ static std::unique_ptr ParseOtlpHttpSpanExpor model->headers_list = node->GetString("headers_list", ""); model->compression = node->GetString("compression", ""); model->timeout = node->GetInteger("timeout", 10000); - model->insecure = node->GetBoolean("insecure", false); return model; } @@ -1105,11 +1111,10 @@ static std::unique_ptr ParseOtlpGrpcSpanExpor std::unique_ptr model(new OtlpGrpcSpanExporterConfiguration); std::unique_ptr child; - model->protocol = node->GetRequiredString("protocol"); - model->endpoint = node->GetRequiredString("endpoint"); - model->certificate = node->GetString("certificate", ""); - model->client_key = node->GetString("client_key", ""); - model->client_certificate = node->GetString("client_certificate", ""); + model->endpoint = node->GetRequiredString("endpoint"); + model->certificate_file = node->GetString("certificate_file", ""); + model->client_key_file = node->GetString("client_key_file", ""); + model->client_certificate_file = node->GetString("client_certificate_file", ""); child = node->GetChildNode("headers"); if (child) @@ -1319,6 +1324,10 @@ static std::unique_ptr ParseAttributesConfiguration( std::unique_ptr model(new AttributesConfiguration); std::unique_ptr child; + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME"); + + // Schema has changed +#ifdef NEVER for (auto it = node->begin_properties(); it != node->end_properties(); ++it) { std::string name = it.Name(); @@ -1331,6 +1340,7 @@ static std::unique_ptr ParseAttributesConfiguration( std::pair entry(name, string_value); model->kv_map.insert(entry); } +#endif return model; } diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index 3d9aa76fe1..d1b1b2aba0 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -13,13 +13,16 @@ #include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/version.h" +// Local debug, do not use in production +// #define WITH_DEBUG_NODE + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace configuration { -#if 0 +#ifdef WITH_DEBUG_NODE static void DebugNode(opentelemetry::nostd::string_view name, ryml::ConstNodeRef node) { OTEL_INTERNAL_LOG_DEBUG("Processing: " << name); @@ -42,7 +45,7 @@ static void DebugNode(opentelemetry::nostd::string_view name, ryml::ConstNodeRef OTEL_INTERNAL_LOG_DEBUG(" - val() : " << node.val()); } } -#endif +#endif // WITH_DEBUG_NODE std::string RymlDocumentNode::Key() const { @@ -351,14 +354,14 @@ DocumentNodeConstIterator RymlDocumentNode::begin() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin()"); -#if 0 +#ifdef WITH_DEBUG_NODE DebugNode("::begin()", m_node); for (int index = 0; index < m_node.num_children(); index++) { DebugNode("(child)", m_node[index]); } -#endif +#endif // WITH_DEBUG_NODE return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(m_node, 0, m_depth)); } @@ -388,14 +391,14 @@ PropertiesNodeConstIterator RymlDocumentNode::begin_properties() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin_properties()"); -#if 0 +#ifdef WITH_DEBUG_NODE DebugNode("::begin_properties()", m_node); for (int index = 0; index < m_node.num_children(); index++) { DebugNode("(child)", m_node[index]); } -#endif +#endif // WITH_DEBUG_NODE return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(m_node, 0, m_depth)); } @@ -463,7 +466,8 @@ void RymlPropertiesNodeConstIteratorImpl::Next() std::string RymlPropertiesNodeConstIteratorImpl::Name() const { ryml::ConstNodeRef ryml_item = m_parent[m_index]; - ryml::csubstr k = ryml_item.key(); + // FIXME: check there is a key() + ryml::csubstr k = ryml_item.key(); std::string name(k.str, k.len); OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Name() = " << name); From dbb1921d84cb73ddadbee017c1c7decb1e8e0fc6 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 10 Mar 2025 21:47:48 +0100 Subject: [PATCH 085/166] Add missing file --- .../sdk/configuration/otlp_http_encoding.h | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h new file mode 100644 index 0000000000..4147bbeb62 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +enum enum_otlp_http_encoding +{ + protobuf, + json +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From 99704a42446d820a451821e9f97e13b4476303d3 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 11 Mar 2025 01:01:33 +0100 Subject: [PATCH 086/166] Cleanup --- exporters/otlp/src/otlp_http_span_builder.cc | 1 - ...p_http_log_record_exporter_configuration.h | 2 +- .../otlp_http_span_exporter_configuration.h | 2 +- .../configuration/configuration_factory.cc | 75 ++++++++++++++++--- sdk/test/configuration/yaml_resource_test.cc | 41 +++++++++- 5 files changed, 105 insertions(+), 16 deletions(-) diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index 59e690dd36..c11e148ce7 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -5,7 +5,6 @@ #include #include -#include "opentelemetry/exporters/otlp/otlp_http.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h index fc812dd249..11f02f577e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h @@ -36,7 +36,7 @@ class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfigura std::string headers_list; std::string compression; size_t timeout{0}; - enum_otlp_http_encoding encoding; + enum_otlp_http_encoding encoding{protobuf}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h index 25589609e0..9969017214 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h @@ -36,7 +36,7 @@ class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration std::string headers_list; std::string compression; size_t timeout{0}; - enum_otlp_http_encoding encoding; + enum_otlp_http_encoding encoding{protobuf}; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index f23e66e099..f0dc4e7e9e 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -1326,21 +1326,74 @@ static std::unique_ptr ParseAttributesConfiguration( OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME"); - // Schema has changed -#ifdef NEVER - for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + std::unique_ptr attribute_name_value; + std::unique_ptr name_child; + std::unique_ptr value_child; + std::unique_ptr type_child; + std::string name; + std::string value; + std::string type; + + for (auto it = node->begin(); it != node->end(); ++it) { - std::string name = it.Name(); - std::unique_ptr child = it.Value(); - std::string string_value = child->AsString(); + attribute_name_value = *it; - OTEL_INTERNAL_LOG_DEBUG( - "ParseAttributesConfiguration() name = " << name << ", value = " << string_value); + name_child = attribute_name_value->GetRequiredChildNode("name"); + value_child = attribute_name_value->GetRequiredChildNode("value"); + type_child = attribute_name_value->GetChildNode("type"); - std::pair entry(name, string_value); - model->kv_map.insert(entry); + name = name_child->AsString(); + value = value_child->AsString(); + if (type_child) + { + type = type_child->AsString(); + } + else + { + type = "string"; + } + + if (type == "string") + { + OTEL_INTERNAL_LOG_DEBUG("ParseAttributesConfiguration() name = " << name + << ", value = " << value); + std::pair entry(name, value); + model->kv_map.insert(entry); + } + else if (type == "bool") + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: bool"); + } + else if (type == "int") + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: int"); + } + else if (type == "double") + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: double"); + } + else if (type == "string_array") + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: string_array"); + } + else if (type == "bool_array") + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: bool_array"); + } + else if (type == "int_array") + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: int_array"); + } + else if (type == "double_array") + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: double_array"); + } + else + { + OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: unknown type " << type); + throw InvalidSchemaException("Illegal attribute type"); + } } -#endif return model; } diff --git a/sdk/test/configuration/yaml_resource_test.cc b/sdk/test/configuration/yaml_resource_test.cc index a2c139c718..701ddf5577 100644 --- a/sdk/test/configuration/yaml_resource_test.cc +++ b/sdk/test/configuration/yaml_resource_test.cc @@ -50,8 +50,9 @@ file_format: xx.yy ASSERT_EQ(config->resource->attributes->kv_map.size(), 0); } -TEST(YamlResource, some_attributes) +TEST(YamlResource, some_attributes_0_10) { + // This is the old 0.10 format, must fail std::string yaml = R"( file_format: xx.yy resource: @@ -60,6 +61,23 @@ file_format: xx.yy bar: "5678" )"; + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlResource, some_attributes_0_30) +{ + // This is the new 0.30 format, must pass + std::string yaml = R"( +file_format: xx.yy +resource: + attributes: + - name: foo + value: "1234" + - name: bar + value: "5678" +)"; + auto config = DoParse(yaml); ASSERT_NE(config, nullptr); ASSERT_NE(config->resource, nullptr); @@ -97,8 +115,9 @@ file_format: xx.yy ASSERT_EQ(config->resource->attributes_list, "foo=1234,bar=5678"); } -TEST(YamlResource, both) +TEST(YamlResource, both_0_10) { + // This is the old 0.10 format, must fail std::string yaml = R"( file_format: xx.yy resource: @@ -108,6 +127,24 @@ file_format: xx.yy attributes_list: "foo=aaaa,bar=bbbb" )"; + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlResource, both_0_30) +{ + // This is the new 0.30 format, must pass + std::string yaml = R"( +file_format: xx.yy +resource: + attributes: + - name: foo + value: "1234" + - name: bar + value: "5678" + attributes_list: "foo=aaaa,bar=bbbb" +)"; + auto config = DoParse(yaml); ASSERT_NE(config, nullptr); ASSERT_NE(config->resource, nullptr); From 8284606b78b3ac64143060fcdc6d2c2d1008e039 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 21 Mar 2025 00:44:19 +0100 Subject: [PATCH 087/166] Preparing for code review. Added CODE-REVIEW-PR2518.txt --- CODE-REVIEW-PR2518.txt | 236 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 CODE-REVIEW-PR2518.txt diff --git a/CODE-REVIEW-PR2518.txt b/CODE-REVIEW-PR2518.txt new file mode 100644 index 0000000000..3619771d22 --- /dev/null +++ b/CODE-REVIEW-PR2518.txt @@ -0,0 +1,236 @@ + +# config.yaml code review + +To process this code review, the suggestion is to proceed by areas. + +Files to review are grouped per sections below. + +## CODE + +### Model + +sdk/include/opentelemetry/sdk/configuration/configuration.h + +#### Trace Model + +sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h + +sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h +sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h +sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h + +#### Metrics Model + +sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h + +sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h +sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h +sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h +sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h +sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h +sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h +sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h +sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h +sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h +sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/selector_configuration.h +sdk/include/opentelemetry/sdk/configuration/stream_configuration.h +sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h +sdk/include/opentelemetry/sdk/configuration/view_configuration.h + +#### Log Model + +sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h + +sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h +sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h +sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h +sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h + +#### Misc Model + +sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h +sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h +sdk/include/opentelemetry/sdk/configuration/resource_configuration.h + +sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h +sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h +sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h +sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h +sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h +sdk/include/opentelemetry/sdk/configuration/headers_configuration.h +sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h +sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h +sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h +sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h +sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h +sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h + +#### Model extensions + +sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h +sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h +sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h +sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h + +### YAML parser + +sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h +sdk/include/opentelemetry/sdk/configuration/configuration_factory.h +sdk/include/opentelemetry/sdk/configuration/document.h +sdk/include/opentelemetry/sdk/configuration/document_node.h +sdk/include/opentelemetry/sdk/configuration/ryml_document.h +sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h +sdk/src/configuration/document_node.cc +sdk/src/configuration/ryml_document.cc +sdk/src/configuration/ryml_document_node.cc +sdk/src/configuration/yaml_configuration_factory.cc +sdk/src/configuration/configuration_factory.cc + +### SDK init + +sdk/include/opentelemetry/sdk/init/configured_sdk.h +sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h +sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h +sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h +sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h +sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h +sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h +sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h +sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h +sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h +sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h +sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h +sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h +sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h +sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h +sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h +sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h +sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h +sdk/include/opentelemetry/sdk/init/registry.h +sdk/include/opentelemetry/sdk/init/sdk_builder.h +sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h +sdk/include/opentelemetry/sdk/init/unsupported_exception.h +sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h +sdk/src/init/configured_sdk.cc +sdk/src/init/registry.cc +sdk/src/init/sdk_builder.cc + +### Exporters + +exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h +exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h +exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h +exporters/ostream/src/console_log_record_builder.cc +exporters/ostream/src/console_push_metric_builder.cc +exporters/ostream/src/console_span_builder.cc +exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h +exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h +exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h +exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h +exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h +exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h +exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h +exporters/otlp/src/otlp_grpc_log_record_builder.cc +exporters/otlp/src/otlp_grpc_push_metric_builder.cc +exporters/otlp/src/otlp_grpc_span_builder.cc +exporters/otlp/src/otlp_http_exporter_options.cc +exporters/otlp/src/otlp_http_log_record_builder.cc +exporters/otlp/src/otlp_http_push_metric_builder.cc +exporters/otlp/src/otlp_http_span_builder.cc +exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h +exporters/prometheus/src/prometheus_pull_builder.cc +exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h +exporters/zipkin/src/zipkin_builder.cc + +## TEST + +### Unit tests + +sdk/test/configuration/yaml_resource_test.cc +sdk/test/configuration/yaml_test.cc +sdk/test/configuration/yaml_trace_test.cc + +### Examples + +examples/yaml/anchors.yaml +examples/yaml/custom_sampler.cc +examples/yaml/custom_sampler.h +examples/yaml/custom_sampler_builder.cc +examples/yaml/custom_sampler_builder.h +examples/yaml/custom_span_exporter.cc +examples/yaml/custom_span_exporter.h +examples/yaml/custom_span_exporter_builder.cc +examples/yaml/custom_span_exporter_builder.h +examples/yaml/custom_span_processor.cc +examples/yaml/custom_span_processor.h +examples/yaml/custom_span_processor_builder.cc +examples/yaml/custom_span_processor_builder.h +examples/yaml/extensions.yaml +examples/yaml/kitchen-sink.yaml +examples/yaml/main.cc + +## Misc + +### CI + +.github/workflows/ci.yml +.github/workflows/clang-tidy.yaml +.github/workflows/iwyu.yml +.iwyu.imp +ci/do_ci.sh +ci/install_ryml.sh + +### BUILD + +CMakeLists.txt +examples/CMakeLists.txt +examples/yaml/CMakeLists.txt +exporters/ostream/BUILD +exporters/ostream/CMakeLists.txt +exporters/otlp/BUILD +exporters/otlp/CMakeLists.txt +exporters/prometheus/BUILD +exporters/prometheus/CMakeLists.txt +exporters/zipkin/BUILD +exporters/zipkin/CMakeLists.txt +sdk/src/CMakeLists.txt +sdk/src/configuration/CMakeLists.txt +sdk/src/init/CMakeLists.txt +sdk/test/CMakeLists.txt +sdk/test/configuration/CMakeLists.txt + +## Remaining files + +sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h +sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h +sdk/include/opentelemetry/sdk/resource/resource.h +sdk/src/resource/resource.cc From ede67602b8d4fc74d0c99f2b85a3683b4b47ebd3 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 21 Mar 2025 00:51:00 +0100 Subject: [PATCH 088/166] CI cleanup --- CODE-REVIEW-PR2518.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CODE-REVIEW-PR2518.txt b/CODE-REVIEW-PR2518.txt index 3619771d22..b2077192e7 100644 --- a/CODE-REVIEW-PR2518.txt +++ b/CODE-REVIEW-PR2518.txt @@ -1,3 +1,9 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +This file is temporary, to be removed before final merge. + +--- # config.yaml code review From 43a425f15990c6f11e3857d91aaeb4fb59fca172 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 26 May 2025 20:58:42 +0200 Subject: [PATCH 089/166] format --- exporters/otlp/CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 77fda62d36..6f3828a318 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -133,8 +133,7 @@ if(WITH_OTLP_GRPC) target_link_libraries(opentelemetry_otlp_grpc_builder PUBLIC opentelemetry_exporter_otlp_grpc_log) - list(APPEND OPENTELEMETRY_OTLP_GRPC_TARGETS - opentelemetry_otlp_grpc_builder) + list(APPEND OPENTELEMETRY_OTLP_GRPC_TARGETS opentelemetry_otlp_grpc_builder) endif() @@ -242,8 +241,7 @@ if(WITH_OTLP_HTTP) target_link_libraries(opentelemetry_otlp_http_builder PUBLIC opentelemetry_exporter_otlp_http_log) - list(APPEND OPENTELEMETRY_OTLP_HTTP_TARGETS - opentelemetry_otlp_http_builder) + list(APPEND OPENTELEMETRY_OTLP_HTTP_TARGETS opentelemetry_otlp_http_builder) endif() if(WITH_OTLP_FILE) From 4d2e53fee3e92855a8f0ac226117224192bd7079 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 28 May 2025 11:06:50 +0200 Subject: [PATCH 090/166] Added support for otlp_file --- CODE-REVIEW-PR2518.txt | 4 +- examples/yaml/CMakeLists.txt | 6 ++ examples/yaml/kitchen-sink.yaml | 2 +- examples/yaml/main.cc | 12 +++ exporters/otlp/CMakeLists.txt | 28 ++++++ .../otlp/otlp_file_log_record_builder.h | 36 +++++++ .../otlp/otlp_file_push_metric_builder.h | 36 +++++++ .../exporters/otlp/otlp_file_span_builder.h | 36 +++++++ .../otlp/src/otlp_file_log_record_builder.cc | 33 +++++++ .../otlp/src/otlp_file_push_metric_builder.cc | 33 +++++++ exporters/otlp/src/otlp_file_span_builder.cc | 32 ++++++ ...og_record_exporter_configuration_visitor.h | 2 + .../logger_provider_configuration.h | 1 + .../meter_provider_configuration.h | 1 + ...p_file_log_record_exporter_configuration.h | 36 +++++++ ..._file_push_metric_exporter_configuration.h | 38 +++++++ .../otlp_file_span_exporter_configuration.h | 36 +++++++ ..._grpc_push_metric_exporter_configuration.h | 4 +- ..._http_push_metric_exporter_configuration.h | 2 +- .../pull_metric_reader_configuration.h | 1 + ...sh_metric_exporter_configuration_visitor.h | 2 + .../span_exporter_configuration_visitor.h | 2 + .../tracer_provider_configuration.h | 1 + .../sdk/configuration/view_configuration.h | 10 +- ...ration.h => view_selector_configuration.h} | 8 +- ...guration.h => view_stream_configuration.h} | 9 +- .../otlp_file_log_record_exporter_builder.h | 29 ++++++ .../otlp_file_push_metric_exporter_builder.h | 29 ++++++ .../init/otlp_file_span_exporter_builder.h | 28 ++++++ sdk/include/opentelemetry/sdk/init/registry.h | 30 ++++++ .../opentelemetry/sdk/init/sdk_builder.h | 13 +++ .../configuration/configuration_factory.cc | 80 ++++++++++++--- sdk/src/init/sdk_builder.cc | 98 +++++++++++++++++-- 33 files changed, 681 insertions(+), 37 deletions(-) create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h create mode 100644 exporters/otlp/src/otlp_file_log_record_builder.cc create mode 100644 exporters/otlp/src/otlp_file_push_metric_builder.cc create mode 100644 exporters/otlp/src/otlp_file_span_builder.cc create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h rename sdk/include/opentelemetry/sdk/configuration/{selector_configuration.h => view_selector_configuration.h} (77%) rename sdk/include/opentelemetry/sdk/configuration/{stream_configuration.h => view_stream_configuration.h} (70%) create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h create mode 100644 sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h diff --git a/CODE-REVIEW-PR2518.txt b/CODE-REVIEW-PR2518.txt index b2077192e7..8a09ebaaeb 100644 --- a/CODE-REVIEW-PR2518.txt +++ b/CODE-REVIEW-PR2518.txt @@ -57,8 +57,8 @@ sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_v sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/selector_configuration.h -sdk/include/opentelemetry/sdk/configuration/stream_configuration.h +sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h +sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h sdk/include/opentelemetry/sdk/configuration/view_configuration.h diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index f0f1ad8c57..ad4f3ddfb6 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -38,6 +38,12 @@ if(WITH_OTLP_GRPC) target_link_libraries(example_yaml opentelemetry_otlp_grpc_builder) endif() +if(WITH_OTLP_FILE) + include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) + add_definitions(-DOTEL_HAVE_OTLP_FILE) + target_link_libraries(example_yaml opentelemetry_otlp_file_builder) +endif() + if(WITH_ZIPKIN) include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) add_definitions(-DOTEL_HAVE_ZIPKIN) diff --git a/examples/yaml/kitchen-sink.yaml b/examples/yaml/kitchen-sink.yaml index f31ed4dbad..d32f789356 100644 --- a/examples/yaml/kitchen-sink.yaml +++ b/examples/yaml/kitchen-sink.yaml @@ -446,7 +446,7 @@ meter_provider: propagator: # Configure the set of propagators to include in the composite text map propagator. # Built-in values include: tracecontext, baggage, b3, b3multi, jaeger, none. Known third party values include: xray, ottrace. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration. - composite: [ tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace ] + composite: [ tracecontext, baggage, b3, b3multi, jaeger ] # Configure tracer provider. # If omitted, a noop tracer provider is used. tracer_provider: diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 89abf18949..7956cbec75 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -39,6 +39,12 @@ # include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" #endif +#ifdef OTEL_HAVE_OTLP_FILE +# include "opentelemetry/exporters/otlp/otlp_file_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" +# include "opentelemetry/exporters/otlp/otlp_file_span_builder.h" +#endif + #ifdef OTEL_HAVE_ZIPKIN # include "opentelemetry/exporters/zipkin/zipkin_builder.h" #endif @@ -84,6 +90,12 @@ void InitOtel(const std::string &config_file) opentelemetry::exporter::otlp::OtlpGrpcLogRecordBuilder::Register(registry.get()); #endif +#ifdef OTEL_HAVE_OTLP_FILE + opentelemetry::exporter::otlp::OtlpFileSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpFilePushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpFileLogRecordBuilder::Register(registry.get()); +#endif + #ifdef OTEL_HAVE_ZIPKIN opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); #endif diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 6f3828a318..b14788a448 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -317,6 +317,34 @@ if(WITH_OTLP_FILE) list(APPEND OPENTELEMETRY_OTLP_FILE_TARGETS opentelemetry_exporter_otlp_file_metric) + + add_library( + opentelemetry_otlp_file_builder + src/otlp_file_span_builder.cc src/otlp_file_push_metric_builder.cc + src/otlp_file_log_record_builder.cc) + + set_target_properties(opentelemetry_otlp_file_builder + PROPERTIES EXPORT_NAME otlp_file_builder) + set_target_version(opentelemetry_otlp_file_builder) + + target_include_directories( + opentelemetry_otlp_file_builder + PUBLIC "$" + "$") + + # Make sure to build with the proper ABI + target_link_libraries(opentelemetry_otlp_file_builder + PUBLIC opentelemetry_api) + + target_link_libraries(opentelemetry_otlp_file_builder + PUBLIC opentelemetry_exporter_otlp_file) + target_link_libraries(opentelemetry_otlp_file_builder + PUBLIC opentelemetry_exporter_otlp_file_metric) + target_link_libraries(opentelemetry_otlp_file_builder + PUBLIC opentelemetry_exporter_otlp_file_log) + + list(APPEND OPENTELEMETRY_OTLP_FILE_TARGETS opentelemetry_otlp_file_builder) + endif() target_link_libraries( diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h new file mode 100644 index 0000000000..4222e03197 --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpFileLogRecordBuilder + : public opentelemetry::sdk::init::OtlpFileLogRecordExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpFileLogRecordBuilder() = default; + ~OtlpFileLogRecordBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration *model) + const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h new file mode 100644 index 0000000000..d41962928b --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpFilePushMetricBuilder + : public opentelemetry::sdk::init::OtlpFilePushMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpFilePushMetricBuilder() = default; + ~OtlpFilePushMetricBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) + const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h new file mode 100644 index 0000000000..6b2e75c1c2 --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/otlp_file_span_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OPENTELEMETRY_EXPORT OtlpFileSpanBuilder + : public opentelemetry::sdk::init::OtlpFileSpanExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + OtlpFileSpanBuilder() = default; + ~OtlpFileSpanBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) + const override; +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_log_record_builder.cc b/exporters/otlp/src/otlp_file_log_record_builder.cc new file mode 100644 index 0000000000..445daddb65 --- /dev/null +++ b/exporters/otlp/src/otlp_file_log_record_builder.cc @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_file_log_record_builder.h" +#include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpFileLogRecordBuilder singleton; + +void OtlpFileLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpFileLogRecordBuilder(&singleton); +} + +std::unique_ptr OtlpFileLogRecordBuilder::Build( + const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration * /* model */) + const +{ + // FIXME, use model + OtlpFileLogRecordExporterOptions options; + return OtlpFileLogRecordExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_push_metric_builder.cc b/exporters/otlp/src/otlp_file_push_metric_builder.cc new file mode 100644 index 0000000000..e7557f5775 --- /dev/null +++ b/exporters/otlp/src/otlp_file_push_metric_builder.cc @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" +#include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpFilePushMetricBuilder singleton; + +void OtlpFilePushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpFilePushMetricExporterBuilder(&singleton); +} + +std::unique_ptr OtlpFilePushMetricBuilder::Build( + const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration * /* model */) + const +{ + // FIXME, use model + OtlpFileMetricExporterOptions options; + return OtlpFileMetricExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_span_builder.cc b/exporters/otlp/src/otlp_file_span_builder.cc new file mode 100644 index 0000000000..fd3f57d795 --- /dev/null +++ b/exporters/otlp/src/otlp_file_span_builder.cc @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_file_span_builder.h" +#include "opentelemetry/exporters/otlp/otlp_file_exporter_factory.h" +#include "opentelemetry/exporters/otlp/otlp_file_exporter_options.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +static OtlpFileSpanBuilder singleton; + +void OtlpFileSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->SetOtlpFileSpanBuilder(&singleton); +} + +std::unique_ptr OtlpFileSpanBuilder::Build( + const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration * /* model */) const +{ + // FIXME, use model + OtlpFileExporterOptions options; + return OtlpFileExporterFactory::Create(options); +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h index ded7314f91..e38e794b83 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h @@ -13,6 +13,7 @@ namespace configuration class OtlpHttpLogRecordExporterConfiguration; class OtlpGrpcLogRecordExporterConfiguration; +class OtlpFileLogRecordExporterConfiguration; class ConsoleLogRecordExporterConfiguration; class ExtensionLogRecordExporterConfiguration; @@ -24,6 +25,7 @@ class LogRecordExporterConfigurationVisitor virtual void VisitOtlpHttp(const OtlpHttpLogRecordExporterConfiguration *model) = 0; virtual void VisitOtlpGrpc(const OtlpGrpcLogRecordExporterConfiguration *model) = 0; + virtual void VisitOtlpFile(const OtlpFileLogRecordExporterConfiguration *model) = 0; virtual void VisitConsole(const ConsoleLogRecordExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionLogRecordExporterConfiguration *model) = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h index f9fcea7fb8..8debcaac49 100644 --- a/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -23,6 +23,7 @@ class LoggerProviderConfiguration public: std::vector> processors; std::unique_ptr limits; + // FIXME: 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 05b2e0ae29..6f57de4150 100644 --- a/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -24,6 +24,7 @@ class MeterProviderConfiguration std::vector> readers; std::vector> views; // FIXME: exemplar_filter + // FIXME: meter_configurator }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h new file mode 100644 index 0000000000..24d9035cbf --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: ExperimentalOtlpFileExporter +class OtlpFileLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + OtlpFileLogRecordExporterConfiguration() = default; + ~OtlpFileLogRecordExporterConfiguration() override = default; + + void Accept(LogRecordExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpFile(this); + } + + std::string output_stream; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h new file mode 100644 index 0000000000..abfd97d871 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ExperimentalOtlpFileMetricExporter +class OtlpFilePushMetricExporterConfiguration : public PushMetricExporterConfiguration +{ +public: + OtlpFilePushMetricExporterConfiguration() = default; + ~OtlpFilePushMetricExporterConfiguration() override = default; + + void Accept(PushMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpFile(this); + } + + std::string output_stream; + std::string temporality_preference; // FIXME: enum + enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h new file mode 100644 index 0000000000..53a222d4ee --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" +#include "opentelemetry/version.h" + +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: ExperimentalOtlpFileExporter +class OtlpFileSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + OtlpFileSpanExporterConfiguration() = default; + ~OtlpFileSpanExporterConfiguration() override = default; + + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpFile(this); + } + + std::string output_stream; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h index 5a08edfa68..e7472cac3d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -36,9 +36,9 @@ class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfigu std::string headers_list; std::string compression; size_t timeout{0}; - std::string temporality_preference; - enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; bool insecure{false}; + std::string temporality_preference; // FIXME: enum + enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h index 860c1a6c4b..83f57ef3c7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -38,7 +38,7 @@ class OtlpHttpPushMetricExporterConfiguration : public PushMetricExporterConfigu std::string compression; size_t timeout{0}; enum_otlp_http_encoding encoding{protobuf}; - std::string temporality_preference; + std::string temporality_preference; // FIXME: enum enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index a5f37798f6..360703926b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -32,6 +32,7 @@ class PullMetricReaderConfiguration : public MetricReaderConfiguration std::unique_ptr exporter; std::vector> producers; + // FIXME: cardinality_limits }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h index 77dfbcd7da..f9c655fa01 100644 --- a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h @@ -13,6 +13,7 @@ namespace configuration class OtlpHttpPushMetricExporterConfiguration; class OtlpGrpcPushMetricExporterConfiguration; +class OtlpFilePushMetricExporterConfiguration; class ConsolePushMetricExporterConfiguration; class ExtensionPushMetricExporterConfiguration; @@ -24,6 +25,7 @@ class PushMetricExporterConfigurationVisitor virtual void VisitOtlpHttp(const OtlpHttpPushMetricExporterConfiguration *model) = 0; virtual void VisitOtlpGrpc(const OtlpGrpcPushMetricExporterConfiguration *model) = 0; + virtual void VisitOtlpFile(const OtlpFilePushMetricExporterConfiguration *model) = 0; virtual void VisitConsole(const ConsolePushMetricExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionPushMetricExporterConfiguration *model) = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h index 11b3492dc9..719b996462 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h @@ -13,6 +13,7 @@ namespace configuration class OtlpHttpSpanExporterConfiguration; class OtlpGrpcSpanExporterConfiguration; +class OtlpFileSpanExporterConfiguration; class ConsoleSpanExporterConfiguration; class ZipkinSpanExporterConfiguration; class ExtensionSpanExporterConfiguration; @@ -25,6 +26,7 @@ class SpanExporterConfigurationVisitor virtual void VisitOtlpHttp(const OtlpHttpSpanExporterConfiguration *model) = 0; virtual void VisitOtlpGrpc(const OtlpGrpcSpanExporterConfiguration *model) = 0; + virtual void VisitOtlpFile(const OtlpFileSpanExporterConfiguration *model) = 0; virtual void VisitConsole(const ConsoleSpanExporterConfiguration *model) = 0; virtual void VisitZipkin(const ZipkinSpanExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionSpanExporterConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h index 79b77bbfbf..9ef3d75b67 100644 --- a/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h @@ -25,6 +25,7 @@ class TracerProviderConfiguration std::vector> processors; std::unique_ptr limits; std::unique_ptr sampler; + // FIXME: tracer_configurator }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/view_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h index ab525ead17..821b82f1a4 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h @@ -5,8 +5,8 @@ #include -#include "opentelemetry/sdk/configuration/selector_configuration.h" -#include "opentelemetry/sdk/configuration/stream_configuration.h" +#include "opentelemetry/sdk/configuration/view_selector_configuration.h" +#include "opentelemetry/sdk/configuration/view_stream_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,14 +15,16 @@ namespace sdk namespace configuration { +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: View class ViewConfiguration { public: ViewConfiguration() = default; ~ViewConfiguration() = default; - std::unique_ptr selector; - std::unique_ptr stream; + std::unique_ptr selector; + std::unique_ptr stream; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h similarity index 77% rename from sdk/include/opentelemetry/sdk/configuration/selector_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h index 43a3567c7a..fd6cbc34c9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/selector_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h @@ -23,11 +23,13 @@ enum enum_instrument_type up_down_counter }; -class SelectorConfiguration +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ViewSelector +class ViewSelectorConfiguration { public: - SelectorConfiguration() = default; - ~SelectorConfiguration() = default; + ViewSelectorConfiguration() = default; + ~ViewSelectorConfiguration() = default; std::string instrument_name; enum_instrument_type instrument_type{counter}; diff --git a/sdk/include/opentelemetry/sdk/configuration/stream_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h similarity index 70% rename from sdk/include/opentelemetry/sdk/configuration/stream_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h index e445db976e..969905a52b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/stream_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h @@ -14,15 +14,18 @@ namespace sdk namespace configuration { -class StreamConfiguration +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ViewStream +class ViewStreamConfiguration { public: - StreamConfiguration() = default; - ~StreamConfiguration() = default; + ViewStreamConfiguration() = default; + ~ViewStreamConfiguration() = default; std::string name; std::string description; std::unique_ptr aggregation; + size_t aggregation_cardinality_limit; std::vector attribute_keys; }; diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h new file mode 100644 index 0000000000..899bcfac22 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpFileLogRecordExporterBuilder +{ +public: + OtlpFileLogRecordExporterBuilder() = default; + virtual ~OtlpFileLogRecordExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h new file mode 100644 index 0000000000..f35825cb2d --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpFilePushMetricExporterBuilder +{ +public: + OtlpFilePushMetricExporterBuilder() = default; + virtual ~OtlpFilePushMetricExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) + const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h new file mode 100644 index 0000000000..40b6f07929 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace init +{ + +class OtlpFileSpanExporterBuilder +{ +public: + OtlpFileSpanExporterBuilder() = default; + virtual ~OtlpFileSpanExporterBuilder() = default; + + virtual std::unique_ptr Build( + const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) const = 0; +}; + +} // namespace init +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index 5218442ce4..f5b0995288 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -15,6 +15,7 @@ namespace init { class OtlpHttpSpanExporterBuilder; class OtlpGrpcSpanExporterBuilder; +class OtlpFileSpanExporterBuilder; class ConsoleSpanExporterBuilder; class ZipkinSpanExporterBuilder; class TextMapPropagatorBuilder; @@ -24,6 +25,7 @@ class ExtensionSpanProcessorBuilder; class OtlpHttpPushMetricExporterBuilder; class OtlpGrpcPushMetricExporterBuilder; +class OtlpFilePushMetricExporterBuilder; class ConsolePushMetricExporterBuilder; class ExtensionPushMetricExporterBuilder; class PrometheusPullMetricExporterBuilder; @@ -31,6 +33,7 @@ class ExtensionPullMetricExporterBuilder; class OtlpHttpLogRecordExporterBuilder; class OtlpGrpcLogRecordExporterBuilder; +class OtlpFileLogRecordExporterBuilder; class ConsoleLogRecordExporterBuilder; class ExtensionLogRecordExporterBuilder; class ExtensionLogRecordProcessorBuilder; @@ -55,6 +58,12 @@ class Registry m_otlp_grpc_span_builder = builder; } + const OtlpFileSpanExporterBuilder *GetOtlpFileSpanBuilder() { return m_otlp_file_span_builder; } + void SetOtlpFileSpanBuilder(const OtlpFileSpanExporterBuilder *builder) + { + m_otlp_file_span_builder = builder; + } + const ConsoleSpanExporterBuilder *GetConsoleSpanBuilder() { return m_console_span_builder; } void SetConsoleSpanBuilder(const ConsoleSpanExporterBuilder *builder) { @@ -85,6 +94,15 @@ class Registry m_otlp_grpc_push_metric_builder = builder; } + const OtlpFilePushMetricExporterBuilder *GetOtlpFilePushMetricExporterBuilder() + { + return m_otlp_file_push_metric_builder; + } + void SetOtlpFilePushMetricExporterBuilder(const OtlpFilePushMetricExporterBuilder *builder) + { + m_otlp_file_push_metric_builder = builder; + } + const ConsolePushMetricExporterBuilder *GetConsolePushMetricExporterBuilder() { return m_console_metric_builder; @@ -121,6 +139,15 @@ class Registry m_otlp_grpc_log_record_builder = builder; } + const OtlpFileLogRecordExporterBuilder *GetOtlpFileLogRecordBuilder() + { + return m_otlp_file_log_record_builder; + } + void SetOtlpFileLogRecordBuilder(const OtlpFileLogRecordExporterBuilder *builder) + { + m_otlp_file_log_record_builder = builder; + } + const ConsoleLogRecordExporterBuilder *GetConsoleLogRecordBuilder() { return m_console_log_record_builder; @@ -169,16 +196,19 @@ class Registry private: const OtlpHttpSpanExporterBuilder *m_otlp_http_span_builder{nullptr}; const OtlpGrpcSpanExporterBuilder *m_otlp_grpc_span_builder{nullptr}; + const OtlpFileSpanExporterBuilder *m_otlp_file_span_builder{nullptr}; const ConsoleSpanExporterBuilder *m_console_span_builder{nullptr}; const ZipkinSpanExporterBuilder *m_zipkin_span_builder{nullptr}; const OtlpHttpPushMetricExporterBuilder *m_otlp_http_push_metric_builder{nullptr}; const OtlpGrpcPushMetricExporterBuilder *m_otlp_grpc_push_metric_builder{nullptr}; + const OtlpFilePushMetricExporterBuilder *m_otlp_file_push_metric_builder{nullptr}; const ConsolePushMetricExporterBuilder *m_console_metric_builder{nullptr}; const PrometheusPullMetricExporterBuilder *m_prometheus_metric_builder{nullptr}; const OtlpHttpLogRecordExporterBuilder *m_otlp_http_log_record_builder{nullptr}; const OtlpGrpcLogRecordExporterBuilder *m_otlp_grpc_log_record_builder{nullptr}; + const OtlpFileLogRecordExporterBuilder *m_otlp_file_log_record_builder{nullptr}; const ConsoleLogRecordExporterBuilder *m_console_log_record_builder{nullptr}; std::map m_propagator_builders; diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 8329c416a6..16441dc1fc 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -14,6 +14,9 @@ #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" @@ -80,6 +83,9 @@ class SdkBuilder std::unique_ptr CreateOtlpGrpcSpanExporter( const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const; + std::unique_ptr CreateOtlpFileSpanExporter( + const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) const; + std::unique_ptr CreateConsoleSpanExporter( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const; @@ -125,6 +131,10 @@ class SdkBuilder const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) const; + std::unique_ptr CreateOtlpFilePushMetricExporter( + const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) + const; + std::unique_ptr CreateConsolePushMetricExporter( const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) const; @@ -173,6 +183,9 @@ class SdkBuilder std::unique_ptr CreateOtlpGrpcLogRecordExporter( const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) const; + std::unique_ptr CreateOtlpFileLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration *model) const; + std::unique_ptr CreateConsoleLogRecordExporter( const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) const; diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index f0dc4e7e9e..83d2b8a09f 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -47,6 +47,9 @@ #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" @@ -62,18 +65,18 @@ #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/resource_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" -#include "opentelemetry/sdk/configuration/selector_configuration.h" #include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_limits_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" -#include "opentelemetry/sdk/configuration/stream_configuration.h" #include "opentelemetry/sdk/configuration/string_array_configuration.h" #include "opentelemetry/sdk/configuration/sum_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #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/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/version.h" @@ -177,6 +180,18 @@ ParseOtlpGrpcLogRecordExporterConfiguration(const std::unique_ptr return model; } +static std::unique_ptr +ParseOtlpFileLogRecordExporterConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new OtlpFileLogRecordExporterConfiguration); + std::unique_ptr child; + + model->output_stream = node->GetString("output_stream", ""); + + return model; +} + static std::unique_ptr ParseConsoleLogRecordExporterConfiguration(const std::unique_ptr & /* node */) { @@ -227,6 +242,10 @@ static std::unique_ptr ParseLogRecordExporterCon { model = ParseOtlpGrpcLogRecordExporterConfiguration(child); } + else if (name == "otlp_file/development") + { + model = ParseOtlpFileLogRecordExporterConfiguration(child); + } else if (name == "console") { model = ParseConsoleLogRecordExporterConfiguration(child); @@ -437,6 +456,24 @@ ParseOtlpGrpcPushMetricExporterConfiguration(const std::unique_ptr return model; } +static std::unique_ptr +ParseOtlpFilePushMetricExporterConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new OtlpFilePushMetricExporterConfiguration); + std::unique_ptr child; + + model->output_stream = node->GetString("output_stream", ""); + + model->temporality_preference = node->GetString("temporality_preference", ""); + + std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); + model->default_histogram_aggregation = + ParseDefaultHistogramAggregation(default_histogram_aggregation); + + return model; +} + static std::unique_ptr ParseConsolePushMetricExporterConfiguration(const std::unique_ptr & /* node */) { @@ -513,6 +550,10 @@ static std::unique_ptr ParsePushMetricExporterC { model = ParseOtlpGrpcPushMetricExporterConfiguration(child); } + else if (name == "otlp_file/development") + { + model = ParseOtlpFilePushMetricExporterConfiguration(child); + } else if (name == "console") { model = ParseConsolePushMetricExporterConfiguration(child); @@ -661,10 +702,10 @@ static enum_instrument_type ParseInstrumentType(const std::string &name) throw InvalidSchemaException("Illegal instrument_type"); } -static std::unique_ptr ParseSelectorConfiguration( +static std::unique_ptr ParseViewSelectorConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new SelectorConfiguration); + std::unique_ptr model(new ViewSelectorConfiguration); model->instrument_name = node->GetString("instrument_name", ""); @@ -801,10 +842,10 @@ static std::unique_ptr ParseAggregationConfiguration( return model; } -static std::unique_ptr ParseStreamConfiguration( +static std::unique_ptr ParseViewStreamConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new StreamConfiguration); + std::unique_ptr model(new ViewStreamConfiguration); std::unique_ptr child; model->name = node->GetString("name", ""); @@ -820,7 +861,7 @@ static std::unique_ptr ParseStreamConfiguration( if (child) { - OTEL_INTERNAL_LOG_ERROR("ParseStreamConfiguration: FIXME"); + OTEL_INTERNAL_LOG_ERROR("ParseViewStreamConfiguration: FIXME"); // Schema has changed #ifdef NEVER @@ -845,10 +886,10 @@ static std::unique_ptr ParseViewConfiguration( std::unique_ptr child; child = node->GetRequiredChildNode("selector"); - model->selector = ParseSelectorConfiguration(child); + model->selector = ParseViewSelectorConfiguration(child); child = node->GetRequiredChildNode("stream"); - model->stream = ParseStreamConfiguration(child); + model->stream = ParseViewStreamConfiguration(child); return model; } @@ -1130,6 +1171,17 @@ static std::unique_ptr ParseOtlpGrpcSpanExpor return model; } +static std::unique_ptr ParseOtlpFileSpanExporterConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new OtlpFileSpanExporterConfiguration); + std::unique_ptr child; + + model->output_stream = node->GetString("output_stream", ""); + + return model; +} + static std::unique_ptr ParseConsoleSpanExporterConfiguration( const std::unique_ptr & /* node */) { @@ -1189,6 +1241,10 @@ static std::unique_ptr ParseSpanExporterConfiguration { model = ParseOtlpGrpcSpanExporterConfiguration(child); } + else if (name == "otlp_file/development") + { + model = ParseOtlpFileSpanExporterConfiguration(child); + } else if (name == "console") { model = ParseConsoleSpanExporterConfiguration(child); @@ -1331,7 +1387,6 @@ static std::unique_ptr ParseAttributesConfiguration( std::unique_ptr value_child; std::unique_ptr type_child; std::string name; - std::string value; std::string type; for (auto it = node->begin(); it != node->end(); ++it) @@ -1342,8 +1397,7 @@ static std::unique_ptr ParseAttributesConfiguration( value_child = attribute_name_value->GetRequiredChildNode("value"); type_child = attribute_name_value->GetChildNode("type"); - name = name_child->AsString(); - value = value_child->AsString(); + name = name_child->AsString(); if (type_child) { type = type_child->AsString(); @@ -1355,6 +1409,8 @@ static std::unique_ptr ParseAttributesConfiguration( if (type == "string") { + std::string value; + value = value_child->AsString(); OTEL_INTERNAL_LOG_DEBUG("ParseAttributesConfiguration() name = " << name << ", value = " << value); std::pair entry(name, value); diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 9a7a9804f9..f50b0b7458 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -56,17 +56,17 @@ #include "opentelemetry/sdk/configuration/resource_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" -#include "opentelemetry/sdk/configuration/selector_configuration.h" #include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" -#include "opentelemetry/sdk/configuration/stream_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #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/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/console_log_record_exporter_builder.h" @@ -79,6 +79,9 @@ #include "opentelemetry/sdk/init/extension_sampler_builder.h" #include "opentelemetry/sdk/init/extension_span_exporter_builder.h" #include "opentelemetry/sdk/init/extension_span_processor_builder.h" +#include "opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/otlp_file_span_exporter_builder.h" #include "opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h" #include "opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h" #include "opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h" @@ -234,6 +237,12 @@ class SpanExporterBuilder exporter = m_sdk_builder->CreateOtlpGrpcSpanExporter(model); } + void VisitOtlpFile( + const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) override + { + exporter = m_sdk_builder->CreateOtlpFileSpanExporter(model); + } + void VisitConsole( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) override { @@ -304,6 +313,13 @@ class PushMetricExporterBuilder exporter = m_sdk_builder->CreateOtlpGrpcPushMetricExporter(model); } + void VisitOtlpFile( + const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) + override + { + exporter = m_sdk_builder->CreateOtlpFilePushMetricExporter(model); + } + void VisitConsole(const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) override { @@ -401,6 +417,12 @@ class LogRecordExporterBuilder exporter = m_sdk_builder->CreateOtlpGrpcLogRecordExporter(model); } + void VisitOtlpFile(const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration + *model) override + { + exporter = m_sdk_builder->CreateOtlpFileLogRecordExporter(model); + } + void VisitConsole(const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) override { @@ -524,7 +546,7 @@ std::unique_ptr SdkBuilder::CreateOtlpH builder = m_registry->GetOtlpHttpSpanBuilder(); if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered http builder"); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpHttpSpanExporter() using registered http builder"); sdk = builder->Build(model); return sdk; } @@ -543,7 +565,7 @@ std::unique_ptr SdkBuilder::CreateOtlpG builder = m_registry->GetOtlpGrpcSpanBuilder(); if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpSpanExporter() using registered grpc builder"); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpGrpcSpanExporter() using registered grpc builder"); sdk = builder->Build(model); return sdk; } @@ -553,6 +575,25 @@ std::unique_ptr SdkBuilder::CreateOtlpG throw UnsupportedException(die); } +std::unique_ptr SdkBuilder::CreateOtlpFileSpanExporter( + const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const OtlpFileSpanExporterBuilder *builder; + + builder = m_registry->GetOtlpFileSpanBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpFileSpanExporter() using registered file builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No builder for OtlpFileSpanExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); +} + std::unique_ptr SdkBuilder::CreateConsoleSpanExporter( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const { @@ -812,7 +853,7 @@ SdkBuilder::CreateOtlpHttpPushMetricExporter( builder = m_registry->GetOtlpHttpPushMetricExporterBuilder(); if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered http builder"); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpHttpPushMetricExporter() using registered http builder"); sdk = builder->Build(model); return sdk; } @@ -832,7 +873,7 @@ SdkBuilder::CreateOtlpGrpcPushMetricExporter( builder = m_registry->GetOtlpGrpcPushMetricExporterBuilder(); if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpPushMetricExporter() using registered grpc builder"); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpGrpcPushMetricExporter() using registered grpc builder"); sdk = builder->Build(model); return sdk; } @@ -842,6 +883,26 @@ SdkBuilder::CreateOtlpGrpcPushMetricExporter( throw UnsupportedException(die); } +std::unique_ptr +SdkBuilder::CreateOtlpFilePushMetricExporter( + const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const OtlpFilePushMetricExporterBuilder *builder; + + builder = m_registry->GetOtlpFilePushMetricExporterBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpFilePushMetricExporter() using registered file builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No file builder for OtlpPushMetricExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); +} + std::unique_ptr SdkBuilder::CreateConsolePushMetricExporter( const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) const @@ -1094,7 +1155,7 @@ SdkBuilder::CreateOtlpHttpLogRecordExporter( builder = m_registry->GetOtlpHttpLogRecordBuilder(); if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered http builder"); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpHttpLogRecordExporter() using registered http builder"); sdk = builder->Build(model); return sdk; } @@ -1114,8 +1175,7 @@ SdkBuilder::CreateOtlpGrpcLogRecordExporter( builder = m_registry->GetOtlpGrpcLogRecordBuilder(); if (builder != nullptr) { - builder = m_registry->GetOtlpGrpcLogRecordBuilder(); - OTEL_INTERNAL_LOG_DEBUG("CreateOtlpLogRecordExporter() using registered grpc builder"); + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpGrpcLogRecordExporter() using registered grpc builder"); sdk = builder->Build(model); return sdk; } @@ -1125,6 +1185,26 @@ SdkBuilder::CreateOtlpGrpcLogRecordExporter( throw UnsupportedException(die); } +std::unique_ptr +SdkBuilder::CreateOtlpFileLogRecordExporter( + const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration *model) const +{ + std::unique_ptr sdk; + const OtlpFileLogRecordExporterBuilder *builder; + + builder = m_registry->GetOtlpFileLogRecordBuilder(); + if (builder != nullptr) + { + OTEL_INTERNAL_LOG_DEBUG("CreateOtlpFileLogRecordExporter() using registered file builder"); + sdk = builder->Build(model); + return sdk; + } + + std::string die("No file builder for OtlpLogRecordExporter"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); +} + std::unique_ptr SdkBuilder::CreateConsoleLogRecordExporter( const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) const From e02c6bc7018cda6ddd668a61e63a74a775389344 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 28 May 2025 14:08:15 +0200 Subject: [PATCH 091/166] fix iwyu --- sdk/src/init/sdk_builder.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index f50b0b7458..891a434ab9 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -38,6 +38,9 @@ #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" From 4cb7089587336fe058395f407c0a5e5f14d1ac25 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 8 Jun 2025 20:57:38 +0200 Subject: [PATCH 092/166] Upgrade ryml to 0.9.0 --- ci/install_ryml.sh | 2 +- sdk/src/init/sdk_builder.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/install_ryml.sh b/ci/install_ryml.sh index 6f94229f9c..da48b79f4f 100755 --- a/ci/install_ryml.sh +++ b/ci/install_ryml.sh @@ -5,7 +5,7 @@ set -ex export DEBIAN_FRONTEND=noninteractive -[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.7.2" +[ -z "${RYML_VERSION}" ] && export RYML_VERSION="v0.9.0" BUILD_DIR=/tmp/ INSTALL_DIR=/usr/local/ diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 891a434ab9..b9b020e29b 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -1,7 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include #include #include #include @@ -12,6 +11,7 @@ #include "opentelemetry/context/propagation/composite_propagator.h" #include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" From d61edcd0d730054e60675301027883d000c30f35 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 9 Jun 2025 12:21:39 +0200 Subject: [PATCH 093/166] cleanup --- sdk/src/configuration/yaml_configuration_factory.cc | 1 - sdk/test/configuration/yaml_test.cc | 1 - 2 files changed, 2 deletions(-) diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index ca4b6dc130..f86f7bab5a 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -71,7 +71,6 @@ std::unique_ptr YamlConfigurationFactory::ParseString(const std:: const std::string &content) { std::unique_ptr doc; - std::unique_ptr root; std::unique_ptr config; doc = RymlParse(source, content); diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index aa0436790c..e3398a3d78 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -8,7 +8,6 @@ #include "opentelemetry/sdk/configuration/attribute_limits_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" From 2f52604ecfbb845fa92472fb75b3b7a8dd3c848b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 9 Jun 2025 14:03:56 +0200 Subject: [PATCH 094/166] fix iwyu --- sdk/src/configuration/yaml_configuration_factory.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_factory.cc index f86f7bab5a..991f1adaeb 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_factory.cc @@ -13,7 +13,6 @@ #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_factory.h" #include "opentelemetry/sdk/configuration/document.h" -#include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/ryml_document.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" #include "opentelemetry/version.h" From adba7de5b58ac3bf35a142fae6560585af0565af Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 10 Jun 2025 23:54:57 +0200 Subject: [PATCH 095/166] Code review comments, part 1 --- .../configuration/attributes_configuration.h | 1 + ...batch_log_record_processor_configuration.h | 2 + .../batch_span_processor_configuration.h | 2 + .../sdk/configuration/configuration.h | 5 +- .../sdk/configuration/configuration_factory.h | 2 - .../configuration/detectors_configuration.h | 1 + .../sdk/configuration/document.h | 1 + .../sdk/configuration/document_node.h | 36 +++---- ...cket_histogram_aggregation_configuration.h | 1 + ...ension_log_record_exporter_configuration.h | 3 + ...nsion_log_record_processor_configuration.h | 3 + ...nsion_pull_metric_exporter_configuration.h | 3 + ...nsion_push_metric_exporter_configuration.h | 3 + .../extension_sampler_configuration.h | 3 + .../extension_span_exporter_configuration.h | 3 + .../extension_span_processor_configuration.h | 3 + .../jaeger_remote_sampler_configuration.h | 3 + ...p_file_log_record_exporter_configuration.h | 4 +- ..._file_push_metric_exporter_configuration.h | 2 + .../otlp_file_span_exporter_configuration.h | 4 +- ...p_grpc_log_record_exporter_configuration.h | 3 + ..._grpc_push_metric_exporter_configuration.h | 3 + .../otlp_grpc_span_exporter_configuration.h | 3 + ...p_http_log_record_exporter_configuration.h | 3 + ..._http_push_metric_exporter_configuration.h | 3 + .../otlp_http_span_exporter_configuration.h | 3 + .../parent_based_sampler_configuration.h | 2 + .../periodic_metric_reader_configuration.h | 1 + ...theus_pull_metric_exporter_configuration.h | 2 + .../configuration/propagator_configuration.h | 3 + .../pull_metric_reader_configuration.h | 1 + .../configuration/resource_configuration.h | 3 + .../sdk/configuration/ryml_document.h | 5 +- .../sdk/configuration/ryml_document_node.h | 18 ++-- ...imple_log_record_processor_configuration.h | 2 + .../simple_span_processor_configuration.h | 2 + .../string_array_configuration.h | 2 + .../view_selector_configuration.h | 1 + .../configuration/view_stream_configuration.h | 2 + .../yaml_configuration_factory.h | 1 - sdk/src/configuration/ryml_document.cc | 2 +- sdk/src/configuration/ryml_document_node.cc | 98 +++++++++---------- 42 files changed, 157 insertions(+), 91 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h index 25153665ab..44c3bb2818 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h index b7d2592789..6a4c736c5e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h index 7dd563500e..7f1eff2d51 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h index a633c65516..e92d5850e0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include "opentelemetry/sdk/configuration/attribute_limits_configuration.h" @@ -46,7 +47,7 @@ namespace configuration class Configuration { public: - Configuration(std::unique_ptr doc) : m_doc(std::move(doc)) {} + Configuration(std::unique_ptr doc) : doc_(std::move(doc)) {} ~Configuration() = default; std::string file_format; @@ -62,7 +63,7 @@ class Configuration // Ignored: instrumentation private: - std::unique_ptr m_doc; + std::unique_ptr doc_; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h index 985bf6b538..54ab49efb5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h @@ -3,9 +3,7 @@ #pragma once -#include #include -#include #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/document_node.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h b/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h index 024ab78655..81a71a8320 100644 --- a/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include "opentelemetry/sdk/configuration/string_array_configuration.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/document.h b/sdk/include/opentelemetry/sdk/configuration/document.h index aa55943a38..8d6d9055a9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document.h +++ b/sdk/include/opentelemetry/sdk/configuration/document.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include "opentelemetry/sdk/configuration/document_node.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index ac7657de05..039c624076 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -94,58 +94,52 @@ class PropertiesNodeConstIteratorImpl class DocumentNodeConstIterator { public: - DocumentNodeConstIterator(DocumentNodeConstIteratorImpl *impl) : m_impl(impl) {} - ~DocumentNodeConstIterator() { delete m_impl; } + DocumentNodeConstIterator(DocumentNodeConstIteratorImpl *impl) : impl_(impl) {} + ~DocumentNodeConstIterator() { delete impl_; } - bool operator==(const DocumentNodeConstIterator &rhs) const - { - return (m_impl->Equal(rhs.m_impl)); - } + bool operator==(const DocumentNodeConstIterator &rhs) const { return (impl_->Equal(rhs.impl_)); } - bool operator!=(const DocumentNodeConstIterator &rhs) const - { - return (!m_impl->Equal(rhs.m_impl)); - } + bool operator!=(const DocumentNodeConstIterator &rhs) const { return (!impl_->Equal(rhs.impl_)); } - std::unique_ptr operator*() const { return m_impl->Item(); } + std::unique_ptr operator*() const { return impl_->Item(); } DocumentNodeConstIterator &operator++() { - m_impl->Next(); + impl_->Next(); return *this; } private: - DocumentNodeConstIteratorImpl *m_impl; + DocumentNodeConstIteratorImpl *impl_; }; class PropertiesNodeConstIterator { public: - PropertiesNodeConstIterator(PropertiesNodeConstIteratorImpl *impl) : m_impl(impl) {} - ~PropertiesNodeConstIterator() { delete m_impl; } + PropertiesNodeConstIterator(PropertiesNodeConstIteratorImpl *impl) : impl_(impl) {} + ~PropertiesNodeConstIterator() { delete impl_; } bool operator==(const PropertiesNodeConstIterator &rhs) const { - return (m_impl->Equal(rhs.m_impl)); + return (impl_->Equal(rhs.impl_)); } bool operator!=(const PropertiesNodeConstIterator &rhs) const { - return (!m_impl->Equal(rhs.m_impl)); + return (!impl_->Equal(rhs.impl_)); } - std::string Name() const { return m_impl->Name(); } - std::unique_ptr Value() const { return m_impl->Value(); } + std::string Name() const { return impl_->Name(); } + std::unique_ptr Value() const { return impl_->Value(); } PropertiesNodeConstIterator &operator++() { - m_impl->Next(); + impl_->Next(); return *this; } private: - PropertiesNodeConstIteratorImpl *m_impl; + PropertiesNodeConstIteratorImpl *impl_; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h index 3419fea64d..2d501ce2d7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h index d68c3b7d39..534460ee59 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h index 23d6558a19..50547571fa 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h index cde2b0aa2d..23d7d1cd08 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h index 05e71090b8..a47690cc8b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h index e2347910a1..b2c8a31678 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h index b2993ecaaa..0238b8528e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h index f1eba5952b..cf5fc7cf11 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h index 6a518d2f8c..5b08447a5f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h index 24d9035cbf..cd82a489d3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h @@ -3,12 +3,12 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" #include "opentelemetry/version.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h index abfd97d871..45bb64c7eb 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h index 53a222d4ee..4d19069dc7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h @@ -3,12 +3,12 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/version.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h index 1aee1c8df8..1a259ff237 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h index e7472cac3d..34f15d1dff 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h index da7b1afa49..78afdc5643 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h index 11f02f577e..ce20685d1e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h index 83f57ef3c7..81d7af86cb 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_encoding.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h index 9969017214..6ec379a8e2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h index a5a1079262..39d46d7a40 100644 --- a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index f6b56601be..0167d481fa 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include "opentelemetry/sdk/configuration/metric_producer_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h index 9c77d2366f..e743feff76 100644 --- a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h index 3aa3a063ef..2927781978 100644 --- a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index 360703926b..d87b1db453 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include "opentelemetry/sdk/configuration/metric_producer_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h index 12dd60131e..ae84680b42 100644 --- a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/detectors_configuration.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h index a6fe7658d7..1cc087a37f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include @@ -21,13 +22,13 @@ class RymlDocument : public Document public: static std::unique_ptr Parse(const std::string &source, const std::string &content); - RymlDocument(ryml::Tree tree) : m_tree(tree) {} + RymlDocument(ryml::Tree tree) : tree_(tree) {} ~RymlDocument() override = default; std::unique_ptr GetRootNode() override; private: - ryml::Tree m_tree; + ryml::Tree tree_; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index 824fc6fb64..3f29a8515b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -20,7 +20,7 @@ namespace configuration class RymlDocumentNode : public DocumentNode { public: - RymlDocumentNode(ryml::ConstNodeRef node, size_t depth) : m_node(node), m_depth(depth) {} + RymlDocumentNode(ryml::ConstNodeRef node, size_t depth) : node_(node), depth_(depth) {} ~RymlDocumentNode() override = default; std::string Key() const override; @@ -60,8 +60,8 @@ class RymlDocumentNode : public DocumentNode ryml::ConstNodeRef GetRequiredRymlChildNode(const std::string &name); ryml::ConstNodeRef GetRymlChildNode(const std::string &name); - ryml::ConstNodeRef m_node; - size_t m_depth; + ryml::ConstNodeRef node_; + size_t depth_; }; class RymlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl @@ -75,9 +75,9 @@ class RymlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl bool Equal(const DocumentNodeConstIteratorImpl *rhs) const override; private: - ryml::ConstNodeRef m_parent; - size_t m_index; - size_t m_depth; + ryml::ConstNodeRef parent_; + size_t index_; + size_t depth_; }; class RymlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorImpl @@ -92,9 +92,9 @@ class RymlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorIm bool Equal(const PropertiesNodeConstIteratorImpl *rhs) const override; private: - ryml::ConstNodeRef m_parent; - size_t m_index; - size_t m_depth; + ryml::ConstNodeRef parent_; + size_t index_; + size_t depth_; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h index aed3a3680c..914d9b09f4 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h index 91ed84ec02..bb38cdeb97 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h index 81427caf06..8127271299 100644 --- a/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h @@ -4,6 +4,8 @@ #pragma once #include +#include +#include #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h index fd6cbc34c9..c8e6be2b06 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h index 969905a52b..8b118862de 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h @@ -4,6 +4,8 @@ #pragma once #include +#include +#include #include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h index 5666df7c3f..b0add0c728 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h @@ -3,7 +3,6 @@ #pragma once -#include #include #include diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index eadd25a859..cb31c893b9 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -79,7 +79,7 @@ std::unique_ptr RymlDocument::Parse(const std::string &source, const s std::unique_ptr RymlDocument::GetRootNode() { - RymlDocumentNode *ryml_node = new RymlDocumentNode(m_tree.rootref(), 0); + RymlDocumentNode *ryml_node = new RymlDocumentNode(tree_.rootref(), 0); std::unique_ptr node(ryml_node); return node; } diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index d1b1b2aba0..ea9397b725 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -51,13 +51,13 @@ std::string RymlDocumentNode::Key() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::Key()"); - if (!m_node.has_key()) + if (!node_.has_key()) { OTEL_INTERNAL_LOG_ERROR("Yaml: no key"); throw InvalidSchemaException(""); } - ryml::csubstr k = m_node.key(); + ryml::csubstr k = node_.key(); std::string name(k.str, k.len); return name; } @@ -66,12 +66,12 @@ bool RymlDocumentNode::AsBoolean() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsBoolean()"); - if (!m_node.is_val() && !m_node.is_keyval()) + if (!node_.is_val() && !node_.is_keyval()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); throw InvalidSchemaException(""); } - ryml::csubstr view = m_node.val(); + ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return BooleanFromString(value); } @@ -80,12 +80,12 @@ size_t RymlDocumentNode::AsInteger() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsInteger()"); - if (!m_node.is_val() && !m_node.is_keyval()) + if (!node_.is_val() && !node_.is_keyval()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); throw InvalidSchemaException(""); } - ryml::csubstr view = m_node.val(); + ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return IntegerFromString(value); } @@ -94,12 +94,12 @@ double RymlDocumentNode::AsDouble() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsDouble()"); - if (!m_node.is_val() && !m_node.is_keyval()) + if (!node_.is_val() && !node_.is_keyval()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); throw InvalidSchemaException(""); } - ryml::csubstr view = m_node.val(); + ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return DoubleFromString(value); } @@ -108,73 +108,73 @@ std::string RymlDocumentNode::AsString() { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsString()"); - if (!m_node.is_val() && !m_node.is_keyval()) + if (!node_.is_val() && !node_.is_keyval()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); throw InvalidSchemaException(""); } - ryml::csubstr view = m_node.val(); + ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return value; } ryml::ConstNodeRef RymlDocumentNode::GetRequiredRymlChildNode(const std::string &name) { - if (!m_node.is_map()) + if (!node_.is_map()) { OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); throw InvalidSchemaException(name); } const char *name_str = name.c_str(); - if (!m_node.has_child(name_str)) + if (!node_.has_child(name_str)) { OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); throw InvalidSchemaException(name); } - ryml::ConstNodeRef ryml_child = m_node[name_str]; + ryml::ConstNodeRef ryml_child = node_[name_str]; return ryml_child; } ryml::ConstNodeRef RymlDocumentNode::GetRymlChildNode(const std::string &name) { - if (!m_node.is_map()) + if (!node_.is_map()) { return ryml::ConstNodeRef{}; } const char *name_str = name.c_str(); - if (!m_node.has_child(name_str)) + if (!node_.has_child(name_str)) { return ryml::ConstNodeRef{}; } - ryml::ConstNodeRef ryml_child = m_node[name_str]; + ryml::ConstNodeRef ryml_child = node_[name_str]; return ryml_child; } std::unique_ptr RymlDocumentNode::GetRequiredChildNode(const std::string &name) { - OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredChildNode(" << m_depth << ", " << name + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredChildNode(" << depth_ << ", " << name << ")"); - if (m_depth >= MAX_NODE_DEPTH) + if (depth_ >= MAX_NODE_DEPTH) { OTEL_INTERNAL_LOG_ERROR("Yaml nested too deeply " << name); throw InvalidSchemaException(name); } auto ryml_child = GetRequiredRymlChildNode(name); - auto child = std::unique_ptr(new RymlDocumentNode(ryml_child, m_depth + 1)); + auto child = std::unique_ptr(new RymlDocumentNode(ryml_child, depth_ + 1)); return child; } std::unique_ptr RymlDocumentNode::GetChildNode(const std::string &name) { - OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetChildNode(" << m_depth << ", " << name << ")"); + OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetChildNode(" << depth_ << ", " << name << ")"); - if (m_depth >= MAX_NODE_DEPTH) + if (depth_ >= MAX_NODE_DEPTH) { OTEL_INTERNAL_LOG_ERROR("Yaml nested too deeply " << name); throw InvalidSchemaException(name); @@ -182,19 +182,19 @@ std::unique_ptr RymlDocumentNode::GetChildNode(const std::string & std::unique_ptr child; - if (!m_node.is_map()) + if (!node_.is_map()) { return child; } const char *name_str = name.c_str(); - if (!m_node.has_child(name_str)) + if (!node_.has_child(name_str)) { return child; } - ryml::ConstNodeRef ryml_child = m_node[name_str]; - child = std::unique_ptr(new RymlDocumentNode(ryml_child, m_depth + 1)); + ryml::ConstNodeRef ryml_child = node_[name_str]; + child = std::unique_ptr(new RymlDocumentNode(ryml_child, depth_ + 1)); return child; } @@ -355,15 +355,15 @@ DocumentNodeConstIterator RymlDocumentNode::begin() const OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin()"); #ifdef WITH_DEBUG_NODE - DebugNode("::begin()", m_node); + DebugNode("::begin()", node_); - for (int index = 0; index < m_node.num_children(); index++) + for (int index = 0; index < node_.num_children(); index++) { - DebugNode("(child)", m_node[index]); + DebugNode("(child)", node_[index]); } #endif // WITH_DEBUG_NODE - return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(m_node, 0, m_depth)); + return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(node_, 0, depth_)); } DocumentNodeConstIterator RymlDocumentNode::end() const @@ -371,19 +371,19 @@ DocumentNodeConstIterator RymlDocumentNode::end() const OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end()"); return DocumentNodeConstIterator( - new RymlDocumentNodeConstIteratorImpl(m_node, m_node.num_children(), m_depth)); + new RymlDocumentNodeConstIteratorImpl(node_, node_.num_children(), depth_)); } size_t RymlDocumentNode::num_children() const { - return m_node.num_children(); + return node_.num_children(); } std::unique_ptr RymlDocumentNode::GetChild(size_t index) const { std::unique_ptr child; - ryml::ConstNodeRef ryml_child = m_node[index]; - child = std::unique_ptr(new RymlDocumentNode(ryml_child, m_depth + 1)); + ryml::ConstNodeRef ryml_child = node_[index]; + child = std::unique_ptr(new RymlDocumentNode(ryml_child, depth_ + 1)); return child; } @@ -392,15 +392,15 @@ PropertiesNodeConstIterator RymlDocumentNode::begin_properties() const OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::begin_properties()"); #ifdef WITH_DEBUG_NODE - DebugNode("::begin_properties()", m_node); + DebugNode("::begin_properties()", node_); - for (int index = 0; index < m_node.num_children(); index++) + for (int index = 0; index < node_.num_children(); index++) { - DebugNode("(child)", m_node[index]); + DebugNode("(child)", node_[index]); } #endif // WITH_DEBUG_NODE - return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(m_node, 0, m_depth)); + return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(node_, 0, depth_)); } PropertiesNodeConstIterator RymlDocumentNode::end_properties() const @@ -408,7 +408,7 @@ PropertiesNodeConstIterator RymlDocumentNode::end_properties() const OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end_properties()"); return PropertiesNodeConstIterator( - new RymlPropertiesNodeConstIteratorImpl(m_node, m_node.num_children(), m_depth)); + new RymlPropertiesNodeConstIteratorImpl(node_, node_.num_children(), depth_)); } std::string RymlDocumentNode::Dump() const @@ -419,26 +419,26 @@ std::string RymlDocumentNode::Dump() const RymlDocumentNodeConstIteratorImpl::RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index, size_t depth) - : m_parent(parent), m_index(index), m_depth(depth) + : parent_(parent), index_(index), depth_(depth) {} RymlDocumentNodeConstIteratorImpl::~RymlDocumentNodeConstIteratorImpl() {} void RymlDocumentNodeConstIteratorImpl::Next() { - ++m_index; + ++index_; } std::unique_ptr RymlDocumentNodeConstIteratorImpl::Item() const { std::unique_ptr item; - ryml::ConstNodeRef ryml_item = m_parent[m_index]; + ryml::ConstNodeRef ryml_item = parent_[index_]; if (ryml_item.invalid()) { OTEL_INTERNAL_LOG_ERROR("iterator is lost "); // Throw } - item = std::unique_ptr(new RymlDocumentNode(ryml_item, m_depth + 1)); + item = std::unique_ptr(new RymlDocumentNode(ryml_item, depth_ + 1)); return item; } @@ -446,13 +446,13 @@ bool RymlDocumentNodeConstIteratorImpl::Equal(const DocumentNodeConstIteratorImp { const RymlDocumentNodeConstIteratorImpl *other = static_cast(rhs); - return m_index == other->m_index; + return index_ == other->index_; } RymlPropertiesNodeConstIteratorImpl::RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index, size_t depth) - : m_parent(parent), m_index(index), m_depth(depth) + : parent_(parent), index_(index), depth_(depth) {} RymlPropertiesNodeConstIteratorImpl::~RymlPropertiesNodeConstIteratorImpl() {} @@ -460,12 +460,12 @@ RymlPropertiesNodeConstIteratorImpl::~RymlPropertiesNodeConstIteratorImpl() {} void RymlPropertiesNodeConstIteratorImpl::Next() { OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Next()"); - ++m_index; + ++index_; } std::string RymlPropertiesNodeConstIteratorImpl::Name() const { - ryml::ConstNodeRef ryml_item = m_parent[m_index]; + ryml::ConstNodeRef ryml_item = parent_[index_]; // FIXME: check there is a key() ryml::csubstr k = ryml_item.key(); std::string name(k.str, k.len); @@ -479,8 +479,8 @@ std::unique_ptr RymlPropertiesNodeConstIteratorImpl::Value() const { std::unique_ptr item; - ryml::ConstNodeRef ryml_item = m_parent[m_index]; - item = std::unique_ptr(new RymlDocumentNode(ryml_item, m_depth + 1)); + ryml::ConstNodeRef ryml_item = parent_[index_]; + item = std::unique_ptr(new RymlDocumentNode(ryml_item, depth_ + 1)); OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Value()"); @@ -491,7 +491,7 @@ bool RymlPropertiesNodeConstIteratorImpl::Equal(const PropertiesNodeConstIterato { const RymlPropertiesNodeConstIteratorImpl *other = static_cast(rhs); - return m_index == other->m_index; + return index_ == other->index_; } } // namespace configuration From 4bdb337c7042078c3dad1a9286368763e3d30e89 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 26 Jun 2025 23:01:35 +0200 Subject: [PATCH 096/166] clang-tidy cleanup --- .../configuration/aggregation_configuration.h | 13 +++-- .../aggregation_configuration_visitor.h | 44 ++++++++++++++++ .../always_off_sampler_configuration.h | 3 -- .../always_on_sampler_configuration.h | 3 -- .../attribute_limits_configuration.h | 4 +- ...cket_histogram_aggregation_configuration.h | 13 ++--- ...batch_log_record_processor_configuration.h | 11 ++-- .../batch_span_processor_configuration.h | 11 ++-- .../sdk/configuration/configuration.h | 6 ++- ...onsole_log_record_exporter_configuration.h | 3 -- ...nsole_push_metric_exporter_configuration.h | 3 -- .../console_span_exporter_configuration.h | 3 -- .../default_aggregation_configuration.h | 9 ++-- ...tion.h => default_histogram_aggregation.h} | 4 +- .../sdk/configuration/document.h | 8 ++- .../sdk/configuration/document_node.h | 52 +++++++++++++------ .../drop_aggregation_configuration.h | 6 +-- ...cket_histogram_aggregation_configuration.h | 8 +-- ...ension_log_record_exporter_configuration.h | 3 -- ...nsion_log_record_processor_configuration.h | 3 -- ...nsion_pull_metric_exporter_configuration.h | 3 -- ...nsion_push_metric_exporter_configuration.h | 3 -- .../extension_sampler_configuration.h | 5 +- .../extension_span_exporter_configuration.h | 3 -- .../extension_span_processor_configuration.h | 3 -- .../configuration/invalid_schema_exception.h | 8 ++- .../jaeger_remote_sampler_configuration.h | 5 +- .../last_value_aggregation_configuration.h | 9 ++-- .../log_record_exporter_configuration.h | 8 ++- ...og_record_exporter_configuration_visitor.h | 10 +++- .../log_record_limits_configuration.h | 4 +- .../log_record_processor_configuration.h | 7 ++- ...g_record_processor_configuration_visitor.h | 10 +++- .../metric_producer_configuration.h | 10 ++-- .../metric_reader_configuration.h | 10 ++-- .../metric_reader_configuration_visitor.h | 7 ++- ...p_file_log_record_exporter_configuration.h | 3 -- ..._file_push_metric_exporter_configuration.h | 5 +- .../otlp_file_span_exporter_configuration.h | 3 -- ...p_grpc_log_record_exporter_configuration.h | 5 +- ..._grpc_push_metric_exporter_configuration.h | 7 +-- .../otlp_grpc_span_exporter_configuration.h | 5 +- .../sdk/configuration/otlp_http_encoding.h | 4 +- ...p_http_log_record_exporter_configuration.h | 5 +- ..._http_push_metric_exporter_configuration.h | 7 +-- .../otlp_http_span_exporter_configuration.h | 5 +- .../parent_based_sampler_configuration.h | 3 -- .../periodic_metric_reader_configuration.h | 7 +-- ...theus_pull_metric_exporter_configuration.h | 5 +- .../configuration/propagator_configuration.h | 3 -- .../pull_metric_exporter_configuration.h | 7 ++- ...ll_metric_exporter_configuration_visitor.h | 10 +++- .../pull_metric_reader_configuration.h | 3 -- .../push_metric_exporter_configuration.h | 7 ++- ...sh_metric_exporter_configuration_visitor.h | 10 +++- .../sdk/configuration/ryml_document.h | 8 ++- .../sdk/configuration/ryml_document_node.h | 46 +++++++++++----- .../sdk/configuration/sampler_configuration.h | 8 ++- .../sampler_configuration_visitor.h | 8 ++- ...imple_log_record_processor_configuration.h | 4 +- .../simple_span_processor_configuration.h | 4 +- .../span_exporter_configuration.h | 8 ++- .../span_exporter_configuration_visitor.h | 7 ++- .../configuration/span_limits_configuration.h | 12 ++--- .../span_processor_configuration.h | 8 ++- .../span_processor_configuration_visitor.h | 7 ++- .../sum_aggregation_configuration.h | 6 +-- ...ace_id_ratio_based_sampler_configuration.h | 3 -- .../sdk/configuration/view_configuration.h | 3 -- .../view_selector_configuration.h | 11 ++-- .../configuration/view_stream_configuration.h | 5 +- .../zipkin_span_exporter_configuration.h | 5 +- .../configuration/configuration_factory.cc | 2 +- 73 files changed, 332 insertions(+), 242 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/aggregation_configuration_visitor.h rename sdk/include/opentelemetry/sdk/configuration/{exporter_default_histogram_aggregation.h => default_histogram_aggregation.h} (82%) diff --git a/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h index 65b14532c4..8be26c3e51 100644 --- a/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h @@ -3,8 +3,6 @@ #pragma once -#include - #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -12,14 +10,21 @@ namespace sdk { namespace configuration { +class AggregationConfigurationVisitor; // YAML-SCHEMA: schema/meter_provider.json // YAML-NODE: aggregation class AggregationConfiguration { public: - AggregationConfiguration() = default; - virtual ~AggregationConfiguration() = default; + AggregationConfiguration() = default; + AggregationConfiguration(AggregationConfiguration &&) = default; + AggregationConfiguration(const AggregationConfiguration &) = default; + AggregationConfiguration &operator=(AggregationConfiguration &&) = default; + AggregationConfiguration &operator=(const AggregationConfiguration &other) = default; + virtual ~AggregationConfiguration() = default; + + virtual void Accept(AggregationConfigurationVisitor *visitor) const = 0; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration_visitor.h new file mode 100644 index 0000000000..3311ec1e19 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/aggregation_configuration_visitor.h @@ -0,0 +1,44 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class Base2ExponentialBucketHistogramAggregationConfiguration; +class DefaultAggregationConfiguration; +class DropAggregationConfiguration; +class ExplicitBucketHistogramAggregationConfiguration; +class LastValueAggregationConfiguration; +class SumAggregationConfiguration; + +class AggregationConfigurationVisitor +{ +public: + AggregationConfigurationVisitor() = default; + AggregationConfigurationVisitor(AggregationConfigurationVisitor &&) = default; + AggregationConfigurationVisitor(const AggregationConfigurationVisitor &) = default; + AggregationConfigurationVisitor &operator=(AggregationConfigurationVisitor &&) = default; + AggregationConfigurationVisitor &operator=(const AggregationConfigurationVisitor &other) = + default; + virtual ~AggregationConfigurationVisitor() = default; + + virtual void VisitBase2ExponentialBucketHistogram( + const Base2ExponentialBucketHistogramAggregationConfiguration *model) = 0; + virtual void VisitDefault(const DefaultAggregationConfiguration *model) = 0; + virtual void VisitDrop(const DropAggregationConfiguration *model) = 0; + virtual void VisitExplicitBucketHistogram( + const ExplicitBucketHistogramAggregationConfiguration *model) = 0; + virtual void VisitLastValue(const LastValueAggregationConfiguration *model) = 0; + virtual void VisitSum(const SumAggregationConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h index 8f9156ae91..31ac98895f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h @@ -18,9 +18,6 @@ namespace configuration class AlwaysOffSamplerConfiguration : public SamplerConfiguration { public: - AlwaysOffSamplerConfiguration() = default; - ~AlwaysOffSamplerConfiguration() override = default; - void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitAlwaysOff(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h index c6cd99e078..1e8ef97c68 100644 --- a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h @@ -18,9 +18,6 @@ namespace configuration class AlwaysOnSamplerConfiguration : public SamplerConfiguration { public: - AlwaysOnSamplerConfiguration() = default; - ~AlwaysOnSamplerConfiguration() override = default; - void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitAlwaysOn(this); } }; diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h index 33f9df9417..69f311575c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h @@ -18,8 +18,8 @@ namespace configuration class AttributeLimitsConfiguration { public: - size_t attribute_value_length_limit; - size_t attribute_count_limit; + std::size_t attribute_value_length_limit; + std::size_t attribute_count_limit; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h index 494f1b63be..86d87f8393 100644 --- a/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h @@ -3,9 +3,8 @@ #pragma once -#include - #include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,11 +18,13 @@ namespace configuration class Base2ExponentialBucketHistogramAggregationConfiguration : public AggregationConfiguration { public: - Base2ExponentialBucketHistogramAggregationConfiguration() = default; - ~Base2ExponentialBucketHistogramAggregationConfiguration() override = default; + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitBase2ExponentialBucketHistogram(this); + } - size_t max_scale{0}; - size_t max_size{0}; + std::size_t max_scale{0}; + std::size_t max_size{0}; bool record_min_max{false}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h index 6a4c736c5e..17570f0552 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h @@ -21,18 +21,15 @@ namespace configuration class BatchLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration { public: - BatchLogRecordProcessorConfiguration() = default; - ~BatchLogRecordProcessorConfiguration() override = default; - void Accept(LogRecordProcessorConfigurationVisitor *visitor) const override { visitor->VisitBatch(this); } - size_t schedule_delay{0}; - size_t export_timeout{0}; - size_t max_queue_size{0}; - size_t max_export_batch_size{0}; + std::size_t schedule_delay{0}; + std::size_t export_timeout{0}; + std::size_t max_queue_size{0}; + std::size_t max_export_batch_size{0}; std::unique_ptr exporter; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h index 7f1eff2d51..1230f616a2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -21,18 +21,15 @@ namespace configuration class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration { public: - BatchSpanProcessorConfiguration() = default; - ~BatchSpanProcessorConfiguration() override = default; - void Accept(SpanProcessorConfigurationVisitor *visitor) const override { visitor->VisitBatch(this); } - size_t schedule_delay{0}; - size_t export_timeout{0}; - size_t max_queue_size{0}; - size_t max_export_batch_size{0}; + std::size_t schedule_delay{0}; + std::size_t export_timeout{0}; + std::size_t max_queue_size{0}; + std::size_t max_export_batch_size{0}; std::unique_ptr exporter; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h index e92d5850e0..d24cffe8bf 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -48,7 +48,11 @@ class Configuration { public: Configuration(std::unique_ptr doc) : doc_(std::move(doc)) {} - ~Configuration() = default; + Configuration(Configuration &&) = delete; + Configuration(const Configuration &) = delete; + Configuration &operator=(Configuration &&) = delete; + Configuration &operator=(const Configuration &other) = delete; + ~Configuration() = default; std::string file_format; bool disabled{false}; diff --git a/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h index 8175f01fc0..89bd2b0893 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h @@ -18,9 +18,6 @@ namespace configuration class ConsoleLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: - ConsoleLogRecordExporterConfiguration() = default; - ~ConsoleLogRecordExporterConfiguration() override = default; - void Accept(LogRecordExporterConfigurationVisitor *visitor) const override { visitor->VisitConsole(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h index 16b5bea296..e36e3a961f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h @@ -19,9 +19,6 @@ namespace configuration class ConsolePushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: - ConsolePushMetricExporterConfiguration() = default; - ~ConsolePushMetricExporterConfiguration() override = default; - void Accept(PushMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitConsole(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h index 98735a8fae..a1750d0f2c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h @@ -18,9 +18,6 @@ namespace configuration class ConsoleSpanExporterConfiguration : public SpanExporterConfiguration { public: - ConsoleSpanExporterConfiguration() = default; - ~ConsoleSpanExporterConfiguration() override = default; - void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitConsole(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h index b55a3d6c6c..357578a211 100644 --- a/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h @@ -3,9 +3,8 @@ #pragma once -#include - #include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,8 +18,10 @@ namespace configuration class DefaultAggregationConfiguration : public AggregationConfiguration { public: - DefaultAggregationConfiguration() = default; - ~DefaultAggregationConfiguration() override = default; + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitDefault(this); + } }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h b/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h similarity index 82% rename from sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h rename to sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h index 71fe31bb01..73ee11d38c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h +++ b/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -11,7 +13,7 @@ namespace sdk namespace configuration { -enum enum_default_histogram_aggregation +enum enum_default_histogram_aggregation : std::uint8_t { explicit_bucket_histogram, base2_exponential_bucket_histogram diff --git a/sdk/include/opentelemetry/sdk/configuration/document.h b/sdk/include/opentelemetry/sdk/configuration/document.h index 8d6d9055a9..f444279f8e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document.h +++ b/sdk/include/opentelemetry/sdk/configuration/document.h @@ -18,8 +18,12 @@ namespace configuration class Document { public: - Document() = default; - virtual ~Document() = default; + Document() = default; + Document(Document &&) = default; + Document(const Document &) = default; + Document &operator=(Document &&) = default; + Document &operator=(const Document &other) = default; + virtual ~Document() = default; virtual std::unique_ptr GetRootNode() = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 039c624076..090052c219 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -21,17 +21,21 @@ class DocumentNode { public: // FIXME: proper sizing - static constexpr size_t MAX_NODE_DEPTH = 100; + static constexpr std::size_t MAX_NODE_DEPTH = 100; - DocumentNode() = default; - virtual ~DocumentNode() = default; + DocumentNode() = default; + DocumentNode(DocumentNode &&) = default; + DocumentNode(const DocumentNode &) = default; + DocumentNode &operator=(DocumentNode &&) = default; + DocumentNode &operator=(const DocumentNode &other) = default; + virtual ~DocumentNode() = default; virtual std::string Key() const = 0; - virtual bool AsBoolean() = 0; - virtual size_t AsInteger() = 0; - virtual double AsDouble() = 0; - virtual std::string AsString() = 0; + virtual bool AsBoolean() = 0; + virtual std::size_t AsInteger() = 0; + virtual double AsDouble() = 0; + virtual std::string AsString() = 0; virtual std::unique_ptr GetRequiredChildNode(const std::string &name) = 0; virtual std::unique_ptr GetChildNode(const std::string &name) = 0; @@ -39,8 +43,8 @@ class DocumentNode virtual bool GetRequiredBoolean(const std::string &name) = 0; virtual bool GetBoolean(const std::string &name, bool default_value) = 0; - virtual size_t GetRequiredInteger(const std::string &name) = 0; - virtual size_t GetInteger(const std::string &name, size_t default_value) = 0; + virtual std::size_t GetRequiredInteger(const std::string &name) = 0; + virtual std::size_t GetInteger(const std::string &name, std::size_t default_value) = 0; virtual double GetRequiredDouble(const std::string &name) = 0; virtual double GetDouble(const std::string &name, double default_value) = 0; @@ -51,8 +55,8 @@ class DocumentNode virtual DocumentNodeConstIterator begin() const = 0; virtual DocumentNodeConstIterator end() const = 0; - virtual size_t num_children() const = 0; - virtual std::unique_ptr GetChild(size_t index) const = 0; + virtual std::size_t num_children() const = 0; + virtual std::unique_ptr GetChild(std::size_t index) const = 0; virtual PropertiesNodeConstIterator begin_properties() const = 0; virtual PropertiesNodeConstIterator end_properties() const = 0; @@ -64,15 +68,19 @@ class DocumentNode std::string DoOneSubstitution(const std::string &text); bool BooleanFromString(const std::string &value); - size_t IntegerFromString(const std::string &value); + std::size_t IntegerFromString(const std::string &value); double DoubleFromString(const std::string &value); }; class DocumentNodeConstIteratorImpl { public: - DocumentNodeConstIteratorImpl() = default; - virtual ~DocumentNodeConstIteratorImpl() = default; + DocumentNodeConstIteratorImpl() = default; + DocumentNodeConstIteratorImpl(DocumentNodeConstIteratorImpl &&) = default; + DocumentNodeConstIteratorImpl(const DocumentNodeConstIteratorImpl &) = default; + DocumentNodeConstIteratorImpl &operator=(DocumentNodeConstIteratorImpl &&) = default; + DocumentNodeConstIteratorImpl &operator=(const DocumentNodeConstIteratorImpl &other) = default; + virtual ~DocumentNodeConstIteratorImpl() = default; virtual void Next() = 0; virtual std::unique_ptr Item() const = 0; @@ -82,7 +90,12 @@ class DocumentNodeConstIteratorImpl class PropertiesNodeConstIteratorImpl { public: - PropertiesNodeConstIteratorImpl() = default; + PropertiesNodeConstIteratorImpl() = default; + PropertiesNodeConstIteratorImpl(PropertiesNodeConstIteratorImpl &&) = default; + PropertiesNodeConstIteratorImpl(const PropertiesNodeConstIteratorImpl &) = default; + PropertiesNodeConstIteratorImpl &operator=(PropertiesNodeConstIteratorImpl &&) = default; + PropertiesNodeConstIteratorImpl &operator=(const PropertiesNodeConstIteratorImpl &other) = + default; virtual ~PropertiesNodeConstIteratorImpl() = default; virtual void Next() = 0; @@ -95,6 +108,11 @@ class DocumentNodeConstIterator { public: DocumentNodeConstIterator(DocumentNodeConstIteratorImpl *impl) : impl_(impl) {} + DocumentNodeConstIterator(DocumentNodeConstIterator &&) = default; + DocumentNodeConstIterator(const DocumentNodeConstIterator &) = default; + DocumentNodeConstIterator &operator=(DocumentNodeConstIterator &&) = default; + DocumentNodeConstIterator &operator=(const DocumentNodeConstIterator &other) = default; + ~DocumentNodeConstIterator() { delete impl_; } bool operator==(const DocumentNodeConstIterator &rhs) const { return (impl_->Equal(rhs.impl_)); } @@ -117,6 +135,10 @@ class PropertiesNodeConstIterator { public: PropertiesNodeConstIterator(PropertiesNodeConstIteratorImpl *impl) : impl_(impl) {} + PropertiesNodeConstIterator(PropertiesNodeConstIterator &&) = default; + PropertiesNodeConstIterator(const PropertiesNodeConstIterator &) = default; + PropertiesNodeConstIterator &operator=(PropertiesNodeConstIterator &&) = default; + PropertiesNodeConstIterator &operator=(const PropertiesNodeConstIterator &other) = default; ~PropertiesNodeConstIterator() { delete impl_; } bool operator==(const PropertiesNodeConstIterator &rhs) const diff --git a/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h index 22454a3db5..ea752dc99f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h @@ -3,9 +3,8 @@ #pragma once -#include - #include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,8 +18,7 @@ namespace configuration class DropAggregationConfiguration : public AggregationConfiguration { public: - DropAggregationConfiguration() = default; - ~DropAggregationConfiguration() override = default; + void Accept(AggregationConfigurationVisitor *visitor) const override { visitor->VisitDrop(this); } }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h index 2d501ce2d7..122e84d034 100644 --- a/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h @@ -3,10 +3,10 @@ #pragma once -#include #include #include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -20,8 +20,10 @@ namespace configuration class ExplicitBucketHistogramAggregationConfiguration : public AggregationConfiguration { public: - ExplicitBucketHistogramAggregationConfiguration() = default; - ~ExplicitBucketHistogramAggregationConfiguration() override = default; + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitExplicitBucketHistogram(this); + } std::vector boundaries; bool record_min_max{false}; diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h index 534460ee59..156a459b94 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h @@ -22,9 +22,6 @@ namespace configuration class ExtensionLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: - ExtensionLogRecordExporterConfiguration() = default; - ~ExtensionLogRecordExporterConfiguration() override = default; - void Accept(LogRecordExporterConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h index 50547571fa..192dc82826 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h @@ -20,9 +20,6 @@ namespace configuration class ExtensionLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration { public: - ExtensionLogRecordProcessorConfiguration() = default; - ~ExtensionLogRecordProcessorConfiguration() override = default; - void Accept(LogRecordProcessorConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h index 23d7d1cd08..9dbd1d30bd 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h @@ -22,9 +22,6 @@ namespace configuration class ExtensionPullMetricExporterConfiguration : public PullMetricExporterConfiguration { public: - ExtensionPullMetricExporterConfiguration() = default; - ~ExtensionPullMetricExporterConfiguration() override = default; - void Accept(PullMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h index a47690cc8b..c573b76819 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h @@ -22,9 +22,6 @@ namespace configuration class ExtensionPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: - ExtensionPushMetricExporterConfiguration() = default; - ~ExtensionPushMetricExporterConfiguration() override = default; - void Accept(PushMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h index b2c8a31678..44e9961770 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h @@ -20,9 +20,6 @@ namespace configuration class ExtensionSamplerConfiguration : public SamplerConfiguration { public: - ExtensionSamplerConfiguration() = default; - ~ExtensionSamplerConfiguration() override = default; - void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); @@ -30,7 +27,7 @@ class ExtensionSamplerConfiguration : public SamplerConfiguration std::string name; std::unique_ptr node; - size_t depth{0}; + std::size_t depth{0}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h index 0238b8528e..d55e708e4c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h @@ -20,9 +20,6 @@ namespace configuration class ExtensionSpanExporterConfiguration : public SpanExporterConfiguration { public: - ExtensionSpanExporterConfiguration() = default; - ~ExtensionSpanExporterConfiguration() override = default; - void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h index cf5fc7cf11..0606425ed6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h @@ -20,9 +20,6 @@ namespace configuration class ExtensionSpanProcessorConfiguration : public SpanProcessorConfiguration { public: - ExtensionSpanProcessorConfiguration() = default; - ~ExtensionSpanProcessorConfiguration() override = default; - void Accept(SpanProcessorConfigurationVisitor *visitor) const override { visitor->VisitExtension(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h index e17cf42341..b401f4dbd6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h +++ b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include "opentelemetry/sdk/configuration/document.h" @@ -19,8 +20,11 @@ class InvalidSchemaException : public std::runtime_error { public: InvalidSchemaException(const std::string &msg) : std::runtime_error(msg) {} - - ~InvalidSchemaException() override = default; + InvalidSchemaException(InvalidSchemaException &&) = default; + InvalidSchemaException(const InvalidSchemaException &) = default; + InvalidSchemaException &operator=(InvalidSchemaException &&) = default; + InvalidSchemaException &operator=(const InvalidSchemaException &other) = default; + ~InvalidSchemaException() override = default; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h index 5b08447a5f..19af801b61 100644 --- a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -21,16 +21,13 @@ namespace configuration class JaegerRemoteSamplerConfiguration : public SamplerConfiguration { public: - JaegerRemoteSamplerConfiguration() = default; - ~JaegerRemoteSamplerConfiguration() override = default; - void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitJaegerRemote(this); } std::string endpoint; - size_t interval{0}; + std::size_t interval{0}; std::unique_ptr initial_sampler; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h index 7dad563860..e528ee4b85 100644 --- a/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h @@ -3,9 +3,8 @@ #pragma once -#include - #include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,8 +18,10 @@ namespace configuration class LastValueAggregationConfiguration : public AggregationConfiguration { public: - LastValueAggregationConfiguration() = default; - ~LastValueAggregationConfiguration() override = default; + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitLastValue(this); + } }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h index 77c98eed71..9eed3ee62f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h @@ -17,8 +17,12 @@ class LogRecordExporterConfigurationVisitor; class LogRecordExporterConfiguration { public: - LogRecordExporterConfiguration() = default; - virtual ~LogRecordExporterConfiguration() = default; + LogRecordExporterConfiguration() = default; + LogRecordExporterConfiguration(LogRecordExporterConfiguration &&) = default; + LogRecordExporterConfiguration(const LogRecordExporterConfiguration &) = default; + LogRecordExporterConfiguration &operator=(LogRecordExporterConfiguration &&) = default; + LogRecordExporterConfiguration &operator=(const LogRecordExporterConfiguration &other) = default; + virtual ~LogRecordExporterConfiguration() = default; virtual void Accept(LogRecordExporterConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h index e38e794b83..a8a2878ca5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h @@ -20,8 +20,14 @@ class ExtensionLogRecordExporterConfiguration; class LogRecordExporterConfigurationVisitor { public: - LogRecordExporterConfigurationVisitor() = default; - virtual ~LogRecordExporterConfigurationVisitor() = default; + LogRecordExporterConfigurationVisitor() = default; + LogRecordExporterConfigurationVisitor(LogRecordExporterConfigurationVisitor &&) = default; + LogRecordExporterConfigurationVisitor(const LogRecordExporterConfigurationVisitor &) = default; + LogRecordExporterConfigurationVisitor &operator=(LogRecordExporterConfigurationVisitor &&) = + default; + LogRecordExporterConfigurationVisitor &operator=( + const LogRecordExporterConfigurationVisitor &other) = default; + virtual ~LogRecordExporterConfigurationVisitor() = default; virtual void VisitOtlpHttp(const OtlpHttpLogRecordExporterConfiguration *model) = 0; virtual void VisitOtlpGrpc(const OtlpGrpcLogRecordExporterConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h index c8b9eb74ec..81ab1383be 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h @@ -16,8 +16,8 @@ namespace configuration class LogRecordLimitsConfiguration { public: - size_t attribute_value_length_limit; - size_t attribute_count_limit; + std::size_t attribute_value_length_limit; + std::size_t attribute_count_limit; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h index 3e05ebd5af..916995367a 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h @@ -17,7 +17,12 @@ class LogRecordProcessorConfigurationVisitor; class LogRecordProcessorConfiguration { public: - LogRecordProcessorConfiguration() = default; + LogRecordProcessorConfiguration() = default; + LogRecordProcessorConfiguration(LogRecordProcessorConfiguration &&) = default; + LogRecordProcessorConfiguration(const LogRecordProcessorConfiguration &) = default; + LogRecordProcessorConfiguration &operator=(LogRecordProcessorConfiguration &&) = default; + LogRecordProcessorConfiguration &operator=(const LogRecordProcessorConfiguration &other) = + default; virtual ~LogRecordProcessorConfiguration() = default; virtual void Accept(LogRecordProcessorConfigurationVisitor *visitor) const = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h index 263407b171..ac4dd52d23 100644 --- a/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h @@ -18,8 +18,14 @@ class ExtensionLogRecordProcessorConfiguration; class LogRecordProcessorConfigurationVisitor { public: - LogRecordProcessorConfigurationVisitor() = default; - virtual ~LogRecordProcessorConfigurationVisitor() = default; + LogRecordProcessorConfigurationVisitor() = default; + LogRecordProcessorConfigurationVisitor(LogRecordProcessorConfigurationVisitor &&) = default; + LogRecordProcessorConfigurationVisitor(const LogRecordProcessorConfigurationVisitor &) = default; + LogRecordProcessorConfigurationVisitor &operator=(LogRecordProcessorConfigurationVisitor &&) = + default; + LogRecordProcessorConfigurationVisitor &operator=( + const LogRecordProcessorConfigurationVisitor &other) = default; + virtual ~LogRecordProcessorConfigurationVisitor() = default; virtual void VisitBatch(const BatchLogRecordProcessorConfiguration *model) = 0; virtual void VisitSimple(const SimpleLogRecordProcessorConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h index 9e8fb8e411..bdfaab1388 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h @@ -3,8 +3,6 @@ #pragma once -#include - #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,8 +17,12 @@ class MetricProducerConfigurationVisitor; class MetricProducerConfiguration { public: - MetricProducerConfiguration() = default; - virtual ~MetricProducerConfiguration() = default; + MetricProducerConfiguration() = default; + MetricProducerConfiguration(MetricProducerConfiguration &&) = default; + MetricProducerConfiguration(const MetricProducerConfiguration &) = default; + MetricProducerConfiguration &operator=(MetricProducerConfiguration &&) = default; + MetricProducerConfiguration &operator=(const MetricProducerConfiguration &other) = default; + virtual ~MetricProducerConfiguration() = default; virtual void Accept(MetricProducerConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h index 466cb57fd5..d038a9f760 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h @@ -3,8 +3,6 @@ #pragma once -#include - #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,8 +17,12 @@ class MetricReaderConfigurationVisitor; class MetricReaderConfiguration { public: - MetricReaderConfiguration() = default; - virtual ~MetricReaderConfiguration() = default; + MetricReaderConfiguration() = default; + MetricReaderConfiguration(MetricReaderConfiguration &&) = default; + MetricReaderConfiguration(const MetricReaderConfiguration &) = default; + MetricReaderConfiguration &operator=(MetricReaderConfiguration &&) = default; + MetricReaderConfiguration &operator=(const MetricReaderConfiguration &other) = default; + virtual ~MetricReaderConfiguration() = default; virtual void Accept(MetricReaderConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h index 83b74c1b0b..412935be43 100644 --- a/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h @@ -17,7 +17,12 @@ class PullMetricReaderConfiguration; class MetricReaderConfigurationVisitor { public: - MetricReaderConfigurationVisitor() = default; + MetricReaderConfigurationVisitor() = default; + MetricReaderConfigurationVisitor(MetricReaderConfigurationVisitor &&) = default; + MetricReaderConfigurationVisitor(const MetricReaderConfigurationVisitor &) = default; + MetricReaderConfigurationVisitor &operator=(MetricReaderConfigurationVisitor &&) = default; + MetricReaderConfigurationVisitor &operator=(const MetricReaderConfigurationVisitor &other) = + default; virtual ~MetricReaderConfigurationVisitor() = default; virtual void VisitPeriodic(const PeriodicMetricReaderConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h index cd82a489d3..ca836a1079 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h @@ -20,9 +20,6 @@ namespace configuration class OtlpFileLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: - OtlpFileLogRecordExporterConfiguration() = default; - ~OtlpFileLogRecordExporterConfiguration() override = default; - void Accept(LogRecordExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpFile(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h index 45bb64c7eb..dae68fd19f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h @@ -5,7 +5,7 @@ #include -#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" +#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" @@ -22,9 +22,6 @@ namespace configuration class OtlpFilePushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: - OtlpFilePushMetricExporterConfiguration() = default; - ~OtlpFilePushMetricExporterConfiguration() override = default; - void Accept(PushMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpFile(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h index 4d19069dc7..4742d8124c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h @@ -20,9 +20,6 @@ namespace configuration class OtlpFileSpanExporterConfiguration : public SpanExporterConfiguration { public: - OtlpFileSpanExporterConfiguration() = default; - ~OtlpFileSpanExporterConfiguration() override = default; - void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpFile(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h index 1a259ff237..c8078cbcaf 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h @@ -22,9 +22,6 @@ namespace configuration class OtlpGrpcLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: - OtlpGrpcLogRecordExporterConfiguration() = default; - ~OtlpGrpcLogRecordExporterConfiguration() override = default; - void Accept(LogRecordExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpGrpc(this); @@ -37,7 +34,7 @@ class OtlpGrpcLogRecordExporterConfiguration : public LogRecordExporterConfigura std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout{0}; + std::size_t timeout{0}; bool insecure{false}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h index 34f15d1dff..3a7dbf5aaf 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -6,7 +6,7 @@ #include #include -#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" +#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" @@ -23,9 +23,6 @@ namespace configuration class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: - OtlpGrpcPushMetricExporterConfiguration() = default; - ~OtlpGrpcPushMetricExporterConfiguration() override = default; - void Accept(PushMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpGrpc(this); @@ -38,7 +35,7 @@ class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfigu std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout{0}; + std::size_t timeout{0}; bool insecure{false}; std::string temporality_preference; // FIXME: enum enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h index 78afdc5643..efbf6011b2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h @@ -22,9 +22,6 @@ namespace configuration class OtlpGrpcSpanExporterConfiguration : public SpanExporterConfiguration { public: - OtlpGrpcSpanExporterConfiguration() = default; - ~OtlpGrpcSpanExporterConfiguration() override = default; - void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpGrpc(this); @@ -37,7 +34,7 @@ class OtlpGrpcSpanExporterConfiguration : public SpanExporterConfiguration std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout{0}; + std::size_t timeout{0}; bool insecure{false}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h index 4147bbeb62..06fb7f8f21 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -11,7 +13,7 @@ namespace sdk namespace configuration { -enum enum_otlp_http_encoding +enum enum_otlp_http_encoding : std::uint8_t { protobuf, json diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h index ce20685d1e..0ff65ec077 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h @@ -23,9 +23,6 @@ namespace configuration class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfiguration { public: - OtlpHttpLogRecordExporterConfiguration() = default; - ~OtlpHttpLogRecordExporterConfiguration() override = default; - void Accept(LogRecordExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpHttp(this); @@ -38,7 +35,7 @@ class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfigura std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout{0}; + std::size_t timeout{0}; enum_otlp_http_encoding encoding{protobuf}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h index 81d7af86cb..d54f48e9a1 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -6,7 +6,7 @@ #include #include -#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" +#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" @@ -24,9 +24,6 @@ namespace configuration class OtlpHttpPushMetricExporterConfiguration : public PushMetricExporterConfiguration { public: - OtlpHttpPushMetricExporterConfiguration() = default; - ~OtlpHttpPushMetricExporterConfiguration() override = default; - void Accept(PushMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpHttp(this); @@ -39,7 +36,7 @@ class OtlpHttpPushMetricExporterConfiguration : public PushMetricExporterConfigu std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout{0}; + std::size_t timeout{0}; enum_otlp_http_encoding encoding{protobuf}; std::string temporality_preference; // FIXME: enum enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h index 6ec379a8e2..394a6e75dd 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h @@ -23,9 +23,6 @@ namespace configuration class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration { public: - OtlpHttpSpanExporterConfiguration() = default; - ~OtlpHttpSpanExporterConfiguration() override = default; - void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitOtlpHttp(this); @@ -38,7 +35,7 @@ class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration std::unique_ptr headers; std::string headers_list; std::string compression; - size_t timeout{0}; + std::size_t timeout{0}; enum_otlp_http_encoding encoding{protobuf}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h index 39d46d7a40..30f188bca7 100644 --- a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h @@ -20,9 +20,6 @@ namespace configuration class ParentBasedSamplerConfiguration : public SamplerConfiguration { public: - ParentBasedSamplerConfiguration() = default; - ~ParentBasedSamplerConfiguration() override = default; - void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitParentBased(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h index 0167d481fa..ac38cb6206 100644 --- a/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -23,16 +23,13 @@ namespace configuration class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration { public: - PeriodicMetricReaderConfiguration() = default; - ~PeriodicMetricReaderConfiguration() override = default; - void Accept(MetricReaderConfigurationVisitor *visitor) const override { visitor->VisitPeriodic(this); } - size_t interval{0}; - size_t timeout{0}; + std::size_t interval{0}; + std::size_t timeout{0}; std::unique_ptr exporter; std::vector> producers; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h index e743feff76..99b4fbcc85 100644 --- a/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h @@ -21,16 +21,13 @@ namespace configuration class PrometheusPullMetricExporterConfiguration : public PullMetricExporterConfiguration { public: - PrometheusPullMetricExporterConfiguration() = default; - ~PrometheusPullMetricExporterConfiguration() override = default; - void Accept(PullMetricExporterConfigurationVisitor *visitor) const override { visitor->VisitPrometheus(this); } std::string host; - size_t port{0}; + std::size_t port{0}; bool without_units{false}; bool without_type_suffix{false}; bool without_scope_info{false}; diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h index 2927781978..cd1f7693d0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h @@ -19,9 +19,6 @@ namespace configuration class PropagatorConfiguration { public: - PropagatorConfiguration() = default; - virtual ~PropagatorConfiguration() = default; - std::vector composite; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h index 9fda353948..8351d81c18 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h @@ -15,7 +15,12 @@ class PullMetricExporterConfigurationVisitor; class PullMetricExporterConfiguration { public: - PullMetricExporterConfiguration() = default; + PullMetricExporterConfiguration() = default; + PullMetricExporterConfiguration(PullMetricExporterConfiguration &&) = default; + PullMetricExporterConfiguration(const PullMetricExporterConfiguration &) = default; + PullMetricExporterConfiguration &operator=(PullMetricExporterConfiguration &&) = default; + PullMetricExporterConfiguration &operator=(const PullMetricExporterConfiguration &other) = + default; virtual ~PullMetricExporterConfiguration() = default; virtual void Accept(PullMetricExporterConfigurationVisitor *visitor) const = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h index 1904db5954..bbc40ab058 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h @@ -17,8 +17,14 @@ class ExtensionPullMetricExporterConfiguration; class PullMetricExporterConfigurationVisitor { public: - PullMetricExporterConfigurationVisitor() = default; - virtual ~PullMetricExporterConfigurationVisitor() = default; + PullMetricExporterConfigurationVisitor() = default; + PullMetricExporterConfigurationVisitor(PullMetricExporterConfigurationVisitor &&) = default; + PullMetricExporterConfigurationVisitor(const PullMetricExporterConfigurationVisitor &) = default; + PullMetricExporterConfigurationVisitor &operator=(PullMetricExporterConfigurationVisitor &&) = + default; + PullMetricExporterConfigurationVisitor &operator=( + const PullMetricExporterConfigurationVisitor &other) = default; + virtual ~PullMetricExporterConfigurationVisitor() = default; virtual void VisitPrometheus(const PrometheusPullMetricExporterConfiguration *model) = 0; virtual void VisitExtension(const ExtensionPullMetricExporterConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h index d87b1db453..de317689ce 100644 --- a/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -23,9 +23,6 @@ namespace configuration class PullMetricReaderConfiguration : public MetricReaderConfiguration { public: - PullMetricReaderConfiguration() = default; - ~PullMetricReaderConfiguration() override = default; - void Accept(MetricReaderConfigurationVisitor *visitor) const override { visitor->VisitPull(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h index 15133b7ee8..4776a96027 100644 --- a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h @@ -17,7 +17,12 @@ class PushMetricExporterConfigurationVisitor; class PushMetricExporterConfiguration { public: - PushMetricExporterConfiguration() = default; + PushMetricExporterConfiguration() = default; + PushMetricExporterConfiguration(PushMetricExporterConfiguration &&) = default; + PushMetricExporterConfiguration(const PushMetricExporterConfiguration &) = default; + PushMetricExporterConfiguration &operator=(PushMetricExporterConfiguration &&) = default; + PushMetricExporterConfiguration &operator=(const PushMetricExporterConfiguration &other) = + default; virtual ~PushMetricExporterConfiguration() = default; virtual void Accept(PushMetricExporterConfigurationVisitor *visitor) const = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h index f9c655fa01..b43b2baf8e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h @@ -20,8 +20,14 @@ class ExtensionPushMetricExporterConfiguration; class PushMetricExporterConfigurationVisitor { public: - PushMetricExporterConfigurationVisitor() = default; - virtual ~PushMetricExporterConfigurationVisitor() = default; + PushMetricExporterConfigurationVisitor() = default; + PushMetricExporterConfigurationVisitor(PushMetricExporterConfigurationVisitor &&) = default; + PushMetricExporterConfigurationVisitor(const PushMetricExporterConfigurationVisitor &) = default; + PushMetricExporterConfigurationVisitor &operator=(PushMetricExporterConfigurationVisitor &&) = + default; + PushMetricExporterConfigurationVisitor &operator=( + const PushMetricExporterConfigurationVisitor &other) = default; + virtual ~PushMetricExporterConfigurationVisitor() = default; virtual void VisitOtlpHttp(const OtlpHttpPushMetricExporterConfiguration *model) = 0; virtual void VisitOtlpGrpc(const OtlpGrpcPushMetricExporterConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h index 1cc087a37f..8fa8ca13d0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document.h @@ -22,8 +22,12 @@ class RymlDocument : public Document public: static std::unique_ptr Parse(const std::string &source, const std::string &content); - RymlDocument(ryml::Tree tree) : tree_(tree) {} - ~RymlDocument() override = default; + RymlDocument(ryml::Tree tree) : tree_(std::move(tree)) {} + RymlDocument(RymlDocument &&) = delete; + RymlDocument(const RymlDocument &) = delete; + RymlDocument &operator=(RymlDocument &&) = delete; + RymlDocument &operator=(const RymlDocument &other) = delete; + ~RymlDocument() override = default; std::unique_ptr GetRootNode() override; diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index 3f29a8515b..1642f4aeb2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -20,13 +20,17 @@ namespace configuration class RymlDocumentNode : public DocumentNode { public: - RymlDocumentNode(ryml::ConstNodeRef node, size_t depth) : node_(node), depth_(depth) {} - ~RymlDocumentNode() override = default; + RymlDocumentNode(ryml::ConstNodeRef node, std::size_t depth) : node_(node), depth_(depth) {} + RymlDocumentNode(RymlDocumentNode &&) = delete; + RymlDocumentNode(const RymlDocumentNode &) = delete; + RymlDocumentNode &operator=(RymlDocumentNode &&) = delete; + RymlDocumentNode &operator=(const RymlDocumentNode &other) = delete; + ~RymlDocumentNode() override = default; std::string Key() const override; bool AsBoolean() override; - size_t AsInteger() override; + std::size_t AsInteger() override; double AsDouble() override; std::string AsString() override; @@ -36,8 +40,8 @@ class RymlDocumentNode : public DocumentNode bool GetRequiredBoolean(const std::string &name) override; bool GetBoolean(const std::string &name, bool default_value) override; - size_t GetRequiredInteger(const std::string &name) override; - size_t GetInteger(const std::string &name, size_t default_value) override; + std::size_t GetRequiredInteger(const std::string &name) override; + std::size_t GetInteger(const std::string &name, std::size_t default_value) override; double GetRequiredDouble(const std::string &name) override; double GetDouble(const std::string &name, double default_value) override; @@ -48,8 +52,8 @@ class RymlDocumentNode : public DocumentNode DocumentNodeConstIterator begin() const override; DocumentNodeConstIterator end() const override; - size_t num_children() const override; - std::unique_ptr GetChild(size_t index) const override; + std::size_t num_children() const override; + std::unique_ptr GetChild(std::size_t index) const override; PropertiesNodeConstIterator begin_properties() const override; PropertiesNodeConstIterator end_properties() const override; @@ -61,13 +65,20 @@ class RymlDocumentNode : public DocumentNode ryml::ConstNodeRef GetRymlChildNode(const std::string &name); ryml::ConstNodeRef node_; - size_t depth_; + std::size_t depth_; }; class RymlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl { public: - RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index, size_t depth); + RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, + std::size_t index, + std::size_t depth); + RymlDocumentNodeConstIteratorImpl(RymlDocumentNodeConstIteratorImpl &&) = delete; + RymlDocumentNodeConstIteratorImpl(const RymlDocumentNodeConstIteratorImpl &) = delete; + RymlDocumentNodeConstIteratorImpl &operator=(RymlDocumentNodeConstIteratorImpl &&) = delete; + RymlDocumentNodeConstIteratorImpl &operator=(const RymlDocumentNodeConstIteratorImpl &other) = + delete; ~RymlDocumentNodeConstIteratorImpl() override; void Next() override; @@ -76,14 +87,21 @@ class RymlDocumentNodeConstIteratorImpl : public DocumentNodeConstIteratorImpl private: ryml::ConstNodeRef parent_; - size_t index_; - size_t depth_; + std::size_t index_; + std::size_t depth_; }; class RymlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorImpl { public: - RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index, size_t depth); + RymlPropertiesNodeConstIteratorImpl(ryml::ConstNodeRef parent, + std::size_t index, + std::size_t depth); + RymlPropertiesNodeConstIteratorImpl(RymlPropertiesNodeConstIteratorImpl &&) = delete; + RymlPropertiesNodeConstIteratorImpl(const RymlPropertiesNodeConstIteratorImpl &) = delete; + RymlPropertiesNodeConstIteratorImpl &operator=(RymlPropertiesNodeConstIteratorImpl &&) = delete; + RymlPropertiesNodeConstIteratorImpl &operator=(const RymlPropertiesNodeConstIteratorImpl &other) = + delete; ~RymlPropertiesNodeConstIteratorImpl() override; void Next() override; @@ -93,8 +111,8 @@ class RymlPropertiesNodeConstIteratorImpl : public PropertiesNodeConstIteratorIm private: ryml::ConstNodeRef parent_; - size_t index_; - size_t depth_; + std::size_t index_; + std::size_t depth_; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h index 862bdd6382..26611a6dd3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h @@ -18,8 +18,12 @@ class SamplerConfigurationVisitor; class SamplerConfiguration { public: - SamplerConfiguration() = default; - virtual ~SamplerConfiguration() = default; + SamplerConfiguration() = default; + SamplerConfiguration(SamplerConfiguration &&) = default; + SamplerConfiguration(const SamplerConfiguration &) = default; + SamplerConfiguration &operator=(SamplerConfiguration &&) = default; + SamplerConfiguration &operator=(const SamplerConfiguration &other) = default; + virtual ~SamplerConfiguration() = default; virtual void Accept(SamplerConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h index 2820b4b25e..930e447325 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h @@ -21,8 +21,12 @@ class ExtensionSamplerConfiguration; class SamplerConfigurationVisitor { public: - SamplerConfigurationVisitor() = default; - virtual ~SamplerConfigurationVisitor() = default; + SamplerConfigurationVisitor() = default; + SamplerConfigurationVisitor(SamplerConfigurationVisitor &&) = default; + SamplerConfigurationVisitor(const SamplerConfigurationVisitor &) = default; + SamplerConfigurationVisitor &operator=(SamplerConfigurationVisitor &&) = default; + SamplerConfigurationVisitor &operator=(const SamplerConfigurationVisitor &other) = default; + virtual ~SamplerConfigurationVisitor() = default; virtual void VisitAlwaysOff(const AlwaysOffSamplerConfiguration *model) = 0; virtual void VisitAlwaysOn(const AlwaysOnSamplerConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h index 914d9b09f4..67acd8a813 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h" #include "opentelemetry/version.h" @@ -20,9 +21,6 @@ namespace configuration class SimpleLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration { public: - SimpleLogRecordProcessorConfiguration() = default; - ~SimpleLogRecordProcessorConfiguration() override = default; - void Accept(LogRecordProcessorConfigurationVisitor *visitor) const override { visitor->VisitSimple(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h index bb38cdeb97..48eabe20da 100644 --- a/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/version.h" @@ -20,9 +21,6 @@ namespace configuration class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration { public: - SimpleSpanProcessorConfiguration() = default; - ~SimpleSpanProcessorConfiguration() override = default; - void Accept(SpanProcessorConfigurationVisitor *visitor) const override { visitor->VisitSimple(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h index 1231dfc29d..30f75dba9f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h @@ -17,8 +17,12 @@ class SpanExporterConfigurationVisitor; class SpanExporterConfiguration { public: - SpanExporterConfiguration() = default; - virtual ~SpanExporterConfiguration() = default; + SpanExporterConfiguration() = default; + SpanExporterConfiguration(SpanExporterConfiguration &&) = default; + SpanExporterConfiguration(const SpanExporterConfiguration &) = default; + SpanExporterConfiguration &operator=(SpanExporterConfiguration &&) = default; + SpanExporterConfiguration &operator=(const SpanExporterConfiguration &other) = default; + virtual ~SpanExporterConfiguration() = default; virtual void Accept(SpanExporterConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h index 719b996462..685584220a 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h @@ -21,7 +21,12 @@ class ExtensionSpanExporterConfiguration; class SpanExporterConfigurationVisitor { public: - SpanExporterConfigurationVisitor() = default; + SpanExporterConfigurationVisitor() = default; + SpanExporterConfigurationVisitor(SpanExporterConfigurationVisitor &&) = default; + SpanExporterConfigurationVisitor(const SpanExporterConfigurationVisitor &) = default; + SpanExporterConfigurationVisitor &operator=(SpanExporterConfigurationVisitor &&) = default; + SpanExporterConfigurationVisitor &operator=(const SpanExporterConfigurationVisitor &other) = + default; virtual ~SpanExporterConfigurationVisitor() = default; virtual void VisitOtlpHttp(const OtlpHttpSpanExporterConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h index fa7059e5ae..a4624bb1a5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h @@ -16,12 +16,12 @@ namespace configuration class SpanLimitsConfiguration { public: - size_t attribute_value_length_limit; - size_t attribute_count_limit; - size_t event_count_limit; - size_t link_count_limit; - size_t event_attribute_count_limit; - size_t link_attribute_count_limit; + std::size_t attribute_value_length_limit; + std::size_t attribute_count_limit; + std::size_t event_count_limit; + std::size_t link_count_limit; + std::size_t event_attribute_count_limit; + std::size_t link_attribute_count_limit; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h index 9182a5eb52..78d927907e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h @@ -17,8 +17,12 @@ class SpanProcessorConfigurationVisitor; class SpanProcessorConfiguration { public: - SpanProcessorConfiguration() = default; - virtual ~SpanProcessorConfiguration() = default; + SpanProcessorConfiguration() = default; + SpanProcessorConfiguration(SpanProcessorConfiguration &&) = default; + SpanProcessorConfiguration(const SpanProcessorConfiguration &) = default; + SpanProcessorConfiguration &operator=(SpanProcessorConfiguration &&) = default; + SpanProcessorConfiguration &operator=(const SpanProcessorConfiguration &other) = default; + virtual ~SpanProcessorConfiguration() = default; virtual void Accept(SpanProcessorConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h index f905d5b34e..c85312f597 100644 --- a/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h @@ -18,7 +18,12 @@ class ExtensionSpanProcessorConfiguration; class SpanProcessorConfigurationVisitor { public: - SpanProcessorConfigurationVisitor() = default; + SpanProcessorConfigurationVisitor() = default; + SpanProcessorConfigurationVisitor(SpanProcessorConfigurationVisitor &&) = default; + SpanProcessorConfigurationVisitor(const SpanProcessorConfigurationVisitor &) = default; + SpanProcessorConfigurationVisitor &operator=(SpanProcessorConfigurationVisitor &&) = default; + SpanProcessorConfigurationVisitor &operator=(const SpanProcessorConfigurationVisitor &other) = + default; virtual ~SpanProcessorConfigurationVisitor() = default; virtual void VisitBatch(const BatchSpanProcessorConfiguration *model) = 0; diff --git a/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h index cfcd44d620..b6907db69c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h @@ -3,9 +3,8 @@ #pragma once -#include - #include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -19,8 +18,7 @@ namespace configuration class SumAggregationConfiguration : public AggregationConfiguration { public: - SumAggregationConfiguration() = default; - ~SumAggregationConfiguration() override = default; + void Accept(AggregationConfigurationVisitor *visitor) const override { visitor->VisitSum(this); } }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h index e9f590c77a..bc19cad509 100644 --- a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h @@ -18,9 +18,6 @@ namespace configuration class TraceIdRatioBasedSamplerConfiguration : public SamplerConfiguration { public: - TraceIdRatioBasedSamplerConfiguration() = default; - ~TraceIdRatioBasedSamplerConfiguration() override = default; - void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitTraceIdRatioBased(this); diff --git a/sdk/include/opentelemetry/sdk/configuration/view_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h index 821b82f1a4..7fa632c663 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h @@ -20,9 +20,6 @@ namespace configuration class ViewConfiguration { public: - ViewConfiguration() = default; - ~ViewConfiguration() = default; - std::unique_ptr selector; std::unique_ptr stream; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h index c8e6be2b06..9da455389b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include @@ -14,7 +15,7 @@ namespace sdk namespace configuration { -enum enum_instrument_type +enum enum_instrument_type : std::uint8_t { counter, histogram, @@ -29,8 +30,12 @@ enum enum_instrument_type class ViewSelectorConfiguration { public: - ViewSelectorConfiguration() = default; - ~ViewSelectorConfiguration() = default; + ViewSelectorConfiguration() = default; + ViewSelectorConfiguration(ViewSelectorConfiguration &&) = default; + ViewSelectorConfiguration(const ViewSelectorConfiguration &) = default; + ViewSelectorConfiguration &operator=(ViewSelectorConfiguration &&) = default; + ViewSelectorConfiguration &operator=(const ViewSelectorConfiguration &other) = default; + ~ViewSelectorConfiguration() = default; std::string instrument_name; enum_instrument_type instrument_type{counter}; diff --git a/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h index 8b118862de..d71586d928 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h @@ -21,13 +21,10 @@ namespace configuration class ViewStreamConfiguration { public: - ViewStreamConfiguration() = default; - ~ViewStreamConfiguration() = default; - std::string name; std::string description; std::unique_ptr aggregation; - size_t aggregation_cardinality_limit; + std::size_t aggregation_cardinality_limit; std::vector attribute_keys; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h index c5946044bb..fc64f30841 100644 --- a/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -20,16 +20,13 @@ namespace configuration class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration { public: - ZipkinSpanExporterConfiguration() = default; - ~ZipkinSpanExporterConfiguration() override = default; - void Accept(SpanExporterConfigurationVisitor *visitor) const override { visitor->VisitZipkin(this); } std::string endpoint; - size_t timeout{0}; + std::size_t timeout{0}; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index 83d2b8a09f..a454d9e8b5 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -24,12 +24,12 @@ #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/default_aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/detectors_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" -#include "opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" From 2045397bcb3fec212771d9aca6e6b6c791d9e3df Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 27 Jun 2025 00:53:34 +0200 Subject: [PATCH 097/166] clang-tidy --- .../console_log_record_exporter_builder.h | 7 ++- .../console_push_metric_exporter_builder.h | 7 ++- .../sdk/init/console_span_exporter_builder.h | 8 +++- .../extension_log_record_exporter_builder.h | 7 ++- .../extension_log_record_processor_builder.h | 7 ++- .../extension_pull_metric_exporter_builder.h | 7 ++- .../extension_push_metric_exporter_builder.h | 9 +++- .../sdk/init/extension_sampler_builder.h | 8 +++- .../init/extension_span_exporter_builder.h | 8 +++- .../init/extension_span_processor_builder.h | 8 +++- .../otlp_file_log_record_exporter_builder.h | 7 ++- .../otlp_file_push_metric_exporter_builder.h | 8 +++- .../init/otlp_file_span_exporter_builder.h | 8 +++- .../otlp_grpc_log_record_exporter_builder.h | 7 ++- .../otlp_grpc_push_metric_exporter_builder.h | 8 +++- .../init/otlp_grpc_span_exporter_builder.h | 8 +++- .../otlp_http_log_record_exporter_builder.h | 7 ++- .../otlp_http_push_metric_exporter_builder.h | 8 +++- .../init/otlp_http_span_exporter_builder.h | 8 +++- .../prometheus_pull_metric_exporter_builder.h | 7 ++- sdk/include/opentelemetry/sdk/init/registry.h | 5 ++ .../opentelemetry/sdk/init/sdk_builder.h | 10 +++- .../sdk/init/text_map_propagator_builder.h | 8 +++- .../sdk/init/unsupported_exception.h | 8 +++- .../sdk/init/zipkin_span_exporter_builder.h | 8 +++- sdk/src/init/configured_sdk.cc | 2 +- sdk/src/init/registry.cc | 15 ------ sdk/src/init/sdk_builder.cc | 48 +++++++++++++++---- 28 files changed, 196 insertions(+), 60 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h index aeab09ed4c..aa203fd7dd 100644 --- a/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class ConsoleLogRecordExporterBuilder { public: - ConsoleLogRecordExporterBuilder() = default; + ConsoleLogRecordExporterBuilder() = default; + ConsoleLogRecordExporterBuilder(ConsoleLogRecordExporterBuilder &&) = default; + ConsoleLogRecordExporterBuilder(const ConsoleLogRecordExporterBuilder &) = default; + ConsoleLogRecordExporterBuilder &operator=(ConsoleLogRecordExporterBuilder &&) = default; + ConsoleLogRecordExporterBuilder &operator=(const ConsoleLogRecordExporterBuilder &other) = + default; virtual ~ConsoleLogRecordExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h index f00cb7ac43..c61721bd6d 100644 --- a/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class ConsolePushMetricExporterBuilder { public: - ConsolePushMetricExporterBuilder() = default; + ConsolePushMetricExporterBuilder() = default; + ConsolePushMetricExporterBuilder(ConsolePushMetricExporterBuilder &&) = default; + ConsolePushMetricExporterBuilder(const ConsolePushMetricExporterBuilder &) = default; + ConsolePushMetricExporterBuilder &operator=(ConsolePushMetricExporterBuilder &&) = default; + ConsolePushMetricExporterBuilder &operator=(const ConsolePushMetricExporterBuilder &other) = + default; virtual ~ConsolePushMetricExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h index 60f159f373..31efa991c5 100644 --- a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h @@ -16,8 +16,12 @@ namespace init class ConsoleSpanExporterBuilder { public: - ConsoleSpanExporterBuilder() = default; - virtual ~ConsoleSpanExporterBuilder() = default; + ConsoleSpanExporterBuilder() = default; + ConsoleSpanExporterBuilder(ConsoleSpanExporterBuilder &&) = default; + ConsoleSpanExporterBuilder(const ConsoleSpanExporterBuilder &) = default; + ConsoleSpanExporterBuilder &operator=(ConsoleSpanExporterBuilder &&) = default; + ConsoleSpanExporterBuilder &operator=(const ConsoleSpanExporterBuilder &other) = default; + virtual ~ConsoleSpanExporterBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const = 0; diff --git a/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h index 5540f05c54..9ed89f5027 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class ExtensionLogRecordExporterBuilder { public: - ExtensionLogRecordExporterBuilder() = default; + ExtensionLogRecordExporterBuilder() = default; + ExtensionLogRecordExporterBuilder(ExtensionLogRecordExporterBuilder &&) = default; + ExtensionLogRecordExporterBuilder(const ExtensionLogRecordExporterBuilder &) = default; + ExtensionLogRecordExporterBuilder &operator=(ExtensionLogRecordExporterBuilder &&) = default; + ExtensionLogRecordExporterBuilder &operator=(const ExtensionLogRecordExporterBuilder &other) = + default; virtual ~ExtensionLogRecordExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h b/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h index 16b251ad21..6af72a570d 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h +++ b/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h @@ -16,7 +16,12 @@ namespace init class ExtensionLogRecordProcessorBuilder { public: - ExtensionLogRecordProcessorBuilder() = default; + ExtensionLogRecordProcessorBuilder() = default; + ExtensionLogRecordProcessorBuilder(ExtensionLogRecordProcessorBuilder &&) = default; + ExtensionLogRecordProcessorBuilder(const ExtensionLogRecordProcessorBuilder &) = default; + ExtensionLogRecordProcessorBuilder &operator=(ExtensionLogRecordProcessorBuilder &&) = default; + ExtensionLogRecordProcessorBuilder &operator=(const ExtensionLogRecordProcessorBuilder &other) = + default; virtual ~ExtensionLogRecordProcessorBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h index f1b55de2ac..abe50567dd 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class ExtensionPullMetricExporterBuilder { public: - ExtensionPullMetricExporterBuilder() = default; + ExtensionPullMetricExporterBuilder() = default; + ExtensionPullMetricExporterBuilder(ExtensionPullMetricExporterBuilder &&) = default; + ExtensionPullMetricExporterBuilder(const ExtensionPullMetricExporterBuilder &) = default; + ExtensionPullMetricExporterBuilder &operator=(ExtensionPullMetricExporterBuilder &&) = default; + ExtensionPullMetricExporterBuilder &operator=(const ExtensionPullMetricExporterBuilder &other) = + default; virtual ~ExtensionPullMetricExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h index af1890de25..9a3c3d0b70 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h @@ -3,7 +3,7 @@ #pragma once -#include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -16,7 +16,12 @@ namespace init class ExtensionPushMetricExporterBuilder { public: - ExtensionPushMetricExporterBuilder() = default; + ExtensionPushMetricExporterBuilder() = default; + ExtensionPushMetricExporterBuilder(ExtensionPushMetricExporterBuilder &&) = default; + ExtensionPushMetricExporterBuilder(const ExtensionPushMetricExporterBuilder &) = default; + ExtensionPushMetricExporterBuilder &operator=(ExtensionPushMetricExporterBuilder &&) = default; + ExtensionPushMetricExporterBuilder &operator=(const ExtensionPushMetricExporterBuilder &other) = + default; virtual ~ExtensionPushMetricExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h b/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h index dcd8498aaf..35c2dc8c00 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h +++ b/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h @@ -16,8 +16,12 @@ namespace init class ExtensionSamplerBuilder { public: - ExtensionSamplerBuilder() = default; - virtual ~ExtensionSamplerBuilder() = default; + ExtensionSamplerBuilder() = default; + ExtensionSamplerBuilder(ExtensionSamplerBuilder &&) = default; + ExtensionSamplerBuilder(const ExtensionSamplerBuilder &) = default; + ExtensionSamplerBuilder &operator=(ExtensionSamplerBuilder &&) = default; + ExtensionSamplerBuilder &operator=(const ExtensionSamplerBuilder &other) = default; + virtual ~ExtensionSamplerBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const = 0; diff --git a/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h index 95e08b2a9b..93de2e634a 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h @@ -16,8 +16,12 @@ namespace init class ExtensionSpanExporterBuilder { public: - ExtensionSpanExporterBuilder() = default; - virtual ~ExtensionSpanExporterBuilder() = default; + ExtensionSpanExporterBuilder() = default; + ExtensionSpanExporterBuilder(ExtensionSpanExporterBuilder &&) = default; + ExtensionSpanExporterBuilder(const ExtensionSpanExporterBuilder &) = default; + ExtensionSpanExporterBuilder &operator=(ExtensionSpanExporterBuilder &&) = default; + ExtensionSpanExporterBuilder &operator=(const ExtensionSpanExporterBuilder &other) = default; + virtual ~ExtensionSpanExporterBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) const = 0; diff --git a/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h b/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h index d4d6ac7ec2..c5db2c1b36 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h +++ b/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h @@ -16,8 +16,12 @@ namespace init class ExtensionSpanProcessorBuilder { public: - ExtensionSpanProcessorBuilder() = default; - virtual ~ExtensionSpanProcessorBuilder() = default; + ExtensionSpanProcessorBuilder() = default; + ExtensionSpanProcessorBuilder(ExtensionSpanProcessorBuilder &&) = default; + ExtensionSpanProcessorBuilder(const ExtensionSpanProcessorBuilder &) = default; + ExtensionSpanProcessorBuilder &operator=(ExtensionSpanProcessorBuilder &&) = default; + ExtensionSpanProcessorBuilder &operator=(const ExtensionSpanProcessorBuilder &other) = default; + virtual ~ExtensionSpanProcessorBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h index 899bcfac22..3a44b0a901 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class OtlpFileLogRecordExporterBuilder { public: - OtlpFileLogRecordExporterBuilder() = default; + OtlpFileLogRecordExporterBuilder() = default; + OtlpFileLogRecordExporterBuilder(OtlpFileLogRecordExporterBuilder &&) = default; + OtlpFileLogRecordExporterBuilder(const OtlpFileLogRecordExporterBuilder &) = default; + OtlpFileLogRecordExporterBuilder &operator=(OtlpFileLogRecordExporterBuilder &&) = default; + OtlpFileLogRecordExporterBuilder &operator=(const OtlpFileLogRecordExporterBuilder &other) = + default; virtual ~OtlpFileLogRecordExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h index f35825cb2d..27e55a685b 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -16,7 +17,12 @@ namespace init class OtlpFilePushMetricExporterBuilder { public: - OtlpFilePushMetricExporterBuilder() = default; + OtlpFilePushMetricExporterBuilder() = default; + OtlpFilePushMetricExporterBuilder(OtlpFilePushMetricExporterBuilder &&) = default; + OtlpFilePushMetricExporterBuilder(const OtlpFilePushMetricExporterBuilder &) = default; + OtlpFilePushMetricExporterBuilder &operator=(OtlpFilePushMetricExporterBuilder &&) = default; + OtlpFilePushMetricExporterBuilder &operator=(const OtlpFilePushMetricExporterBuilder &other) = + default; virtual ~OtlpFilePushMetricExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h index 40b6f07929..97a71c73b9 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h @@ -16,8 +16,12 @@ namespace init class OtlpFileSpanExporterBuilder { public: - OtlpFileSpanExporterBuilder() = default; - virtual ~OtlpFileSpanExporterBuilder() = default; + OtlpFileSpanExporterBuilder() = default; + OtlpFileSpanExporterBuilder(OtlpFileSpanExporterBuilder &&) = default; + OtlpFileSpanExporterBuilder(const OtlpFileSpanExporterBuilder &) = default; + OtlpFileSpanExporterBuilder &operator=(OtlpFileSpanExporterBuilder &&) = default; + OtlpFileSpanExporterBuilder &operator=(const OtlpFileSpanExporterBuilder &other) = default; + virtual ~OtlpFileSpanExporterBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) const = 0; diff --git a/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h index 232c4c1379..4ad109184d 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class OtlpGrpcLogRecordExporterBuilder { public: - OtlpGrpcLogRecordExporterBuilder() = default; + OtlpGrpcLogRecordExporterBuilder() = default; + OtlpGrpcLogRecordExporterBuilder(OtlpGrpcLogRecordExporterBuilder &&) = default; + OtlpGrpcLogRecordExporterBuilder(const OtlpGrpcLogRecordExporterBuilder &) = default; + OtlpGrpcLogRecordExporterBuilder &operator=(OtlpGrpcLogRecordExporterBuilder &&) = default; + OtlpGrpcLogRecordExporterBuilder &operator=(const OtlpGrpcLogRecordExporterBuilder &other) = + default; virtual ~OtlpGrpcLogRecordExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h index 3592356f4d..05a75a2e72 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -16,7 +17,12 @@ namespace init class OtlpGrpcPushMetricExporterBuilder { public: - OtlpGrpcPushMetricExporterBuilder() = default; + OtlpGrpcPushMetricExporterBuilder() = default; + OtlpGrpcPushMetricExporterBuilder(OtlpGrpcPushMetricExporterBuilder &&) = default; + OtlpGrpcPushMetricExporterBuilder(const OtlpGrpcPushMetricExporterBuilder &) = default; + OtlpGrpcPushMetricExporterBuilder &operator=(OtlpGrpcPushMetricExporterBuilder &&) = default; + OtlpGrpcPushMetricExporterBuilder &operator=(const OtlpGrpcPushMetricExporterBuilder &other) = + default; virtual ~OtlpGrpcPushMetricExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h index e1d41b1f69..5cdc193299 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h @@ -16,8 +16,12 @@ namespace init class OtlpGrpcSpanExporterBuilder { public: - OtlpGrpcSpanExporterBuilder() = default; - virtual ~OtlpGrpcSpanExporterBuilder() = default; + OtlpGrpcSpanExporterBuilder() = default; + OtlpGrpcSpanExporterBuilder(OtlpGrpcSpanExporterBuilder &&) = default; + OtlpGrpcSpanExporterBuilder(const OtlpGrpcSpanExporterBuilder &) = default; + OtlpGrpcSpanExporterBuilder &operator=(OtlpGrpcSpanExporterBuilder &&) = default; + OtlpGrpcSpanExporterBuilder &operator=(const OtlpGrpcSpanExporterBuilder &other) = default; + virtual ~OtlpGrpcSpanExporterBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const = 0; diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h index 97e6cd0afb..a0f459e52f 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class OtlpHttpLogRecordExporterBuilder { public: - OtlpHttpLogRecordExporterBuilder() = default; + OtlpHttpLogRecordExporterBuilder() = default; + OtlpHttpLogRecordExporterBuilder(OtlpHttpLogRecordExporterBuilder &&) = default; + OtlpHttpLogRecordExporterBuilder(const OtlpHttpLogRecordExporterBuilder &) = default; + OtlpHttpLogRecordExporterBuilder &operator=(OtlpHttpLogRecordExporterBuilder &&) = default; + OtlpHttpLogRecordExporterBuilder &operator=(const OtlpHttpLogRecordExporterBuilder &other) = + default; virtual ~OtlpHttpLogRecordExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h index 8f1828fd75..1825dcd00d 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -16,7 +17,12 @@ namespace init class OtlpHttpPushMetricExporterBuilder { public: - OtlpHttpPushMetricExporterBuilder() = default; + OtlpHttpPushMetricExporterBuilder() = default; + OtlpHttpPushMetricExporterBuilder(OtlpHttpPushMetricExporterBuilder &&) = default; + OtlpHttpPushMetricExporterBuilder(const OtlpHttpPushMetricExporterBuilder &) = default; + OtlpHttpPushMetricExporterBuilder &operator=(OtlpHttpPushMetricExporterBuilder &&) = default; + OtlpHttpPushMetricExporterBuilder &operator=(const OtlpHttpPushMetricExporterBuilder &other) = + default; virtual ~OtlpHttpPushMetricExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h index de5cbf8624..f3c61ca9e5 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h @@ -16,8 +16,12 @@ namespace init class OtlpHttpSpanExporterBuilder { public: - OtlpHttpSpanExporterBuilder() = default; - virtual ~OtlpHttpSpanExporterBuilder() = default; + OtlpHttpSpanExporterBuilder() = default; + OtlpHttpSpanExporterBuilder(OtlpHttpSpanExporterBuilder &&) = default; + OtlpHttpSpanExporterBuilder(const OtlpHttpSpanExporterBuilder &) = default; + OtlpHttpSpanExporterBuilder &operator=(OtlpHttpSpanExporterBuilder &&) = default; + OtlpHttpSpanExporterBuilder &operator=(const OtlpHttpSpanExporterBuilder &other) = default; + virtual ~OtlpHttpSpanExporterBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const = 0; diff --git a/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h index 56d9e1d39b..bd9a0384fe 100644 --- a/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h @@ -16,7 +16,12 @@ namespace init class PrometheusPullMetricExporterBuilder { public: - PrometheusPullMetricExporterBuilder() = default; + PrometheusPullMetricExporterBuilder() = default; + PrometheusPullMetricExporterBuilder(PrometheusPullMetricExporterBuilder &&) = default; + PrometheusPullMetricExporterBuilder(const PrometheusPullMetricExporterBuilder &) = default; + PrometheusPullMetricExporterBuilder &operator=(PrometheusPullMetricExporterBuilder &&) = default; + PrometheusPullMetricExporterBuilder &operator=(const PrometheusPullMetricExporterBuilder &other) = + default; virtual ~PrometheusPullMetricExporterBuilder() = default; virtual std::unique_ptr Build( diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/init/registry.h index f5b0995288..018bd9470e 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/init/registry.h @@ -42,6 +42,11 @@ class Registry { public: Registry(); + Registry(Registry &&) = default; + Registry(const Registry &) = default; + Registry &operator=(Registry &&) = default; + Registry &operator=(const Registry &other) = default; + ~Registry() = default; /* Core optional components. */ diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 16441dc1fc..8ef498838b 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -31,6 +31,7 @@ #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" +#include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/sdk/logs/logger_provider.h" @@ -40,6 +41,7 @@ #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" @@ -53,8 +55,12 @@ namespace init class SdkBuilder { public: - SdkBuilder(std::shared_ptr registry) : m_registry(registry) {} - ~SdkBuilder() = default; + SdkBuilder(std::shared_ptr registry) : m_registry(std::move(registry)) {} + SdkBuilder(SdkBuilder &&) = default; + SdkBuilder(const SdkBuilder &) = default; + SdkBuilder &operator=(SdkBuilder &&) = default; + SdkBuilder &operator=(const SdkBuilder &other) = default; + ~SdkBuilder() = default; std::unique_ptr CreateAlwaysOffSampler( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) const; diff --git a/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h b/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h index 0e1825c420..850c4e7845 100644 --- a/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h +++ b/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h @@ -15,8 +15,12 @@ namespace init class TextMapPropagatorBuilder { public: - TextMapPropagatorBuilder() = default; - virtual ~TextMapPropagatorBuilder() = default; + TextMapPropagatorBuilder() = default; + TextMapPropagatorBuilder(TextMapPropagatorBuilder &&) = default; + TextMapPropagatorBuilder(const TextMapPropagatorBuilder &) = default; + TextMapPropagatorBuilder &operator=(TextMapPropagatorBuilder &&) = default; + TextMapPropagatorBuilder &operator=(const TextMapPropagatorBuilder &other) = default; + virtual ~TextMapPropagatorBuilder() = default; virtual std::unique_ptr Build() const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/init/unsupported_exception.h b/sdk/include/opentelemetry/sdk/init/unsupported_exception.h index 3dc4face55..f06b5d1689 100644 --- a/sdk/include/opentelemetry/sdk/init/unsupported_exception.h +++ b/sdk/include/opentelemetry/sdk/init/unsupported_exception.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include "opentelemetry/version.h" @@ -17,8 +18,11 @@ class UnsupportedException : public std::runtime_error { public: UnsupportedException(const std::string &msg) : std::runtime_error(msg) {} - - ~UnsupportedException() override = default; + UnsupportedException(UnsupportedException &&) = default; + UnsupportedException(const UnsupportedException &) = default; + UnsupportedException &operator=(UnsupportedException &&) = default; + UnsupportedException &operator=(const UnsupportedException &other) = default; + ~UnsupportedException() override = default; }; } // namespace init diff --git a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h index b2b745152e..d9b85a4fb6 100644 --- a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h @@ -16,8 +16,12 @@ namespace init class ZipkinSpanExporterBuilder { public: - ZipkinSpanExporterBuilder() = default; - virtual ~ZipkinSpanExporterBuilder() = default; + ZipkinSpanExporterBuilder() = default; + ZipkinSpanExporterBuilder(ZipkinSpanExporterBuilder &&) = default; + ZipkinSpanExporterBuilder(const ZipkinSpanExporterBuilder &) = default; + ZipkinSpanExporterBuilder &operator=(ZipkinSpanExporterBuilder &&) = default; + ZipkinSpanExporterBuilder &operator=(const ZipkinSpanExporterBuilder &other) = default; + virtual ~ZipkinSpanExporterBuilder() = default; virtual std::unique_ptr Build( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const = 0; diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index be16fca4f9..6d36698f8e 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -37,7 +37,7 @@ std::unique_ptr ConfiguredSdk::Create( { try { - SdkBuilder builder(registry); + SdkBuilder builder(std::move(registry)); sdk = builder.CreateConfiguredSdk(model); } catch (const std::exception &e) diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index f10cb40840..2490f5624f 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -27,9 +27,6 @@ namespace init class TraceContextBuilder : public TextMapPropagatorBuilder { public: - TraceContextBuilder() = default; - virtual ~TraceContextBuilder() override = default; - std::unique_ptr Build() const override { return std::unique_ptr( @@ -40,9 +37,6 @@ class TraceContextBuilder : public TextMapPropagatorBuilder class BaggageBuilder : public TextMapPropagatorBuilder { public: - BaggageBuilder() = default; - virtual ~BaggageBuilder() override = default; - std::unique_ptr Build() const override { return std::unique_ptr( @@ -53,9 +47,6 @@ class BaggageBuilder : public TextMapPropagatorBuilder class B3Builder : public TextMapPropagatorBuilder { public: - B3Builder() = default; - virtual ~B3Builder() override = default; - std::unique_ptr Build() const override { return std::unique_ptr( @@ -66,9 +57,6 @@ class B3Builder : public TextMapPropagatorBuilder class B3MultiBuilder : public TextMapPropagatorBuilder { public: - B3MultiBuilder() = default; - virtual ~B3MultiBuilder() override = default; - std::unique_ptr Build() const override { return std::unique_ptr( @@ -80,9 +68,6 @@ class B3MultiBuilder : public TextMapPropagatorBuilder class JaegerBuilder : public TextMapPropagatorBuilder { public: - JaegerBuilder() = default; - virtual ~JaegerBuilder() override = default; - std::unique_ptr Build() const override { return std::unique_ptr( diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index b9b020e29b..d2265b3ea1 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -145,7 +145,11 @@ class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigur { public: SamplerBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~SamplerBuilder() override = default; + SamplerBuilder(SamplerBuilder &&) = default; + SamplerBuilder(const SamplerBuilder &) = default; + SamplerBuilder &operator=(SamplerBuilder &&) = default; + SamplerBuilder &operator=(const SamplerBuilder &other) = default; + ~SamplerBuilder() override = default; void VisitAlwaysOff( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) override @@ -195,7 +199,11 @@ class SpanProcessorBuilder { public: SpanProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~SpanProcessorBuilder() override = default; + SpanProcessorBuilder(SpanProcessorBuilder &&) = default; + SpanProcessorBuilder(const SpanProcessorBuilder &) = default; + SpanProcessorBuilder &operator=(SpanProcessorBuilder &&) = default; + SpanProcessorBuilder &operator=(const SpanProcessorBuilder &other) = default; + ~SpanProcessorBuilder() override = default; void VisitBatch( const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) override @@ -226,7 +234,11 @@ class SpanExporterBuilder { public: SpanExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~SpanExporterBuilder() override = default; + SpanExporterBuilder(SpanExporterBuilder &&) = default; + SpanExporterBuilder(const SpanExporterBuilder &) = default; + SpanExporterBuilder &operator=(SpanExporterBuilder &&) = default; + SpanExporterBuilder &operator=(const SpanExporterBuilder &other) = default; + ~SpanExporterBuilder() override = default; void VisitOtlpHttp( const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) override @@ -275,7 +287,11 @@ class MetricReaderBuilder { public: MetricReaderBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~MetricReaderBuilder() override = default; + MetricReaderBuilder(MetricReaderBuilder &&) = default; + MetricReaderBuilder(const MetricReaderBuilder &) = default; + MetricReaderBuilder &operator=(MetricReaderBuilder &&) = default; + MetricReaderBuilder &operator=(const MetricReaderBuilder &other) = default; + ~MetricReaderBuilder() override = default; void VisitPeriodic( const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model) override @@ -300,7 +316,11 @@ class PushMetricExporterBuilder { public: PushMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~PushMetricExporterBuilder() override = default; + PushMetricExporterBuilder(PushMetricExporterBuilder &&) = default; + PushMetricExporterBuilder(const PushMetricExporterBuilder &) = default; + PushMetricExporterBuilder &operator=(PushMetricExporterBuilder &&) = default; + PushMetricExporterBuilder &operator=(const PushMetricExporterBuilder &other) = default; + ~PushMetricExporterBuilder() override = default; void VisitOtlpHttp( const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) @@ -347,7 +367,11 @@ class PullMetricExporterBuilder { public: PullMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~PullMetricExporterBuilder() override = default; + PullMetricExporterBuilder(PullMetricExporterBuilder &&) = default; + PullMetricExporterBuilder(const PullMetricExporterBuilder &) = default; + PullMetricExporterBuilder &operator=(PullMetricExporterBuilder &&) = default; + PullMetricExporterBuilder &operator=(const PullMetricExporterBuilder &other) = default; + ~PullMetricExporterBuilder() override = default; void VisitPrometheus( const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) @@ -374,7 +398,11 @@ class LogRecordProcessorBuilder { public: LogRecordProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~LogRecordProcessorBuilder() override = default; + LogRecordProcessorBuilder(LogRecordProcessorBuilder &&) = default; + LogRecordProcessorBuilder(const LogRecordProcessorBuilder &) = default; + LogRecordProcessorBuilder &operator=(LogRecordProcessorBuilder &&) = default; + LogRecordProcessorBuilder &operator=(const LogRecordProcessorBuilder &other) = default; + ~LogRecordProcessorBuilder() override = default; void VisitBatch( const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) override @@ -406,7 +434,11 @@ class LogRecordExporterBuilder { public: LogRecordExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - ~LogRecordExporterBuilder() override = default; + LogRecordExporterBuilder(LogRecordExporterBuilder &&) = default; + LogRecordExporterBuilder(const LogRecordExporterBuilder &) = default; + LogRecordExporterBuilder &operator=(LogRecordExporterBuilder &&) = default; + LogRecordExporterBuilder &operator=(const LogRecordExporterBuilder &other) = default; + ~LogRecordExporterBuilder() override = default; void VisitOtlpHttp(const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) override From 1576f56505f74b9daae4969c1465ce3e4a69b5be Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 27 Jun 2025 01:30:35 +0200 Subject: [PATCH 098/166] cleanup for clang-tidy, build break. --- sdk/src/init/sdk_builder.cc | 64 ++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index d2265b3ea1..7e9dde98ba 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -145,10 +145,10 @@ class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigur { public: SamplerBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - SamplerBuilder(SamplerBuilder &&) = default; - SamplerBuilder(const SamplerBuilder &) = default; - SamplerBuilder &operator=(SamplerBuilder &&) = default; - SamplerBuilder &operator=(const SamplerBuilder &other) = default; + SamplerBuilder(SamplerBuilder &&) = delete; + SamplerBuilder(const SamplerBuilder &) = delete; + SamplerBuilder &operator=(SamplerBuilder &&) = delete; + SamplerBuilder &operator=(const SamplerBuilder &other) = delete; ~SamplerBuilder() override = default; void VisitAlwaysOff( @@ -199,10 +199,10 @@ class SpanProcessorBuilder { public: SpanProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - SpanProcessorBuilder(SpanProcessorBuilder &&) = default; - SpanProcessorBuilder(const SpanProcessorBuilder &) = default; - SpanProcessorBuilder &operator=(SpanProcessorBuilder &&) = default; - SpanProcessorBuilder &operator=(const SpanProcessorBuilder &other) = default; + SpanProcessorBuilder(SpanProcessorBuilder &&) = delete; + SpanProcessorBuilder(const SpanProcessorBuilder &) = delete; + SpanProcessorBuilder &operator=(SpanProcessorBuilder &&) = delete; + SpanProcessorBuilder &operator=(const SpanProcessorBuilder &other) = delete; ~SpanProcessorBuilder() override = default; void VisitBatch( @@ -234,10 +234,10 @@ class SpanExporterBuilder { public: SpanExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - SpanExporterBuilder(SpanExporterBuilder &&) = default; - SpanExporterBuilder(const SpanExporterBuilder &) = default; - SpanExporterBuilder &operator=(SpanExporterBuilder &&) = default; - SpanExporterBuilder &operator=(const SpanExporterBuilder &other) = default; + SpanExporterBuilder(SpanExporterBuilder &&) = delete; + SpanExporterBuilder(const SpanExporterBuilder &) = delete; + SpanExporterBuilder &operator=(SpanExporterBuilder &&) = delete; + SpanExporterBuilder &operator=(const SpanExporterBuilder &other) = delete; ~SpanExporterBuilder() override = default; void VisitOtlpHttp( @@ -287,10 +287,10 @@ class MetricReaderBuilder { public: MetricReaderBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - MetricReaderBuilder(MetricReaderBuilder &&) = default; - MetricReaderBuilder(const MetricReaderBuilder &) = default; - MetricReaderBuilder &operator=(MetricReaderBuilder &&) = default; - MetricReaderBuilder &operator=(const MetricReaderBuilder &other) = default; + MetricReaderBuilder(MetricReaderBuilder &&) = delete; + MetricReaderBuilder(const MetricReaderBuilder &) = delete; + MetricReaderBuilder &operator=(MetricReaderBuilder &&) = delete; + MetricReaderBuilder &operator=(const MetricReaderBuilder &other) = delete; ~MetricReaderBuilder() override = default; void VisitPeriodic( @@ -316,10 +316,10 @@ class PushMetricExporterBuilder { public: PushMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - PushMetricExporterBuilder(PushMetricExporterBuilder &&) = default; - PushMetricExporterBuilder(const PushMetricExporterBuilder &) = default; - PushMetricExporterBuilder &operator=(PushMetricExporterBuilder &&) = default; - PushMetricExporterBuilder &operator=(const PushMetricExporterBuilder &other) = default; + PushMetricExporterBuilder(PushMetricExporterBuilder &&) = delete; + PushMetricExporterBuilder(const PushMetricExporterBuilder &) = delete; + PushMetricExporterBuilder &operator=(PushMetricExporterBuilder &&) = delete; + PushMetricExporterBuilder &operator=(const PushMetricExporterBuilder &other) = delete; ~PushMetricExporterBuilder() override = default; void VisitOtlpHttp( @@ -367,10 +367,10 @@ class PullMetricExporterBuilder { public: PullMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - PullMetricExporterBuilder(PullMetricExporterBuilder &&) = default; - PullMetricExporterBuilder(const PullMetricExporterBuilder &) = default; - PullMetricExporterBuilder &operator=(PullMetricExporterBuilder &&) = default; - PullMetricExporterBuilder &operator=(const PullMetricExporterBuilder &other) = default; + PullMetricExporterBuilder(PullMetricExporterBuilder &&) = delete; + PullMetricExporterBuilder(const PullMetricExporterBuilder &) = delete; + PullMetricExporterBuilder &operator=(PullMetricExporterBuilder &&) = delete; + PullMetricExporterBuilder &operator=(const PullMetricExporterBuilder &other) = delete; ~PullMetricExporterBuilder() override = default; void VisitPrometheus( @@ -398,10 +398,10 @@ class LogRecordProcessorBuilder { public: LogRecordProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - LogRecordProcessorBuilder(LogRecordProcessorBuilder &&) = default; - LogRecordProcessorBuilder(const LogRecordProcessorBuilder &) = default; - LogRecordProcessorBuilder &operator=(LogRecordProcessorBuilder &&) = default; - LogRecordProcessorBuilder &operator=(const LogRecordProcessorBuilder &other) = default; + LogRecordProcessorBuilder(LogRecordProcessorBuilder &&) = delete; + LogRecordProcessorBuilder(const LogRecordProcessorBuilder &) = delete; + LogRecordProcessorBuilder &operator=(LogRecordProcessorBuilder &&) = delete; + LogRecordProcessorBuilder &operator=(const LogRecordProcessorBuilder &other) = delete; ~LogRecordProcessorBuilder() override = default; void VisitBatch( @@ -434,10 +434,10 @@ class LogRecordExporterBuilder { public: LogRecordExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - LogRecordExporterBuilder(LogRecordExporterBuilder &&) = default; - LogRecordExporterBuilder(const LogRecordExporterBuilder &) = default; - LogRecordExporterBuilder &operator=(LogRecordExporterBuilder &&) = default; - LogRecordExporterBuilder &operator=(const LogRecordExporterBuilder &other) = default; + LogRecordExporterBuilder(LogRecordExporterBuilder &&) = delete; + LogRecordExporterBuilder(const LogRecordExporterBuilder &) = delete; + LogRecordExporterBuilder &operator=(LogRecordExporterBuilder &&) = delete; + LogRecordExporterBuilder &operator=(const LogRecordExporterBuilder &other) = delete; ~LogRecordExporterBuilder() override = default; void VisitOtlpHttp(const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration From 182fbb2bdc70775bc528b2a5c75a76ba67c9f862 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 27 Jun 2025 02:39:46 +0200 Subject: [PATCH 099/166] Cleanup, continued. --- .../configuration/configuration_factory.cc | 6 +++++ sdk/src/configuration/document_node.cc | 24 +++++++++++-------- sdk/src/init/configured_sdk.cc | 1 + 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_factory.cc index a454d9e8b5..722861abca 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_factory.cc @@ -974,6 +974,7 @@ static std::unique_ptr ParseAlwaysOnSamplerConfigu return model; } +// NOLINTBEGIN(misc-no-recursion) static std::unique_ptr ParseJaegerRemoteSamplerConfiguration( const std::unique_ptr &node, size_t depth) @@ -995,7 +996,9 @@ static std::unique_ptr ParseJaegerRemoteSample return model; } +// NOLINTEND(misc-no-recursion) +// NOLINTBEGIN(misc-no-recursion) static std::unique_ptr ParseParentBasedSamplerConfiguration( const std::unique_ptr &node, size_t depth) @@ -1035,6 +1038,7 @@ static std::unique_ptr ParseParentBasedSamplerC return model; } +// NOLINTEND(misc-no-recursion) static std::unique_ptr ParseTraceIdRatioBasedSamplerConfiguration(const std::unique_ptr &node, @@ -1061,6 +1065,7 @@ static std::unique_ptr ParseSamplerExtensionConfi return model; } +// NOLINTBEGIN(misc-no-recursion) static std::unique_ptr ParseSamplerConfiguration( const std::unique_ptr &node, size_t depth) @@ -1121,6 +1126,7 @@ static std::unique_ptr ParseSamplerConfiguration( return model; } +// NOLINTEND(misc-no-recursion) static std::unique_ptr ParseOtlpHttpSpanExporterConfiguration( const std::unique_ptr &node) diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index 69817baa0f..ce1a78523f 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -91,6 +91,8 @@ std::string DocumentNode::DoSubstitution(const std::string &text) */ std::string DocumentNode::DoOneSubstitution(const std::string &text) { + static std::string illegal_msg{"Illegal substitution expression"}; + static std::string env_token{"env:"}; static std::string env_with_replacement{"env:-"}; static std::string replacement_token{":-"}; @@ -108,25 +110,29 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) if (len < 4) { - goto illegal; + OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); + throw InvalidSchemaException(illegal_msg); } c = text[0]; if (c != '$') { - goto illegal; + OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); + throw InvalidSchemaException(illegal_msg); } c = text[1]; if (c != '{') { - goto illegal; + OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); + throw InvalidSchemaException(illegal_msg); } c = text[len - 1]; if (c != '}') { - goto illegal; + OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); + throw InvalidSchemaException(illegal_msg); } begin_name = 2; @@ -148,7 +154,8 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) c = text[begin_name]; if (!std::isalpha(c) && c != '_') { - goto illegal; + OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); + throw InvalidSchemaException(illegal_msg); } end_name = begin_name + 1; @@ -181,7 +188,8 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) pos = text.find(replacement_token, end_name); if (pos != end_name) { - goto illegal; + OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); + throw InvalidSchemaException(illegal_msg); } // text is of the form ${ENV_NAME:-fallback} begin_fallback = pos + replacement_token.length(); @@ -203,10 +211,6 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) fallback = ""; } return fallback; - -illegal: - OTEL_INTERNAL_LOG_ERROR("Illegal substitution expression: " << text); - throw InvalidSchemaException("Illegal substitution expression"); } bool DocumentNode::BooleanFromString(const std::string &value) diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/init/configured_sdk.cc index 6d36698f8e..feffab168d 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/init/configured_sdk.cc @@ -4,6 +4,7 @@ #include #include #include +#include #include "opentelemetry/logs/logger_provider.h" #include "opentelemetry/logs/provider.h" From 343d723badfdb409293183f6de60e7264376b9d2 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 27 Jun 2025 09:07:48 +0200 Subject: [PATCH 100/166] more clang-tidy cleanup --- examples/yaml/custom_sampler.h | 6 +++++- examples/yaml/custom_sampler_builder.h | 3 --- examples/yaml/custom_span_exporter.h | 6 +++++- examples/yaml/custom_span_exporter_builder.h | 3 --- examples/yaml/custom_span_processor.cc | 3 ++- examples/yaml/custom_span_processor.h | 6 +++++- examples/yaml/custom_span_processor_builder.h | 3 --- examples/yaml/main.cc | 6 +++--- sdk/test/configuration/yaml_resource_test.cc | 3 ++- sdk/test/configuration/yaml_test.cc | 3 ++- sdk/test/configuration/yaml_trace_test.cc | 3 ++- 11 files changed, 26 insertions(+), 19 deletions(-) diff --git a/examples/yaml/custom_sampler.h b/examples/yaml/custom_sampler.h index e2d3f8d087..3c03be0e2e 100644 --- a/examples/yaml/custom_sampler.h +++ b/examples/yaml/custom_sampler.h @@ -17,7 +17,11 @@ class CustomSampler : public opentelemetry::sdk::trace::Sampler { public: CustomSampler(const std::string & /* comment */) {} - ~CustomSampler() override = default; + CustomSampler(CustomSampler &&) = delete; + CustomSampler(const CustomSampler &) = delete; + CustomSampler &operator=(CustomSampler &&) = delete; + CustomSampler &operator=(const CustomSampler &other) = delete; + ~CustomSampler() override = default; opentelemetry::sdk::trace::SamplingResult ShouldSample( const opentelemetry::trace::SpanContext &parent_context, diff --git a/examples/yaml/custom_sampler_builder.h b/examples/yaml/custom_sampler_builder.h index e347a4cc48..23e6b08b72 100644 --- a/examples/yaml/custom_sampler_builder.h +++ b/examples/yaml/custom_sampler_builder.h @@ -15,9 +15,6 @@ class CustomSamplerBuilder : public opentelemetry::sdk::init::ExtensionSamplerBu public: static void Register(opentelemetry::sdk::init::Registry *registry); - CustomSamplerBuilder() = default; - ~CustomSamplerBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const override; }; diff --git a/examples/yaml/custom_span_exporter.h b/examples/yaml/custom_span_exporter.h index 24797e0b01..d6d92599d2 100644 --- a/examples/yaml/custom_span_exporter.h +++ b/examples/yaml/custom_span_exporter.h @@ -16,7 +16,11 @@ class CustomSpanExporter : public opentelemetry::sdk::trace::SpanExporter { public: CustomSpanExporter(const std::string & /* comment */) {} - ~CustomSpanExporter() override = default; + CustomSpanExporter(CustomSpanExporter &&) = delete; + CustomSpanExporter(const CustomSpanExporter &) = delete; + CustomSpanExporter &operator=(CustomSpanExporter &&) = delete; + CustomSpanExporter &operator=(const CustomSpanExporter &other) = delete; + ~CustomSpanExporter() override = default; std::unique_ptr MakeRecordable() noexcept override; diff --git a/examples/yaml/custom_span_exporter_builder.h b/examples/yaml/custom_span_exporter_builder.h index c8246942cd..526242762a 100644 --- a/examples/yaml/custom_span_exporter_builder.h +++ b/examples/yaml/custom_span_exporter_builder.h @@ -15,9 +15,6 @@ class CustomSpanExporterBuilder : public opentelemetry::sdk::init::ExtensionSpan public: static void Register(opentelemetry::sdk::init::Registry *registry); - CustomSpanExporterBuilder() = default; - ~CustomSpanExporterBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) const override; diff --git a/examples/yaml/custom_span_processor.cc b/examples/yaml/custom_span_processor.cc index 1dea908585..6d60c6f4d6 100644 --- a/examples/yaml/custom_span_processor.cc +++ b/examples/yaml/custom_span_processor.cc @@ -23,9 +23,10 @@ void CustomSpanProcessor::OnStart( } void CustomSpanProcessor::OnEnd( - std::unique_ptr && /* span */) noexcept + std::unique_ptr &&span) noexcept { OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnEnd(): FIXME"); + auto unused = std::move(span); } bool CustomSpanProcessor::ForceFlush(std::chrono::microseconds /* timeout */) noexcept diff --git a/examples/yaml/custom_span_processor.h b/examples/yaml/custom_span_processor.h index 7d0dae38de..d87b2fc1af 100644 --- a/examples/yaml/custom_span_processor.h +++ b/examples/yaml/custom_span_processor.h @@ -15,7 +15,11 @@ class CustomSpanProcessor : public opentelemetry::sdk::trace::SpanProcessor { public: CustomSpanProcessor(const std::string &comment) : m_comment(comment) {} - ~CustomSpanProcessor() override = default; + CustomSpanProcessor(CustomSpanProcessor &&) = delete; + CustomSpanProcessor(const CustomSpanProcessor &) = delete; + CustomSpanProcessor &operator=(CustomSpanProcessor &&) = delete; + CustomSpanProcessor &operator=(const CustomSpanProcessor &other) = delete; + ~CustomSpanProcessor() override = default; std::unique_ptr MakeRecordable() noexcept override; diff --git a/examples/yaml/custom_span_processor_builder.h b/examples/yaml/custom_span_processor_builder.h index 8438531ab1..481cbc9d56 100644 --- a/examples/yaml/custom_span_processor_builder.h +++ b/examples/yaml/custom_span_processor_builder.h @@ -15,9 +15,6 @@ class CustomSpanProcessorBuilder : public opentelemetry::sdk::init::ExtensionSpa public: static void Register(opentelemetry::sdk::init::Registry *registry); - CustomSpanProcessorBuilder() = default; - ~CustomSpanProcessorBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) const override; diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 7956cbec75..6db0d8313f 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -56,7 +56,7 @@ static bool opt_help = false; static std::string yaml_file_path = ""; -std::unique_ptr sdk; +static std::unique_ptr sdk; namespace { @@ -138,7 +138,7 @@ void CleanupOtel() } } // namespace -void usage(FILE *out) +static void usage(FILE *out) { static const char *msg = "Usage: example_yaml [options]\n" @@ -154,7 +154,7 @@ void usage(FILE *out) fprintf(out, "%s", msg); } -int parse_args(int argc, char *argv[]) +static int parse_args(int argc, char *argv[]) { int remaining_argc = argc; char **remaining_argv = argv; diff --git a/sdk/test/configuration/yaml_resource_test.cc b/sdk/test/configuration/yaml_resource_test.cc index 701ddf5577..08ae76f7bc 100644 --- a/sdk/test/configuration/yaml_resource_test.cc +++ b/sdk/test/configuration/yaml_resource_test.cc @@ -14,7 +14,8 @@ #include "opentelemetry/sdk/configuration/string_array_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -std::unique_ptr DoParse(const std::string &yaml) +static std::unique_ptr DoParse( + const std::string &yaml) { static const std::string source("test"); return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index e3398a3d78..39856cf909 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -12,7 +12,8 @@ #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -std::unique_ptr DoParse(const std::string &yaml) +static std::unique_ptr DoParse( + const std::string &yaml) { static const std::string source("test"); return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc index e448d3305f..c2e58e0070 100644 --- a/sdk/test/configuration/yaml_trace_test.cc +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -8,7 +8,8 @@ #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" -std::unique_ptr DoParse(const std::string &yaml) +static std::unique_ptr DoParse( + const std::string &yaml) { static const std::string source("test"); return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); From c0f37aba821a863aa3c4dcb8314c655191775873 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 27 Jun 2025 14:46:48 +0200 Subject: [PATCH 101/166] cleanup --- .github/workflows/clang-tidy.yaml | 4 ++-- examples/yaml/custom_span_processor.cc | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/clang-tidy.yaml b/.github/workflows/clang-tidy.yaml index 3df346892c..2ffde819ac 100644 --- a/.github/workflows/clang-tidy.yaml +++ b/.github/workflows/clang-tidy.yaml @@ -17,9 +17,9 @@ jobs: matrix: include: - cmake_options: all-options-abiv1-preview - warning_limit: 86 + warning_limit: 88 - cmake_options: all-options-abiv2-preview - warning_limit: 86 + warning_limit: 88 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1 diff --git a/examples/yaml/custom_span_processor.cc b/examples/yaml/custom_span_processor.cc index 6d60c6f4d6..7d88d23af7 100644 --- a/examples/yaml/custom_span_processor.cc +++ b/examples/yaml/custom_span_processor.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/trace/recordable.h" #include "opentelemetry/sdk/trace/span_data.h" From fbb5b98c34549d0d8d631a6778c80bdd470312eb Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 28 Jun 2025 01:09:51 +0200 Subject: [PATCH 102/166] Misc fixes --- examples/yaml/main.cc | 4 +- ...ation_factory.h => configuration_parser.h} | 4 +- ..._file_push_metric_exporter_configuration.h | 3 +- ..._grpc_push_metric_exporter_configuration.h | 3 +- ..._http_push_metric_exporter_configuration.h | 3 +- .../configuration/temporality_preference.h | 25 ++++++++++ ..._factory.h => yaml_configuration_parser.h} | 2 +- sdk/src/configuration/CMakeLists.txt | 2 +- ...ion_factory.cc => configuration_parser.cc} | 49 ++++++++++++++----- ...actory.cc => yaml_configuration_parser.cc} | 19 ++++--- sdk/test/configuration/yaml_resource_test.cc | 4 +- sdk/test/configuration/yaml_test.cc | 4 +- sdk/test/configuration/yaml_trace_test.cc | 4 +- 13 files changed, 89 insertions(+), 37 deletions(-) rename sdk/include/opentelemetry/sdk/configuration/{configuration_factory.h => configuration_parser.h} (78%) create mode 100644 sdk/include/opentelemetry/sdk/configuration/temporality_preference.h rename sdk/include/opentelemetry/sdk/configuration/{yaml_configuration_factory.h => yaml_configuration_parser.h} (95%) rename sdk/src/configuration/{configuration_factory.cc => configuration_parser.cc} (97%) rename sdk/src/configuration/{yaml_configuration_factory.cc => yaml_configuration_parser.cc} (70%) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 6db0d8313f..8416f191e0 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -11,7 +11,7 @@ #include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" @@ -114,7 +114,7 @@ void InitOtel(const std::string &config_file) // See // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml - auto model = opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseFile(config_file); + auto model = opentelemetry::sdk::configuration::YamlConfigurationParser::ParseFile(config_file); /* 5 - Build the SDK from the parsed config.yaml */ diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/configuration_parser.h similarity index 78% rename from sdk/include/opentelemetry/sdk/configuration/configuration_factory.h rename to sdk/include/opentelemetry/sdk/configuration/configuration_parser.h index 54ab49efb5..cd4f6e3af5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration_parser.h @@ -15,10 +15,10 @@ namespace sdk namespace configuration { -class ConfigurationFactory +class ConfigurationParser { public: - static std::unique_ptr ParseConfiguration(std::unique_ptr doc); + static std::unique_ptr Parse(std::unique_ptr doc); }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h index dae68fd19f..48f27434b5 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h @@ -9,6 +9,7 @@ #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -28,7 +29,7 @@ class OtlpFilePushMetricExporterConfiguration : public PushMetricExporterConfigu } std::string output_stream; - std::string temporality_preference; // FIXME: enum + enum_temporality_preference temporality_preference{cumulative}; enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h index 3a7dbf5aaf..8a3ec69de2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -10,6 +10,7 @@ #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -37,7 +38,7 @@ class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfigu std::string compression; std::size_t timeout{0}; bool insecure{false}; - std::string temporality_preference; // FIXME: enum + enum_temporality_preference temporality_preference{cumulative}; enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h index d54f48e9a1..bfac17be4e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -11,6 +11,7 @@ #include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -38,7 +39,7 @@ class OtlpHttpPushMetricExporterConfiguration : public PushMetricExporterConfigu std::string compression; std::size_t timeout{0}; enum_otlp_http_encoding encoding{protobuf}; - std::string temporality_preference; // FIXME: enum + enum_temporality_preference temporality_preference{cumulative}; enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/temporality_preference.h b/sdk/include/opentelemetry/sdk/configuration/temporality_preference.h new file mode 100644 index 0000000000..0b80aa6e3b --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/temporality_preference.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +enum enum_temporality_preference : std::uint8_t +{ + cumulative, + delta, + low_memory +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_parser.h similarity index 95% rename from sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h rename to sdk/include/opentelemetry/sdk/configuration/yaml_configuration_parser.h index b0add0c728..e5a326b88b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h +++ b/sdk/include/opentelemetry/sdk/configuration/yaml_configuration_parser.h @@ -15,7 +15,7 @@ namespace sdk namespace configuration { -class YamlConfigurationFactory +class YamlConfigurationParser { public: static std::unique_ptr ParseFile(const std::string &filename); diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index 47d298fa19..761b1fa07c 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -3,7 +3,7 @@ add_library( opentelemetry_configuration - configuration_factory.cc document_node.cc yaml_configuration_factory.cc + configuration_parser.cc document_node.cc yaml_configuration_parser.cc ryml_document.cc ryml_document_node.cc) set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME diff --git a/sdk/src/configuration/configuration_factory.cc b/sdk/src/configuration/configuration_parser.cc similarity index 97% rename from sdk/src/configuration/configuration_factory.cc rename to sdk/src/configuration/configuration_parser.cc index 722861abca..d9f64a9dc6 100644 --- a/sdk/src/configuration/configuration_factory.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -19,7 +19,7 @@ #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/configuration_parser.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" @@ -394,6 +394,27 @@ static enum_default_histogram_aggregation ParseDefaultHistogramAggregation(const throw InvalidSchemaException("Illegal default_histogram_aggregation"); } +static enum_temporality_preference ParseTemporalityPreference(const std::string &name) +{ + if (name == "cumulative") + { + return cumulative; + } + + if (name == "delta") + { + return delta; + } + + if (name == "low_memory") + { + return low_memory; + } + + OTEL_INTERNAL_LOG_ERROR("ParseTemporalityPreference: name = " << name); + throw InvalidSchemaException("Illegal temporality preference"); +} + static std::unique_ptr ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr &node) { @@ -412,10 +433,12 @@ ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr model->headers = ParseHeadersConfiguration(child); } - model->headers_list = node->GetString("headers_list", ""); - model->compression = node->GetString("compression", ""); - model->timeout = node->GetInteger("timeout", 10000); - model->temporality_preference = node->GetString("temporality_preference", ""); + model->headers_list = node->GetString("headers_list", ""); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + + std::string temporality_preference = node->GetString("temporality_preference", ""); + model->temporality_preference = ParseTemporalityPreference(temporality_preference); std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); model->default_histogram_aggregation = @@ -442,10 +465,12 @@ ParseOtlpGrpcPushMetricExporterConfiguration(const std::unique_ptr model->headers = ParseHeadersConfiguration(child); } - model->headers_list = node->GetString("headers_list", ""); - model->compression = node->GetString("compression", ""); - model->timeout = node->GetInteger("timeout", 10000); - model->temporality_preference = node->GetString("temporality_preference", ""); + model->headers_list = node->GetString("headers_list", ""); + model->compression = node->GetString("compression", ""); + model->timeout = node->GetInteger("timeout", 10000); + + std::string temporality_preference = node->GetString("temporality_preference", ""); + model->temporality_preference = ParseTemporalityPreference(temporality_preference); std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); model->default_histogram_aggregation = @@ -465,7 +490,8 @@ ParseOtlpFilePushMetricExporterConfiguration(const std::unique_ptr model->output_stream = node->GetString("output_stream", ""); - model->temporality_preference = node->GetString("temporality_preference", ""); + std::string temporality_preference = node->GetString("temporality_preference", ""); + model->temporality_preference = ParseTemporalityPreference(temporality_preference); std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); model->default_histogram_aggregation = @@ -1522,8 +1548,7 @@ static std::unique_ptr ParseResourceConfiguration( return model; } -std::unique_ptr ConfigurationFactory::ParseConfiguration( - std::unique_ptr doc) +std::unique_ptr ConfigurationParser::Parse(std::unique_ptr doc) { std::unique_ptr node = doc->GetRootNode(); std::unique_ptr model(new Configuration(std::move(doc))); diff --git a/sdk/src/configuration/yaml_configuration_factory.cc b/sdk/src/configuration/yaml_configuration_parser.cc similarity index 70% rename from sdk/src/configuration/yaml_configuration_factory.cc rename to sdk/src/configuration/yaml_configuration_parser.cc index 991f1adaeb..56148084c3 100644 --- a/sdk/src/configuration/yaml_configuration_factory.cc +++ b/sdk/src/configuration/yaml_configuration_parser.cc @@ -11,10 +11,10 @@ #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/configuration_factory.h" +#include "opentelemetry/sdk/configuration/configuration_parser.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/ryml_document.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -23,7 +23,7 @@ namespace sdk namespace configuration { -std::unique_ptr YamlConfigurationFactory::ParseFile(const std::string &filename) +std::unique_ptr YamlConfigurationParser::ParseFile(const std::string &filename) { std::string input_file = filename; @@ -51,7 +51,7 @@ std::unique_ptr YamlConfigurationFactory::ParseFile(const std::st { std::ostringstream content; content << in.rdbuf(); - conf = YamlConfigurationFactory::ParseString(input_file, content.str()); + conf = YamlConfigurationParser::ParseString(input_file, content.str()); } return conf; @@ -66,8 +66,8 @@ static std::unique_ptr RymlParse(const std::string &source, const std: return doc; } -std::unique_ptr YamlConfigurationFactory::ParseString(const std::string &source, - const std::string &content) +std::unique_ptr YamlConfigurationParser::ParseString(const std::string &source, + const std::string &content) { std::unique_ptr doc; std::unique_ptr config; @@ -78,18 +78,17 @@ std::unique_ptr YamlConfigurationFactory::ParseString(const std:: { if (doc) { - config = ConfigurationFactory::ParseConfiguration(std::move(doc)); + config = ConfigurationParser::Parse(std::move(doc)); } } catch (const std::exception &e) { OTEL_INTERNAL_LOG_ERROR( - "[Yaml Configuration Factory] ParseConfiguration failed with exception: " << e.what()); + "[Yaml Configuration Parser] Parse failed with exception: " << e.what()); } catch (...) { - OTEL_INTERNAL_LOG_ERROR( - "[Yaml Configuration Factory] ParseConfiguration failed with unknown exception."); + OTEL_INTERNAL_LOG_ERROR("[Yaml Configuration Parser] Parse failed with unknown exception."); } return config; diff --git a/sdk/test/configuration/yaml_resource_test.cc b/sdk/test/configuration/yaml_resource_test.cc index 08ae76f7bc..1dc56a2684 100644 --- a/sdk/test/configuration/yaml_resource_test.cc +++ b/sdk/test/configuration/yaml_resource_test.cc @@ -12,13 +12,13 @@ #include "opentelemetry/sdk/configuration/detectors_configuration.h" #include "opentelemetry/sdk/configuration/resource_configuration.h" #include "opentelemetry/sdk/configuration/string_array_configuration.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" static std::unique_ptr DoParse( const std::string &yaml) { static const std::string source("test"); - return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); + return opentelemetry::sdk::configuration::YamlConfigurationParser::ParseString(source, yaml); } TEST(YamlResource, empty_resource) diff --git a/sdk/test/configuration/yaml_test.cc b/sdk/test/configuration/yaml_test.cc index 39856cf909..6a62f65429 100644 --- a/sdk/test/configuration/yaml_test.cc +++ b/sdk/test/configuration/yaml_test.cc @@ -10,13 +10,13 @@ #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" static std::unique_ptr DoParse( const std::string &yaml) { static const std::string source("test"); - return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); + return opentelemetry::sdk::configuration::YamlConfigurationParser::ParseString(source, yaml); } TEST(Yaml, empty) diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc index c2e58e0070..2ea8936190 100644 --- a/sdk/test/configuration/yaml_trace_test.cc +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -6,13 +6,13 @@ #include #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_factory.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" static std::unique_ptr DoParse( const std::string &yaml) { static const std::string source("test"); - return opentelemetry::sdk::configuration::YamlConfigurationFactory::ParseString(source, yaml); + return opentelemetry::sdk::configuration::YamlConfigurationParser::ParseString(source, yaml); } TEST(YamlTrace, no_processors) From b7127e388125a94a547ca59a5bcd82a51c68e5e2 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 28 Jun 2025 02:01:20 +0200 Subject: [PATCH 103/166] iwyu cleanup --- sdk/src/configuration/configuration_parser.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index d9f64a9dc6..b6dc8354ac 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -72,6 +72,7 @@ #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/string_array_configuration.h" #include "opentelemetry/sdk/configuration/sum_aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/view_configuration.h" From 87b267d47da1bc7c51f96cd53e6306260ca031c7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 29 Jun 2025 22:49:10 +0200 Subject: [PATCH 104/166] merge cleanup --- exporters/otlp/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 7b6747e1d9..1209d7ab70 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -133,6 +133,7 @@ if(WITH_OTLP_GRPC) add_library( opentelemetry_otlp_grpc_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_span_builder.cc src/otlp_grpc_push_metric_builder.cc src/otlp_grpc_log_record_builder.cc) set_target_properties(opentelemetry_otlp_grpc_builder @@ -244,6 +245,7 @@ if(WITH_OTLP_HTTP) add_library( opentelemetry_otlp_http_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_span_builder.cc src/otlp_http_push_metric_builder.cc src/otlp_http_log_record_builder.cc) set_target_properties(opentelemetry_otlp_http_builder @@ -347,6 +349,7 @@ if(WITH_OTLP_FILE) add_library( opentelemetry_otlp_file_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_span_builder.cc src/otlp_file_push_metric_builder.cc src/otlp_file_log_record_builder.cc) From 0aa583e6fdc19b50a9c058a1a10e48005669fc99 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 30 Jun 2025 00:10:21 +0200 Subject: [PATCH 105/166] format --- exporters/otlp/CMakeLists.txt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 1209d7ab70..350554b2cc 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -133,9 +133,8 @@ if(WITH_OTLP_GRPC) add_library( opentelemetry_otlp_grpc_builder - ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} - src/otlp_grpc_span_builder.cc src/otlp_grpc_push_metric_builder.cc - src/otlp_grpc_log_record_builder.cc) + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_span_builder.cc + src/otlp_grpc_push_metric_builder.cc src/otlp_grpc_log_record_builder.cc) set_target_properties(opentelemetry_otlp_grpc_builder PROPERTIES EXPORT_NAME otlp_grpc_builder) set_target_version(opentelemetry_otlp_grpc_builder) @@ -245,9 +244,8 @@ if(WITH_OTLP_HTTP) add_library( opentelemetry_otlp_http_builder - ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} - src/otlp_http_span_builder.cc src/otlp_http_push_metric_builder.cc - src/otlp_http_log_record_builder.cc) + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_span_builder.cc + src/otlp_http_push_metric_builder.cc src/otlp_http_log_record_builder.cc) set_target_properties(opentelemetry_otlp_http_builder PROPERTIES EXPORT_NAME otlp_http_builder) set_target_version(opentelemetry_otlp_http_builder) @@ -349,9 +347,8 @@ if(WITH_OTLP_FILE) add_library( opentelemetry_otlp_file_builder - ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} - src/otlp_file_span_builder.cc src/otlp_file_push_metric_builder.cc - src/otlp_file_log_record_builder.cc) + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_span_builder.cc + src/otlp_file_push_metric_builder.cc src/otlp_file_log_record_builder.cc) set_target_properties(opentelemetry_otlp_file_builder PROPERTIES EXPORT_NAME otlp_file_builder) From 54e55448212f12925dfbd9c458ce7bd13c9aa952 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 2 Jul 2025 00:17:34 +0200 Subject: [PATCH 106/166] Attribute Value parsing for resources. --- .../attribute_value_configuration.h | 25 ++ .../attribute_value_configuration_visitor.h | 46 ++++ .../configuration/attributes_configuration.h | 4 +- ...lean_array_attribute_value_configuration.h | 32 +++ .../boolean_attribute_value_configuration.h | 30 +++ .../sdk/configuration/document_node.h | 2 - ...uble_array_attribute_value_configuration.h | 32 +++ .../double_attribute_value_configuration.h | 30 +++ ...tion.h => include_exclude_configuration.h} | 6 +- ...eger_array_attribute_value_configuration.h | 33 +++ .../integer_attribute_value_configuration.h | 32 +++ .../configuration/resource_configuration.h | 4 +- .../sdk/configuration/ryml_document_node.h | 2 - ...ring_array_attribute_value_configuration.h | 33 +++ .../string_attribute_value_configuration.h | 32 +++ .../configuration/view_stream_configuration.h | 3 +- .../opentelemetry/sdk/init/sdk_builder.h | 5 + sdk/src/configuration/configuration_parser.cc | 255 +++++++++++++----- sdk/src/configuration/ryml_document.cc | 19 -- sdk/src/configuration/ryml_document_node.cc | 5 - sdk/src/init/sdk_builder.cc | 19 +- sdk/test/configuration/yaml_resource_test.cc | 48 +++- 22 files changed, 578 insertions(+), 119 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h rename sdk/include/opentelemetry/sdk/configuration/{detectors_configuration.h => include_exclude_configuration.h} (83%) create mode 100644 sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h new file mode 100644 index 0000000000..3c1d437378 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class AttributeValueConfigurationVisitor; + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class AttributeValueConfiguration +{ +public: + virtual void Accept(AttributeValueConfigurationVisitor *visitor) const = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h new file mode 100644 index 0000000000..d7bc8f6792 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h @@ -0,0 +1,46 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class StringAttributeValueConfiguration; +class IntegerAttributeValueConfiguration; +class DoubleAttributeValueConfiguration; +class BooleanAttributeValueConfiguration; +class StringArrayAttributeValueConfiguration; +class IntegerArrayAttributeValueConfiguration; +class DoubleArrayAttributeValueConfiguration; +class BooleanArrayAttributeValueConfiguration; + +class AttributeValueConfigurationVisitor +{ +public: + AttributeValueConfigurationVisitor() = default; + AttributeValueConfigurationVisitor(AttributeValueConfigurationVisitor &&) = default; + AttributeValueConfigurationVisitor(const AttributeValueConfigurationVisitor &) = default; + AttributeValueConfigurationVisitor &operator=(AttributeValueConfigurationVisitor &&) = default; + AttributeValueConfigurationVisitor &operator=(const AttributeValueConfigurationVisitor &other) = + default; + virtual ~AttributeValueConfigurationVisitor() = default; + + virtual void VisitString(const StringAttributeValueConfiguration *model) = 0; + virtual void VisitInteger(const IntegerAttributeValueConfiguration *model) = 0; + virtual void VisitDouble(const DoubleAttributeValueConfiguration *model) = 0; + virtual void VisitBoolean(const BooleanAttributeValueConfiguration *model) = 0; + virtual void VisitStringArray(const StringArrayAttributeValueConfiguration *model) = 0; + virtual void VisitIntegerArray(const IntegerArrayAttributeValueConfiguration *model) = 0; + virtual void VisitDoubleArray(const DoubleArrayAttributeValueConfiguration *model) = 0; + virtual void VisitBooleanArray(const BooleanArrayAttributeValueConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h index 44c3bb2818..d5b52aa02f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -16,11 +17,10 @@ namespace configuration // YAML-SCHEMA: schema/resource.json // YAML-NODE: AttributeNameValue -// FIXME: Name/Value/Type class AttributesConfiguration { public: - std::map kv_map; + std::map> kv_map; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h new file mode 100644 index 0000000000..0d0d2a8f44 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class BooleanArrayAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitBooleanArray(this); + } + + std::vector value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h new file mode 100644 index 0000000000..2c8fd77be8 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class BooleanAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitBoolean(this); + } + + bool value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 090052c219..016213543b 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -61,8 +61,6 @@ class DocumentNode virtual PropertiesNodeConstIterator begin_properties() const = 0; virtual PropertiesNodeConstIterator end_properties() const = 0; - virtual std::string Dump() const = 0; - protected: std::string DoSubstitution(const std::string &text); std::string DoOneSubstitution(const std::string &text); diff --git a/sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h new file mode 100644 index 0000000000..9bebf66a45 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class DoubleArrayAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitDoubleArray(this); + } + + std::vector value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h new file mode 100644 index 0000000000..b898d1add5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class DoubleAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitDouble(this); + } + + double value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h b/sdk/include/opentelemetry/sdk/configuration/include_exclude_configuration.h similarity index 83% rename from sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h rename to sdk/include/opentelemetry/sdk/configuration/include_exclude_configuration.h index 81a71a8320..9a81e3f9a8 100644 --- a/sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/include_exclude_configuration.h @@ -15,9 +15,9 @@ namespace sdk namespace configuration { -// YAML-SCHEMA: schema/resource.json -// YAML-NODE: Detectors -class DetectorsConfiguration +// YAML-SCHEMA: schema/common.json +// YAML-NODE: IncludeExclude +class IncludeExcludeConfiguration { public: std::unique_ptr included; diff --git a/sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h new file mode 100644 index 0000000000..f3d2e53892 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class IntegerArrayAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitIntegerArray(this); + } + + std::vector value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h new file mode 100644 index 0000000000..1a3b84cc39 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class IntegerAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitInteger(this); + } + + std::size_t value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h index ae84680b42..6d29b10e34 100644 --- a/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/resource_configuration.h @@ -7,7 +7,7 @@ #include #include "opentelemetry/sdk/configuration/attributes_configuration.h" -#include "opentelemetry/sdk/configuration/detectors_configuration.h" +#include "opentelemetry/sdk/configuration/include_exclude_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -22,7 +22,7 @@ class ResourceConfiguration { public: std::unique_ptr attributes; - std::unique_ptr detectors; + std::unique_ptr detectors; std::string schema_url; std::string attributes_list; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index 1642f4aeb2..2d2be1dc2e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -58,8 +58,6 @@ class RymlDocumentNode : public DocumentNode PropertiesNodeConstIterator begin_properties() const override; PropertiesNodeConstIterator end_properties() const override; - std::string Dump() const override; - private: ryml::ConstNodeRef GetRequiredRymlChildNode(const std::string &name); ryml::ConstNodeRef GetRymlChildNode(const std::string &name); diff --git a/sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h new file mode 100644 index 0000000000..e3bcdb708f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class StringArrayAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitStringArray(this); + } + + std::vector value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h new file mode 100644 index 0000000000..8b95258945 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/resource.json +// YAML-NODE: AttributeNameValue +class StringAttributeValueConfiguration : public AttributeValueConfiguration +{ +public: + void Accept(AttributeValueConfigurationVisitor *visitor) const override + { + visitor->VisitString(this); + } + + std::string value; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h index d71586d928..006c83d460 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h @@ -8,6 +8,7 @@ #include #include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/include_exclude_configuration.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -25,7 +26,7 @@ class ViewStreamConfiguration std::string description; std::unique_ptr aggregation; std::size_t aggregation_cardinality_limit; - std::vector attribute_keys; + std::unique_ptr attribute_keys; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 8ef498838b..8def640800 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -221,6 +221,11 @@ class SdkBuilder const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const; + void SetResourceAttribute( + opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, + const std::string &name, + const opentelemetry::sdk::configuration::AttributeValueConfiguration *model) const; + void SetResource(opentelemetry::sdk::resource::Resource &resource, const std::unique_ptr &opt_model) const; diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index b6dc8354ac..c043c8af0e 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -18,6 +18,8 @@ #include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_parser.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" @@ -25,9 +27,10 @@ #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/default_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" -#include "opentelemetry/sdk/configuration/detectors_configuration.h" #include "opentelemetry/sdk/configuration/document.h" #include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" @@ -38,6 +41,9 @@ #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/include_exclude_configuration.h" +#include "opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/integer_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/last_value_aggregation_configuration.h" @@ -70,7 +76,9 @@ #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/span_limits_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/string_array_configuration.h" +#include "opentelemetry/sdk/configuration/string_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/sum_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" @@ -90,6 +98,44 @@ namespace configuration // FIXME: proper sizing constexpr size_t MAX_SAMPLER_DEPTH = 10; +static std::unique_ptr ParseStringArrayConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new StringArrayConfiguration); + + for (auto it = node->begin(); it != node->end(); ++it) + { + std::unique_ptr child(*it); + + std::string name = child->AsString(); + + model->string_array.push_back(name); + } + + return model; +} + +static std::unique_ptr ParseIncludeExcludeConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new IncludeExcludeConfiguration); + std::unique_ptr child; + + child = node->GetChildNode("included"); + if (child) + { + model->included = ParseStringArrayConfiguration(child); + } + + child = node->GetChildNode("excluded"); + if (child) + { + model->excluded = ParseStringArrayConfiguration(child); + } + + return model; +} + static std::unique_ptr ParseHeadersConfiguration( const std::unique_ptr &node) { @@ -875,8 +921,9 @@ static std::unique_ptr ParseViewStreamConfiguration( std::unique_ptr model(new ViewStreamConfiguration); std::unique_ptr child; - model->name = node->GetString("name", ""); - model->description = node->GetString("description", ""); + model->name = node->GetString("name", ""); + model->description = node->GetString("description", ""); + model->aggregation_cardinality_limit = node->GetInteger("aggregation_cardinality_limit", 0); child = node->GetChildNode("aggregation"); if (child) @@ -885,22 +932,9 @@ static std::unique_ptr ParseViewStreamConfiguration( } child = node->GetChildNode("attribute_keys"); - if (child) { - OTEL_INTERNAL_LOG_ERROR("ParseViewStreamConfiguration: FIXME"); - - // Schema has changed -#ifdef NEVER - for (auto it = child->begin(); it != child->end(); ++it) - { - std::unique_ptr attribute_key(*it); - - std::string name = attribute_key->AsString(); - - model->attribute_keys.push_back(name); - } -#endif + model->attribute_keys = ParseIncludeExcludeConfiguration(child); } return model; @@ -1407,14 +1441,124 @@ static std::unique_ptr ParseTracerProviderConfigura return model; } +static std::unique_ptr ParseStringAttributeValueConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new StringAttributeValueConfiguration); + + model->value = node->AsString(); + + return model; +} + +static std::unique_ptr ParseIntegerAttributeValueConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new IntegerAttributeValueConfiguration); + + model->value = node->AsInteger(); + + return model; +} + +static std::unique_ptr ParseDoubleAttributeValueConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new DoubleAttributeValueConfiguration); + + model->value = node->AsDouble(); + + return model; +} + +static std::unique_ptr ParseBooleanAttributeValueConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model(new BooleanAttributeValueConfiguration); + + model->value = node->AsBoolean(); + + return model; +} + +static std::unique_ptr +ParseStringArrayAttributeValueConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new StringArrayAttributeValueConfiguration); + + for (auto it = node->begin(); it != node->end(); ++it) + { + std::unique_ptr child(*it); + + std::string value = child->AsString(); + + model->value.push_back(value); + } + + return model; +} + +static std::unique_ptr +ParseIntegerArrayAttributeValueConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new IntegerArrayAttributeValueConfiguration); + + for (auto it = node->begin(); it != node->end(); ++it) + { + std::unique_ptr child(*it); + + std::size_t value = child->AsInteger(); + + model->value.push_back(value); + } + + return model; +} + +static std::unique_ptr +ParseDoubleArrayAttributeValueConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new DoubleArrayAttributeValueConfiguration); + + for (auto it = node->begin(); it != node->end(); ++it) + { + std::unique_ptr child(*it); + + double value = child->AsDouble(); + + model->value.push_back(value); + } + + return model; +} + +static std::unique_ptr +ParseBooleanArrayAttributeValueConfiguration(const std::unique_ptr &node) +{ + std::unique_ptr model( + new BooleanArrayAttributeValueConfiguration); + + for (auto it = node->begin(); it != node->end(); ++it) + { + std::unique_ptr child(*it); + + bool value = child->AsBoolean(); + + model->value.push_back(value); + } + + return model; +} + static std::unique_ptr ParseAttributesConfiguration( const std::unique_ptr &node) { std::unique_ptr model(new AttributesConfiguration); std::unique_ptr child; - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME"); - std::unique_ptr attribute_name_value; std::unique_ptr name_child; std::unique_ptr value_child; @@ -1430,6 +1574,8 @@ static std::unique_ptr ParseAttributesConfiguration( value_child = attribute_name_value->GetRequiredChildNode("value"); type_child = attribute_name_value->GetChildNode("type"); + std::unique_ptr value_model; + name = name_child->AsString(); if (type_child) { @@ -1442,84 +1588,53 @@ static std::unique_ptr ParseAttributesConfiguration( if (type == "string") { - std::string value; - value = value_child->AsString(); - OTEL_INTERNAL_LOG_DEBUG("ParseAttributesConfiguration() name = " << name - << ", value = " << value); - std::pair entry(name, value); - model->kv_map.insert(entry); + auto model_detail = ParseStringAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else if (type == "bool") { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: bool"); + auto model_detail = ParseBooleanAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else if (type == "int") { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: int"); + auto model_detail = ParseIntegerAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else if (type == "double") { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: double"); + auto model_detail = ParseDoubleAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else if (type == "string_array") { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: string_array"); + auto model_detail = ParseStringArrayAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else if (type == "bool_array") { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: bool_array"); + auto model_detail = ParseBooleanArrayAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else if (type == "int_array") { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: int_array"); + auto model_detail = ParseIntegerArrayAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else if (type == "double_array") { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: FIXME: double_array"); + auto model_detail = ParseDoubleArrayAttributeValueConfiguration(value_child); + value_model = std::move(model_detail); } else { OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: unknown type " << type); throw InvalidSchemaException("Illegal attribute type"); } - } - - return model; -} - -static std::unique_ptr ParseStringArrayConfiguration( - const std::unique_ptr &node) -{ - std::unique_ptr model(new StringArrayConfiguration); - - for (auto it = node->begin(); it != node->end(); ++it) - { - std::unique_ptr child(*it); - std::string name = child->AsString(); - - model->string_array.push_back(name); - } - - return model; -} - -static std::unique_ptr ParseDetectorsConfiguration( - const std::unique_ptr &node) -{ - std::unique_ptr model(new DetectorsConfiguration); - std::unique_ptr child; - - child = node->GetChildNode("included"); - if (child) - { - model->included = ParseStringArrayConfiguration(child); - } - - child = node->GetChildNode("excluded"); - if (child) - { - model->excluded = ParseStringArrayConfiguration(child); + std::pair> entry( + name, std::move(value_model)); + model->kv_map.insert(std::move(entry)); } return model; @@ -1543,7 +1658,7 @@ static std::unique_ptr ParseResourceConfiguration( child = node->GetChildNode("detectors"); if (child) { - model->detectors = ParseDetectorsConfiguration(child); + model->detectors = ParseIncludeExcludeConfiguration(child); } return model; diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index cb31c893b9..e8d49d5ba1 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -15,12 +15,6 @@ #include "opentelemetry/sdk/configuration/ryml_document_node.h" #include "opentelemetry/version.h" -/* We require 0.7.1 or better */ -#define OTEL_HAVE_RYML 7 - -/* Code using ryml 0.6.0 preserved for regression testing. */ -/* #define OTEL_HAVE_RYML 6 */ - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -32,14 +26,8 @@ std::unique_ptr RymlDocument::Parse(const std::string &source, const s ryml::ParserOptions opts; opts.locations(true); -#if OTEL_HAVE_RYML == 6 - ryml::Parser parser(opts); -#endif - -#if OTEL_HAVE_RYML == 7 ryml::Parser::handler_type event_handler; ryml::Parser parser(&event_handler, opts); -#endif ryml::Tree tree; ryml::csubstr filename; @@ -51,14 +39,7 @@ std::unique_ptr RymlDocument::Parse(const std::string &source, const s try { -#if OTEL_HAVE_RYML == 6 - tree = parser.parse_in_arena(filename, csubstr_content); -#endif - -#if OTEL_HAVE_RYML == 7 tree = parse_in_arena(&parser, filename, csubstr_content); -#endif - tree.resolve(); } catch (const std::exception &e) diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index ea9397b725..d454b84e5c 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -411,11 +411,6 @@ PropertiesNodeConstIterator RymlDocumentNode::end_properties() const new RymlPropertiesNodeConstIteratorImpl(node_, node_.num_children(), depth_)); } -std::string RymlDocumentNode::Dump() const -{ - return "FIXME: Dump"; -} - RymlDocumentNodeConstIteratorImpl::RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, size_t index, size_t depth) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 7e9dde98ba..bf5bff5ddf 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -1045,8 +1045,6 @@ SdkBuilder::CreatePushMetricExporter( { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePushMetricExporter: FIXME"); - PushMetricExporterBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.exporter); @@ -1060,8 +1058,6 @@ std::unique_ptr SdkBuilder::CreatePul { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePullMetricExporter: FIXME"); - PullMetricExporterBuilder builder(this); model->Accept(&builder); sdk = std::move(builder.exporter); @@ -1092,7 +1088,6 @@ std::unique_ptr SdkBuilder::CreatePul { std::unique_ptr sdk; - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreatePullMetricReader: FIXME"); sdk = CreatePullMetricExporter(model->exporter); return sdk; @@ -1166,8 +1161,6 @@ std::unique_ptr SdkBuilder::CreateMe auto meter_context = opentelemetry::sdk::metrics::MeterContextFactory::Create(std::move(view_registry), resource); - OTEL_INTERNAL_LOG_ERROR("CreateMeterProvider() FIXME"); - for (const auto &reader_configuration : model->readers) { std::shared_ptr metric_reader; @@ -1391,6 +1384,16 @@ std::unique_ptr SdkBuilder::CreateLogg return sdk; } +void SdkBuilder::SetResourceAttribute( + opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, + const std::string &name, + const opentelemetry::sdk::configuration::AttributeValueConfiguration *model) const +{ + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResourceAttribute: FIXME"); + + // sdk_attributes.SetAttribute(kv.first, kv.second); +} + void SdkBuilder::SetResource( opentelemetry::sdk::resource::Resource &resource, const std::unique_ptr &opt_model) @@ -1404,7 +1407,7 @@ void SdkBuilder::SetResource( { for (const auto &kv : opt_model->attributes->kv_map) { - sdk_attributes.SetAttribute(kv.first, kv.second); + SetResourceAttribute(sdk_attributes, kv.first, kv.second.get()); } } diff --git a/sdk/test/configuration/yaml_resource_test.cc b/sdk/test/configuration/yaml_resource_test.cc index 1dc56a2684..d7fc705516 100644 --- a/sdk/test/configuration/yaml_resource_test.cc +++ b/sdk/test/configuration/yaml_resource_test.cc @@ -9,9 +9,10 @@ #include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/detectors_configuration.h" +#include "opentelemetry/sdk/configuration/include_exclude_configuration.h" #include "opentelemetry/sdk/configuration/resource_configuration.h" #include "opentelemetry/sdk/configuration/string_array_configuration.h" +#include "opentelemetry/sdk/configuration/string_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" static std::unique_ptr DoParse( @@ -84,8 +85,26 @@ file_format: xx.yy ASSERT_NE(config->resource, nullptr); ASSERT_NE(config->resource->attributes, nullptr); ASSERT_EQ(config->resource->attributes->kv_map.size(), 2); - ASSERT_EQ(config->resource->attributes->kv_map["foo"], "1234"); - ASSERT_EQ(config->resource->attributes->kv_map["bar"], "5678"); + + { + const auto &value = config->resource->attributes->kv_map["foo"]; + ASSERT_NE(value, nullptr); + auto *value_ptr = value.get(); + auto *string_value = + reinterpret_cast( + value_ptr); + ASSERT_EQ(string_value->value, "1234"); + } + + { + const auto &value = config->resource->attributes->kv_map["bar"]; + ASSERT_NE(value, nullptr); + auto *value_ptr = value.get(); + auto *string_value = + reinterpret_cast( + value_ptr); + ASSERT_EQ(string_value->value, "5678"); + } } TEST(YamlResource, empty_attributes_list) @@ -151,8 +170,27 @@ file_format: xx.yy ASSERT_NE(config->resource, nullptr); ASSERT_NE(config->resource->attributes, nullptr); ASSERT_EQ(config->resource->attributes->kv_map.size(), 2); - ASSERT_EQ(config->resource->attributes->kv_map["foo"], "1234"); - ASSERT_EQ(config->resource->attributes->kv_map["bar"], "5678"); + + { + const auto &value = config->resource->attributes->kv_map["foo"]; + ASSERT_NE(value, nullptr); + auto *value_ptr = value.get(); + auto *string_value = + reinterpret_cast( + value_ptr); + ASSERT_EQ(string_value->value, "1234"); + } + + { + const auto &value = config->resource->attributes->kv_map["bar"]; + ASSERT_NE(value, nullptr); + auto *value_ptr = value.get(); + auto *string_value = + reinterpret_cast( + value_ptr); + ASSERT_EQ(string_value->value, "5678"); + } + ASSERT_EQ(config->resource->attributes_list, "foo=aaaa,bar=bbbb"); } From 6364dc66bb1d30292afbed20034638410814064b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 2 Jul 2025 00:54:50 +0200 Subject: [PATCH 107/166] cleanup --- .../sdk/configuration/attribute_value_configuration.h | 7 +++++++ .../sdk/configuration/attributes_configuration.h | 1 + .../boolean_array_attribute_value_configuration.h | 1 + .../configuration/boolean_attribute_value_configuration.h | 1 + .../double_array_attribute_value_configuration.h | 1 + .../configuration/double_attribute_value_configuration.h | 1 + .../integer_array_attribute_value_configuration.h | 1 + .../configuration/integer_attribute_value_configuration.h | 1 + .../string_array_attribute_value_configuration.h | 1 + .../configuration/string_attribute_value_configuration.h | 1 + sdk/src/configuration/configuration_parser.cc | 2 ++ sdk/src/init/sdk_builder.cc | 2 +- sdk/test/configuration/yaml_resource_test.cc | 1 + 13 files changed, 20 insertions(+), 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h index 3c1d437378..12409835f4 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attribute_value_configuration.h @@ -17,6 +17,13 @@ class AttributeValueConfigurationVisitor; class AttributeValueConfiguration { public: + AttributeValueConfiguration() = default; + AttributeValueConfiguration(AttributeValueConfiguration &&) = default; + AttributeValueConfiguration(const AttributeValueConfiguration &) = default; + AttributeValueConfiguration &operator=(AttributeValueConfiguration &&) = default; + AttributeValueConfiguration &operator=(const AttributeValueConfiguration &other) = default; + virtual ~AttributeValueConfiguration() = default; + virtual void Accept(AttributeValueConfigurationVisitor *visitor) const = 0; }; diff --git a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h index d5b52aa02f..655344ee68 100644 --- a/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include #include "opentelemetry/sdk/configuration/attribute_value_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h index 0d0d2a8f44..2c03f5c14f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h index 2c8fd77be8..2e2700f6eb 100644 --- a/sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h index 9bebf66a45..5670e2e462 100644 --- a/sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h index b898d1add5..2408d81bc0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/double_attribute_value_configuration.h @@ -3,6 +3,7 @@ #pragma once +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h index f3d2e53892..23ca1ec18f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h index 1a3b84cc39..4fa558157d 100644 --- a/sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/integer_attribute_value_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h index e3bcdb708f..39951698fa 100644 --- a/sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h index 8b95258945..3e0ea50b6e 100644 --- a/sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/string_attribute_value_configuration.h @@ -5,6 +5,7 @@ #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/version.h" diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index c043c8af0e..7ccb488e79 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include #include @@ -14,6 +15,7 @@ #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/attribute_limits_configuration.h" +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index bf5bff5ddf..7017038fa9 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -11,10 +11,10 @@ #include "opentelemetry/context/propagation/composite_propagator.h" #include "opentelemetry/context/propagation/text_map_propagator.h" -#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" diff --git a/sdk/test/configuration/yaml_resource_test.cc b/sdk/test/configuration/yaml_resource_test.cc index d7fc705516..69386928e3 100644 --- a/sdk/test/configuration/yaml_resource_test.cc +++ b/sdk/test/configuration/yaml_resource_test.cc @@ -7,6 +7,7 @@ #include #include +#include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/include_exclude_configuration.h" From 182ef490bbb4904c036f2aef74e2594b1c238388 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 2 Jul 2025 02:32:26 +0200 Subject: [PATCH 108/166] sdk resources --- .../opentelemetry/sdk/init/sdk_builder.h | 35 ++++- sdk/src/init/sdk_builder.cc | 144 +++++++++++++++++- 2 files changed, 175 insertions(+), 4 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index 8def640800..e778be0800 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -6,13 +6,19 @@ #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #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/extension_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/integer_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" @@ -30,6 +36,8 @@ #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #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/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" @@ -43,7 +51,6 @@ #include "opentelemetry/sdk/trace/sampler.h" #include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/trace/tracer_provider.h" - #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -221,6 +228,32 @@ class SdkBuilder const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const; + opentelemetry::common::AttributeValue CreateStringAttribute( + const opentelemetry::sdk::configuration::StringAttributeValueConfiguration *model) const; + + opentelemetry::common::AttributeValue CreateIntegerAttribute( + const opentelemetry::sdk::configuration::IntegerAttributeValueConfiguration *model) const; + + opentelemetry::common::AttributeValue CreateDoubleAttribute( + const opentelemetry::sdk::configuration::DoubleAttributeValueConfiguration *model) const; + + opentelemetry::common::AttributeValue CreateBooleanAttribute( + const opentelemetry::sdk::configuration::BooleanAttributeValueConfiguration *model) const; + + opentelemetry::common::AttributeValue CreateStringArrayAttribute( + const opentelemetry::sdk::configuration::StringArrayAttributeValueConfiguration *model) const; + + opentelemetry::common::AttributeValue CreateIntegerArrayAttribute( + const opentelemetry::sdk::configuration::IntegerArrayAttributeValueConfiguration *model) + const; + + opentelemetry::common::AttributeValue CreateDoubleArrayAttribute( + const opentelemetry::sdk::configuration::DoubleArrayAttributeValueConfiguration *model) const; + + opentelemetry::common::AttributeValue CreateBooleanArrayAttribute( + const opentelemetry::sdk::configuration::BooleanArrayAttributeValueConfiguration *model) + const; + void SetResourceAttribute( opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, const std::string &name, diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 7017038fa9..f7fee95e17 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -141,6 +141,75 @@ namespace sdk namespace init { +class AttributeValueBuilder + : public opentelemetry::sdk::configuration::AttributeValueConfigurationVisitor +{ +public: + AttributeValueBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + AttributeValueBuilder(AttributeValueBuilder &&) = delete; + AttributeValueBuilder(const AttributeValueBuilder &) = delete; + AttributeValueBuilder &operator=(AttributeValueBuilder &&) = delete; + AttributeValueBuilder &operator=(const AttributeValueBuilder &other) = delete; + ~AttributeValueBuilder() override = default; + + void VisitString( + const opentelemetry::sdk::configuration::StringAttributeValueConfiguration *model) override + { + attribute_value = m_sdk_builder->CreateStringAttribute(model); + } + + void VisitInteger( + const opentelemetry::sdk::configuration::IntegerAttributeValueConfiguration *model) override + { + attribute_value = m_sdk_builder->CreateIntegerAttribute(model); + } + + void VisitDouble( + const opentelemetry::sdk::configuration::DoubleAttributeValueConfiguration *model) override + { + attribute_value = m_sdk_builder->CreateDoubleAttribute(model); + } + + void VisitBoolean( + const opentelemetry::sdk::configuration::BooleanAttributeValueConfiguration *model) override + { + attribute_value = m_sdk_builder->CreateBooleanAttribute(model); + } + + void VisitStringArray( + const opentelemetry::sdk::configuration::StringArrayAttributeValueConfiguration *model) + override + { + attribute_value = m_sdk_builder->CreateStringArrayAttribute(model); + } + + void VisitIntegerArray( + const opentelemetry::sdk::configuration::IntegerArrayAttributeValueConfiguration *model) + override + { + attribute_value = m_sdk_builder->CreateIntegerArrayAttribute(model); + } + + void VisitDoubleArray( + const opentelemetry::sdk::configuration::DoubleArrayAttributeValueConfiguration *model) + override + { + attribute_value = m_sdk_builder->CreateDoubleArrayAttribute(model); + } + + void VisitBooleanArray( + const opentelemetry::sdk::configuration::BooleanArrayAttributeValueConfiguration *model) + override + { + attribute_value = m_sdk_builder->CreateBooleanArrayAttribute(model); + } + + opentelemetry::common::AttributeValue attribute_value; + +private: + const SdkBuilder *m_sdk_builder; +}; + class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigurationVisitor { public: @@ -1384,14 +1453,83 @@ std::unique_ptr SdkBuilder::CreateLogg return sdk; } +opentelemetry::common::AttributeValue SdkBuilder::CreateStringAttribute( + const opentelemetry::sdk::configuration::StringAttributeValueConfiguration *model) const +{ + opentelemetry::common::AttributeValue result(model->value); + + return result; +} + +opentelemetry::common::AttributeValue SdkBuilder::CreateIntegerAttribute( + const opentelemetry::sdk::configuration::IntegerAttributeValueConfiguration *model) const +{ + opentelemetry::common::AttributeValue result(model->value); + + return result; +} + +opentelemetry::common::AttributeValue SdkBuilder::CreateDoubleAttribute( + const opentelemetry::sdk::configuration::DoubleAttributeValueConfiguration *model) const +{ + opentelemetry::common::AttributeValue result(model->value); + + return result; +} + +opentelemetry::common::AttributeValue SdkBuilder::CreateBooleanAttribute( + const opentelemetry::sdk::configuration::BooleanAttributeValueConfiguration *model) const +{ + bool value = model->value; + opentelemetry::common::AttributeValue result(value); + + return result; +} + +opentelemetry::common::AttributeValue SdkBuilder::CreateStringArrayAttribute( + const opentelemetry::sdk::configuration::StringArrayAttributeValueConfiguration * /*model*/) + const +{ + opentelemetry::common::AttributeValue result("FIXME"); + + return result; +} + +opentelemetry::common::AttributeValue SdkBuilder::CreateIntegerArrayAttribute( + const opentelemetry::sdk::configuration::IntegerArrayAttributeValueConfiguration * /*model*/) + const +{ + opentelemetry::common::AttributeValue result("FIXME"); + + return result; +} + +opentelemetry::common::AttributeValue SdkBuilder::CreateDoubleArrayAttribute( + const opentelemetry::sdk::configuration::DoubleArrayAttributeValueConfiguration *model) const +{ + nostd::span data{model->value.data(), model->value.size()}; + opentelemetry::common::AttributeValue result(data); + + return result; +} + +opentelemetry::common::AttributeValue SdkBuilder::CreateBooleanArrayAttribute( + const opentelemetry::sdk::configuration::BooleanArrayAttributeValueConfiguration * /*model*/) + const +{ + opentelemetry::common::AttributeValue result("FIXME"); + + return result; +} + void SdkBuilder::SetResourceAttribute( opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, const std::string &name, const opentelemetry::sdk::configuration::AttributeValueConfiguration *model) const { - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResourceAttribute: FIXME"); - - // sdk_attributes.SetAttribute(kv.first, kv.second); + AttributeValueBuilder builder(this); + model->Accept(&builder); + resource_attributes.SetAttribute(name, builder.attribute_value); } void SdkBuilder::SetResource( From 1a609541517ecae6b4e6835c41f299f781bc3fc6 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 2 Jul 2025 09:38:28 +0200 Subject: [PATCH 109/166] iwyu cleanup --- sdk/src/init/sdk_builder.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index f7fee95e17..ede5aadfce 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -9,19 +9,26 @@ #include #include +#include "opentelemetry/common/attribute_value.h" #include "opentelemetry/context/propagation/composite_propagator.h" #include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/sdk/configuration/attributes_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #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/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" @@ -29,6 +36,8 @@ #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/integer_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h" @@ -65,6 +74,8 @@ #include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h" #include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/string_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/view_configuration.h" From bb36472507e8e99bc25b404980a7f810c8b33907 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 5 Jul 2025 00:50:06 +0200 Subject: [PATCH 110/166] Review comments, fix enum classes --- .../default_histogram_aggregation.h | 4 ++- .../include_exclude_configuration.h | 1 - .../sdk/configuration/instrument_type.h | 30 +++++++++++++++++++ ..._file_push_metric_exporter_configuration.h | 5 ++-- ..._grpc_push_metric_exporter_configuration.h | 5 ++-- .../sdk/configuration/otlp_http_encoding.h | 4 ++- ...p_http_log_record_exporter_configuration.h | 2 +- ..._http_push_metric_exporter_configuration.h | 7 +++-- .../otlp_http_span_exporter_configuration.h | 2 +- .../string_array_configuration.h | 1 - .../configuration/temporality_preference.h | 4 ++- .../view_selector_configuration.h | 13 ++------ sdk/src/configuration/configuration_parser.cc | 29 +++++++++--------- sdk/src/init/sdk_builder.cc | 15 +++++----- 14 files changed, 76 insertions(+), 46 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/instrument_type.h diff --git a/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h b/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h index 73ee11d38c..420f2daba9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h +++ b/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h @@ -13,7 +13,9 @@ namespace sdk namespace configuration { -enum enum_default_histogram_aggregation : std::uint8_t +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ExporterDefaultHistogramAggregation +enum class DefaultHistogramAggregation : std::uint8_t { explicit_bucket_histogram, base2_exponential_bucket_histogram diff --git a/sdk/include/opentelemetry/sdk/configuration/include_exclude_configuration.h b/sdk/include/opentelemetry/sdk/configuration/include_exclude_configuration.h index 9a81e3f9a8..81167f247f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/include_exclude_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/include_exclude_configuration.h @@ -3,7 +3,6 @@ #pragma once -#include #include #include "opentelemetry/sdk/configuration/string_array_configuration.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/instrument_type.h b/sdk/include/opentelemetry/sdk/configuration/instrument_type.h new file mode 100644 index 0000000000..49fd52f435 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/instrument_type.h @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: InstrumentType +enum class InstrumentType : std::uint8_t +{ + counter, + histogram, + observable_counter, + observable_gauge, + observable_up_down_counter, + up_down_counter +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h index 48f27434b5..03b75ef593 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h @@ -29,8 +29,9 @@ class OtlpFilePushMetricExporterConfiguration : public PushMetricExporterConfigu } std::string output_stream; - enum_temporality_preference temporality_preference{cumulative}; - enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; + TemporalityPreference temporality_preference{TemporalityPreference::cumulative}; + DefaultHistogramAggregation default_histogram_aggregation{ + DefaultHistogramAggregation::explicit_bucket_histogram}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h index 8a3ec69de2..f0264d323f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -38,8 +38,9 @@ class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfigu std::string compression; std::size_t timeout{0}; bool insecure{false}; - enum_temporality_preference temporality_preference{cumulative}; - enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; + TemporalityPreference temporality_preference{TemporalityPreference::cumulative}; + DefaultHistogramAggregation default_histogram_aggregation{ + DefaultHistogramAggregation::explicit_bucket_histogram}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h index 06fb7f8f21..d245bf3487 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h @@ -13,7 +13,9 @@ namespace sdk namespace configuration { -enum enum_otlp_http_encoding : std::uint8_t +// YAML-SCHEMA: schema/common.json +// YAML-NODE: OtlpHttpEncoding +enum class OtlpHttpEncoding : std::uint8_t { protobuf, json diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h index 0ff65ec077..87d83f56c0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h @@ -36,7 +36,7 @@ class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfigura std::string headers_list; std::string compression; std::size_t timeout{0}; - enum_otlp_http_encoding encoding{protobuf}; + OtlpHttpEncoding encoding{OtlpHttpEncoding::protobuf}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h index bfac17be4e..eb8aac1ca1 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -38,9 +38,10 @@ class OtlpHttpPushMetricExporterConfiguration : public PushMetricExporterConfigu std::string headers_list; std::string compression; std::size_t timeout{0}; - enum_otlp_http_encoding encoding{protobuf}; - enum_temporality_preference temporality_preference{cumulative}; - enum_default_histogram_aggregation default_histogram_aggregation{explicit_bucket_histogram}; + OtlpHttpEncoding encoding{OtlpHttpEncoding::protobuf}; + TemporalityPreference temporality_preference{TemporalityPreference::cumulative}; + DefaultHistogramAggregation default_histogram_aggregation{ + DefaultHistogramAggregation::explicit_bucket_histogram}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h index 394a6e75dd..76e0474fd3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h @@ -36,7 +36,7 @@ class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration std::string headers_list; std::string compression; std::size_t timeout{0}; - enum_otlp_http_encoding encoding{protobuf}; + OtlpHttpEncoding encoding{OtlpHttpEncoding::protobuf}; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h index 8127271299..6a3cda65f9 100644 --- a/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h @@ -3,7 +3,6 @@ #pragma once -#include #include #include diff --git a/sdk/include/opentelemetry/sdk/configuration/temporality_preference.h b/sdk/include/opentelemetry/sdk/configuration/temporality_preference.h index 0b80aa6e3b..d5f81d0f45 100644 --- a/sdk/include/opentelemetry/sdk/configuration/temporality_preference.h +++ b/sdk/include/opentelemetry/sdk/configuration/temporality_preference.h @@ -13,7 +13,9 @@ namespace sdk namespace configuration { -enum enum_temporality_preference : std::uint8_t +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ExporterTemporalityPreference +enum class TemporalityPreference : std::uint8_t { cumulative, delta, diff --git a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h index 9da455389b..e83462a400 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h @@ -7,6 +7,7 @@ #include #include +#include "opentelemetry/sdk/configuration/instrument_type.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -15,16 +16,6 @@ namespace sdk namespace configuration { -enum enum_instrument_type : std::uint8_t -{ - counter, - histogram, - observable_counter, - observable_gauge, - observable_up_down_counter, - up_down_counter -}; - // YAML-SCHEMA: schema/meter_provider.json // YAML-NODE: ViewSelector class ViewSelectorConfiguration @@ -38,7 +29,7 @@ class ViewSelectorConfiguration ~ViewSelectorConfiguration() = default; std::string instrument_name; - enum_instrument_type instrument_type{counter}; + InstrumentType instrument_type{InstrumentType::counter}; std::string unit; std::string meter_name; std::string meter_version; diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 7ccb488e79..25aeb7d308 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -44,6 +44,7 @@ #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/include_exclude_configuration.h" +#include "opentelemetry/sdk/configuration/instrument_type.h" #include "opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/integer_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" @@ -427,37 +428,37 @@ static std::unique_ptr ParseLoggerProviderConfigura return model; } -static enum_default_histogram_aggregation ParseDefaultHistogramAggregation(const std::string &name) +static DefaultHistogramAggregation ParseDefaultHistogramAggregation(const std::string &name) { if (name == "explicit_bucket_histogram") { - return explicit_bucket_histogram; + return DefaultHistogramAggregation::explicit_bucket_histogram; } if (name == "base2_exponential_bucket_histogram") { - return base2_exponential_bucket_histogram; + return DefaultHistogramAggregation::base2_exponential_bucket_histogram; } OTEL_INTERNAL_LOG_ERROR("ParseDefaultHistogramAggregation: name = " << name); throw InvalidSchemaException("Illegal default_histogram_aggregation"); } -static enum_temporality_preference ParseTemporalityPreference(const std::string &name) +static TemporalityPreference ParseTemporalityPreference(const std::string &name) { if (name == "cumulative") { - return cumulative; + return TemporalityPreference::cumulative; } if (name == "delta") { - return delta; + return TemporalityPreference::delta; } if (name == "low_memory") { - return low_memory; + return TemporalityPreference::low_memory; } OTEL_INTERNAL_LOG_ERROR("ParseTemporalityPreference: name = " << name); @@ -741,36 +742,36 @@ static std::unique_ptr ParseMetricReaderConfiguration return model; } -static enum_instrument_type ParseInstrumentType(const std::string &name) +static InstrumentType ParseInstrumentType(const std::string &name) { if (name == "counter") { - return counter; + return InstrumentType::counter; } if (name == "histogram") { - return histogram; + return InstrumentType::histogram; } if (name == "observable_counter") { - return observable_counter; + return InstrumentType::observable_counter; } if (name == "observable_gauge") { - return observable_gauge; + return InstrumentType::observable_gauge; } if (name == "observable_up_down_counter") { - return observable_up_down_counter; + return InstrumentType::observable_up_down_counter; } if (name == "up_down_counter") { - return up_down_counter; + return InstrumentType::up_down_counter; } OTEL_INTERNAL_LOG_ERROR("ParseInstrumentType: name = " << name); diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index ede5aadfce..1c090c3fad 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -36,6 +36,7 @@ #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/instrument_type.h" #include "opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/integer_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" @@ -929,28 +930,28 @@ SdkBuilder::CreatePropagator( } static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType( - enum opentelemetry::sdk::configuration::enum_instrument_type config) + enum opentelemetry::sdk::configuration::InstrumentType config) { opentelemetry::sdk::metrics::InstrumentType sdk; switch (config) { - case opentelemetry::sdk::configuration::counter: + case opentelemetry::sdk::configuration::InstrumentType::counter: sdk = opentelemetry::sdk::metrics::InstrumentType::kCounter; break; - case opentelemetry::sdk::configuration::histogram: + case opentelemetry::sdk::configuration::InstrumentType::histogram: sdk = opentelemetry::sdk::metrics::InstrumentType::kHistogram; break; - case opentelemetry::sdk::configuration::observable_counter: + case opentelemetry::sdk::configuration::InstrumentType::observable_counter: sdk = opentelemetry::sdk::metrics::InstrumentType::kObservableCounter; break; - case opentelemetry::sdk::configuration::observable_gauge: + case opentelemetry::sdk::configuration::InstrumentType::observable_gauge: sdk = opentelemetry::sdk::metrics::InstrumentType::kObservableGauge; break; - case opentelemetry::sdk::configuration::observable_up_down_counter: + case opentelemetry::sdk::configuration::InstrumentType::observable_up_down_counter: sdk = opentelemetry::sdk::metrics::InstrumentType::kObservableUpDownCounter; break; - case opentelemetry::sdk::configuration::up_down_counter: + case opentelemetry::sdk::configuration::InstrumentType::up_down_counter: sdk = opentelemetry::sdk::metrics::InstrumentType::kUpDownCounter; break; } From 9ffcee10af1f1f567ef8c9de998342f2a28ceda6 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 5 Jul 2025 01:56:44 +0200 Subject: [PATCH 111/166] Code review comments. --- .../opentelemetry/sdk/configuration/configuration.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/configuration/configuration.h b/sdk/include/opentelemetry/sdk/configuration/configuration.h index d24cffe8bf..7629c28bcf 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -34,6 +34,15 @@ * Yaml node OpenTelemetryConfiguration, * in file * https://github.com/open-telemetry/opentelemetry-configuration/blob/main/schema/opentelemetry_configuration.json + * + * Every property in the yaml schema is already documented in the + * opentelemetry-configuration repository, + * in file schema/type_descriptions.yaml, see + * https://github.com/open-telemetry/opentelemetry-configuration/blob/main/schema/type_descriptions.yaml + * + * As a result, C++ class members representing yaml properties are not + * commented with details, refer to the source of truth in + * type_descriptions.yaml directly. */ OPENTELEMETRY_BEGIN_NAMESPACE From 8ae27fd23a83f5a64502531547891dc2ce40a592 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 6 Jul 2025 11:38:58 +0200 Subject: [PATCH 112/166] Code review comments --- .../sdk/configuration/view_selector_configuration.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h index e83462a400..7c47bdd1d3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h @@ -21,13 +21,6 @@ namespace configuration class ViewSelectorConfiguration { public: - ViewSelectorConfiguration() = default; - ViewSelectorConfiguration(ViewSelectorConfiguration &&) = default; - ViewSelectorConfiguration(const ViewSelectorConfiguration &) = default; - ViewSelectorConfiguration &operator=(ViewSelectorConfiguration &&) = default; - ViewSelectorConfiguration &operator=(const ViewSelectorConfiguration &other) = default; - ~ViewSelectorConfiguration() = default; - std::string instrument_name; InstrumentType instrument_type{InstrumentType::counter}; std::string unit; From 3abfd3ff648b81c816dd291d284066c2b10a6f61 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 7 Jul 2025 01:11:52 +0200 Subject: [PATCH 113/166] Add trace unit tests. --- sdk/src/configuration/configuration_parser.cc | 26 +- sdk/test/configuration/yaml_trace_test.cc | 754 ++++++++++++++++++ 2 files changed, 779 insertions(+), 1 deletion(-) diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 25aeb7d308..5c3ff7ddd0 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -101,6 +101,22 @@ namespace configuration // FIXME: proper sizing constexpr size_t MAX_SAMPLER_DEPTH = 10; +static OtlpHttpEncoding ParseOtlpHttpEncoding(const std::string &name) +{ + if (name == "protobuf") + { + return OtlpHttpEncoding::protobuf; + } + + if (name == "json") + { + return OtlpHttpEncoding::json; + } + + OTEL_INTERNAL_LOG_ERROR("OtlpHttpEncoding: name = " << name); + throw InvalidSchemaException("Illegal OtlpHttpEncoding"); +} + static std::unique_ptr ParseStringArrayConfiguration( const std::unique_ptr &node) { @@ -199,7 +215,9 @@ ParseOtlpHttpLogRecordExporterConfiguration(const std::unique_ptr model->headers_list = node->GetString("headers_list", ""); model->compression = node->GetString("compression", ""); model->timeout = node->GetInteger("timeout", 10000); - // FIXME: encoding + + std::string encoding = node->GetString("encoding", "protobuf"); + model->encoding = ParseOtlpHttpEncoding(encoding); return model; } @@ -494,6 +512,9 @@ ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr model->default_histogram_aggregation = ParseDefaultHistogramAggregation(default_histogram_aggregation); + std::string encoding = node->GetString("encoding", "protobuf"); + model->encoding = ParseOtlpHttpEncoding(encoding); + return model; } @@ -1213,6 +1234,9 @@ static std::unique_ptr ParseOtlpHttpSpanExpor model->compression = node->GetString("compression", ""); model->timeout = node->GetInteger("timeout", 10000); + std::string encoding = node->GetString("encoding", "protobuf"); + model->encoding = ParseOtlpHttpEncoding(encoding); + return model; } diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc index 2ea8936190..f7cf859020 100644 --- a/sdk/test/configuration/yaml_trace_test.cc +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -5,8 +5,21 @@ #include #include +#include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/span_limits_configuration.h" +#include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" static std::unique_ptr DoParse( const std::string &yaml) @@ -37,3 +50,744 @@ file_format: xx.yy auto config = DoParse(yaml); ASSERT_EQ(config, nullptr); } + +TEST(YamlTrace, many_processors) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + - simple: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 2); +} + +TEST(YamlTrace, simple_processor) +{ + std::string yaml = R"( +file_format: xx.yy +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->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlTrace, default_batch_processor) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - batch: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *batch = + reinterpret_cast( + processor); + ASSERT_EQ(batch->schedule_delay, 5000); + ASSERT_EQ(batch->export_timeout, 30000); + ASSERT_EQ(batch->max_queue_size, 2048); + ASSERT_EQ(batch->max_export_batch_size, 512); + ASSERT_NE(batch->exporter, nullptr); + auto *exporter = batch->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlTrace, batch_processor) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - batch: + schedule_delay: 5555 + export_timeout: 33333 + max_queue_size: 1234 + max_export_batch_size: 256 + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *batch = + reinterpret_cast( + processor); + ASSERT_EQ(batch->schedule_delay, 5555); + ASSERT_EQ(batch->export_timeout, 33333); + ASSERT_EQ(batch->max_queue_size, 1234); + ASSERT_EQ(batch->max_export_batch_size, 256); + ASSERT_NE(batch->exporter, nullptr); + auto *exporter = batch->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlTrace, default_otlp_http) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + otlp_http: + endpoint: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_http = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_http->endpoint, "somewhere"); + ASSERT_EQ(otlp_http->certificate_file, ""); + ASSERT_EQ(otlp_http->client_key_file, ""); + ASSERT_EQ(otlp_http->client_certificate_file, ""); + ASSERT_EQ(otlp_http->headers, nullptr); + ASSERT_EQ(otlp_http->headers_list, ""); + ASSERT_EQ(otlp_http->compression, ""); + ASSERT_EQ(otlp_http->timeout, 10000); + ASSERT_EQ(otlp_http->encoding, opentelemetry::sdk::configuration::OtlpHttpEncoding::protobuf); +} + +TEST(YamlTrace, otlp_http) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + otlp_http: + endpoint: "somewhere" + certificate_file: "certificate_file" + client_key_file: "client_key_file" + client_certificate_file: "client_certificate_file" + headers: + - name: foo + value: "123" + - name: bar + value: "456" + headers_list: "baz=789" + compression: "compression" + timeout: 5000 + encoding: json +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_http = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_http->endpoint, "somewhere"); + ASSERT_EQ(otlp_http->certificate_file, "certificate_file"); + ASSERT_EQ(otlp_http->client_key_file, "client_key_file"); + ASSERT_EQ(otlp_http->client_certificate_file, "client_certificate_file"); + ASSERT_NE(otlp_http->headers, nullptr); + ASSERT_EQ(otlp_http->headers->kv_map.size(), 2); + ASSERT_EQ(otlp_http->headers->kv_map["foo"], "123"); + ASSERT_EQ(otlp_http->headers->kv_map["bar"], "456"); + ASSERT_EQ(otlp_http->headers_list, "baz=789"); + ASSERT_EQ(otlp_http->compression, "compression"); + ASSERT_EQ(otlp_http->timeout, 5000); + ASSERT_EQ(otlp_http->encoding, opentelemetry::sdk::configuration::OtlpHttpEncoding::json); +} + +TEST(YamlTrace, default_otlp_grpc) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + otlp_grpc: + endpoint: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_grpc = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_grpc->endpoint, "somewhere"); + ASSERT_EQ(otlp_grpc->certificate_file, ""); + ASSERT_EQ(otlp_grpc->client_key_file, ""); + ASSERT_EQ(otlp_grpc->client_certificate_file, ""); + ASSERT_EQ(otlp_grpc->headers, nullptr); + ASSERT_EQ(otlp_grpc->headers_list, ""); + ASSERT_EQ(otlp_grpc->compression, ""); + ASSERT_EQ(otlp_grpc->timeout, 10000); + ASSERT_EQ(otlp_grpc->insecure, false); +} + +TEST(YamlTrace, otlp_grpc) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + otlp_grpc: + endpoint: "somewhere" + certificate_file: "certificate_file" + client_key_file: "client_key_file" + client_certificate_file: "client_certificate_file" + headers: + - name: foo + value: "123" + - name: bar + value: "456" + headers_list: "baz=789" + compression: "compression" + timeout: 5000 + insecure: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_grpc = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_grpc->endpoint, "somewhere"); + ASSERT_EQ(otlp_grpc->certificate_file, "certificate_file"); + ASSERT_EQ(otlp_grpc->client_key_file, "client_key_file"); + ASSERT_EQ(otlp_grpc->client_certificate_file, "client_certificate_file"); + ASSERT_NE(otlp_grpc->headers, nullptr); + ASSERT_EQ(otlp_grpc->headers->kv_map.size(), 2); + ASSERT_EQ(otlp_grpc->headers->kv_map["foo"], "123"); + ASSERT_EQ(otlp_grpc->headers->kv_map["bar"], "456"); + ASSERT_EQ(otlp_grpc->headers_list, "baz=789"); + ASSERT_EQ(otlp_grpc->compression, "compression"); + ASSERT_EQ(otlp_grpc->timeout, 5000); + ASSERT_EQ(otlp_grpc->insecure, true); +} + +TEST(YamlTrace, default_otlp_file) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + otlp_file/development: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_file = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_file->output_stream, ""); +} + +TEST(YamlTrace, otlp_file) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + otlp_file/development: + output_stream: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_file = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_file->output_stream, "somewhere"); +} + +TEST(YamlTrace, otlp_console) +{ + std::string yaml = R"( +file_format: xx.yy +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->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlTrace, default_otlp_zipkin) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + zipkin: + endpoint: "zipkin" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *zipkin = + reinterpret_cast( + exporter); + ASSERT_EQ(zipkin->endpoint, "zipkin"); + ASSERT_EQ(zipkin->timeout, 10000); +} + +TEST(YamlTrace, otlp_zipkin) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + zipkin: + endpoint: "zipkin" + timeout: 5000 +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_EQ(config->tracer_provider->processors.size(), 1); + auto *processor = config->tracer_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *zipkin = + reinterpret_cast( + exporter); + ASSERT_EQ(zipkin->endpoint, "zipkin"); + ASSERT_EQ(zipkin->timeout, 5000); +} + +TEST(YamlTrace, no_limits) +{ + std::string yaml = R"( +file_format: xx.yy +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->limits, nullptr); +} + +TEST(YamlTrace, default_limits) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + limits: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->limits, nullptr); + ASSERT_EQ(config->tracer_provider->limits->attribute_value_length_limit, 4096); + ASSERT_EQ(config->tracer_provider->limits->attribute_count_limit, 128); + ASSERT_EQ(config->tracer_provider->limits->event_count_limit, 128); + ASSERT_EQ(config->tracer_provider->limits->link_count_limit, 128); + ASSERT_EQ(config->tracer_provider->limits->event_attribute_count_limit, 128); + ASSERT_EQ(config->tracer_provider->limits->link_attribute_count_limit, 128); +} + +TEST(YamlTrace, limits) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + limits: + attribute_value_length_limit: 1111 + attribute_count_limit: 2222 + event_count_limit: 3333 + link_count_limit: 4444 + event_attribute_count_limit: 5555 + link_attribute_count_limit: 6666 +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->limits, nullptr); + ASSERT_EQ(config->tracer_provider->limits->attribute_value_length_limit, 1111); + ASSERT_EQ(config->tracer_provider->limits->attribute_count_limit, 2222); + ASSERT_EQ(config->tracer_provider->limits->event_count_limit, 3333); + ASSERT_EQ(config->tracer_provider->limits->link_count_limit, 4444); + ASSERT_EQ(config->tracer_provider->limits->event_attribute_count_limit, 5555); + ASSERT_EQ(config->tracer_provider->limits->link_attribute_count_limit, 6666); +} + +TEST(YamlTrace, no_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +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->sampler, nullptr); +} + +TEST(YamlTrace, empty_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlTrace, many_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + foo: + bar: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlTrace, always_off_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + always_off: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); +} + +TEST(YamlTrace, always_on_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + always_on: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); +} + +TEST(YamlTrace, jaeger_remote_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + jaeger_remote: + endpoint: jaeger + interval: 1234 + initial_sampler: + always_off: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto *sampler = config->tracer_provider->sampler.get(); + auto *jaeger = + reinterpret_cast( + sampler); + ASSERT_EQ(jaeger->endpoint, "jaeger"); + ASSERT_EQ(jaeger->interval, 1234); + ASSERT_NE(jaeger->initial_sampler, nullptr); +} + +TEST(YamlTrace, default_parent_based_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + parent_based: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto *sampler = config->tracer_provider->sampler.get(); + auto *parent = + reinterpret_cast( + sampler); + ASSERT_EQ(parent->root, nullptr); + ASSERT_EQ(parent->remote_parent_sampled, nullptr); + ASSERT_EQ(parent->remote_parent_not_sampled, nullptr); + ASSERT_EQ(parent->local_parent_sampled, nullptr); + ASSERT_EQ(parent->local_parent_not_sampled, nullptr); +} + +TEST(YamlTrace, parent_based_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + parent_based: + root: + always_off: + remote_parent_sampled: + always_off: + remote_parent_not_sampled: + always_off: + local_parent_sampled: + always_off: + local_parent_not_sampled: + always_off: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto *sampler = config->tracer_provider->sampler.get(); + auto *parent = + reinterpret_cast( + sampler); + ASSERT_NE(parent->root, nullptr); + ASSERT_NE(parent->remote_parent_sampled, nullptr); + ASSERT_NE(parent->remote_parent_not_sampled, nullptr); + ASSERT_NE(parent->local_parent_sampled, nullptr); + ASSERT_NE(parent->local_parent_not_sampled, nullptr); +} + +TEST(YamlTrace, default_trace_id_ratio_based_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto *sampler = config->tracer_provider->sampler.get(); + auto *ratio = + reinterpret_cast( + sampler); + ASSERT_EQ(ratio->ratio, 0.0); +} + +TEST(YamlTrace, trace_id_ratio_based_sampler) +{ + std::string yaml = R"( +file_format: xx.yy +tracer_provider: + processors: + - simple: + exporter: + console: + sampler: + trace_id_ratio_based: + ratio: 3.14 +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->tracer_provider, nullptr); + ASSERT_NE(config->tracer_provider->sampler, nullptr); + auto *sampler = config->tracer_provider->sampler.get(); + auto *ratio = + reinterpret_cast( + sampler); + ASSERT_EQ(ratio->ratio, 3.14); +} From 22e31b4146ac81a43c7768ec2f0c51c95eb83343 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 7 Jul 2025 09:21:34 +0200 Subject: [PATCH 114/166] cleanup --- sdk/src/configuration/configuration_parser.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 5c3ff7ddd0..1ccd1666cc 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -62,6 +62,7 @@ #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" #include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" @@ -866,8 +867,8 @@ ParseBase2ExponentialBucketHistogramAggregationConfiguration( std::unique_ptr model( new Base2ExponentialBucketHistogramAggregationConfiguration); - model->max_scale = node->GetInteger("max_scale", 0); // FIXME: default ? - model->max_size = node->GetInteger("max_size", 0); // FIXME: default ? + model->max_scale = node->GetInteger("max_scale", 20); + model->max_size = node->GetInteger("max_size", 160); model->record_min_max = node->GetBoolean("record_min_max", true); return model; @@ -1068,6 +1069,7 @@ static std::unique_ptr ParseJaegerRemoteSample std::unique_ptr child; // Unclear if endpoint and interval are required/optional + // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/238 OTEL_INTERNAL_LOG_ERROR("JaegerRemoteSamplerConfiguration: FIXME"); model->endpoint = node->GetString("endpoint", "FIXME"); From 038cbce54251fc04912ef39fcdfb5df1e82db208 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 8 Jul 2025 00:07:39 +0200 Subject: [PATCH 115/166] Parser yaml tests --- sdk/src/configuration/configuration_parser.cc | 32 +- sdk/test/configuration/CMakeLists.txt | 3 +- sdk/test/configuration/yaml_logs_test.cc | 477 +++++++++++++++ sdk/test/configuration/yaml_metrics_test.cc | 565 ++++++++++++++++++ 4 files changed, 1067 insertions(+), 10 deletions(-) create mode 100644 sdk/test/configuration/yaml_logs_test.cc create mode 100644 sdk/test/configuration/yaml_metrics_test.cc diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 1ccd1666cc..2fa3d794d3 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -506,10 +506,11 @@ ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr model->compression = node->GetString("compression", ""); model->timeout = node->GetInteger("timeout", 10000); - std::string temporality_preference = node->GetString("temporality_preference", ""); + std::string temporality_preference = node->GetString("temporality_preference", "cumulative"); model->temporality_preference = ParseTemporalityPreference(temporality_preference); - std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); + std::string default_histogram_aggregation = + node->GetString("default_histogram_aggregation", "explicit_bucket_histogram"); model->default_histogram_aggregation = ParseDefaultHistogramAggregation(default_histogram_aggregation); @@ -541,10 +542,11 @@ ParseOtlpGrpcPushMetricExporterConfiguration(const std::unique_ptr model->compression = node->GetString("compression", ""); model->timeout = node->GetInteger("timeout", 10000); - std::string temporality_preference = node->GetString("temporality_preference", ""); + std::string temporality_preference = node->GetString("temporality_preference", "cumulative"); model->temporality_preference = ParseTemporalityPreference(temporality_preference); - std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); + std::string default_histogram_aggregation = + node->GetString("default_histogram_aggregation", "explicit_bucket_histogram"); model->default_histogram_aggregation = ParseDefaultHistogramAggregation(default_histogram_aggregation); @@ -562,10 +564,11 @@ ParseOtlpFilePushMetricExporterConfiguration(const std::unique_ptr model->output_stream = node->GetString("output_stream", ""); - std::string temporality_preference = node->GetString("temporality_preference", ""); + std::string temporality_preference = node->GetString("temporality_preference", "cumulative"); model->temporality_preference = ParseTemporalityPreference(temporality_preference); - std::string default_histogram_aggregation = node->GetString("default_histogram_aggregation", ""); + std::string default_histogram_aggregation = + node->GetString("default_histogram_aggregation", "explicit_bucket_histogram"); model->default_histogram_aggregation = ParseDefaultHistogramAggregation(default_histogram_aggregation); @@ -578,6 +581,8 @@ ParseConsolePushMetricExporterConfiguration(const std::unique_ptr std::unique_ptr model( new ConsolePushMetricExporterConfiguration); + // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/242 + return model; } @@ -993,11 +998,20 @@ static std::unique_ptr ParseMeterProviderConfigurati model->readers.push_back(ParseMetricReaderConfiguration(*it)); } - child = node->GetRequiredChildNode("views"); + if (model->readers.size() == 0) + { + OTEL_INTERNAL_LOG_ERROR("ParseMeterProviderConfiguration: 0 readers "); + throw InvalidSchemaException("Illegal readers"); + } - for (auto it = child->begin(); it != child->end(); ++it) + child = node->GetChildNode("views"); + + if (child != nullptr) { - model->views.push_back(ParseViewConfiguration(*it)); + for (auto it = child->begin(); it != child->end(); ++it) + { + model->views.push_back(ParseViewConfiguration(*it)); + } } return model; diff --git a/sdk/test/configuration/CMakeLists.txt b/sdk/test/configuration/CMakeLists.txt index 6dfe2d856a..402f4fc261 100644 --- a/sdk/test/configuration/CMakeLists.txt +++ b/sdk/test/configuration/CMakeLists.txt @@ -1,7 +1,8 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -foreach(testname yaml_test yaml_trace_test yaml_resource_test) +foreach(testname yaml_test yaml_trace_test yaml_resource_test yaml_logs_test + yaml_metrics_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} opentelemetry_configuration) diff --git a/sdk/test/configuration/yaml_logs_test.cc b/sdk/test/configuration/yaml_logs_test.cc new file mode 100644 index 0000000000..b98b8b1087 --- /dev/null +++ b/sdk/test/configuration/yaml_logs_test.cc @@ -0,0 +1,477 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include + +#include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" + +static std::unique_ptr DoParse( + const std::string &yaml) +{ + static const std::string source("test"); + return opentelemetry::sdk::configuration::YamlConfigurationParser::ParseString(source, yaml); +} + +TEST(YamlLogs, no_processors) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlLogs, empty_processors) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlLogs, many_processors) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + console: + - simple: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 2); +} + +TEST(YamlLogs, simple_processor) +{ + std::string yaml = R"( +file_format: xx.yy +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->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlLogs, default_batch_processor) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - batch: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *batch = + reinterpret_cast( + processor); + ASSERT_EQ(batch->schedule_delay, 5000); + ASSERT_EQ(batch->export_timeout, 30000); + ASSERT_EQ(batch->max_queue_size, 2048); + ASSERT_EQ(batch->max_export_batch_size, 512); + ASSERT_NE(batch->exporter, nullptr); + auto *exporter = batch->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlLogs, batch_processor) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - batch: + schedule_delay: 5555 + export_timeout: 33333 + max_queue_size: 1234 + max_export_batch_size: 256 + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *batch = + reinterpret_cast( + processor); + ASSERT_EQ(batch->schedule_delay, 5555); + ASSERT_EQ(batch->export_timeout, 33333); + ASSERT_EQ(batch->max_queue_size, 1234); + ASSERT_EQ(batch->max_export_batch_size, 256); + ASSERT_NE(batch->exporter, nullptr); + auto *exporter = batch->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlLogs, default_otlp_http) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + otlp_http: + endpoint: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_http = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_http->endpoint, "somewhere"); + ASSERT_EQ(otlp_http->certificate_file, ""); + ASSERT_EQ(otlp_http->client_key_file, ""); + ASSERT_EQ(otlp_http->client_certificate_file, ""); + ASSERT_EQ(otlp_http->headers, nullptr); + ASSERT_EQ(otlp_http->headers_list, ""); + ASSERT_EQ(otlp_http->compression, ""); + ASSERT_EQ(otlp_http->timeout, 10000); + ASSERT_EQ(otlp_http->encoding, opentelemetry::sdk::configuration::OtlpHttpEncoding::protobuf); +} + +TEST(YamlLogs, otlp_http) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + otlp_http: + endpoint: "somewhere" + certificate_file: "certificate_file" + client_key_file: "client_key_file" + client_certificate_file: "client_certificate_file" + headers: + - name: foo + value: "123" + - name: bar + value: "456" + headers_list: "baz=789" + compression: "compression" + timeout: 5000 + encoding: json +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_http = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_http->endpoint, "somewhere"); + ASSERT_EQ(otlp_http->certificate_file, "certificate_file"); + ASSERT_EQ(otlp_http->client_key_file, "client_key_file"); + ASSERT_EQ(otlp_http->client_certificate_file, "client_certificate_file"); + ASSERT_NE(otlp_http->headers, nullptr); + ASSERT_EQ(otlp_http->headers->kv_map.size(), 2); + ASSERT_EQ(otlp_http->headers->kv_map["foo"], "123"); + ASSERT_EQ(otlp_http->headers->kv_map["bar"], "456"); + ASSERT_EQ(otlp_http->headers_list, "baz=789"); + ASSERT_EQ(otlp_http->compression, "compression"); + ASSERT_EQ(otlp_http->timeout, 5000); + ASSERT_EQ(otlp_http->encoding, opentelemetry::sdk::configuration::OtlpHttpEncoding::json); +} + +TEST(YamlLogs, default_otlp_grpc) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + otlp_grpc: + endpoint: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_grpc = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_grpc->endpoint, "somewhere"); + ASSERT_EQ(otlp_grpc->certificate_file, ""); + ASSERT_EQ(otlp_grpc->client_key_file, ""); + ASSERT_EQ(otlp_grpc->client_certificate_file, ""); + ASSERT_EQ(otlp_grpc->headers, nullptr); + ASSERT_EQ(otlp_grpc->headers_list, ""); + ASSERT_EQ(otlp_grpc->compression, ""); + ASSERT_EQ(otlp_grpc->timeout, 10000); + ASSERT_EQ(otlp_grpc->insecure, false); +} + +TEST(YamlLogs, otlp_grpc) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + otlp_grpc: + endpoint: "somewhere" + certificate_file: "certificate_file" + client_key_file: "client_key_file" + client_certificate_file: "client_certificate_file" + headers: + - name: foo + value: "123" + - name: bar + value: "456" + headers_list: "baz=789" + compression: "compression" + timeout: 5000 + insecure: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_grpc = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_grpc->endpoint, "somewhere"); + ASSERT_EQ(otlp_grpc->certificate_file, "certificate_file"); + ASSERT_EQ(otlp_grpc->client_key_file, "client_key_file"); + ASSERT_EQ(otlp_grpc->client_certificate_file, "client_certificate_file"); + ASSERT_NE(otlp_grpc->headers, nullptr); + ASSERT_EQ(otlp_grpc->headers->kv_map.size(), 2); + ASSERT_EQ(otlp_grpc->headers->kv_map["foo"], "123"); + ASSERT_EQ(otlp_grpc->headers->kv_map["bar"], "456"); + ASSERT_EQ(otlp_grpc->headers_list, "baz=789"); + ASSERT_EQ(otlp_grpc->compression, "compression"); + ASSERT_EQ(otlp_grpc->timeout, 5000); + ASSERT_EQ(otlp_grpc->insecure, true); +} + +TEST(YamlLogs, default_otlp_file) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + otlp_file/development: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_file = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_file->output_stream, ""); +} + +TEST(YamlLogs, otlp_file) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + otlp_file/development: + output_stream: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_EQ(config->logger_provider->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_file = + reinterpret_cast( + exporter); + ASSERT_EQ(otlp_file->output_stream, "somewhere"); +} + +TEST(YamlLogs, otlp_console) +{ + std::string yaml = R"( +file_format: xx.yy +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->processors.size(), 1); + auto *processor = config->logger_provider->processors[0].get(); + ASSERT_NE(processor, nullptr); + auto *simple = + reinterpret_cast( + processor); + ASSERT_NE(simple->exporter, nullptr); + auto *exporter = simple->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlLogs, no_limits) +{ + std::string yaml = R"( +file_format: xx.yy +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->limits, nullptr); +} + +TEST(YamlLogs, default_limits) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + console: + limits: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->limits, nullptr); + ASSERT_EQ(config->logger_provider->limits->attribute_value_length_limit, 4096); + ASSERT_EQ(config->logger_provider->limits->attribute_count_limit, 128); +} + +TEST(YamlLogs, limits) +{ + std::string yaml = R"( +file_format: xx.yy +logger_provider: + processors: + - simple: + exporter: + console: + limits: + attribute_value_length_limit: 1111 + attribute_count_limit: 2222 +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->logger_provider, nullptr); + ASSERT_NE(config->logger_provider->limits, nullptr); + ASSERT_EQ(config->logger_provider->limits->attribute_value_length_limit, 1111); + ASSERT_EQ(config->logger_provider->limits->attribute_count_limit, 2222); +} diff --git a/sdk/test/configuration/yaml_metrics_test.cc b/sdk/test/configuration/yaml_metrics_test.cc new file mode 100644 index 0000000000..dc00db71f3 --- /dev/null +++ b/sdk/test/configuration/yaml_metrics_test.cc @@ -0,0 +1,565 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" + +static std::unique_ptr DoParse( + const std::string &yaml) +{ + static const std::string source("test"); + return opentelemetry::sdk::configuration::YamlConfigurationParser::ParseString(source, yaml); +} + +TEST(YamlMetrics, no_readers) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlMetrics, empty_readers) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlMetrics, many_readers) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + - periodic: + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 2); +} + +TEST(YamlMetrics, default_periodic_reader) +{ + std::string yaml = R"( +file_format: xx.yy +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->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_EQ(periodic->interval, 5000); + ASSERT_EQ(periodic->timeout, 30000); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlMetrics, periodic_reader) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + interval: 2500 + timeout: 15000 + exporter: + console: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_EQ(periodic->interval, 2500); + ASSERT_EQ(periodic->timeout, 15000); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlMetrics, pull_reader) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - pull: + exporter: + prometheus: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *pull = + reinterpret_cast(reader); + ASSERT_NE(pull->exporter, nullptr); + auto *exporter = pull->exporter.get(); + ASSERT_NE(exporter, nullptr); +} + +TEST(YamlMetrics, default_otlp_http) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + otlp_http: + endpoint: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_http = reinterpret_cast< + opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *>(exporter); + ASSERT_EQ(otlp_http->endpoint, "somewhere"); + ASSERT_EQ(otlp_http->certificate_file, ""); + ASSERT_EQ(otlp_http->client_key_file, ""); + ASSERT_EQ(otlp_http->client_certificate_file, ""); + ASSERT_EQ(otlp_http->headers, nullptr); + ASSERT_EQ(otlp_http->headers_list, ""); + ASSERT_EQ(otlp_http->compression, ""); + ASSERT_EQ(otlp_http->timeout, 10000); + ASSERT_EQ(otlp_http->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::cumulative); + ASSERT_EQ( + otlp_http->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation::explicit_bucket_histogram); + ASSERT_EQ(otlp_http->encoding, opentelemetry::sdk::configuration::OtlpHttpEncoding::protobuf); +} + +TEST(YamlMetrics, otlp_http) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + otlp_http: + endpoint: "somewhere" + certificate_file: "certificate_file" + client_key_file: "client_key_file" + client_certificate_file: "client_certificate_file" + headers: + - name: foo + value: "123" + - name: bar + value: "456" + headers_list: "baz=789" + compression: "compression" + timeout: 5000 + temporality_preference: delta + default_histogram_aggregation: base2_exponential_bucket_histogram + encoding: json +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_http = reinterpret_cast< + opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *>(exporter); + ASSERT_EQ(otlp_http->endpoint, "somewhere"); + ASSERT_EQ(otlp_http->certificate_file, "certificate_file"); + ASSERT_EQ(otlp_http->client_key_file, "client_key_file"); + ASSERT_EQ(otlp_http->client_certificate_file, "client_certificate_file"); + ASSERT_NE(otlp_http->headers, nullptr); + ASSERT_EQ(otlp_http->headers->kv_map.size(), 2); + ASSERT_EQ(otlp_http->headers->kv_map["foo"], "123"); + ASSERT_EQ(otlp_http->headers->kv_map["bar"], "456"); + ASSERT_EQ(otlp_http->headers_list, "baz=789"); + ASSERT_EQ(otlp_http->compression, "compression"); + ASSERT_EQ(otlp_http->timeout, 5000); + ASSERT_EQ(otlp_http->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::delta); + ASSERT_EQ(otlp_http->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation:: + base2_exponential_bucket_histogram); + ASSERT_EQ(otlp_http->encoding, opentelemetry::sdk::configuration::OtlpHttpEncoding::json); +} + +TEST(YamlMetrics, default_otlp_grpc) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + otlp_grpc: + endpoint: "somewhere" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_grpc = reinterpret_cast< + opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *>(exporter); + ASSERT_EQ(otlp_grpc->endpoint, "somewhere"); + ASSERT_EQ(otlp_grpc->certificate_file, ""); + ASSERT_EQ(otlp_grpc->client_key_file, ""); + ASSERT_EQ(otlp_grpc->client_certificate_file, ""); + ASSERT_EQ(otlp_grpc->headers, nullptr); + ASSERT_EQ(otlp_grpc->headers_list, ""); + ASSERT_EQ(otlp_grpc->compression, ""); + ASSERT_EQ(otlp_grpc->timeout, 10000); + ASSERT_EQ(otlp_grpc->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::cumulative); + ASSERT_EQ( + otlp_grpc->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation::explicit_bucket_histogram); + ASSERT_EQ(otlp_grpc->insecure, false); +} + +TEST(YamlMetrics, otlp_grpc) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + otlp_grpc: + endpoint: "somewhere" + certificate_file: "certificate_file" + client_key_file: "client_key_file" + client_certificate_file: "client_certificate_file" + headers: + - name: foo + value: "123" + - name: bar + value: "456" + headers_list: "baz=789" + compression: "compression" + timeout: 5000 + temporality_preference: delta + default_histogram_aggregation: base2_exponential_bucket_histogram + insecure: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_grpc = reinterpret_cast< + opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *>(exporter); + ASSERT_EQ(otlp_grpc->endpoint, "somewhere"); + ASSERT_EQ(otlp_grpc->certificate_file, "certificate_file"); + ASSERT_EQ(otlp_grpc->client_key_file, "client_key_file"); + ASSERT_EQ(otlp_grpc->client_certificate_file, "client_certificate_file"); + ASSERT_NE(otlp_grpc->headers, nullptr); + ASSERT_EQ(otlp_grpc->headers->kv_map.size(), 2); + ASSERT_EQ(otlp_grpc->headers->kv_map["foo"], "123"); + ASSERT_EQ(otlp_grpc->headers->kv_map["bar"], "456"); + ASSERT_EQ(otlp_grpc->headers_list, "baz=789"); + ASSERT_EQ(otlp_grpc->compression, "compression"); + ASSERT_EQ(otlp_grpc->timeout, 5000); + ASSERT_EQ(otlp_grpc->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::delta); + ASSERT_EQ(otlp_grpc->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation:: + base2_exponential_bucket_histogram); + ASSERT_EQ(otlp_grpc->insecure, true); +} + +TEST(YamlMetrics, default_otlp_file) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + otlp_file/development: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_file = reinterpret_cast< + opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *>(exporter); + ASSERT_EQ(otlp_file->output_stream, ""); + ASSERT_EQ(otlp_file->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::cumulative); + ASSERT_EQ( + otlp_file->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation::explicit_bucket_histogram); +} + +TEST(YamlMetrics, otlp_file) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + otlp_file/development: + output_stream: "somewhere" + temporality_preference: delta + default_histogram_aggregation: base2_exponential_bucket_histogram +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *otlp_file = reinterpret_cast< + opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *>(exporter); + ASSERT_EQ(otlp_file->output_stream, "somewhere"); + ASSERT_EQ(otlp_file->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::delta); + ASSERT_EQ(otlp_file->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation:: + base2_exponential_bucket_histogram); +} + +TEST(YamlMetrics, default_console) +{ + std::string yaml = R"( +file_format: xx.yy +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->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *console = + reinterpret_cast( + exporter); + + // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/242 + +#if 0 + ASSERT_EQ(console->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::cumulative); + ASSERT_EQ( + console->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation::explicit_bucket_histogram); +#endif +} + +TEST(YamlMetrics, console) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + temporality_preference: delta + default_histogram_aggregation: base2_exponential_bucket_histogram +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *periodic = + reinterpret_cast( + reader); + ASSERT_NE(periodic->exporter, nullptr); + auto *exporter = periodic->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *console = + reinterpret_cast( + exporter); + + // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/242 + +#if 0 + ASSERT_EQ(console->temporality_preference, + opentelemetry::sdk::configuration::TemporalityPreference::cumulative); + ASSERT_EQ( + console->default_histogram_aggregation, + opentelemetry::sdk::configuration::DefaultHistogramAggregation::explicit_bucket_histogram); +#endif +} + +TEST(YamlMetrics, default_prometheus) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - pull: + exporter: + prometheus: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *pull = + reinterpret_cast(reader); + ASSERT_NE(pull->exporter, nullptr); + auto *exporter = pull->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *prometheus = reinterpret_cast< + opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *>(exporter); + ASSERT_EQ(prometheus->host, "localhost"); + ASSERT_EQ(prometheus->port, 9464); + ASSERT_EQ(prometheus->without_units, false); + ASSERT_EQ(prometheus->without_type_suffix, false); + ASSERT_EQ(prometheus->without_scope_info, false); +} + +TEST(YamlMetrics, prometheus) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - pull: + exporter: + prometheus: + host: "prometheus" + port: 1234 + without_units: true + without_type_suffix: true + without_scope_info: true +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->readers.size(), 1); + auto *reader = config->meter_provider->readers[0].get(); + ASSERT_NE(reader, nullptr); + auto *pull = + reinterpret_cast(reader); + ASSERT_NE(pull->exporter, nullptr); + auto *exporter = pull->exporter.get(); + ASSERT_NE(exporter, nullptr); + auto *prometheus = reinterpret_cast< + opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *>(exporter); + ASSERT_EQ(prometheus->host, "prometheus"); + ASSERT_EQ(prometheus->port, 1234); + ASSERT_EQ(prometheus->without_units, true); + ASSERT_EQ(prometheus->without_type_suffix, true); + ASSERT_EQ(prometheus->without_scope_info, true); +} + +// TODO: views From 32e408ab8588c3e0aa8f767894aa7572d234bd3f Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 8 Jul 2025 01:06:10 +0200 Subject: [PATCH 116/166] include-what-you-use --- sdk/test/configuration/yaml_logs_test.cc | 6 ++++++ sdk/test/configuration/yaml_metrics_test.cc | 14 +++++++++++--- sdk/test/configuration/yaml_trace_test.cc | 7 +++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/sdk/test/configuration/yaml_logs_test.cc b/sdk/test/configuration/yaml_logs_test.cc index b98b8b1087..b38c7c58ed 100644 --- a/sdk/test/configuration/yaml_logs_test.cc +++ b/sdk/test/configuration/yaml_logs_test.cc @@ -2,11 +2,17 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include +#include #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_limits_configuration.h" +#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_encoding.h" diff --git a/sdk/test/configuration/yaml_metrics_test.cc b/sdk/test/configuration/yaml_metrics_test.cc index dc00db71f3..50cf3521dd 100644 --- a/sdk/test/configuration/yaml_metrics_test.cc +++ b/sdk/test/configuration/yaml_metrics_test.cc @@ -2,11 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include +#include #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/meter_provider_configuration.h" +#include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_http_encoding.h" @@ -14,6 +19,7 @@ #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" static std::unique_ptr DoParse( @@ -440,13 +446,14 @@ file_format: xx.yy ASSERT_NE(periodic->exporter, nullptr); auto *exporter = periodic->exporter.get(); ASSERT_NE(exporter, nullptr); + +#if 0 auto *console = reinterpret_cast( exporter); // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/242 -#if 0 ASSERT_EQ(console->temporality_preference, opentelemetry::sdk::configuration::TemporalityPreference::cumulative); ASSERT_EQ( @@ -480,13 +487,14 @@ file_format: xx.yy ASSERT_NE(periodic->exporter, nullptr); auto *exporter = periodic->exporter.get(); ASSERT_NE(exporter, nullptr); + +#if 0 auto *console = reinterpret_cast( exporter); // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/242 -#if 0 ASSERT_EQ(console->temporality_preference, opentelemetry::sdk::configuration::TemporalityPreference::cumulative); ASSERT_EQ( diff --git a/sdk/test/configuration/yaml_trace_test.cc b/sdk/test/configuration/yaml_trace_test.cc index f7cf859020..f5f53c7419 100644 --- a/sdk/test/configuration/yaml_trace_test.cc +++ b/sdk/test/configuration/yaml_trace_test.cc @@ -2,13 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include +#include -#include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" -#include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" @@ -17,7 +18,9 @@ #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_limits_configuration.h" +#include "opentelemetry/sdk/configuration/span_processor_configuration.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" #include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" From 6a29200e5603bb212bf3f03906d98982e0ea69ed Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 9 Jul 2025 00:54:38 +0200 Subject: [PATCH 117/166] Code review comments, more parser tests. --- .../sdk/configuration/document_node.h | 49 ++- .../sdk/configuration/instrument_type.h | 1 + sdk/src/configuration/configuration_parser.cc | 5 + sdk/src/configuration/ryml_document_node.cc | 18 +- .../yaml_configuration_parser.cc | 11 +- sdk/test/configuration/yaml_metrics_test.cc | 373 +++++++++++++++++- 6 files changed, 422 insertions(+), 35 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index 016213543b..dbb2a008a3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -105,17 +105,24 @@ class PropertiesNodeConstIteratorImpl class DocumentNodeConstIterator { public: - DocumentNodeConstIterator(DocumentNodeConstIteratorImpl *impl) : impl_(impl) {} - DocumentNodeConstIterator(DocumentNodeConstIterator &&) = default; - DocumentNodeConstIterator(const DocumentNodeConstIterator &) = default; - DocumentNodeConstIterator &operator=(DocumentNodeConstIterator &&) = default; - DocumentNodeConstIterator &operator=(const DocumentNodeConstIterator &other) = default; - - ~DocumentNodeConstIterator() { delete impl_; } - - bool operator==(const DocumentNodeConstIterator &rhs) const { return (impl_->Equal(rhs.impl_)); } + DocumentNodeConstIterator(std::unique_ptr impl) + : impl_(std::move(impl)) + {} + DocumentNodeConstIterator(DocumentNodeConstIterator &&) = delete; + DocumentNodeConstIterator(const DocumentNodeConstIterator &) = delete; + DocumentNodeConstIterator &operator=(DocumentNodeConstIterator &&) = delete; + DocumentNodeConstIterator &operator=(const DocumentNodeConstIterator &other) = delete; + ~DocumentNodeConstIterator() = default; + + bool operator==(const DocumentNodeConstIterator &rhs) const + { + return (impl_->Equal(rhs.impl_.get())); + } - bool operator!=(const DocumentNodeConstIterator &rhs) const { return (!impl_->Equal(rhs.impl_)); } + bool operator!=(const DocumentNodeConstIterator &rhs) const + { + return (!impl_->Equal(rhs.impl_.get())); + } std::unique_ptr operator*() const { return impl_->Item(); } @@ -126,27 +133,29 @@ class DocumentNodeConstIterator } private: - DocumentNodeConstIteratorImpl *impl_; + std::unique_ptr impl_; }; class PropertiesNodeConstIterator { public: - PropertiesNodeConstIterator(PropertiesNodeConstIteratorImpl *impl) : impl_(impl) {} - PropertiesNodeConstIterator(PropertiesNodeConstIterator &&) = default; - PropertiesNodeConstIterator(const PropertiesNodeConstIterator &) = default; - PropertiesNodeConstIterator &operator=(PropertiesNodeConstIterator &&) = default; - PropertiesNodeConstIterator &operator=(const PropertiesNodeConstIterator &other) = default; - ~PropertiesNodeConstIterator() { delete impl_; } + PropertiesNodeConstIterator(std::unique_ptr impl) + : impl_(std::move(impl)) + {} + PropertiesNodeConstIterator(PropertiesNodeConstIterator &&) = delete; + PropertiesNodeConstIterator(const PropertiesNodeConstIterator &) = delete; + PropertiesNodeConstIterator &operator=(PropertiesNodeConstIterator &&) = delete; + PropertiesNodeConstIterator &operator=(const PropertiesNodeConstIterator &other) = delete; + ~PropertiesNodeConstIterator() = default; bool operator==(const PropertiesNodeConstIterator &rhs) const { - return (impl_->Equal(rhs.impl_)); + return (impl_->Equal(rhs.impl_.get())); } bool operator!=(const PropertiesNodeConstIterator &rhs) const { - return (!impl_->Equal(rhs.impl_)); + return (!impl_->Equal(rhs.impl_.get())); } std::string Name() const { return impl_->Name(); } @@ -159,7 +168,7 @@ class PropertiesNodeConstIterator } private: - PropertiesNodeConstIteratorImpl *impl_; + std::unique_ptr impl_; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/instrument_type.h b/sdk/include/opentelemetry/sdk/configuration/instrument_type.h index 49fd52f435..f4e5442f67 100644 --- a/sdk/include/opentelemetry/sdk/configuration/instrument_type.h +++ b/sdk/include/opentelemetry/sdk/configuration/instrument_type.h @@ -17,6 +17,7 @@ namespace configuration // YAML-NODE: InstrumentType enum class InstrumentType : std::uint8_t { + none, /* Represents a null entry */ counter, histogram, observable_counter, diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 2fa3d794d3..ea7194c017 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -771,6 +771,11 @@ static std::unique_ptr ParseMetricReaderConfiguration static InstrumentType ParseInstrumentType(const std::string &name) { + if (name == "") + { + return InstrumentType::none; + } + if (name == "counter") { return InstrumentType::counter; diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index d454b84e5c..c719e06f8d 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -363,15 +363,20 @@ DocumentNodeConstIterator RymlDocumentNode::begin() const } #endif // WITH_DEBUG_NODE - return DocumentNodeConstIterator(new RymlDocumentNodeConstIteratorImpl(node_, 0, depth_)); + auto impl = std::unique_ptr( + new RymlDocumentNodeConstIteratorImpl(node_, 0, depth_)); + + return DocumentNodeConstIterator(std::move(impl)); } DocumentNodeConstIterator RymlDocumentNode::end() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end()"); - return DocumentNodeConstIterator( + auto impl = std::unique_ptr( new RymlDocumentNodeConstIteratorImpl(node_, node_.num_children(), depth_)); + + return DocumentNodeConstIterator(std::move(impl)); } size_t RymlDocumentNode::num_children() const @@ -400,15 +405,20 @@ PropertiesNodeConstIterator RymlDocumentNode::begin_properties() const } #endif // WITH_DEBUG_NODE - return PropertiesNodeConstIterator(new RymlPropertiesNodeConstIteratorImpl(node_, 0, depth_)); + auto impl = std::unique_ptr( + new RymlPropertiesNodeConstIteratorImpl(node_, 0, depth_)); + + return PropertiesNodeConstIterator(std::move(impl)); } PropertiesNodeConstIterator RymlDocumentNode::end_properties() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end_properties()"); - return PropertiesNodeConstIterator( + auto impl = std::unique_ptr( new RymlPropertiesNodeConstIteratorImpl(node_, node_.num_children(), depth_)); + + return PropertiesNodeConstIterator(std::move(impl)); } RymlDocumentNodeConstIteratorImpl::RymlDocumentNodeConstIteratorImpl(ryml::ConstNodeRef parent, diff --git a/sdk/src/configuration/yaml_configuration_parser.cc b/sdk/src/configuration/yaml_configuration_parser.cc index 56148084c3..82722b1de3 100644 --- a/sdk/src/configuration/yaml_configuration_parser.cc +++ b/sdk/src/configuration/yaml_configuration_parser.cc @@ -57,22 +57,13 @@ std::unique_ptr YamlConfigurationParser::ParseFile(const std::str return conf; } -static std::unique_ptr RymlParse(const std::string &source, const std::string &content) -{ - std::unique_ptr doc; - - doc = RymlDocument::Parse(source, content); - - return doc; -} - std::unique_ptr YamlConfigurationParser::ParseString(const std::string &source, const std::string &content) { std::unique_ptr doc; std::unique_ptr config; - doc = RymlParse(source, content); + doc = RymlDocument::Parse(source, content); try { diff --git a/sdk/test/configuration/yaml_metrics_test.cc b/sdk/test/configuration/yaml_metrics_test.cc index 50cf3521dd..e0caef57c9 100644 --- a/sdk/test/configuration/yaml_metrics_test.cc +++ b/sdk/test/configuration/yaml_metrics_test.cc @@ -7,8 +7,11 @@ #include #include +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" +#include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" @@ -20,6 +23,9 @@ #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/temporality_preference.h" +#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/configuration/yaml_configuration_parser.h" static std::unique_ptr DoParse( @@ -570,4 +576,369 @@ file_format: xx.yy ASSERT_EQ(prometheus->without_scope_info, true); } -// TODO: views +TEST(YamlMetrics, empty_views) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 0); +} + +TEST(YamlMetrics, default_views) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_EQ(view->selector->instrument_name, ""); + ASSERT_EQ(view->selector->instrument_type, + opentelemetry::sdk::configuration::InstrumentType::none); + ASSERT_EQ(view->selector->unit, ""); + ASSERT_EQ(view->selector->meter_name, ""); + ASSERT_EQ(view->selector->meter_version, ""); + ASSERT_EQ(view->selector->meter_schema_url, ""); + ASSERT_NE(view->stream, nullptr); + ASSERT_EQ(view->stream->name, ""); + ASSERT_EQ(view->stream->description, ""); + ASSERT_EQ(view->stream->aggregation_cardinality_limit, 0); + ASSERT_EQ(view->stream->aggregation, nullptr); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, selector) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + instrument_name: "instrument_name" + instrument_type: "counter" + unit: "unit" + meter_name: "meter_name" + meter_version: "meter_version" + meter_schema_url: "meter_schema_url" + stream: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_EQ(view->selector->instrument_name, "instrument_name"); + ASSERT_EQ(view->selector->instrument_type, + opentelemetry::sdk::configuration::InstrumentType::counter); + ASSERT_EQ(view->selector->unit, "unit"); + ASSERT_EQ(view->selector->meter_name, "meter_name"); + ASSERT_EQ(view->selector->meter_version, "meter_version"); + ASSERT_EQ(view->selector->meter_schema_url, "meter_schema_url"); + ASSERT_NE(view->stream, nullptr); + ASSERT_EQ(view->stream->name, ""); + ASSERT_EQ(view->stream->description, ""); + ASSERT_EQ(view->stream->aggregation_cardinality_limit, 0); + ASSERT_EQ(view->stream->aggregation, nullptr); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + name: "name" + description: "description" + aggregation_cardinality_limit: 1234 +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_EQ(view->selector->instrument_name, ""); + ASSERT_EQ(view->selector->instrument_type, + opentelemetry::sdk::configuration::InstrumentType::none); + ASSERT_EQ(view->selector->unit, ""); + ASSERT_EQ(view->selector->meter_name, ""); + ASSERT_EQ(view->selector->meter_version, ""); + ASSERT_EQ(view->selector->meter_schema_url, ""); + ASSERT_NE(view->stream, nullptr); + ASSERT_EQ(view->stream->name, "name"); + ASSERT_EQ(view->stream->description, "description"); + ASSERT_EQ(view->stream->aggregation_cardinality_limit, 1234); + ASSERT_EQ(view->stream->aggregation, nullptr); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream_aggregation_default) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + aggregation: + default: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_NE(view->stream, nullptr); + ASSERT_NE(view->stream->aggregation, nullptr); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream_aggregation_drop) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + aggregation: + drop: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_NE(view->stream, nullptr); + ASSERT_NE(view->stream->aggregation, nullptr); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream_aggregation_explicit_bucket_histogram) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + aggregation: + explicit_bucket_histogram: + boundaries: + - 10 + - 20 + - 30 + record_min_max: false +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_NE(view->stream, nullptr); + ASSERT_NE(view->stream->aggregation, nullptr); + auto *aggregation = view->stream->aggregation.get(); + auto *explicit_bucket_histogram = reinterpret_cast< + opentelemetry::sdk::configuration::ExplicitBucketHistogramAggregationConfiguration *>( + aggregation); + ASSERT_EQ(explicit_bucket_histogram->boundaries.size(), 3); + ASSERT_EQ(explicit_bucket_histogram->boundaries[0], 10); + ASSERT_EQ(explicit_bucket_histogram->boundaries[1], 20); + ASSERT_EQ(explicit_bucket_histogram->boundaries[2], 30); + ASSERT_EQ(explicit_bucket_histogram->record_min_max, false); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream_aggregation_base2_exponential_bucket_histogram) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + aggregation: + base2_exponential_bucket_histogram: + max_scale: 40 + max_size: 320 + record_min_max: false +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_NE(view->stream, nullptr); + ASSERT_NE(view->stream->aggregation, nullptr); + auto *aggregation = view->stream->aggregation.get(); + auto *base2_exponential_bucket_histogram = reinterpret_cast< + opentelemetry::sdk::configuration::Base2ExponentialBucketHistogramAggregationConfiguration *>( + aggregation); + ASSERT_EQ(base2_exponential_bucket_histogram->max_scale, 40); + ASSERT_EQ(base2_exponential_bucket_histogram->max_size, 320); + ASSERT_EQ(base2_exponential_bucket_histogram->record_min_max, false); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream_aggregation_last_value) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + aggregation: + last_value: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_NE(view->stream, nullptr); + ASSERT_NE(view->stream->aggregation, nullptr); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream_aggregation_sum) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + aggregation: + sum: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_NE(view->stream, nullptr); + ASSERT_NE(view->stream->aggregation, nullptr); + ASSERT_EQ(view->stream->attribute_keys, nullptr); +} + +TEST(YamlMetrics, stream_attribute_keys) +{ + std::string yaml = R"( +file_format: xx.yy +meter_provider: + readers: + - periodic: + exporter: + console: + views: + - selector: + stream: + attribute_keys: + included: + - foo.in + - bar.in + excluded: + - foo.ex + - bar.ex +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->meter_provider, nullptr); + ASSERT_EQ(config->meter_provider->views.size(), 1); + auto *view = config->meter_provider->views[0].get(); + ASSERT_NE(view, nullptr); + ASSERT_NE(view->selector, nullptr); + ASSERT_NE(view->stream, nullptr); + ASSERT_EQ(view->stream->aggregation, nullptr); + ASSERT_NE(view->stream->attribute_keys, nullptr); + ASSERT_EQ(view->stream->attribute_keys->included->string_array.size(), 2); + ASSERT_EQ(view->stream->attribute_keys->included->string_array[0], "foo.in"); + ASSERT_EQ(view->stream->attribute_keys->included->string_array[1], "bar.in"); + ASSERT_NE(view->stream->attribute_keys->excluded, nullptr); + ASSERT_EQ(view->stream->attribute_keys->excluded->string_array.size(), 2); + ASSERT_EQ(view->stream->attribute_keys->excluded->string_array[0], "foo.ex"); + ASSERT_EQ(view->stream->attribute_keys->excluded->string_array[1], "bar.ex"); +} From 7583bf8f2eaaba14880d10d5cf08991ea4b511c2 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 9 Jul 2025 10:45:32 +0200 Subject: [PATCH 118/166] build cleanup --- .../opentelemetry/sdk/configuration/document_node.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index dbb2a008a3..ac8414d2f2 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -108,9 +108,9 @@ class DocumentNodeConstIterator DocumentNodeConstIterator(std::unique_ptr impl) : impl_(std::move(impl)) {} - DocumentNodeConstIterator(DocumentNodeConstIterator &&) = delete; + DocumentNodeConstIterator(DocumentNodeConstIterator &&) = default; DocumentNodeConstIterator(const DocumentNodeConstIterator &) = delete; - DocumentNodeConstIterator &operator=(DocumentNodeConstIterator &&) = delete; + DocumentNodeConstIterator &operator=(DocumentNodeConstIterator &&) = default; DocumentNodeConstIterator &operator=(const DocumentNodeConstIterator &other) = delete; ~DocumentNodeConstIterator() = default; @@ -142,9 +142,9 @@ class PropertiesNodeConstIterator PropertiesNodeConstIterator(std::unique_ptr impl) : impl_(std::move(impl)) {} - PropertiesNodeConstIterator(PropertiesNodeConstIterator &&) = delete; + PropertiesNodeConstIterator(PropertiesNodeConstIterator &&) = default; PropertiesNodeConstIterator(const PropertiesNodeConstIterator &) = delete; - PropertiesNodeConstIterator &operator=(PropertiesNodeConstIterator &&) = delete; + PropertiesNodeConstIterator &operator=(PropertiesNodeConstIterator &&) = default; PropertiesNodeConstIterator &operator=(const PropertiesNodeConstIterator &other) = delete; ~PropertiesNodeConstIterator() = default; From caa8f9d4834df4b2ef2ba70a1b48532c13067f10 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 9 Jul 2025 17:12:26 +0200 Subject: [PATCH 119/166] Build warnings cleanup --- sdk/src/configuration/ryml_document_node.cc | 1 + sdk/src/init/sdk_builder.cc | 8 ++++++++ sdk/test/configuration/yaml_metrics_test.cc | 4 +++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index c719e06f8d..c678e42eb1 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -6,6 +6,7 @@ #include #include #include +#include #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/document_node.h" diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 1c090c3fad..da32f3a4b6 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -936,6 +936,7 @@ static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType( switch (config) { + case opentelemetry::sdk::configuration::InstrumentType::none: case opentelemetry::sdk::configuration::InstrumentType::counter: sdk = opentelemetry::sdk::metrics::InstrumentType::kCounter; break; @@ -1193,6 +1194,13 @@ void SdkBuilder::AddView( { auto *selector = model->selector.get(); + if (selector->instrument_type == opentelemetry::sdk::configuration::InstrumentType::none) + { + std::string die("Runtime does not support InstrumentSelector for any instrument"); + OTEL_INTERNAL_LOG_ERROR(die); + throw UnsupportedException(die); + } + auto sdk_instrument_type = ConvertInstrumentType(selector->instrument_type); std::unique_ptr sdk_instrument_selector( diff --git a/sdk/test/configuration/yaml_metrics_test.cc b/sdk/test/configuration/yaml_metrics_test.cc index e0caef57c9..8f963f293e 100644 --- a/sdk/test/configuration/yaml_metrics_test.cc +++ b/sdk/test/configuration/yaml_metrics_test.cc @@ -7,12 +7,13 @@ #include #include -#include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/include_exclude_configuration.h" +#include "opentelemetry/sdk/configuration/instrument_type.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" @@ -22,6 +23,7 @@ #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/string_array_configuration.h" #include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/sdk/configuration/view_configuration.h" #include "opentelemetry/sdk/configuration/view_selector_configuration.h" From 6bb6e4746e5c7070f0e74f698ec45e60f21a6483 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 9 Jul 2025 22:53:58 +0200 Subject: [PATCH 120/166] Code review comments, continued. --- .../sdk/configuration/invalid_schema_exception.h | 5 ----- sdk/src/configuration/document_node.cc | 8 +++++--- sdk/src/configuration/yaml_configuration_parser.cc | 9 +++++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h index b401f4dbd6..c6abe648b3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h +++ b/sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h @@ -20,11 +20,6 @@ class InvalidSchemaException : public std::runtime_error { public: InvalidSchemaException(const std::string &msg) : std::runtime_error(msg) {} - InvalidSchemaException(InvalidSchemaException &&) = default; - InvalidSchemaException(const InvalidSchemaException &) = default; - InvalidSchemaException &operator=(InvalidSchemaException &&) = default; - InvalidSchemaException &operator=(const InvalidSchemaException &other) = default; - ~InvalidSchemaException() override = default; }; } // namespace configuration diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index ce1a78523f..5193ad9a52 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/sdk/common/env_variables.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" @@ -106,7 +107,8 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) std::string::size_type pos; std::string name; std::string fallback; - const char *sub; + std::string sub; + bool env_exists; if (len < 4) { @@ -196,8 +198,8 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) end_fallback = len - 1; } - sub = std::getenv(name.c_str()); - if (sub != nullptr) + env_exists = sdk::common::GetStringEnvironmentVariable(name.c_str(), sub); + if (env_exists) { return sub; } diff --git a/sdk/src/configuration/yaml_configuration_parser.cc b/sdk/src/configuration/yaml_configuration_parser.cc index 82722b1de3..da68a290d3 100644 --- a/sdk/src/configuration/yaml_configuration_parser.cc +++ b/sdk/src/configuration/yaml_configuration_parser.cc @@ -9,6 +9,7 @@ #include #include +#include "opentelemetry/sdk/common/env_variables.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configuration_parser.h" @@ -29,8 +30,12 @@ std::unique_ptr YamlConfigurationParser::ParseFile(const std::str if (input_file.empty()) { - const char *env_var = std::getenv("OTEL_EXPERIMENTAL_CONFIG_FILE"); - if (env_var != nullptr) + static std::string env_var_name("OTEL_EXPERIMENTAL_CONFIG_FILE"); + std::string env_var; + bool env_exists; + env_exists = sdk::common::GetStringEnvironmentVariable(env_var_name.c_str(), env_var); + + if (env_exists) { input_file = env_var; } From fe155fba2b7eb12d845b424a9c406f88fd57a7fe Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 9 Jul 2025 23:34:43 +0200 Subject: [PATCH 121/166] iwyu --- sdk/src/configuration/yaml_configuration_parser.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/src/configuration/yaml_configuration_parser.cc b/sdk/src/configuration/yaml_configuration_parser.cc index da68a290d3..627849362e 100644 --- a/sdk/src/configuration/yaml_configuration_parser.cc +++ b/sdk/src/configuration/yaml_configuration_parser.cc @@ -1,7 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include #include #include #include From 0c1d3a3ab70605db3074238672b4fec60e1d3a9a Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 10 Jul 2025 22:49:16 +0200 Subject: [PATCH 122/166] Code review comments: - const methods in yaml parser - std::make_unique - exceptions --- .../sdk/configuration/document_node.h | 39 +-- .../sdk/configuration/ryml_document_node.h | 32 +-- sdk/src/configuration/configuration_parser.cc | 259 +++++++++--------- sdk/src/configuration/document_node.cc | 57 ++-- sdk/src/configuration/ryml_document.cc | 6 +- sdk/src/configuration/ryml_document_node.cc | 101 ++++--- sdk/src/init/registry.cc | 32 +-- sdk/src/init/sdk_builder.cc | 18 +- 8 files changed, 274 insertions(+), 270 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/document_node.h b/sdk/include/opentelemetry/sdk/configuration/document_node.h index ac8414d2f2..1c3f4bef9f 100644 --- a/sdk/include/opentelemetry/sdk/configuration/document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/document_node.h @@ -32,25 +32,26 @@ class DocumentNode virtual std::string Key() const = 0; - virtual bool AsBoolean() = 0; - virtual std::size_t AsInteger() = 0; - virtual double AsDouble() = 0; - virtual std::string AsString() = 0; + virtual bool AsBoolean() const = 0; + virtual std::size_t AsInteger() const = 0; + virtual double AsDouble() const = 0; + virtual std::string AsString() const = 0; - virtual std::unique_ptr GetRequiredChildNode(const std::string &name) = 0; - virtual std::unique_ptr GetChildNode(const std::string &name) = 0; + virtual std::unique_ptr GetRequiredChildNode(const std::string &name) const = 0; + virtual std::unique_ptr GetChildNode(const std::string &name) const = 0; - virtual bool GetRequiredBoolean(const std::string &name) = 0; - virtual bool GetBoolean(const std::string &name, bool default_value) = 0; + virtual bool GetRequiredBoolean(const std::string &name) const = 0; + virtual bool GetBoolean(const std::string &name, bool default_value) const = 0; - virtual std::size_t GetRequiredInteger(const std::string &name) = 0; - virtual std::size_t GetInteger(const std::string &name, std::size_t default_value) = 0; + virtual std::size_t GetRequiredInteger(const std::string &name) const = 0; + virtual std::size_t GetInteger(const std::string &name, std::size_t default_value) const = 0; - virtual double GetRequiredDouble(const std::string &name) = 0; - virtual double GetDouble(const std::string &name, double default_value) = 0; + virtual double GetRequiredDouble(const std::string &name) const = 0; + virtual double GetDouble(const std::string &name, double default_value) const = 0; - virtual std::string GetRequiredString(const std::string &name) = 0; - virtual std::string GetString(const std::string &name, const std::string &default_value) = 0; + virtual std::string GetRequiredString(const std::string &name) const = 0; + virtual std::string GetString(const std::string &name, + const std::string &default_value) const = 0; virtual DocumentNodeConstIterator begin() const = 0; virtual DocumentNodeConstIterator end() const = 0; @@ -62,12 +63,12 @@ class DocumentNode virtual PropertiesNodeConstIterator end_properties() const = 0; protected: - std::string DoSubstitution(const std::string &text); - std::string DoOneSubstitution(const std::string &text); + std::string DoSubstitution(const std::string &text) const; + std::string DoOneSubstitution(const std::string &text) const; - bool BooleanFromString(const std::string &value); - std::size_t IntegerFromString(const std::string &value); - double DoubleFromString(const std::string &value); + bool BooleanFromString(const std::string &value) const; + std::size_t IntegerFromString(const std::string &value) const; + double DoubleFromString(const std::string &value) const; }; class DocumentNodeConstIteratorImpl diff --git a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h index 2d2be1dc2e..d524f57a21 100644 --- a/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h +++ b/sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h @@ -29,25 +29,25 @@ class RymlDocumentNode : public DocumentNode std::string Key() const override; - bool AsBoolean() override; - std::size_t AsInteger() override; - double AsDouble() override; - std::string AsString() override; + bool AsBoolean() const override; + std::size_t AsInteger() const override; + double AsDouble() const override; + std::string AsString() const override; - std::unique_ptr GetRequiredChildNode(const std::string &name) override; - std::unique_ptr GetChildNode(const std::string &name) override; + std::unique_ptr GetRequiredChildNode(const std::string &name) const override; + std::unique_ptr GetChildNode(const std::string &name) const override; - bool GetRequiredBoolean(const std::string &name) override; - bool GetBoolean(const std::string &name, bool default_value) override; + bool GetRequiredBoolean(const std::string &name) const override; + bool GetBoolean(const std::string &name, bool default_value) const override; - std::size_t GetRequiredInteger(const std::string &name) override; - std::size_t GetInteger(const std::string &name, std::size_t default_value) override; + std::size_t GetRequiredInteger(const std::string &name) const override; + std::size_t GetInteger(const std::string &name, std::size_t default_value) const override; - double GetRequiredDouble(const std::string &name) override; - double GetDouble(const std::string &name, double default_value) override; + double GetRequiredDouble(const std::string &name) const override; + double GetDouble(const std::string &name, double default_value) const override; - std::string GetRequiredString(const std::string &name) override; - std::string GetString(const std::string &name, const std::string &default_value) override; + std::string GetRequiredString(const std::string &name) const override; + std::string GetString(const std::string &name, const std::string &default_value) const override; DocumentNodeConstIterator begin() const override; DocumentNodeConstIterator end() const override; @@ -59,8 +59,8 @@ class RymlDocumentNode : public DocumentNode PropertiesNodeConstIterator end_properties() const override; private: - ryml::ConstNodeRef GetRequiredRymlChildNode(const std::string &name); - ryml::ConstNodeRef GetRymlChildNode(const std::string &name); + ryml::ConstNodeRef GetRequiredRymlChildNode(const std::string &name) const; + ryml::ConstNodeRef GetRymlChildNode(const std::string &name) const; ryml::ConstNodeRef node_; std::size_t depth_; diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index ea7194c017..000b935662 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -114,14 +114,15 @@ static OtlpHttpEncoding ParseOtlpHttpEncoding(const std::string &name) return OtlpHttpEncoding::json; } - OTEL_INTERNAL_LOG_ERROR("OtlpHttpEncoding: name = " << name); - throw InvalidSchemaException("Illegal OtlpHttpEncoding"); + std::string message("Illegal OtlpHttpEncoding: "); + message.append(name); + throw InvalidSchemaException(message); } static std::unique_ptr ParseStringArrayConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new StringArrayConfiguration); + auto model = std::make_unique(); for (auto it = node->begin(); it != node->end(); ++it) { @@ -138,7 +139,7 @@ static std::unique_ptr ParseStringArrayConfiguration( static std::unique_ptr ParseIncludeExcludeConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new IncludeExcludeConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetChildNode("included"); @@ -159,7 +160,7 @@ static std::unique_ptr ParseIncludeExcludeConfigura static std::unique_ptr ParseHeadersConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new HeadersConfiguration); + auto model = std::make_unique(); std::unique_ptr kv_pair; std::unique_ptr name_child; std::unique_ptr value_child; @@ -187,7 +188,7 @@ static std::unique_ptr ParseHeadersConfiguration( static std::unique_ptr ParseAttributeLimitsConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new AttributeLimitsConfiguration); + auto model = std::make_unique(); model->attribute_value_length_limit = node->GetInteger("attribute_value_length_limit", 4096); model->attribute_count_limit = node->GetInteger("attribute_count_limit", 128); @@ -198,8 +199,7 @@ static std::unique_ptr ParseAttributeLimitsConfigu static std::unique_ptr ParseOtlpHttpLogRecordExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new OtlpHttpLogRecordExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->endpoint = node->GetRequiredString("endpoint"); @@ -226,8 +226,7 @@ ParseOtlpHttpLogRecordExporterConfiguration(const std::unique_ptr static std::unique_ptr ParseOtlpGrpcLogRecordExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new OtlpGrpcLogRecordExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->endpoint = node->GetRequiredString("endpoint"); @@ -252,8 +251,7 @@ ParseOtlpGrpcLogRecordExporterConfiguration(const std::unique_ptr static std::unique_ptr ParseOtlpFileLogRecordExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new OtlpFileLogRecordExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->output_stream = node->GetString("output_stream", ""); @@ -264,8 +262,7 @@ ParseOtlpFileLogRecordExporterConfiguration(const std::unique_ptr static std::unique_ptr ParseConsoleLogRecordExporterConfiguration(const std::unique_ptr & /* node */) { - std::unique_ptr model( - new ConsoleLogRecordExporterConfiguration); + auto model = std::make_unique(); return model; } @@ -274,10 +271,11 @@ static std::unique_ptr ParseExtensionLogRecordExporterConfiguration(const std::string &name, std::unique_ptr node) { - std::unique_ptr model( - new ExtensionLogRecordExporterConfiguration); + auto model = std::make_unique(); + model->name = name; model->node = std::move(node); + return model; } @@ -299,8 +297,9 @@ static std::unique_ptr ParseLogRecordExporterCon if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseLogRecordExporterConfiguration: count " << count); - throw InvalidSchemaException("Illegal span exporter"); + std::string message("Illegal log record exporter, count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "otlp_http") @@ -330,8 +329,7 @@ static std::unique_ptr ParseLogRecordExporterCon static std::unique_ptr ParseBatchLogRecordProcessorConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new BatchLogRecordProcessorConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->schedule_delay = node->GetInteger("schedule_delay", 5000); @@ -348,8 +346,7 @@ ParseBatchLogRecordProcessorConfiguration(const std::unique_ptr &n static std::unique_ptr ParseSimpleLogRecordProcessorConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new SimpleLogRecordProcessorConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("exporter"); @@ -362,10 +359,11 @@ static std::unique_ptr ParseExtensionLogRecordProcessorConfiguration(const std::string &name, std::unique_ptr node) { - std::unique_ptr model( - new ExtensionLogRecordProcessorConfiguration); + auto model = std::make_unique(); + model->name = name; model->node = std::move(node); + return model; } @@ -387,8 +385,9 @@ static std::unique_ptr ParseLogRecordProcessorC if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseLogRecordProcessorConfiguration: count " << count); - throw InvalidSchemaException("Illegal log record processor"); + std::string message("Illegal log record processor, count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "batch") @@ -410,7 +409,7 @@ static std::unique_ptr ParseLogRecordProcessorC static std::unique_ptr ParseLogRecordLimitsConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new LogRecordLimitsConfiguration); + auto model = std::make_unique(); model->attribute_value_length_limit = node->GetInteger("attribute_value_length_limit", 4096); model->attribute_count_limit = node->GetInteger("attribute_count_limit", 128); @@ -421,7 +420,7 @@ static std::unique_ptr ParseLogRecordLimitsConfigu static std::unique_ptr ParseLoggerProviderConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new LoggerProviderConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("processors"); @@ -434,8 +433,8 @@ static std::unique_ptr ParseLoggerProviderConfigura size_t count = model->processors.size(); if (count == 0) { - OTEL_INTERNAL_LOG_ERROR("ParseLoggerProviderConfiguration: 0 processors "); - throw InvalidSchemaException("Illegal processors"); + std::string message("Illegal logger provider, 0 processors"); + throw InvalidSchemaException(message); } child = node->GetChildNode("limits"); @@ -459,8 +458,9 @@ static DefaultHistogramAggregation ParseDefaultHistogramAggregation(const std::s return DefaultHistogramAggregation::base2_exponential_bucket_histogram; } - OTEL_INTERNAL_LOG_ERROR("ParseDefaultHistogramAggregation: name = " << name); - throw InvalidSchemaException("Illegal default_histogram_aggregation"); + std::string message("Illegal default_histogram_aggregation: "); + message.append(name); + throw InvalidSchemaException(message); } static TemporalityPreference ParseTemporalityPreference(const std::string &name) @@ -480,15 +480,15 @@ static TemporalityPreference ParseTemporalityPreference(const std::string &name) return TemporalityPreference::low_memory; } - OTEL_INTERNAL_LOG_ERROR("ParseTemporalityPreference: name = " << name); - throw InvalidSchemaException("Illegal temporality preference"); + std::string message("Illegal temporality preference: "); + message.append(name); + throw InvalidSchemaException(message); } static std::unique_ptr ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new OtlpHttpPushMetricExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->endpoint = node->GetRequiredString("endpoint"); @@ -523,8 +523,7 @@ ParseOtlpHttpPushMetricExporterConfiguration(const std::unique_ptr static std::unique_ptr ParseOtlpGrpcPushMetricExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new OtlpGrpcPushMetricExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->endpoint = node->GetRequiredString("endpoint"); @@ -558,8 +557,7 @@ ParseOtlpGrpcPushMetricExporterConfiguration(const std::unique_ptr static std::unique_ptr ParseOtlpFilePushMetricExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new OtlpFilePushMetricExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->output_stream = node->GetString("output_stream", ""); @@ -578,8 +576,7 @@ ParseOtlpFilePushMetricExporterConfiguration(const std::unique_ptr static std::unique_ptr ParseConsolePushMetricExporterConfiguration(const std::unique_ptr & /* node */) { - std::unique_ptr model( - new ConsolePushMetricExporterConfiguration); + auto model = std::make_unique(); // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/242 @@ -589,8 +586,7 @@ ParseConsolePushMetricExporterConfiguration(const std::unique_ptr static std::unique_ptr ParsePrometheusPullMetricExporterConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new PrometheusPullMetricExporterConfiguration); + auto model = std::make_unique(); model->host = node->GetString("host", "localhost"); model->port = node->GetInteger("port", 9464); @@ -605,10 +601,11 @@ static std::unique_ptr ParsePushMetricExporterExtensionConfiguration(const std::string &name, std::unique_ptr node) { - std::unique_ptr model( - new ExtensionPushMetricExporterConfiguration); + auto model = std::make_unique(); + model->name = name; model->node = std::move(node); + return model; } @@ -616,10 +613,11 @@ static std::unique_ptr ParsePullMetricExporterExtensionConfiguration(const std::string &name, std::unique_ptr node) { - std::unique_ptr model( - new ExtensionPullMetricExporterConfiguration); + auto model = std::make_unique(); + model->name = name; model->node = std::move(node); + return model; } @@ -641,8 +639,9 @@ static std::unique_ptr ParsePushMetricExporterC if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParsePushMetricExporterConfiguration: count " << count); - throw InvalidSchemaException("Illegal metric exporter"); + std::string message("Illegal push metric exporter, count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "otlp_http") @@ -687,8 +686,9 @@ static std::unique_ptr ParsePullMetricExporterC if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParsePullMetricExporterConfiguration: count " << count); - throw InvalidSchemaException("Illegal metric exporter"); + std::string message("Illegal pull metric exporter, count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "prometheus") @@ -706,7 +706,7 @@ static std::unique_ptr ParsePullMetricExporterC static std::unique_ptr ParsePeriodicMetricReaderConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new PeriodicMetricReaderConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->interval = node->GetInteger("interval", 5000); @@ -721,7 +721,7 @@ static std::unique_ptr ParsePeriodicMetricRea static std::unique_ptr ParsePullMetricReaderConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new PullMetricReaderConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("exporter"); @@ -748,8 +748,9 @@ static std::unique_ptr ParseMetricReaderConfiguration if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseMetricReaderConfiguration: count " << count); - throw InvalidSchemaException("Illegal metric reader"); + std::string message("Illegal metric reader, count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "periodic") @@ -762,8 +763,9 @@ static std::unique_ptr ParseMetricReaderConfiguration } else { - OTEL_INTERNAL_LOG_ERROR("ParseMetricReaderConfiguration: name " << name); - throw InvalidSchemaException("Illegal metric reader"); + std::string message("Illegal metric reader: "); + message.append(name); + throw InvalidSchemaException(message); } return model; @@ -806,14 +808,15 @@ static InstrumentType ParseInstrumentType(const std::string &name) return InstrumentType::up_down_counter; } - OTEL_INTERNAL_LOG_ERROR("ParseInstrumentType: name = " << name); - throw InvalidSchemaException("Illegal instrument_type"); + std::string message("Illegal instrument type: "); + message.append(name); + throw InvalidSchemaException(message); } static std::unique_ptr ParseViewSelectorConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new ViewSelectorConfiguration); + auto model = std::make_unique(); model->instrument_name = node->GetString("instrument_name", ""); @@ -831,7 +834,7 @@ static std::unique_ptr ParseViewSelectorConfiguration static std::unique_ptr ParseDefaultAggregationConfiguration( const std::unique_ptr & /* node */) { - std::unique_ptr model(new DefaultAggregationConfiguration); + auto model = std::make_unique(); return model; } @@ -839,7 +842,7 @@ static std::unique_ptr ParseDefaultAggregationC static std::unique_ptr ParseDropAggregationConfiguration( const std::unique_ptr & /* node */) { - std::unique_ptr model(new DropAggregationConfiguration); + auto model = std::make_unique(); return model; } @@ -847,8 +850,7 @@ static std::unique_ptr ParseDropAggregationConfigu static std::unique_ptr ParseExplicitBucketHistogramAggregationConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new ExplicitBucketHistogramAggregationConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetChildNode("boundaries"); @@ -874,8 +876,7 @@ static std::unique_ptr ParseBase2ExponentialBucketHistogramAggregationConfiguration( const std::unique_ptr &node) { - std::unique_ptr model( - new Base2ExponentialBucketHistogramAggregationConfiguration); + auto model = std::make_unique(); model->max_scale = node->GetInteger("max_scale", 20); model->max_size = node->GetInteger("max_size", 160); @@ -887,7 +888,7 @@ ParseBase2ExponentialBucketHistogramAggregationConfiguration( static std::unique_ptr ParseLastValueAggregationConfiguration( const std::unique_ptr & /* node */) { - std::unique_ptr model(new LastValueAggregationConfiguration); + auto model = std::make_unique(); return model; } @@ -895,7 +896,7 @@ static std::unique_ptr ParseLastValueAggregat static std::unique_ptr ParseSumAggregationConfiguration( const std::unique_ptr & /* node */) { - std::unique_ptr model(new SumAggregationConfiguration); + auto model = std::make_unique(); return model; } @@ -910,8 +911,9 @@ static std::unique_ptr ParseAggregationConfiguration( if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseAggregationConfiguration: count " << count); - throw InvalidSchemaException("Illegal aggregation"); + std::string message("Illegal aggregation, children: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } child = node->GetChild(0); @@ -943,8 +945,9 @@ static std::unique_ptr ParseAggregationConfiguration( } else { - OTEL_INTERNAL_LOG_ERROR("ParseAggregationConfiguration: name " << name); - throw InvalidSchemaException("Illegal aggregation"); + std::string message("Illegal aggregation: "); + message.append(name); + throw InvalidSchemaException(message); } return model; @@ -953,7 +956,7 @@ static std::unique_ptr ParseAggregationConfiguration( static std::unique_ptr ParseViewStreamConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new ViewStreamConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->name = node->GetString("name", ""); @@ -978,7 +981,7 @@ static std::unique_ptr ParseViewStreamConfiguration( static std::unique_ptr ParseViewConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new ViewConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("selector"); @@ -993,7 +996,7 @@ static std::unique_ptr ParseViewConfiguration( static std::unique_ptr ParseMeterProviderConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new MeterProviderConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("readers"); @@ -1005,8 +1008,8 @@ static std::unique_ptr ParseMeterProviderConfigurati if (model->readers.size() == 0) { - OTEL_INTERNAL_LOG_ERROR("ParseMeterProviderConfiguration: 0 readers "); - throw InvalidSchemaException("Illegal readers"); + std::string message("Illegal meter provider, 0 readers"); + throw InvalidSchemaException(message); } child = node->GetChildNode("views"); @@ -1025,7 +1028,7 @@ static std::unique_ptr ParseMeterProviderConfigurati static std::unique_ptr ParsePropagatorConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new PropagatorConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("composite"); @@ -1045,7 +1048,7 @@ static std::unique_ptr ParsePropagatorConfiguration( static std::unique_ptr ParseSpanLimitsConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new SpanLimitsConfiguration); + auto model = std::make_unique(); model->attribute_value_length_limit = node->GetInteger("attribute_value_length_limit", 4096); model->attribute_count_limit = node->GetInteger("attribute_count_limit", 128); @@ -1065,7 +1068,7 @@ static std::unique_ptr ParseAlwaysOffSamplerConfi const std::unique_ptr & /* node */, size_t /* depth */) { - std::unique_ptr model(new AlwaysOffSamplerConfiguration); + auto model = std::make_unique(); return model; } @@ -1074,7 +1077,7 @@ static std::unique_ptr ParseAlwaysOnSamplerConfigu const std::unique_ptr & /* node */, size_t /* depth */) { - std::unique_ptr model(new AlwaysOnSamplerConfiguration); + auto model = std::make_unique(); return model; } @@ -1084,7 +1087,7 @@ static std::unique_ptr ParseJaegerRemoteSample const std::unique_ptr &node, size_t depth) { - std::unique_ptr model(new JaegerRemoteSamplerConfiguration); + auto model = std::make_unique(); std::unique_ptr child; // Unclear if endpoint and interval are required/optional @@ -1109,7 +1112,7 @@ static std::unique_ptr ParseParentBasedSamplerC const std::unique_ptr &node, size_t depth) { - std::unique_ptr model(new ParentBasedSamplerConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetChildNode("root"); @@ -1150,8 +1153,7 @@ static std::unique_ptr ParseTraceIdRatioBasedSamplerConfiguration(const std::unique_ptr &node, size_t /* depth */) { - std::unique_ptr model( - new TraceIdRatioBasedSamplerConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->ratio = node->GetDouble("ratio", 0); @@ -1164,10 +1166,12 @@ static std::unique_ptr ParseSamplerExtensionConfi std::unique_ptr node, size_t depth) { - std::unique_ptr model(new ExtensionSamplerConfiguration); + auto model = std::make_unique(); + model->name = name; model->node = std::move(node); model->depth = depth; + return model; } @@ -1182,8 +1186,9 @@ static std::unique_ptr ParseSamplerConfiguration( */ if (depth >= MAX_SAMPLER_DEPTH) { - OTEL_INTERNAL_LOG_ERROR("ParseSamplerConfiguration: depth " << depth); - throw InvalidSchemaException("Samplers nested too deeply"); + std::string message("Samplers nested too deeply: "); + message.append(std::to_string(depth)); + throw InvalidSchemaException(message); } std::unique_ptr model; @@ -1201,8 +1206,9 @@ static std::unique_ptr ParseSamplerConfiguration( if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseSamplerConfiguration: count " << count); - throw InvalidSchemaException("Illegal sampler"); + std::string message("Illegal sampler, properties count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "always_off") @@ -1237,7 +1243,7 @@ static std::unique_ptr ParseSamplerConfiguration( static std::unique_ptr ParseOtlpHttpSpanExporterConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new OtlpHttpSpanExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->endpoint = node->GetRequiredString("endpoint"); @@ -1264,7 +1270,7 @@ static std::unique_ptr ParseOtlpHttpSpanExpor static std::unique_ptr ParseOtlpGrpcSpanExporterConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new OtlpGrpcSpanExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->endpoint = node->GetRequiredString("endpoint"); @@ -1289,7 +1295,7 @@ static std::unique_ptr ParseOtlpGrpcSpanExpor static std::unique_ptr ParseOtlpFileSpanExporterConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new OtlpFileSpanExporterConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->output_stream = node->GetString("output_stream", ""); @@ -1300,7 +1306,7 @@ static std::unique_ptr ParseOtlpFileSpanExpor static std::unique_ptr ParseConsoleSpanExporterConfiguration( const std::unique_ptr & /* node */) { - std::unique_ptr model(new ConsoleSpanExporterConfiguration); + auto model = std::make_unique(); return model; } @@ -1308,7 +1314,7 @@ static std::unique_ptr ParseConsoleSpanExporte static std::unique_ptr ParseZipkinSpanExporterConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new ZipkinSpanExporterConfiguration); + auto model = std::make_unique(); model->endpoint = node->GetRequiredString("endpoint"); model->timeout = node->GetInteger("timeout", 10000); @@ -1320,9 +1326,11 @@ static std::unique_ptr ParseExtensionSpanExp const std::string &name, std::unique_ptr node) { - std::unique_ptr model(new ExtensionSpanExporterConfiguration); + auto model = std::make_unique(); + model->name = name; model->node = std::move(node); + return model; } @@ -1344,8 +1352,9 @@ static std::unique_ptr ParseSpanExporterConfiguration if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseSpanExporterConfiguration: count " << count); - throw InvalidSchemaException("Illegal span exporter"); + std::string message("Illegal span exporter, properties count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "otlp_http") @@ -1379,7 +1388,7 @@ static std::unique_ptr ParseSpanExporterConfiguration static std::unique_ptr ParseBatchSpanProcessorConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new BatchSpanProcessorConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->schedule_delay = node->GetInteger("schedule_delay", 5000); @@ -1396,7 +1405,7 @@ static std::unique_ptr ParseBatchSpanProcessorC static std::unique_ptr ParseSimpleSpanProcessorConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new SimpleSpanProcessorConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("exporter"); @@ -1409,10 +1418,11 @@ static std::unique_ptr ParseExtensionSpanProcessorConfiguration(const std::string &name, std::unique_ptr node) { - std::unique_ptr model( - new ExtensionSpanProcessorConfiguration); + auto model = std::make_unique(); + model->name = name; model->node = std::move(node); + return model; } @@ -1434,8 +1444,9 @@ static std::unique_ptr ParseSpanProcessorConfigurati if (count != 1) { - OTEL_INTERNAL_LOG_ERROR("ParseSpanProcessorConfiguration: count " << count); - throw InvalidSchemaException("Illegal span processor"); + std::string message("Illegal span processor, properties count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); } if (name == "batch") @@ -1457,7 +1468,7 @@ static std::unique_ptr ParseSpanProcessorConfigurati static std::unique_ptr ParseTracerProviderConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new TracerProviderConfiguration); + auto model = std::make_unique(); std::unique_ptr child; child = node->GetRequiredChildNode("processors"); @@ -1470,8 +1481,8 @@ static std::unique_ptr ParseTracerProviderConfigura size_t count = model->processors.size(); if (count == 0) { - OTEL_INTERNAL_LOG_ERROR("ParseTracerProviderConfiguration: 0 processors "); - throw InvalidSchemaException("Illegal processors"); + std::string message("Illegal tracer provider, 0 processors"); + throw InvalidSchemaException(message); } child = node->GetChildNode("limits"); @@ -1492,7 +1503,7 @@ static std::unique_ptr ParseTracerProviderConfigura static std::unique_ptr ParseStringAttributeValueConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new StringAttributeValueConfiguration); + auto model = std::make_unique(); model->value = node->AsString(); @@ -1502,7 +1513,7 @@ static std::unique_ptr ParseStringAttributeVa static std::unique_ptr ParseIntegerAttributeValueConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new IntegerAttributeValueConfiguration); + auto model = std::make_unique(); model->value = node->AsInteger(); @@ -1512,7 +1523,7 @@ static std::unique_ptr ParseIntegerAttribute static std::unique_ptr ParseDoubleAttributeValueConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new DoubleAttributeValueConfiguration); + auto model = std::make_unique(); model->value = node->AsDouble(); @@ -1522,7 +1533,7 @@ static std::unique_ptr ParseDoubleAttributeVa static std::unique_ptr ParseBooleanAttributeValueConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new BooleanAttributeValueConfiguration); + auto model = std::make_unique(); model->value = node->AsBoolean(); @@ -1532,8 +1543,7 @@ static std::unique_ptr ParseBooleanAttribute static std::unique_ptr ParseStringArrayAttributeValueConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new StringArrayAttributeValueConfiguration); + auto model = std::make_unique(); for (auto it = node->begin(); it != node->end(); ++it) { @@ -1550,8 +1560,7 @@ ParseStringArrayAttributeValueConfiguration(const std::unique_ptr static std::unique_ptr ParseIntegerArrayAttributeValueConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new IntegerArrayAttributeValueConfiguration); + auto model = std::make_unique(); for (auto it = node->begin(); it != node->end(); ++it) { @@ -1568,8 +1577,7 @@ ParseIntegerArrayAttributeValueConfiguration(const std::unique_ptr static std::unique_ptr ParseDoubleArrayAttributeValueConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new DoubleArrayAttributeValueConfiguration); + auto model = std::make_unique(); for (auto it = node->begin(); it != node->end(); ++it) { @@ -1586,8 +1594,7 @@ ParseDoubleArrayAttributeValueConfiguration(const std::unique_ptr static std::unique_ptr ParseBooleanArrayAttributeValueConfiguration(const std::unique_ptr &node) { - std::unique_ptr model( - new BooleanArrayAttributeValueConfiguration); + auto model = std::make_unique(); for (auto it = node->begin(); it != node->end(); ++it) { @@ -1604,7 +1611,7 @@ ParseBooleanArrayAttributeValueConfiguration(const std::unique_ptr static std::unique_ptr ParseAttributesConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new AttributesConfiguration); + auto model = std::make_unique(); std::unique_ptr child; std::unique_ptr attribute_name_value; @@ -1676,8 +1683,9 @@ static std::unique_ptr ParseAttributesConfiguration( } else { - OTEL_INTERNAL_LOG_ERROR("ParseAttributesConfiguration: unknown type " << type); - throw InvalidSchemaException("Illegal attribute type"); + std::string message("Illegal attribute type: "); + message.append(type); + throw InvalidSchemaException(message); } std::pair> entry( @@ -1691,7 +1699,7 @@ static std::unique_ptr ParseAttributesConfiguration( static std::unique_ptr ParseResourceConfiguration( const std::unique_ptr &node) { - std::unique_ptr model(new ResourceConfiguration); + auto model = std::make_unique(); std::unique_ptr child; model->schema_url = node->GetString("schema_url", ""); @@ -1715,7 +1723,8 @@ static std::unique_ptr ParseResourceConfiguration( std::unique_ptr ConfigurationParser::Parse(std::unique_ptr doc) { std::unique_ptr node = doc->GetRootNode(); - std::unique_ptr model(new Configuration(std::move(doc))); + + auto model = std::make_unique(std::move(doc)); model->file_format = node->GetRequiredString("file_format"); model->disabled = node->GetBoolean("disabled", false); diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index 5193ad9a52..df543da12d 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -26,7 +26,7 @@ namespace configuration * - Some text with ${SUBSTITUTION} in it * - Multiple ${SUBSTITUTION_A} substitutions ${SUBSTITUTION_B} in the line */ -std::string DocumentNode::DoSubstitution(const std::string &text) +std::string DocumentNode::DoSubstitution(const std::string &text) const { static std::string begin_token{"${"}; static std::string end_token{"}"}; @@ -90,9 +90,9 @@ std::string DocumentNode::DoSubstitution(const std::string &text) - ${ENV_NAME:-fallback} (including when ENV_NAME is actually "env") - ${env:ENV_NAME:-fallback} */ -std::string DocumentNode::DoOneSubstitution(const std::string &text) +std::string DocumentNode::DoOneSubstitution(const std::string &text) const { - static std::string illegal_msg{"Illegal substitution expression"}; + static std::string illegal_msg{"Illegal substitution expression: "}; static std::string env_token{"env:"}; static std::string env_with_replacement{"env:-"}; @@ -112,29 +112,33 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) if (len < 4) { - OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); - throw InvalidSchemaException(illegal_msg); + std::string message = illegal_msg; + message.append(text); + throw InvalidSchemaException(message); } c = text[0]; if (c != '$') { - OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); - throw InvalidSchemaException(illegal_msg); + std::string message = illegal_msg; + message.append(text); + throw InvalidSchemaException(message); } c = text[1]; if (c != '{') { - OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); - throw InvalidSchemaException(illegal_msg); + std::string message = illegal_msg; + message.append(text); + throw InvalidSchemaException(message); } c = text[len - 1]; if (c != '}') { - OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); - throw InvalidSchemaException(illegal_msg); + std::string message = illegal_msg; + message.append(text); + throw InvalidSchemaException(message); } begin_name = 2; @@ -156,8 +160,9 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) c = text[begin_name]; if (!std::isalpha(c) && c != '_') { - OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); - throw InvalidSchemaException(illegal_msg); + std::string message = illegal_msg; + message.append(text); + throw InvalidSchemaException(message); } end_name = begin_name + 1; @@ -190,8 +195,9 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) pos = text.find(replacement_token, end_name); if (pos != end_name) { - OTEL_INTERNAL_LOG_ERROR(illegal_msg << ": " << text); - throw InvalidSchemaException(illegal_msg); + std::string message = illegal_msg; + message.append(text); + throw InvalidSchemaException(message); } // text is of the form ${ENV_NAME:-fallback} begin_fallback = pos + replacement_token.length(); @@ -215,7 +221,7 @@ std::string DocumentNode::DoOneSubstitution(const std::string &text) return fallback; } -bool DocumentNode::BooleanFromString(const std::string &value) +bool DocumentNode::BooleanFromString(const std::string &value) const { if (value == "true") { @@ -227,11 +233,12 @@ bool DocumentNode::BooleanFromString(const std::string &value) return false; } - OTEL_INTERNAL_LOG_ERROR("Illegal integer value: " << value); - throw InvalidSchemaException("Illegal bool value"); + std::string message("Illegal boolean value: "); + message.append(value); + throw InvalidSchemaException(message); } -size_t DocumentNode::IntegerFromString(const std::string &value) +size_t DocumentNode::IntegerFromString(const std::string &value) const { const char *ptr = value.c_str(); char *end = nullptr; @@ -239,13 +246,14 @@ size_t DocumentNode::IntegerFromString(const std::string &value) size_t val = strtoll(ptr, &end, 10); if (ptr + len != end) { - OTEL_INTERNAL_LOG_ERROR("Illegal integer value: " << value); - throw InvalidSchemaException("Illegal integer value"); + std::string message("Illegal integer value: "); + message.append(value); + throw InvalidSchemaException(message); } return val; } -double DocumentNode::DoubleFromString(const std::string &value) +double DocumentNode::DoubleFromString(const std::string &value) const { const char *ptr = value.c_str(); char *end = nullptr; @@ -253,8 +261,9 @@ double DocumentNode::DoubleFromString(const std::string &value) double val = strtod(ptr, &end); if (ptr + len != end) { - OTEL_INTERNAL_LOG_ERROR("Illegal double value: " << value); - throw InvalidSchemaException("Illegal double value"); + std::string message("Illegal double value: "); + message.append(value); + throw InvalidSchemaException(message); } return val; } diff --git a/sdk/src/configuration/ryml_document.cc b/sdk/src/configuration/ryml_document.cc index e8d49d5ba1..24968bcc0e 100644 --- a/sdk/src/configuration/ryml_document.cc +++ b/sdk/src/configuration/ryml_document.cc @@ -53,15 +53,13 @@ std::unique_ptr RymlDocument::Parse(const std::string &source, const s return doc; } - RymlDocument *ryml_doc = new RymlDocument(tree); - doc = std::unique_ptr(ryml_doc); + doc = std::make_unique(tree); return doc; } std::unique_ptr RymlDocument::GetRootNode() { - RymlDocumentNode *ryml_node = new RymlDocumentNode(tree_.rootref(), 0); - std::unique_ptr node(ryml_node); + auto node = std::make_unique(tree_.rootref(), 0); return node; } diff --git a/sdk/src/configuration/ryml_document_node.cc b/sdk/src/configuration/ryml_document_node.cc index c678e42eb1..286c4f8e5b 100644 --- a/sdk/src/configuration/ryml_document_node.cc +++ b/sdk/src/configuration/ryml_document_node.cc @@ -54,8 +54,7 @@ std::string RymlDocumentNode::Key() const if (!node_.has_key()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: no key"); - throw InvalidSchemaException(""); + throw InvalidSchemaException("Yaml: no key"); } ryml::csubstr k = node_.key(); @@ -63,82 +62,80 @@ std::string RymlDocumentNode::Key() const return name; } -bool RymlDocumentNode::AsBoolean() +bool RymlDocumentNode::AsBoolean() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsBoolean()"); if (!node_.is_val() && !node_.is_keyval()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); + throw InvalidSchemaException("Yaml: not scalar"); } ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return BooleanFromString(value); } -size_t RymlDocumentNode::AsInteger() +size_t RymlDocumentNode::AsInteger() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsInteger()"); if (!node_.is_val() && !node_.is_keyval()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); + throw InvalidSchemaException("Yaml: not scalar"); } ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return IntegerFromString(value); } -double RymlDocumentNode::AsDouble() +double RymlDocumentNode::AsDouble() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsDouble()"); if (!node_.is_val() && !node_.is_keyval()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); + throw InvalidSchemaException("Yaml: not scalar"); } ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return DoubleFromString(value); } -std::string RymlDocumentNode::AsString() +std::string RymlDocumentNode::AsString() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::AsString()"); if (!node_.is_val() && !node_.is_keyval()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: not scalar"); - throw InvalidSchemaException(""); + throw InvalidSchemaException("Yaml: not scalar"); } ryml::csubstr view = node_.val(); std::string value(view.str, view.len); return value; } -ryml::ConstNodeRef RymlDocumentNode::GetRequiredRymlChildNode(const std::string &name) +ryml::ConstNodeRef RymlDocumentNode::GetRequiredRymlChildNode(const std::string &name) const { if (!node_.is_map()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: not a map, looking for " << name); - throw InvalidSchemaException(name); + std::string message("Yaml: not a map, looking for: "); + message.append(name); + throw InvalidSchemaException(message); } const char *name_str = name.c_str(); if (!node_.has_child(name_str)) { - OTEL_INTERNAL_LOG_ERROR("Yaml: required node: " << name); - throw InvalidSchemaException(name); + std::string message("Yaml: required node: "); + message.append(name); + throw InvalidSchemaException(message); } ryml::ConstNodeRef ryml_child = node_[name_str]; return ryml_child; } -ryml::ConstNodeRef RymlDocumentNode::GetRymlChildNode(const std::string &name) +ryml::ConstNodeRef RymlDocumentNode::GetRymlChildNode(const std::string &name) const { if (!node_.is_map()) { @@ -155,30 +152,32 @@ ryml::ConstNodeRef RymlDocumentNode::GetRymlChildNode(const std::string &name) return ryml_child; } -std::unique_ptr RymlDocumentNode::GetRequiredChildNode(const std::string &name) +std::unique_ptr RymlDocumentNode::GetRequiredChildNode(const std::string &name) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredChildNode(" << depth_ << ", " << name << ")"); if (depth_ >= MAX_NODE_DEPTH) { - OTEL_INTERNAL_LOG_ERROR("Yaml nested too deeply " << name); - throw InvalidSchemaException(name); + std::string message("Yaml nested too deeply: "); + message.append(name); + throw InvalidSchemaException(message); } auto ryml_child = GetRequiredRymlChildNode(name); - auto child = std::unique_ptr(new RymlDocumentNode(ryml_child, depth_ + 1)); + auto child = std::make_unique(ryml_child, depth_ + 1); return child; } -std::unique_ptr RymlDocumentNode::GetChildNode(const std::string &name) +std::unique_ptr RymlDocumentNode::GetChildNode(const std::string &name) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetChildNode(" << depth_ << ", " << name << ")"); if (depth_ >= MAX_NODE_DEPTH) { - OTEL_INTERNAL_LOG_ERROR("Yaml nested too deeply " << name); - throw InvalidSchemaException(name); + std::string message("Yaml nested too deeply: "); + message.append(name); + throw InvalidSchemaException(message); } std::unique_ptr child; @@ -195,11 +194,11 @@ std::unique_ptr RymlDocumentNode::GetChildNode(const std::string & } ryml::ConstNodeRef ryml_child = node_[name_str]; - child = std::unique_ptr(new RymlDocumentNode(ryml_child, depth_ + 1)); + child = std::make_unique(ryml_child, depth_ + 1); return child; } -bool RymlDocumentNode::GetRequiredBoolean(const std::string &name) +bool RymlDocumentNode::GetRequiredBoolean(const std::string &name) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredBoolean(" << name << ")"); @@ -213,7 +212,7 @@ bool RymlDocumentNode::GetRequiredBoolean(const std::string &name) return BooleanFromString(value); } -bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) +bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetBoolean(" << name << ", " << default_value << ")"); @@ -237,7 +236,7 @@ bool RymlDocumentNode::GetBoolean(const std::string &name, bool default_value) return BooleanFromString(value); } -size_t RymlDocumentNode::GetRequiredInteger(const std::string &name) +size_t RymlDocumentNode::GetRequiredInteger(const std::string &name) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredInteger(" << name << ")"); @@ -251,7 +250,7 @@ size_t RymlDocumentNode::GetRequiredInteger(const std::string &name) return IntegerFromString(value); } -size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_value) +size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_value) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetInteger(" << name << ", " << default_value << ")"); @@ -275,7 +274,7 @@ size_t RymlDocumentNode::GetInteger(const std::string &name, size_t default_valu return IntegerFromString(value); } -double RymlDocumentNode::GetRequiredDouble(const std::string &name) +double RymlDocumentNode::GetRequiredDouble(const std::string &name) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredDouble(" << name << ")"); @@ -289,7 +288,7 @@ double RymlDocumentNode::GetRequiredDouble(const std::string &name) return DoubleFromString(value); } -double RymlDocumentNode::GetDouble(const std::string &name, double default_value) +double RymlDocumentNode::GetDouble(const std::string &name, double default_value) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetDouble(" << name << ", " << default_value << ")"); @@ -313,7 +312,7 @@ double RymlDocumentNode::GetDouble(const std::string &name, double default_value return DoubleFromString(value); } -std::string RymlDocumentNode::GetRequiredString(const std::string &name) +std::string RymlDocumentNode::GetRequiredString(const std::string &name) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetRequiredString(" << name << ")"); @@ -325,14 +324,16 @@ std::string RymlDocumentNode::GetRequiredString(const std::string &name) if (value.empty()) { - OTEL_INTERNAL_LOG_ERROR("Yaml: string value is empty: " << name); - throw InvalidSchemaException(name); + std::string message("Yaml: string value is empty: "); + message.append(name); + throw InvalidSchemaException(message); } return value; } -std::string RymlDocumentNode::GetString(const std::string &name, const std::string &default_value) +std::string RymlDocumentNode::GetString(const std::string &name, + const std::string &default_value) const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::GetString(" << name << ", " << default_value << ")"); @@ -364,8 +365,7 @@ DocumentNodeConstIterator RymlDocumentNode::begin() const } #endif // WITH_DEBUG_NODE - auto impl = std::unique_ptr( - new RymlDocumentNodeConstIteratorImpl(node_, 0, depth_)); + auto impl = std::make_unique(node_, 0, depth_); return DocumentNodeConstIterator(std::move(impl)); } @@ -374,8 +374,8 @@ DocumentNodeConstIterator RymlDocumentNode::end() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end()"); - auto impl = std::unique_ptr( - new RymlDocumentNodeConstIteratorImpl(node_, node_.num_children(), depth_)); + auto impl = + std::make_unique(node_, node_.num_children(), depth_); return DocumentNodeConstIterator(std::move(impl)); } @@ -389,7 +389,7 @@ std::unique_ptr RymlDocumentNode::GetChild(size_t index) const { std::unique_ptr child; ryml::ConstNodeRef ryml_child = node_[index]; - child = std::unique_ptr(new RymlDocumentNode(ryml_child, depth_ + 1)); + child = std::make_unique(ryml_child, depth_ + 1); return child; } @@ -406,8 +406,7 @@ PropertiesNodeConstIterator RymlDocumentNode::begin_properties() const } #endif // WITH_DEBUG_NODE - auto impl = std::unique_ptr( - new RymlPropertiesNodeConstIteratorImpl(node_, 0, depth_)); + auto impl = std::make_unique(node_, 0, depth_); return PropertiesNodeConstIterator(std::move(impl)); } @@ -416,8 +415,8 @@ PropertiesNodeConstIterator RymlDocumentNode::end_properties() const { OTEL_INTERNAL_LOG_DEBUG("RymlDocumentNode::end_properties()"); - auto impl = std::unique_ptr( - new RymlPropertiesNodeConstIteratorImpl(node_, node_.num_children(), depth_)); + auto impl = + std::make_unique(node_, node_.num_children(), depth_); return PropertiesNodeConstIterator(std::move(impl)); } @@ -441,10 +440,10 @@ std::unique_ptr RymlDocumentNodeConstIteratorImpl::Item() const ryml::ConstNodeRef ryml_item = parent_[index_]; if (ryml_item.invalid()) { - OTEL_INTERNAL_LOG_ERROR("iterator is lost "); - // Throw + // FIXME: runtime exception really + throw InvalidSchemaException("iterator is lost"); } - item = std::unique_ptr(new RymlDocumentNode(ryml_item, depth_ + 1)); + item = std::make_unique(ryml_item, depth_ + 1); return item; } @@ -486,7 +485,7 @@ std::unique_ptr RymlPropertiesNodeConstIteratorImpl::Value() const std::unique_ptr item; ryml::ConstNodeRef ryml_item = parent_[index_]; - item = std::unique_ptr(new RymlDocumentNode(ryml_item, depth_ + 1)); + item = std::make_unique(ryml_item, depth_ + 1); OTEL_INTERNAL_LOG_DEBUG("RymlPropertiesNodeConstIteratorImpl::Value()"); diff --git a/sdk/src/init/registry.cc b/sdk/src/init/registry.cc index 2490f5624f..67728a3427 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/init/registry.cc @@ -12,12 +12,9 @@ #include "opentelemetry/sdk/init/text_map_propagator_builder.h" #include "opentelemetry/trace/propagation/b3_propagator.h" #include "opentelemetry/trace/propagation/http_trace_context.h" +#include "opentelemetry/trace/propagation/jaeger.h" #include "opentelemetry/version.h" -#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE -# include "opentelemetry/trace/propagation/jaeger.h" -#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -29,8 +26,8 @@ class TraceContextBuilder : public TextMapPropagatorBuilder public: std::unique_ptr Build() const override { - return std::unique_ptr( - new opentelemetry::trace::propagation::HttpTraceContext()); + auto result = std::make_unique(); + return result; } }; @@ -39,8 +36,8 @@ class BaggageBuilder : public TextMapPropagatorBuilder public: std::unique_ptr Build() const override { - return std::unique_ptr( - new opentelemetry::baggage::propagation::BaggagePropagator()); + auto result = std::make_unique(); + return result; } }; @@ -49,8 +46,8 @@ class B3Builder : public TextMapPropagatorBuilder public: std::unique_ptr Build() const override { - return std::unique_ptr( - new opentelemetry::trace::propagation::B3Propagator()); + auto result = std::make_unique(); + return result; } }; @@ -59,31 +56,26 @@ class B3MultiBuilder : public TextMapPropagatorBuilder public: std::unique_ptr Build() const override { - return std::unique_ptr( - new opentelemetry::trace::propagation::B3PropagatorMultiHeader()); + auto result = std::make_unique(); + return result; } }; -#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE class JaegerBuilder : public TextMapPropagatorBuilder { public: std::unique_ptr Build() const override { - return std::unique_ptr( - new opentelemetry::trace::propagation::JaegerPropagator()); + auto result = std::make_unique(); + return result; } }; -#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ static TraceContextBuilder trace_context_builder; static BaggageBuilder baggage_builder; static B3Builder b3_builder; static B3MultiBuilder b3_multi_builder; - -#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE static JaegerBuilder jaeger_builder; -#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ Registry::Registry() { @@ -101,10 +93,8 @@ Registry::Registry() entry = {"b3multi", &b3_multi_builder}; m_propagator_builders.insert(entry); -#ifndef OPENTELEMETRY_NO_DEPRECATED_CODE entry = {"jaeger", &jaeger_builder}; m_propagator_builders.insert(entry); -#endif /* OPENTELEMETRY_NO_DEPRECATED_CODE */ } const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index da32f3a4b6..3aad6b594c 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -923,8 +923,8 @@ SdkBuilder::CreatePropagator( propagators.push_back(std::move(propagator)); } - std::unique_ptr sdk( - new opentelemetry::context::propagation::CompositePropagator(std::move(propagators))); + auto sdk = std::make_unique( + std::move(propagators)); return sdk; } @@ -1203,13 +1203,11 @@ void SdkBuilder::AddView( auto sdk_instrument_type = ConvertInstrumentType(selector->instrument_type); - std::unique_ptr sdk_instrument_selector( - new opentelemetry::sdk::metrics::InstrumentSelector( - sdk_instrument_type, selector->instrument_name, selector->unit)); + auto sdk_instrument_selector = std::make_unique( + sdk_instrument_type, selector->instrument_name, selector->unit); - std::unique_ptr sdk_meter_selector( - new opentelemetry::sdk::metrics::MeterSelector(selector->meter_name, selector->meter_version, - selector->meter_schema_url)); + auto sdk_meter_selector = std::make_unique( + selector->meter_name, selector->meter_version, selector->meter_schema_url); auto *stream = model->stream.get(); @@ -1224,9 +1222,9 @@ void SdkBuilder::AddView( std::unique_ptr sdk_attribute_processor; // FIXME - std::unique_ptr sdk_view(new opentelemetry::sdk::metrics::View( + auto sdk_view = std::make_unique( stream->name, stream->description, unit, sdk_aggregation_type, sdk_aggregation_config, - std::move(sdk_attribute_processor))); + std::move(sdk_attribute_processor)); registry->AddView(std::move(sdk_instrument_selector), std::move(sdk_meter_selector), std::move(sdk_view)); From 4125d9f502b48eb6ec82f34a87ec63cefed4eebc Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 11 Jul 2025 00:06:12 +0200 Subject: [PATCH 123/166] Cleanup --- examples/yaml/custom_sampler_builder.cc | 2 +- examples/yaml/custom_span_exporter.cc | 4 ++-- examples/yaml/custom_span_exporter_builder.cc | 2 +- examples/yaml/custom_span_processor.cc | 4 ++-- examples/yaml/custom_span_processor_builder.cc | 2 +- sdk/src/configuration/document_node.cc | 2 -- sdk/src/init/sdk_builder.cc | 2 +- 7 files changed, 8 insertions(+), 10 deletions(-) diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc index e36be056db..ccbcdc203c 100644 --- a/examples/yaml/custom_sampler_builder.cc +++ b/examples/yaml/custom_sampler_builder.cc @@ -15,7 +15,7 @@ std::unique_ptr CustomSamplerBuilder::Build( // Read yaml attributes std::string comment = model->node->GetRequiredString("comment"); - std::unique_ptr sdk(new CustomSampler(comment)); + auto sdk = std::make_unique(comment); return sdk; } diff --git a/examples/yaml/custom_span_exporter.cc b/examples/yaml/custom_span_exporter.cc index 70c2eb4aa7..d1ed6314d3 100644 --- a/examples/yaml/custom_span_exporter.cc +++ b/examples/yaml/custom_span_exporter.cc @@ -9,8 +9,8 @@ std::unique_ptr CustomSpanExporter::MakeRecordable() noexcept { - return std::unique_ptr( - new opentelemetry::sdk::trace::SpanData); + auto recordable = std::make_unique(); + return recordable; } opentelemetry::sdk::common::ExportResult CustomSpanExporter::Export( diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc index 38e090a8d3..a552d5fe4e 100644 --- a/examples/yaml/custom_span_exporter_builder.cc +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -17,7 +17,7 @@ std::unique_ptr CustomSpanExporterBuild // Read yaml attributes std::string comment = model->node->GetRequiredString("comment"); - std::unique_ptr sdk(new CustomSpanExporter(comment)); + auto sdk = std::make_unique(comment); return sdk; } diff --git a/examples/yaml/custom_span_processor.cc b/examples/yaml/custom_span_processor.cc index 7d88d23af7..1ad02482f8 100644 --- a/examples/yaml/custom_span_processor.cc +++ b/examples/yaml/custom_span_processor.cc @@ -13,8 +13,8 @@ std::unique_ptr CustomSpanProcessor::MakeRecordable() noexcept { - return std::unique_ptr( - new opentelemetry::sdk::trace::SpanData); + auto recordable = std::make_unique(); + return recordable; } void CustomSpanProcessor::OnStart( diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc index 9df169230f..8c76ca077a 100644 --- a/examples/yaml/custom_span_processor_builder.cc +++ b/examples/yaml/custom_span_processor_builder.cc @@ -17,7 +17,7 @@ std::unique_ptr CustomSpanProcessorBui // Read yaml attributes std::string comment = model->node->GetRequiredString("comment"); - std::unique_ptr sdk(new CustomSpanProcessor(comment)); + auto sdk = std::make_unique(comment); return sdk; } diff --git a/sdk/src/configuration/document_node.cc b/sdk/src/configuration/document_node.cc index df543da12d..bc2bc76f0f 100644 --- a/sdk/src/configuration/document_node.cc +++ b/sdk/src/configuration/document_node.cc @@ -3,11 +3,9 @@ #include #include -#include #include #include "opentelemetry/sdk/common/env_variables.h" -#include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/invalid_schema_exception.h" #include "opentelemetry/version.h" diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 3aad6b594c..6a4f97082a 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -1590,7 +1590,7 @@ void SdkBuilder::SetResource( std::unique_ptr SdkBuilder::CreateConfiguredSdk( const std::unique_ptr &model) const { - std::unique_ptr sdk(new ConfiguredSdk); + auto sdk = std::make_unique(); if (!model->disabled) { From 74ed357471a68196dc59f2bb1bff2e1fdb4cf966 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 13 Jul 2025 21:32:07 +0200 Subject: [PATCH 124/166] Expand extension points examples. --- examples/yaml/CMakeLists.txt | 10 +++++- examples/yaml/custom_log_record_exporter.cc | 35 ++++++++++++++++++ examples/yaml/custom_log_record_exporter.h | 34 ++++++++++++++++++ .../custom_log_record_exporter_builder.cc | 30 ++++++++++++++++ .../yaml/custom_log_record_exporter_builder.h | 22 ++++++++++++ examples/yaml/custom_log_record_processor.cc | 36 +++++++++++++++++++ examples/yaml/custom_log_record_processor.h | 33 +++++++++++++++++ .../custom_log_record_processor_builder.cc | 31 ++++++++++++++++ .../custom_log_record_processor_builder.h | 22 ++++++++++++ examples/yaml/custom_pull_metric_exporter.cc | 32 +++++++++++++++++ examples/yaml/custom_pull_metric_exporter.h | 31 ++++++++++++++++ .../custom_pull_metric_exporter_builder.cc | 30 ++++++++++++++++ .../custom_pull_metric_exporter_builder.h | 22 ++++++++++++ examples/yaml/custom_push_metric_exporter.cc | 34 ++++++++++++++++++ examples/yaml/custom_push_metric_exporter.h | 32 +++++++++++++++++ .../custom_push_metric_exporter_builder.cc | 31 ++++++++++++++++ .../custom_push_metric_exporter_builder.h | 22 ++++++++++++ examples/yaml/custom_span_exporter.cc | 6 ++-- examples/yaml/custom_span_processor.cc | 8 ++--- examples/yaml/extensions.yaml | 26 +++++++++++++- examples/yaml/main.cc | 8 +++++ sdk/src/init/sdk_builder.cc | 6 ++-- 22 files changed, 530 insertions(+), 11 deletions(-) create mode 100644 examples/yaml/custom_log_record_exporter.cc create mode 100644 examples/yaml/custom_log_record_exporter.h create mode 100644 examples/yaml/custom_log_record_exporter_builder.cc create mode 100644 examples/yaml/custom_log_record_exporter_builder.h create mode 100644 examples/yaml/custom_log_record_processor.cc create mode 100644 examples/yaml/custom_log_record_processor.h create mode 100644 examples/yaml/custom_log_record_processor_builder.cc create mode 100644 examples/yaml/custom_log_record_processor_builder.h create mode 100644 examples/yaml/custom_pull_metric_exporter.cc create mode 100644 examples/yaml/custom_pull_metric_exporter.h create mode 100644 examples/yaml/custom_pull_metric_exporter_builder.cc create mode 100644 examples/yaml/custom_pull_metric_exporter_builder.h create mode 100644 examples/yaml/custom_push_metric_exporter.cc create mode 100644 examples/yaml/custom_push_metric_exporter.h create mode 100644 examples/yaml/custom_push_metric_exporter_builder.cc create mode 100644 examples/yaml/custom_push_metric_exporter_builder.h diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index ad4f3ddfb6..c98b40a2f3 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -15,7 +15,15 @@ add_executable( custom_span_exporter.cc custom_span_exporter_builder.cc custom_span_processor.cc - custom_span_processor_builder.cc) + custom_span_processor_builder.cc + custom_push_metric_exporter.cc + custom_push_metric_exporter_builder.cc + custom_pull_metric_exporter.cc + custom_pull_metric_exporter_builder.cc + custom_log_record_exporter.cc + custom_log_record_exporter_builder.cc + custom_log_record_processor.cc + custom_log_record_processor_builder.cc) target_link_libraries( example_yaml diff --git a/examples/yaml/custom_log_record_exporter.cc b/examples/yaml/custom_log_record_exporter.cc new file mode 100644 index 0000000000..c89faef021 --- /dev/null +++ b/examples/yaml/custom_log_record_exporter.cc @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/logs/read_write_log_record.h" +#include "opentelemetry/sdk/logs/recordable.h" + +#include "custom_log_record_exporter.h" + +std::unique_ptr +CustomLogRecordExporter::MakeRecordable() noexcept +{ + auto recordable = std::make_unique(); + return recordable; +} + +opentelemetry::sdk::common::ExportResult CustomLogRecordExporter::Export( + const opentelemetry::nostd::span> + & /* records */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomLogRecordExporter::Export(): YOUR CODE HERE"); + return opentelemetry::sdk::common::ExportResult::kSuccess; +} + +bool CustomLogRecordExporter::ForceFlush(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomLogRecordExporter::ForceFlush(): YOUR CODE HERE"); + return false; +} + +bool CustomLogRecordExporter::Shutdown(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomLogRecordExporter::Shutdown(): YOUR CODE HERE"); + return false; +} diff --git a/examples/yaml/custom_log_record_exporter.h b/examples/yaml/custom_log_record_exporter.h new file mode 100644 index 0000000000..362eb2855d --- /dev/null +++ b/examples/yaml/custom_log_record_exporter.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/sdk/common/exporter_utils.h" +#include "opentelemetry/sdk/logs/exporter.h" +#include "opentelemetry/sdk/logs/recordable.h" + +class CustomLogRecordExporter : public opentelemetry::sdk::logs::LogRecordExporter +{ +public: + CustomLogRecordExporter(const std::string & /* comment */) {} + CustomLogRecordExporter(CustomLogRecordExporter &&) = delete; + CustomLogRecordExporter(const CustomLogRecordExporter &) = delete; + CustomLogRecordExporter &operator=(CustomLogRecordExporter &&) = delete; + CustomLogRecordExporter &operator=(const CustomLogRecordExporter &other) = delete; + ~CustomLogRecordExporter() override = default; + + std::unique_ptr MakeRecordable() noexcept override; + + opentelemetry::sdk::common::ExportResult Export( + const opentelemetry::nostd::span> + &records) noexcept override; + + bool ForceFlush(std::chrono::microseconds timeout) noexcept override; + + bool Shutdown(std::chrono::microseconds timeout) noexcept override; +}; diff --git a/examples/yaml/custom_log_record_exporter_builder.cc b/examples/yaml/custom_log_record_exporter_builder.cc new file mode 100644 index 0000000000..b69eec8812 --- /dev/null +++ b/examples/yaml/custom_log_record_exporter_builder.cc @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" + +#include "custom_log_record_exporter.h" +#include "custom_log_record_exporter_builder.h" + +std::unique_ptr CustomLogRecordExporterBuilder::Build( + const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) const +{ + // Read yaml attributes + std::string comment = model->node->GetRequiredString("comment"); + + auto sdk = std::make_unique(comment); + + return sdk; +} + +static CustomLogRecordExporterBuilder singleton; + +void CustomLogRecordExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->AddExtensionLogRecordExporterBuilder("my_custom_log_record_exporter", &singleton); +} diff --git a/examples/yaml/custom_log_record_exporter_builder.h b/examples/yaml/custom_log_record_exporter_builder.h new file mode 100644 index 0000000000..c33dd9721c --- /dev/null +++ b/examples/yaml/custom_log_record_exporter_builder.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/init/extension_log_record_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" + +class CustomLogRecordExporterBuilder + : public opentelemetry::sdk::init::ExtensionLogRecordExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) + const override; +}; diff --git a/examples/yaml/custom_log_record_processor.cc b/examples/yaml/custom_log_record_processor.cc new file mode 100644 index 0000000000..be9716022a --- /dev/null +++ b/examples/yaml/custom_log_record_processor.cc @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/logs/read_write_log_record.h" +#include "opentelemetry/sdk/logs/recordable.h" + +#include "custom_log_record_processor.h" + +std::unique_ptr +CustomLogRecordProcessor::MakeRecordable() noexcept +{ + auto recordable = std::make_unique(); + return recordable; +} + +void CustomLogRecordProcessor::OnEmit( + std::unique_ptr &&span) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomLogRecordProcessor::OnEnd(): YOUR CODE HERE"); + auto unused = std::move(span); +} + +bool CustomLogRecordProcessor::ForceFlush(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomLogRecordProcessor::ForceFlush(): YOUR CODE HERE"); + return false; +} + +bool CustomLogRecordProcessor::Shutdown(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomLogRecordProcessor::Shutdown(): YOUR CODE HERE"); + return false; +} diff --git a/examples/yaml/custom_log_record_processor.h b/examples/yaml/custom_log_record_processor.h new file mode 100644 index 0000000000..732ff10432 --- /dev/null +++ b/examples/yaml/custom_log_record_processor.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/sdk/logs/processor.h" +#include "opentelemetry/sdk/logs/recordable.h" + +class CustomLogRecordProcessor : public opentelemetry::sdk::logs::LogRecordProcessor +{ +public: + CustomLogRecordProcessor(const std::string &comment) : m_comment(comment) {} + CustomLogRecordProcessor(CustomLogRecordProcessor &&) = delete; + CustomLogRecordProcessor(const CustomLogRecordProcessor &) = delete; + CustomLogRecordProcessor &operator=(CustomLogRecordProcessor &&) = delete; + CustomLogRecordProcessor &operator=(const CustomLogRecordProcessor &other) = delete; + ~CustomLogRecordProcessor() override = default; + + std::unique_ptr MakeRecordable() noexcept override; + + void OnEmit(std::unique_ptr &&record) noexcept override; + + bool ForceFlush(std::chrono::microseconds timeout) noexcept override; + + bool Shutdown(std::chrono::microseconds timeout) noexcept override; + +private: + std::string m_comment; +}; diff --git a/examples/yaml/custom_log_record_processor_builder.cc b/examples/yaml/custom_log_record_processor_builder.cc new file mode 100644 index 0000000000..427b46c4b8 --- /dev/null +++ b/examples/yaml/custom_log_record_processor_builder.cc @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/processor.h" + +#include "custom_log_record_processor.h" +#include "custom_log_record_processor_builder.h" + +std::unique_ptr +CustomLogRecordProcessorBuilder::Build( + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) const +{ + // Read yaml attributes + std::string comment = model->node->GetRequiredString("comment"); + + auto sdk = std::make_unique(comment); + + return sdk; +} + +static CustomLogRecordProcessorBuilder singleton; + +void CustomLogRecordProcessorBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->AddExtensionLogRecordProcessorBuilder("my_custom_log_record_processor", &singleton); +} diff --git a/examples/yaml/custom_log_record_processor_builder.h b/examples/yaml/custom_log_record_processor_builder.h new file mode 100644 index 0000000000..4a7498eb98 --- /dev/null +++ b/examples/yaml/custom_log_record_processor_builder.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" +#include "opentelemetry/sdk/init/extension_log_record_processor_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/logs/processor.h" + +class CustomLogRecordProcessorBuilder + : public opentelemetry::sdk::init::ExtensionLogRecordProcessorBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) + const override; +}; diff --git a/examples/yaml/custom_pull_metric_exporter.cc b/examples/yaml/custom_pull_metric_exporter.cc new file mode 100644 index 0000000000..d3ed8020ac --- /dev/null +++ b/examples/yaml/custom_pull_metric_exporter.cc @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" + +#include "custom_pull_metric_exporter.h" + +opentelemetry::sdk::metrics::AggregationTemporality +CustomPullMetricExporter::GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType instrument_type) const noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPullMetricExporter::GetAggregationTemporality(): YOUR CODE HERE"); + return opentelemetry::sdk::metrics::AggregationTemporality::kCumulative; +} + +bool CustomPullMetricExporter::OnForceFlush(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPullMetricExporter::OnForceFlush(): YOUR CODE HERE"); + return true; +} + +bool CustomPullMetricExporter::OnShutDown(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPullMetricExporter::OnShutDown(): YOUR CODE HERE"); + return true; +} + +void CustomPullMetricExporter::OnInitialized() noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPullMetricExporter::OnInitialized(): YOUR CODE HERE"); +} diff --git a/examples/yaml/custom_pull_metric_exporter.h b/examples/yaml/custom_pull_metric_exporter.h new file mode 100644 index 0000000000..5262a720c4 --- /dev/null +++ b/examples/yaml/custom_pull_metric_exporter.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/sdk/common/exporter_utils.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" + +class CustomPullMetricExporter : public opentelemetry::sdk::metrics::MetricReader +{ +public: + CustomPullMetricExporter(const std::string & /* comment */) {} + CustomPullMetricExporter(CustomPullMetricExporter &&) = delete; + CustomPullMetricExporter(const CustomPullMetricExporter &) = delete; + CustomPullMetricExporter &operator=(CustomPullMetricExporter &&) = delete; + CustomPullMetricExporter &operator=(const CustomPullMetricExporter &other) = delete; + ~CustomPullMetricExporter() override = default; + + opentelemetry::sdk::metrics::AggregationTemporality GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType instrument_type) const noexcept override; + + bool OnForceFlush(std::chrono::microseconds timeout) noexcept override; + + bool OnShutDown(std::chrono::microseconds timeout) noexcept override; + + void OnInitialized() noexcept override; +}; diff --git a/examples/yaml/custom_pull_metric_exporter_builder.cc b/examples/yaml/custom_pull_metric_exporter_builder.cc new file mode 100644 index 0000000000..8b95d17e0e --- /dev/null +++ b/examples/yaml/custom_pull_metric_exporter_builder.cc @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" + +#include "custom_pull_metric_exporter.h" +#include "custom_pull_metric_exporter_builder.h" + +std::unique_ptr CustomPullMetricExporterBuilder::Build( + const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) const +{ + // Read yaml attributes + std::string comment = model->node->GetRequiredString("comment"); + + auto sdk = std::make_unique(comment); + + return sdk; +} + +static CustomPullMetricExporterBuilder singleton; + +void CustomPullMetricExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->AddExtensionPullMetricExporterBuilder("my_custom_pull_metric_exporter", &singleton); +} diff --git a/examples/yaml/custom_pull_metric_exporter_builder.h b/examples/yaml/custom_pull_metric_exporter_builder.h new file mode 100644 index 0000000000..6049853d0b --- /dev/null +++ b/examples/yaml/custom_pull_metric_exporter_builder.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" + +class CustomPullMetricExporterBuilder + : public opentelemetry::sdk::init::ExtensionPullMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) + const override; +}; diff --git a/examples/yaml/custom_push_metric_exporter.cc b/examples/yaml/custom_push_metric_exporter.cc new file mode 100644 index 0000000000..fac0c98db0 --- /dev/null +++ b/examples/yaml/custom_push_metric_exporter.cc @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" + +#include "custom_push_metric_exporter.h" + +opentelemetry::sdk::common::ExportResult CustomPushMetricExporter::Export( + const opentelemetry::sdk::metrics::ResourceMetrics & /* data */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPushMetricExporter::Export(): YOUR CODE HERE"); + return opentelemetry::sdk::common::ExportResult::kSuccess; +} + +opentelemetry::sdk::metrics::AggregationTemporality +CustomPushMetricExporter::GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType instrument_type) const noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPushMetricExporter::GetAggregationTemporality(): YOUR CODE HERE"); + return opentelemetry::sdk::metrics::AggregationTemporality::kCumulative; +} + +bool CustomPushMetricExporter::ForceFlush(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPushMetricExporter::ForceFlush(): YOUR CODE HERE"); + return true; +} + +bool CustomPushMetricExporter::Shutdown(std::chrono::microseconds /* timeout */) noexcept +{ + OTEL_INTERNAL_LOG_ERROR("CustomPushMetricExporter::Shutdown(): YOUR CODE HERE"); + return true; +} diff --git a/examples/yaml/custom_push_metric_exporter.h b/examples/yaml/custom_push_metric_exporter.h new file mode 100644 index 0000000000..f5e1e27b2c --- /dev/null +++ b/examples/yaml/custom_push_metric_exporter.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/sdk/common/exporter_utils.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" + +class CustomPushMetricExporter : public opentelemetry::sdk::metrics::PushMetricExporter +{ +public: + CustomPushMetricExporter(const std::string & /* comment */) {} + CustomPushMetricExporter(CustomPushMetricExporter &&) = delete; + CustomPushMetricExporter(const CustomPushMetricExporter &) = delete; + CustomPushMetricExporter &operator=(CustomPushMetricExporter &&) = delete; + CustomPushMetricExporter &operator=(const CustomPushMetricExporter &other) = delete; + ~CustomPushMetricExporter() override = default; + + opentelemetry::sdk::common::ExportResult Export( + const opentelemetry::sdk::metrics::ResourceMetrics &data) noexcept override; + + opentelemetry::sdk::metrics::AggregationTemporality GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType instrument_type) const noexcept override; + + bool ForceFlush(std::chrono::microseconds timeout) noexcept override; + + bool Shutdown(std::chrono::microseconds timeout) noexcept override; +}; diff --git a/examples/yaml/custom_push_metric_exporter_builder.cc b/examples/yaml/custom_push_metric_exporter_builder.cc new file mode 100644 index 0000000000..9c0896b974 --- /dev/null +++ b/examples/yaml/custom_push_metric_exporter_builder.cc @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" + +#include "custom_push_metric_exporter.h" +#include "custom_push_metric_exporter_builder.h" + +std::unique_ptr +CustomPushMetricExporterBuilder::Build( + const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) const +{ + // Read yaml attributes + std::string comment = model->node->GetRequiredString("comment"); + + auto sdk = std::make_unique(comment); + + return sdk; +} + +static CustomPushMetricExporterBuilder singleton; + +void CustomPushMetricExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +{ + registry->AddExtensionPushMetricExporterBuilder("my_custom_push_metric_exporter", &singleton); +} diff --git a/examples/yaml/custom_push_metric_exporter_builder.h b/examples/yaml/custom_push_metric_exporter_builder.h new file mode 100644 index 0000000000..46ad865bdb --- /dev/null +++ b/examples/yaml/custom_push_metric_exporter_builder.h @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/init/extension_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" + +class CustomPushMetricExporterBuilder + : public opentelemetry::sdk::init::ExtensionPushMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::init::Registry *registry); + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) + const override; +}; diff --git a/examples/yaml/custom_span_exporter.cc b/examples/yaml/custom_span_exporter.cc index d1ed6314d3..285516500a 100644 --- a/examples/yaml/custom_span_exporter.cc +++ b/examples/yaml/custom_span_exporter.cc @@ -17,18 +17,18 @@ opentelemetry::sdk::common::ExportResult CustomSpanExporter::Export( const opentelemetry::nostd::span> & /* spans */) noexcept { - OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Export(): FIXME"); + OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Export(): YOUR CODE HERE"); return opentelemetry::sdk::common::ExportResult::kSuccess; } bool CustomSpanExporter::ForceFlush(std::chrono::microseconds /* timeout */) noexcept { - OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::ForceFlush(): FIXME"); + OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::ForceFlush(): YOUR CODE HERE"); return false; } bool CustomSpanExporter::Shutdown(std::chrono::microseconds /* timeout */) noexcept { - OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Shutdown(): FIXME"); + OTEL_INTERNAL_LOG_ERROR("CustomSpanExporter::Shutdown(): YOUR CODE HERE"); return false; } diff --git a/examples/yaml/custom_span_processor.cc b/examples/yaml/custom_span_processor.cc index 1ad02482f8..a73ddf03f3 100644 --- a/examples/yaml/custom_span_processor.cc +++ b/examples/yaml/custom_span_processor.cc @@ -21,24 +21,24 @@ void CustomSpanProcessor::OnStart( opentelemetry::sdk::trace::Recordable & /* span */, const opentelemetry::trace::SpanContext & /* parent_context */) noexcept { - OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnStart(): FIXME"); + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnStart(): YOUR CODE HERE"); } void CustomSpanProcessor::OnEnd( std::unique_ptr &&span) noexcept { - OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnEnd(): FIXME"); + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::OnEnd(): YOUR CODE HERE"); auto unused = std::move(span); } bool CustomSpanProcessor::ForceFlush(std::chrono::microseconds /* timeout */) noexcept { - OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::ForceFlush(): FIXME"); + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::ForceFlush(): YOUR CODE HERE"); return false; } bool CustomSpanProcessor::Shutdown(std::chrono::microseconds /* timeout */) noexcept { - OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::Shutdown(): FIXME"); + OTEL_INTERNAL_LOG_ERROR("CustomSpanProcessor::Shutdown(): YOUR CODE HERE"); return false; } diff --git a/examples/yaml/extensions.yaml b/examples/yaml/extensions.yaml index 97a8d0cf4a..2ca218d251 100644 --- a/examples/yaml/extensions.yaml +++ b/examples/yaml/extensions.yaml @@ -16,7 +16,7 @@ disabled: false # Environment variable: OTEL_PROPAGATORS propagator: # composite: [tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace] - simple: tracecontext + composite: tracecontext # Configure tracer provider. tracer_provider: @@ -56,3 +56,27 @@ tracer_provider: my_custom_sampler: comment: "This is a sampler extension point, with properties." +meter_provider: + readers: + - pull: + exporter: + my_custom_pull_metric_exporter: + comment: "This is a pull metric exporter extension point, with properties." + - periodic: + exporter: + my_custom_push_metric_exporter: + comment: "This is a push metric exporter extension point, with properties." + +logger_provider: + processors: + - simple: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: {} + - my_custom_log_record_processor: + comment: "This is a log record processor extension point, with properties." + - batch: + exporter: + my_custom_log_record_exporter: + comment: "This is a log record exporter extension point, with properties." diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 8416f191e0..40754f1531 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -15,6 +15,10 @@ #include "opentelemetry/sdk/init/configured_sdk.h" #include "opentelemetry/sdk/init/registry.h" +#include "custom_log_record_exporter_builder.h" +#include "custom_log_record_processor_builder.h" +#include "custom_pull_metric_exporter_builder.h" +#include "custom_push_metric_exporter_builder.h" #include "custom_sampler_builder.h" #include "custom_span_exporter_builder.h" #include "custom_span_processor_builder.h" @@ -109,6 +113,10 @@ void InitOtel(const std::string &config_file) CustomSamplerBuilder::Register(registry.get()); CustomSpanExporterBuilder::Register(registry.get()); CustomSpanProcessorBuilder::Register(registry.get()); + CustomPushMetricExporterBuilder::Register(registry.get()); + CustomPullMetricExporterBuilder::Register(registry.get()); + CustomLogRecordExporterBuilder::Register(registry.get()); + CustomLogRecordProcessorBuilder::Register(registry.get()); /* 4 - Parse a config.yaml */ diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 6a4f97082a..83fff039ac 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -1056,7 +1056,8 @@ SdkBuilder::CreateExtensionPushMetricExporter( if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPushMetricExporter() using registered builder" << name); + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPushMetricExporter() using registered builder " + << name); sdk = builder->Build(model); } else @@ -1106,7 +1107,8 @@ SdkBuilder::CreateExtensionPullMetricExporter( if (builder != nullptr) { - OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPullMetricExporter() using registered builder" << name); + OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPullMetricExporter() using registered builder " + << name); sdk = builder->Build(model); } else From f3d01cf0842ed0ddc50835de9b37b4189ba15f26 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 13 Jul 2025 22:54:13 +0200 Subject: [PATCH 125/166] Cleanup --- CODE-REVIEW-PR2518.txt | 242 ------------------ examples/yaml/custom_pull_metric_exporter.cc | 2 +- examples/yaml/custom_pull_metric_exporter.h | 3 +- examples/yaml/custom_push_metric_exporter.cc | 2 +- examples/yaml/custom_push_metric_exporter.h | 2 +- .../otlp/src/otlp_http_exporter_options.cc | 3 +- 6 files changed, 5 insertions(+), 249 deletions(-) delete mode 100644 CODE-REVIEW-PR2518.txt diff --git a/CODE-REVIEW-PR2518.txt b/CODE-REVIEW-PR2518.txt deleted file mode 100644 index 8a09ebaaeb..0000000000 --- a/CODE-REVIEW-PR2518.txt +++ /dev/null @@ -1,242 +0,0 @@ -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -This file is temporary, to be removed before final merge. - ---- - -# config.yaml code review - -To process this code review, the suggestion is to proceed by areas. - -Files to review are grouped per sections below. - -## CODE - -### Model - -sdk/include/opentelemetry/sdk/configuration/configuration.h - -#### Trace Model - -sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h - -sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h -sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h -sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.h -sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h -sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h - -#### Metrics Model - -sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h - -sdk/include/opentelemetry/sdk/configuration/aggregation_configuration.h -sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h -sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h -sdk/include/opentelemetry/sdk/configuration/drop_aggregation_configuration.h -sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h -sdk/include/opentelemetry/sdk/configuration/exporter_default_histogram_aggregation.h -sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h -sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h -sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h -sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h -sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h -sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h -sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h -sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h -sdk/include/opentelemetry/sdk/configuration/view_configuration.h - -#### Log Model - -sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h - -sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h -sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/log_record_limits_configuration.h -sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.h -sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h - -#### Misc Model - -sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h -sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h -sdk/include/opentelemetry/sdk/configuration/resource_configuration.h - -sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h -sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h -sdk/include/opentelemetry/sdk/configuration/attribute_limits_configuration.h -sdk/include/opentelemetry/sdk/configuration/attributes_configuration.h -sdk/include/opentelemetry/sdk/configuration/detectors_configuration.h -sdk/include/opentelemetry/sdk/configuration/headers_configuration.h -sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h -sdk/include/opentelemetry/sdk/configuration/otlp_http_encoding.h -sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h -sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h -sdk/include/opentelemetry/sdk/configuration/string_array_configuration.h -sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h - -#### Model extensions - -sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h -sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/extension_sampler_configuration.h -sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_configuration.h -sdk/include/opentelemetry/sdk/configuration/extension_span_processor_configuration.h - -### YAML parser - -sdk/include/opentelemetry/sdk/configuration/invalid_schema_exception.h -sdk/include/opentelemetry/sdk/configuration/configuration_factory.h -sdk/include/opentelemetry/sdk/configuration/document.h -sdk/include/opentelemetry/sdk/configuration/document_node.h -sdk/include/opentelemetry/sdk/configuration/ryml_document.h -sdk/include/opentelemetry/sdk/configuration/ryml_document_node.h -sdk/include/opentelemetry/sdk/configuration/yaml_configuration_factory.h -sdk/src/configuration/document_node.cc -sdk/src/configuration/ryml_document.cc -sdk/src/configuration/ryml_document_node.cc -sdk/src/configuration/yaml_configuration_factory.cc -sdk/src/configuration/configuration_factory.cc - -### SDK init - -sdk/include/opentelemetry/sdk/init/configured_sdk.h -sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h -sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h -sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h -sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h -sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h -sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h -sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h -sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h -sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h -sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h -sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h -sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h -sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h -sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h -sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h -sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h -sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h -sdk/include/opentelemetry/sdk/init/registry.h -sdk/include/opentelemetry/sdk/init/sdk_builder.h -sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h -sdk/include/opentelemetry/sdk/init/unsupported_exception.h -sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h -sdk/src/init/configured_sdk.cc -sdk/src/init/registry.cc -sdk/src/init/sdk_builder.cc - -### Exporters - -exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h -exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h -exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h -exporters/ostream/src/console_log_record_builder.cc -exporters/ostream/src/console_push_metric_builder.cc -exporters/ostream/src/console_span_builder.cc -exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h -exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h -exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h -exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h -exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h -exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h -exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h -exporters/otlp/src/otlp_grpc_log_record_builder.cc -exporters/otlp/src/otlp_grpc_push_metric_builder.cc -exporters/otlp/src/otlp_grpc_span_builder.cc -exporters/otlp/src/otlp_http_exporter_options.cc -exporters/otlp/src/otlp_http_log_record_builder.cc -exporters/otlp/src/otlp_http_push_metric_builder.cc -exporters/otlp/src/otlp_http_span_builder.cc -exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h -exporters/prometheus/src/prometheus_pull_builder.cc -exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h -exporters/zipkin/src/zipkin_builder.cc - -## TEST - -### Unit tests - -sdk/test/configuration/yaml_resource_test.cc -sdk/test/configuration/yaml_test.cc -sdk/test/configuration/yaml_trace_test.cc - -### Examples - -examples/yaml/anchors.yaml -examples/yaml/custom_sampler.cc -examples/yaml/custom_sampler.h -examples/yaml/custom_sampler_builder.cc -examples/yaml/custom_sampler_builder.h -examples/yaml/custom_span_exporter.cc -examples/yaml/custom_span_exporter.h -examples/yaml/custom_span_exporter_builder.cc -examples/yaml/custom_span_exporter_builder.h -examples/yaml/custom_span_processor.cc -examples/yaml/custom_span_processor.h -examples/yaml/custom_span_processor_builder.cc -examples/yaml/custom_span_processor_builder.h -examples/yaml/extensions.yaml -examples/yaml/kitchen-sink.yaml -examples/yaml/main.cc - -## Misc - -### CI - -.github/workflows/ci.yml -.github/workflows/clang-tidy.yaml -.github/workflows/iwyu.yml -.iwyu.imp -ci/do_ci.sh -ci/install_ryml.sh - -### BUILD - -CMakeLists.txt -examples/CMakeLists.txt -examples/yaml/CMakeLists.txt -exporters/ostream/BUILD -exporters/ostream/CMakeLists.txt -exporters/otlp/BUILD -exporters/otlp/CMakeLists.txt -exporters/prometheus/BUILD -exporters/prometheus/CMakeLists.txt -exporters/zipkin/BUILD -exporters/zipkin/CMakeLists.txt -sdk/src/CMakeLists.txt -sdk/src/configuration/CMakeLists.txt -sdk/src/init/CMakeLists.txt -sdk/test/CMakeLists.txt -sdk/test/configuration/CMakeLists.txt - -## Remaining files - -sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h -sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h -sdk/include/opentelemetry/sdk/resource/resource.h -sdk/src/resource/resource.cc diff --git a/examples/yaml/custom_pull_metric_exporter.cc b/examples/yaml/custom_pull_metric_exporter.cc index d3ed8020ac..b2df034cf5 100644 --- a/examples/yaml/custom_pull_metric_exporter.cc +++ b/examples/yaml/custom_pull_metric_exporter.cc @@ -8,7 +8,7 @@ opentelemetry::sdk::metrics::AggregationTemporality CustomPullMetricExporter::GetAggregationTemporality( - opentelemetry::sdk::metrics::InstrumentType instrument_type) const noexcept + opentelemetry::sdk::metrics::InstrumentType /* instrument_type */) const noexcept { OTEL_INTERNAL_LOG_ERROR("CustomPullMetricExporter::GetAggregationTemporality(): YOUR CODE HERE"); return opentelemetry::sdk::metrics::AggregationTemporality::kCumulative; diff --git a/examples/yaml/custom_pull_metric_exporter.h b/examples/yaml/custom_pull_metric_exporter.h index 5262a720c4..2199c3acc9 100644 --- a/examples/yaml/custom_pull_metric_exporter.h +++ b/examples/yaml/custom_pull_metric_exporter.h @@ -4,10 +4,9 @@ #pragma once #include -#include #include -#include "opentelemetry/sdk/common/exporter_utils.h" +#include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/metric_reader.h" class CustomPullMetricExporter : public opentelemetry::sdk::metrics::MetricReader diff --git a/examples/yaml/custom_push_metric_exporter.cc b/examples/yaml/custom_push_metric_exporter.cc index fac0c98db0..19aad75416 100644 --- a/examples/yaml/custom_push_metric_exporter.cc +++ b/examples/yaml/custom_push_metric_exporter.cc @@ -15,7 +15,7 @@ opentelemetry::sdk::common::ExportResult CustomPushMetricExporter::Export( opentelemetry::sdk::metrics::AggregationTemporality CustomPushMetricExporter::GetAggregationTemporality( - opentelemetry::sdk::metrics::InstrumentType instrument_type) const noexcept + opentelemetry::sdk::metrics::InstrumentType /* instrument_type */) const noexcept { OTEL_INTERNAL_LOG_ERROR("CustomPushMetricExporter::GetAggregationTemporality(): YOUR CODE HERE"); return opentelemetry::sdk::metrics::AggregationTemporality::kCumulative; diff --git a/examples/yaml/custom_push_metric_exporter.h b/examples/yaml/custom_push_metric_exporter.h index f5e1e27b2c..068542448c 100644 --- a/examples/yaml/custom_push_metric_exporter.h +++ b/examples/yaml/custom_push_metric_exporter.h @@ -4,10 +4,10 @@ #pragma once #include -#include #include #include "opentelemetry/sdk/common/exporter_utils.h" +#include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" class CustomPushMetricExporter : public opentelemetry::sdk::metrics::PushMetricExporter diff --git a/exporters/otlp/src/otlp_http_exporter_options.cc b/exporters/otlp/src/otlp_http_exporter_options.cc index 4b60e71482..ad4b500666 100644 --- a/exporters/otlp/src/otlp_http_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_exporter_options.cc @@ -67,8 +67,7 @@ OtlpHttpExporterOptions::OtlpHttpExporterOptions(void *) ssl_cipher(), ssl_cipher_suite(), compression() -{ -} +{} OtlpHttpExporterOptions::~OtlpHttpExporterOptions() {} From 5e0ce4629386b2febbbbe715233d44988c0e3406 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 14 Jul 2025 13:58:10 +0200 Subject: [PATCH 126/166] Implement metric view aggregation --- examples/yaml/custom_pull_metric_exporter.cc | 1 - .../opentelemetry/sdk/init/sdk_builder.h | 20 ++ sdk/src/init/sdk_builder.cc | 323 +++++++++++------- 3 files changed, 213 insertions(+), 131 deletions(-) diff --git a/examples/yaml/custom_pull_metric_exporter.cc b/examples/yaml/custom_pull_metric_exporter.cc index b2df034cf5..da542731a7 100644 --- a/examples/yaml/custom_pull_metric_exporter.cc +++ b/examples/yaml/custom_pull_metric_exporter.cc @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/metrics/metric_reader.h" #include "custom_pull_metric_exporter.h" diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/init/sdk_builder.h index e778be0800..e26142dd34 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/init/sdk_builder.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h" @@ -13,6 +14,7 @@ #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/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" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" @@ -182,6 +184,24 @@ class SdkBuilder const std::unique_ptr &model) const; + std::unique_ptr + CreateBase2ExponentialBucketHistogramAggregation( + const opentelemetry::sdk::configuration:: + Base2ExponentialBucketHistogramAggregationConfiguration *model) const; + + std::unique_ptr + CreateExplicitBucketHistogramAggregation( + const opentelemetry::sdk::configuration::ExplicitBucketHistogramAggregationConfiguration + *model) const; + + std::unique_ptr CreateAggregationConfig( + const std::unique_ptr &model, + opentelemetry::sdk::metrics::AggregationType &aggregation_type) const; + + std::unique_ptr CreateAttributesProcessor( + const std::unique_ptr &model) + const; + void AddView( opentelemetry::sdk::metrics::ViewRegistry *registry, const std::unique_ptr &model) const; diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 83fff039ac..783abb822f 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -14,11 +14,13 @@ #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/attribute_value_configuration_visitor.h" #include "opentelemetry/sdk/configuration/attributes_configuration.h" +#include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h" @@ -27,6 +29,7 @@ #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" @@ -474,6 +477,64 @@ class PullMetricExporterBuilder const SdkBuilder *m_sdk_builder; }; +class AggregationConfigBuilder + : public opentelemetry::sdk::configuration::AggregationConfigurationVisitor +{ +public: + AggregationConfigBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + AggregationConfigBuilder(AggregationConfigBuilder &&) = delete; + AggregationConfigBuilder(const AggregationConfigBuilder &) = delete; + AggregationConfigBuilder &operator=(AggregationConfigBuilder &&) = delete; + AggregationConfigBuilder &operator=(const AggregationConfigBuilder &other) = delete; + ~AggregationConfigBuilder() override = default; + + void VisitBase2ExponentialBucketHistogram( + const opentelemetry::sdk::configuration:: + Base2ExponentialBucketHistogramAggregationConfiguration *model) override + { + aggregation_type = opentelemetry::sdk::metrics::AggregationType::kBase2ExponentialHistogram; + aggregation_config = m_sdk_builder->CreateBase2ExponentialBucketHistogramAggregation(model); + } + + void VisitDefault( + const opentelemetry::sdk::configuration::DefaultAggregationConfiguration *model) override + { + aggregation_type = opentelemetry::sdk::metrics::AggregationType::kDefault; + } + + void VisitDrop( + const opentelemetry::sdk::configuration::DropAggregationConfiguration *model) override + { + aggregation_type = opentelemetry::sdk::metrics::AggregationType::kDrop; + } + + void VisitExplicitBucketHistogram( + const opentelemetry::sdk::configuration::ExplicitBucketHistogramAggregationConfiguration + *model) override + { + aggregation_type = opentelemetry::sdk::metrics::AggregationType::kHistogram; + aggregation_config = m_sdk_builder->CreateExplicitBucketHistogramAggregation(model); + } + + void VisitLastValue( + const opentelemetry::sdk::configuration::LastValueAggregationConfiguration *model) override + { + aggregation_type = opentelemetry::sdk::metrics::AggregationType::kLastValue; + } + + void VisitSum( + const opentelemetry::sdk::configuration::SumAggregationConfiguration *model) override + { + aggregation_type = opentelemetry::sdk::metrics::AggregationType::kSum; + } + + opentelemetry::sdk::metrics::AggregationType aggregation_type; + std::unique_ptr aggregation_config; + +private: + const SdkBuilder *m_sdk_builder; +}; + class LogRecordProcessorBuilder : public opentelemetry::sdk::configuration::LogRecordProcessorConfigurationVisitor { @@ -583,8 +644,7 @@ std::unique_ptr SdkBuilder::CreateJaegerRemo { std::unique_ptr sdk; - std::string die("JeagerRemoteSampler not available in opentelemetry-cpp"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("JeagerRemoteSampler not supported"); throw UnsupportedException(die); return sdk; @@ -630,15 +690,12 @@ std::unique_ptr SdkBuilder::CreateExtensionS { OTEL_INTERNAL_LOG_DEBUG("CreateExtensionSampler() using registered builder " << name); sdk = builder->Build(model); + return sdk; } - else - { - std::string die("CreateExtensionSampler() no builder for "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); - } - return sdk; + + std::string die("CreateExtensionSampler() no builder for "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr SdkBuilder::CreateSampler( @@ -667,8 +724,7 @@ std::unique_ptr SdkBuilder::CreateOtlpH return sdk; } - std::string die("No http builder for OtlpHttpSpanExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No http builder for OtlpHttpSpanExporter"); throw UnsupportedException(die); } @@ -686,8 +742,7 @@ std::unique_ptr SdkBuilder::CreateOtlpG return sdk; } - std::string die("No builder for OtlpGrpcSpanExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No builder for OtlpGrpcSpanExporter"); throw UnsupportedException(die); } @@ -705,8 +760,7 @@ std::unique_ptr SdkBuilder::CreateOtlpF return sdk; } - std::string die("No builder for OtlpFileSpanExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No builder for OtlpFileSpanExporter"); throw UnsupportedException(die); } @@ -720,15 +774,11 @@ std::unique_ptr SdkBuilder::CreateConso { OTEL_INTERNAL_LOG_DEBUG("CreateConsoleSpanExporter() using registered builder"); sdk = builder->Build(model); - } - else - { - std::string die("No builder for ConsoleSpanExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + return sdk; } - return sdk; + static const std::string die("No builder for ConsoleSpanExporter"); + throw UnsupportedException(die); } std::unique_ptr SdkBuilder::CreateZipkinSpanExporter( @@ -741,15 +791,11 @@ std::unique_ptr SdkBuilder::CreateZipki { OTEL_INTERNAL_LOG_DEBUG("CreateZipkinSpanExporter() using registered builder"); sdk = builder->Build(model); - } - else - { - std::string die("No builder for ZipkinSpanExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + return sdk; } - return sdk; + static const std::string die("No builder for ZipkinSpanExporter"); + throw UnsupportedException(die); } std::unique_ptr SdkBuilder::CreateExtensionSpanExporter( @@ -764,15 +810,12 @@ std::unique_ptr SdkBuilder::CreateExten { OTEL_INTERNAL_LOG_DEBUG("CreateExtensionSpanExporter() using registered builder " << name); sdk = builder->Build(model); + return sdk; } - else - { - std::string die("CreateExtensionSpanExporter() no builder for "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); - } - return sdk; + + std::string die("CreateExtensionSpanExporter() no builder for "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr SdkBuilder::CreateSpanExporter( @@ -834,15 +877,12 @@ std::unique_ptr SdkBuilder::CreateExte { OTEL_INTERNAL_LOG_DEBUG("CreateExtensionSpanProcessor() using registered builder " << name); sdk = builder->Build(model); + return sdk; } - else - { - std::string die("CreateExtensionSpanProcessor() no builder for "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); - } - return sdk; + + std::string die("CreateExtensionSpanProcessor() no builder for "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr SdkBuilder::CreateSpanProcessor( @@ -899,15 +939,12 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const { OTEL_INTERNAL_LOG_DEBUG("CreateTextMapPropagator() using registered builder " << name); sdk = builder->Build(); + return sdk; } - else - { - std::string die("CreateTextMapPropagator() no builder for "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); - } - return sdk; + + std::string die("CreateTextMapPropagator() no builder for "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr @@ -975,8 +1012,7 @@ SdkBuilder::CreateOtlpHttpPushMetricExporter( return sdk; } - std::string die("No http builder for OtlpPushMetricExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No http builder for OtlpPushMetricExporter"); throw UnsupportedException(die); } @@ -995,8 +1031,7 @@ SdkBuilder::CreateOtlpGrpcPushMetricExporter( return sdk; } - std::string die("No grpc builder for OtlpPushMetricExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No grpc builder for OtlpPushMetricExporter"); throw UnsupportedException(die); } @@ -1015,8 +1050,7 @@ SdkBuilder::CreateOtlpFilePushMetricExporter( return sdk; } - std::string die("No file builder for OtlpPushMetricExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No file builder for OtlpPushMetricExporter"); throw UnsupportedException(die); } @@ -1033,15 +1067,11 @@ SdkBuilder::CreateConsolePushMetricExporter( { OTEL_INTERNAL_LOG_DEBUG("CreateConsolePushMetricExporter() using registered builder"); sdk = builder->Build(model); - } - else - { - std::string die("No builder for ConsolePushMetricExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + return sdk; } - return sdk; + static const std::string die("No builder for ConsolePushMetricExporter"); + throw UnsupportedException(die); } std::unique_ptr @@ -1059,16 +1089,12 @@ SdkBuilder::CreateExtensionPushMetricExporter( OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPushMetricExporter() using registered builder " << name); sdk = builder->Build(model); - } - else - { - std::string die("No builder for ExtensionPushMetricExporter "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + return sdk; } - return sdk; + std::string die("No builder for ExtensionPushMetricExporter "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr @@ -1084,15 +1110,11 @@ SdkBuilder::CreatePrometheusPullMetricExporter( { OTEL_INTERNAL_LOG_DEBUG("CreatePrometheusPullMetricExporter() using registered builder"); sdk = builder->Build(model); - } - else - { - std::string die("No builder for PrometheusMetricExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + return sdk; } - return sdk; + static const std::string die("No builder for PrometheusMetricExporter"); + throw UnsupportedException(die); } std::unique_ptr @@ -1110,16 +1132,12 @@ SdkBuilder::CreateExtensionPullMetricExporter( OTEL_INTERNAL_LOG_DEBUG("CreateExtensionPullMetricExporter() using registered builder " << name); sdk = builder->Build(model); - } - else - { - std::string die("No builder for ExtensionPullMetricExporter "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + return sdk; } - return sdk; + std::string die("No builder for ExtensionPullMetricExporter "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr @@ -1190,6 +1208,61 @@ std::unique_ptr SdkBuilder::CreateMet return sdk; } +std::unique_ptr +SdkBuilder::CreateBase2ExponentialBucketHistogramAggregation( + const opentelemetry::sdk::configuration::Base2ExponentialBucketHistogramAggregationConfiguration + *model) const +{ + auto sdk = + std::make_unique(); + + sdk->max_buckets_ = model->max_size; + sdk->max_scale_ = model->max_scale; + sdk->record_min_max_ = model->record_min_max; + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateExplicitBucketHistogramAggregation( + const opentelemetry::sdk::configuration::ExplicitBucketHistogramAggregationConfiguration *model) + const +{ + auto sdk = std::make_unique(); + + sdk->boundaries_ = model->boundaries; + sdk->record_min_max_ = model->record_min_max; + + return sdk; +} + +std::unique_ptr SdkBuilder::CreateAggregationConfig( + const std::unique_ptr &model, + opentelemetry::sdk::metrics::AggregationType &aggregation_type) const +{ + std::unique_ptr sdk; + + AggregationConfigBuilder builder(this); + model->Accept(&builder); + aggregation_type = builder.aggregation_type; + sdk = std::move(builder.aggregation_config); + + return sdk; +} + +std::unique_ptr +SdkBuilder::CreateAttributesProcessor( + const std::unique_ptr &model) + const +{ + std::unique_ptr sdk; + + // FIXME-SDK: Need a subclass of AttributesProcessor for IncludeExclude + OTEL_INTERNAL_LOG_ERROR("CreateAttributesProcessor() FIXME-SDK"); + + return sdk; +} + void SdkBuilder::AddView( opentelemetry::sdk::metrics::ViewRegistry *registry, const std::unique_ptr &model) const @@ -1198,8 +1271,7 @@ void SdkBuilder::AddView( if (selector->instrument_type == opentelemetry::sdk::configuration::InstrumentType::none) { - std::string die("Runtime does not support InstrumentSelector for any instrument"); - OTEL_INTERNAL_LOG_ERROR(die); + std::string die("Runtime does not support instrument_type: null"); throw UnsupportedException(die); } @@ -1213,16 +1285,22 @@ void SdkBuilder::AddView( auto *stream = model->stream.get(); - std::string unit("FIXME"); - opentelemetry::sdk::metrics::AggregationType sdk_aggregation_type = - opentelemetry::sdk::metrics::AggregationType::kDefault; // FIXME + opentelemetry::sdk::metrics::AggregationType::kDefault; - std::shared_ptr sdk_aggregation_config = - nullptr; // FIXME + std::shared_ptr sdk_aggregation_config; - std::unique_ptr - sdk_attribute_processor; // FIXME + sdk_aggregation_config = CreateAggregationConfig(stream->aggregation, sdk_aggregation_type); + + std::unique_ptr sdk_attribute_processor; + + if (stream->attribute_keys != nullptr) + { + sdk_attribute_processor = CreateAttributesProcessor(stream->attribute_keys); + } + + // FIXME-SDK: unit is unused in class View, should be removed. + std::string unit("FIXME-SDK"); auto sdk_view = std::make_unique( stream->name, stream->description, unit, sdk_aggregation_type, sdk_aggregation_config, @@ -1230,8 +1308,6 @@ void SdkBuilder::AddView( registry->AddView(std::move(sdk_instrument_selector), std::move(sdk_meter_selector), std::move(sdk_view)); - - OTEL_INTERNAL_LOG_ERROR("AddView() FIXME"); } std::unique_ptr SdkBuilder::CreateMeterProvider( @@ -1277,8 +1353,7 @@ SdkBuilder::CreateOtlpHttpLogRecordExporter( return sdk; } - std::string die("No http builder for OtlpLogRecordExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No http builder for OtlpLogRecordExporter"); throw UnsupportedException(die); } @@ -1297,8 +1372,7 @@ SdkBuilder::CreateOtlpGrpcLogRecordExporter( return sdk; } - std::string die("No grpc builder for OtlpLogRecordExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No grpc builder for OtlpLogRecordExporter"); throw UnsupportedException(die); } @@ -1317,8 +1391,7 @@ SdkBuilder::CreateOtlpFileLogRecordExporter( return sdk; } - std::string die("No file builder for OtlpLogRecordExporter"); - OTEL_INTERNAL_LOG_ERROR(die); + static const std::string die("No file builder for OtlpLogRecordExporter"); throw UnsupportedException(die); } @@ -1333,15 +1406,11 @@ SdkBuilder::CreateConsoleLogRecordExporter( { OTEL_INTERNAL_LOG_DEBUG("CreateConsoleLogRecordExporter() using registered builder"); sdk = builder->Build(model); - } - else - { - std::string die("No builder for ConsoleLogRecordExporter"); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); + return sdk; } - return sdk; + static const std::string die("No builder for ConsoleLogRecordExporter"); + throw UnsupportedException(die); } std::unique_ptr @@ -1358,15 +1427,12 @@ SdkBuilder::CreateExtensionLogRecordExporter( { OTEL_INTERNAL_LOG_DEBUG("CreateExtensionLogRecordExporter() using registered builder " << name); sdk = builder->Build(model); + return sdk; } - else - { - std::string die("CreateExtensionLogRecordExporter() no builder for "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); - } - return sdk; + + std::string die("CreateExtensionLogRecordExporter() no builder for "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr SdkBuilder::CreateLogRecordExporter( @@ -1429,15 +1495,12 @@ SdkBuilder::CreateExtensionLogRecordProcessor( OTEL_INTERNAL_LOG_DEBUG("CreateExtensionLogRecordProcessor() using registered builder " << name); sdk = builder->Build(model); + return sdk; } - else - { - std::string die("CreateExtensionLogRecordProcessor() no builder for "); - die.append(name); - OTEL_INTERNAL_LOG_ERROR(die); - throw UnsupportedException(die); - } - return sdk; + + std::string die("CreateExtensionLogRecordProcessor() no builder for "); + die.append(name); + throw UnsupportedException(die); } std::unique_ptr SdkBuilder::CreateLogRecordProcessor( From 6054b9d18b0866a029517e58b2e82d18f2a10fb7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 14 Jul 2025 15:36:07 +0200 Subject: [PATCH 127/166] Cleanup --- sdk/src/init/sdk_builder.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/init/sdk_builder.cc index 783abb822f..9f1a222c3f 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/init/sdk_builder.cc @@ -14,6 +14,7 @@ #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/always_on_sampler_configuration.h" @@ -29,9 +30,9 @@ #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" -#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h" #include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/double_attribute_value_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" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" @@ -39,6 +40,7 @@ #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" +#include "opentelemetry/sdk/configuration/include_exclude_configuration.h" #include "opentelemetry/sdk/configuration/instrument_type.h" #include "opentelemetry/sdk/configuration/integer_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/integer_attribute_value_configuration.h" @@ -496,14 +498,14 @@ class AggregationConfigBuilder aggregation_config = m_sdk_builder->CreateBase2ExponentialBucketHistogramAggregation(model); } - void VisitDefault( - const opentelemetry::sdk::configuration::DefaultAggregationConfiguration *model) override + void VisitDefault(const opentelemetry::sdk::configuration::DefaultAggregationConfiguration + * /* model */) override { aggregation_type = opentelemetry::sdk::metrics::AggregationType::kDefault; } void VisitDrop( - const opentelemetry::sdk::configuration::DropAggregationConfiguration *model) override + const opentelemetry::sdk::configuration::DropAggregationConfiguration * /* model */) override { aggregation_type = opentelemetry::sdk::metrics::AggregationType::kDrop; } @@ -516,14 +518,14 @@ class AggregationConfigBuilder aggregation_config = m_sdk_builder->CreateExplicitBucketHistogramAggregation(model); } - void VisitLastValue( - const opentelemetry::sdk::configuration::LastValueAggregationConfiguration *model) override + void VisitLastValue(const opentelemetry::sdk::configuration::LastValueAggregationConfiguration + * /* model */) override { aggregation_type = opentelemetry::sdk::metrics::AggregationType::kLastValue; } void VisitSum( - const opentelemetry::sdk::configuration::SumAggregationConfiguration *model) override + const opentelemetry::sdk::configuration::SumAggregationConfiguration * /* model */) override { aggregation_type = opentelemetry::sdk::metrics::AggregationType::kSum; } @@ -1252,8 +1254,8 @@ std::unique_ptr SdkBuilder::Crea std::unique_ptr SdkBuilder::CreateAttributesProcessor( - const std::unique_ptr &model) - const + const std::unique_ptr + & /* model */) const { std::unique_ptr sdk; From 8919a49e643d09623386729c772fb229becf5542 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 15 Jul 2025 21:37:55 +0200 Subject: [PATCH 128/166] Code review comments, continued. Moved init/ into configuration/ --- examples/yaml/CMakeLists.txt | 4 +- .../custom_log_record_exporter_builder.cc | 4 +- .../yaml/custom_log_record_exporter_builder.h | 8 +- .../custom_log_record_processor_builder.cc | 5 +- .../custom_log_record_processor_builder.h | 8 +- .../custom_pull_metric_exporter_builder.cc | 5 +- .../custom_pull_metric_exporter_builder.h | 8 +- .../custom_push_metric_exporter_builder.cc | 5 +- .../custom_push_metric_exporter_builder.h | 8 +- examples/yaml/custom_sampler_builder.cc | 4 +- examples/yaml/custom_sampler_builder.h | 8 +- examples/yaml/custom_span_exporter_builder.cc | 4 +- examples/yaml/custom_span_exporter_builder.h | 9 +- .../yaml/custom_span_processor_builder.cc | 4 +- examples/yaml/custom_span_processor_builder.h | 9 +- examples/yaml/main.cc | 12 +- .../ostream/console_log_record_builder.h | 8 +- .../ostream/console_push_metric_builder.h | 8 +- .../exporters/ostream/console_span_builder.h | 8 +- .../ostream/src/console_log_record_builder.cc | 2 +- .../src/console_push_metric_builder.cc | 2 +- exporters/ostream/src/console_span_builder.cc | 2 +- .../otlp/otlp_file_log_record_builder.h | 8 +- .../otlp/otlp_file_push_metric_builder.h | 8 +- .../exporters/otlp/otlp_file_span_builder.h | 8 +- .../otlp/otlp_grpc_log_record_builder.h | 8 +- .../otlp/otlp_grpc_push_metric_builder.h | 8 +- .../exporters/otlp/otlp_grpc_span_builder.h | 8 +- .../otlp/otlp_http_log_record_builder.h | 8 +- .../otlp/otlp_http_push_metric_builder.h | 8 +- .../exporters/otlp/otlp_http_span_builder.h | 8 +- .../otlp/src/otlp_file_log_record_builder.cc | 2 +- .../otlp/src/otlp_file_push_metric_builder.cc | 2 +- exporters/otlp/src/otlp_file_span_builder.cc | 2 +- .../otlp/src/otlp_grpc_log_record_builder.cc | 2 +- .../otlp/src/otlp_grpc_push_metric_builder.cc | 2 +- exporters/otlp/src/otlp_grpc_span_builder.cc | 2 +- .../otlp/src/otlp_http_log_record_builder.cc | 2 +- .../otlp/src/otlp_http_push_metric_builder.cc | 2 +- exporters/otlp/src/otlp_http_span_builder.cc | 4 +- .../prometheus/prometheus_pull_builder.h | 8 +- .../prometheus/src/prometheus_pull_builder.cc | 4 +- .../exporters/zipkin/zipkin_builder.h | 8 +- exporters/zipkin/src/zipkin_builder.cc | 4 +- .../{init => configuration}/configured_sdk.h | 8 +- .../console_log_record_exporter_builder.h | 6 +- .../console_push_metric_exporter_builder.h | 6 +- .../console_span_exporter_builder.h | 6 +- .../extension_log_record_exporter_builder.h | 6 +- .../extension_log_record_processor_builder.h | 6 +- .../extension_pull_metric_exporter_builder.h | 6 +- .../extension_push_metric_exporter_builder.h | 6 +- .../extension_sampler_builder.h | 6 +- .../extension_span_exporter_builder.h | 6 +- .../extension_span_processor_builder.h | 6 +- .../otlp_file_log_record_exporter_builder.h | 6 +- .../otlp_file_push_metric_exporter_builder.h | 6 +- .../otlp_file_span_exporter_builder.h | 6 +- .../otlp_grpc_log_record_exporter_builder.h | 6 +- .../otlp_grpc_push_metric_exporter_builder.h | 6 +- .../otlp_grpc_span_exporter_builder.h | 6 +- .../otlp_http_log_record_exporter_builder.h | 6 +- .../otlp_http_push_metric_exporter_builder.h | 6 +- .../otlp_http_span_exporter_builder.h | 6 +- .../prometheus_pull_metric_exporter_builder.h | 6 +- .../sdk/{init => configuration}/registry.h | 155 ++++++++++-------- .../sdk/{init => configuration}/sdk_builder.h | 10 +- .../text_map_propagator_builder.h | 6 +- .../unsupported_exception.h | 4 +- .../view_selector_configuration.h | 1 - .../zipkin_span_exporter_builder.h | 6 +- sdk/src/CMakeLists.txt | 1 - sdk/src/configuration/CMakeLists.txt | 10 +- .../{init => configuration}/configured_sdk.cc | 10 +- sdk/src/{init => configuration}/registry.cc | 82 ++++----- .../{init => configuration}/sdk_builder.cc | 56 +++---- sdk/src/init/CMakeLists.txt | 28 ---- 77 files changed, 394 insertions(+), 354 deletions(-) rename sdk/include/opentelemetry/sdk/{init => configuration}/configured_sdk.h (90%) rename sdk/include/opentelemetry/sdk/{init => configuration}/console_log_record_exporter_builder.h (93%) rename sdk/include/opentelemetry/sdk/{init => configuration}/console_push_metric_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/console_span_exporter_builder.h (93%) rename sdk/include/opentelemetry/sdk/{init => configuration}/extension_log_record_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/extension_log_record_processor_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/extension_pull_metric_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/extension_push_metric_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/extension_sampler_builder.h (93%) rename sdk/include/opentelemetry/sdk/{init => configuration}/extension_span_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/extension_span_processor_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_file_log_record_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_file_push_metric_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_file_span_exporter_builder.h (93%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_grpc_log_record_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_grpc_push_metric_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_grpc_span_exporter_builder.h (93%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_http_log_record_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_http_push_metric_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/otlp_http_span_exporter_builder.h (93%) rename sdk/include/opentelemetry/sdk/{init => configuration}/prometheus_pull_metric_exporter_builder.h (94%) rename sdk/include/opentelemetry/sdk/{init => configuration}/registry.h (57%) rename sdk/include/opentelemetry/sdk/{init => configuration}/sdk_builder.h (98%) rename sdk/include/opentelemetry/sdk/{init => configuration}/text_map_propagator_builder.h (92%) rename sdk/include/opentelemetry/sdk/{init => configuration}/unsupported_exception.h (93%) rename sdk/include/opentelemetry/sdk/{init => configuration}/zipkin_span_exporter_builder.h (93%) rename sdk/src/{init => configuration}/configured_sdk.cc (92%) rename sdk/src/{init => configuration}/registry.cc (74%) rename sdk/src/{init => configuration}/sdk_builder.cc (96%) delete mode 100644 sdk/src/init/CMakeLists.txt diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index c98b40a2f3..6a49504b49 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -68,6 +68,6 @@ if(DEFINED OPENTELEMETRY_BUILD_DLL) target_link_libraries(example_yaml opentelemetry_cpp) else() target_link_libraries( - example_yaml opentelemetry_configuration opentelemetry_init - opentelemetry_common opentelemetry_trace opentelemetry_logs) + example_yaml opentelemetry_configuration opentelemetry_common + opentelemetry_trace opentelemetry_logs) endif() diff --git a/examples/yaml/custom_log_record_exporter_builder.cc b/examples/yaml/custom_log_record_exporter_builder.cc index b69eec8812..913d500416 100644 --- a/examples/yaml/custom_log_record_exporter_builder.cc +++ b/examples/yaml/custom_log_record_exporter_builder.cc @@ -5,7 +5,7 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "custom_log_record_exporter.h" @@ -24,7 +24,7 @@ std::unique_ptr CustomLogRecordExpo static CustomLogRecordExporterBuilder singleton; -void CustomLogRecordExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void CustomLogRecordExporterBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->AddExtensionLogRecordExporterBuilder("my_custom_log_record_exporter", &singleton); } diff --git a/examples/yaml/custom_log_record_exporter_builder.h b/examples/yaml/custom_log_record_exporter_builder.h index c33dd9721c..b360bc0955 100644 --- a/examples/yaml/custom_log_record_exporter_builder.h +++ b/examples/yaml/custom_log_record_exporter_builder.h @@ -5,16 +5,16 @@ #include +#include "opentelemetry/sdk/configuration/extension_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/extension_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/exporter.h" class CustomLogRecordExporterBuilder - : public opentelemetry::sdk::init::ExtensionLogRecordExporterBuilder + : public opentelemetry::sdk::configuration::ExtensionLogRecordExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) diff --git a/examples/yaml/custom_log_record_processor_builder.cc b/examples/yaml/custom_log_record_processor_builder.cc index 427b46c4b8..09ae0d7230 100644 --- a/examples/yaml/custom_log_record_processor_builder.cc +++ b/examples/yaml/custom_log_record_processor_builder.cc @@ -5,7 +5,7 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/processor.h" #include "custom_log_record_processor.h" @@ -25,7 +25,8 @@ CustomLogRecordProcessorBuilder::Build( static CustomLogRecordProcessorBuilder singleton; -void CustomLogRecordProcessorBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void CustomLogRecordProcessorBuilder::Register( + opentelemetry::sdk::configuration::Registry *registry) { registry->AddExtensionLogRecordProcessorBuilder("my_custom_log_record_processor", &singleton); } diff --git a/examples/yaml/custom_log_record_processor_builder.h b/examples/yaml/custom_log_record_processor_builder.h index 4a7498eb98..14d6663ead 100644 --- a/examples/yaml/custom_log_record_processor_builder.h +++ b/examples/yaml/custom_log_record_processor_builder.h @@ -5,16 +5,16 @@ #include +#include "opentelemetry/sdk/configuration/extension_log_record_processor_builder.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" -#include "opentelemetry/sdk/init/extension_log_record_processor_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/processor.h" class CustomLogRecordProcessorBuilder - : public opentelemetry::sdk::init::ExtensionLogRecordProcessorBuilder + : public opentelemetry::sdk::configuration::ExtensionLogRecordProcessorBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) diff --git a/examples/yaml/custom_pull_metric_exporter_builder.cc b/examples/yaml/custom_pull_metric_exporter_builder.cc index 8b95d17e0e..f4d0e31a67 100644 --- a/examples/yaml/custom_pull_metric_exporter_builder.cc +++ b/examples/yaml/custom_pull_metric_exporter_builder.cc @@ -5,7 +5,7 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/metric_reader.h" #include "custom_pull_metric_exporter.h" @@ -24,7 +24,8 @@ std::unique_ptr CustomPullMetricExpor static CustomPullMetricExporterBuilder singleton; -void CustomPullMetricExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void CustomPullMetricExporterBuilder::Register( + opentelemetry::sdk::configuration::Registry *registry) { registry->AddExtensionPullMetricExporterBuilder("my_custom_pull_metric_exporter", &singleton); } diff --git a/examples/yaml/custom_pull_metric_exporter_builder.h b/examples/yaml/custom_pull_metric_exporter_builder.h index 6049853d0b..94a1458b6f 100644 --- a/examples/yaml/custom_pull_metric_exporter_builder.h +++ b/examples/yaml/custom_pull_metric_exporter_builder.h @@ -5,16 +5,16 @@ #include +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/metric_reader.h" class CustomPullMetricExporterBuilder - : public opentelemetry::sdk::init::ExtensionPullMetricExporterBuilder + : public opentelemetry::sdk::configuration::ExtensionPullMetricExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) diff --git a/examples/yaml/custom_push_metric_exporter_builder.cc b/examples/yaml/custom_push_metric_exporter_builder.cc index 9c0896b974..6222e31c9a 100644 --- a/examples/yaml/custom_push_metric_exporter_builder.cc +++ b/examples/yaml/custom_push_metric_exporter_builder.cc @@ -5,7 +5,7 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "custom_push_metric_exporter.h" @@ -25,7 +25,8 @@ CustomPushMetricExporterBuilder::Build( static CustomPushMetricExporterBuilder singleton; -void CustomPushMetricExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void CustomPushMetricExporterBuilder::Register( + opentelemetry::sdk::configuration::Registry *registry) { registry->AddExtensionPushMetricExporterBuilder("my_custom_push_metric_exporter", &singleton); } diff --git a/examples/yaml/custom_push_metric_exporter_builder.h b/examples/yaml/custom_push_metric_exporter_builder.h index 46ad865bdb..c5ff2fe33f 100644 --- a/examples/yaml/custom_push_metric_exporter_builder.h +++ b/examples/yaml/custom_push_metric_exporter_builder.h @@ -5,16 +5,16 @@ #include +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/extension_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" class CustomPushMetricExporterBuilder - : public opentelemetry::sdk::init::ExtensionPushMetricExporterBuilder + : public opentelemetry::sdk::configuration::ExtensionPushMetricExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc index ccbcdc203c..0633aed823 100644 --- a/examples/yaml/custom_sampler_builder.cc +++ b/examples/yaml/custom_sampler_builder.cc @@ -4,7 +4,7 @@ #include #include "opentelemetry/sdk/configuration/document_node.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "custom_sampler.h" #include "custom_sampler_builder.h" @@ -22,7 +22,7 @@ std::unique_ptr CustomSamplerBuilder::Build( static CustomSamplerBuilder singleton; -void CustomSamplerBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void CustomSamplerBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->AddExtensionSamplerBuilder("my_custom_sampler", &singleton); } diff --git a/examples/yaml/custom_sampler_builder.h b/examples/yaml/custom_sampler_builder.h index 23e6b08b72..001a8193ba 100644 --- a/examples/yaml/custom_sampler_builder.h +++ b/examples/yaml/custom_sampler_builder.h @@ -5,15 +5,15 @@ #include +#include "opentelemetry/sdk/configuration/extension_sampler_builder.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" -#include "opentelemetry/sdk/init/extension_sampler_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/sampler.h" -class CustomSamplerBuilder : public opentelemetry::sdk::init::ExtensionSamplerBuilder +class CustomSamplerBuilder : public opentelemetry::sdk::configuration::ExtensionSamplerBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const override; diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc index a552d5fe4e..420ab490aa 100644 --- a/examples/yaml/custom_span_exporter_builder.cc +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -5,7 +5,7 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "custom_span_exporter.h" @@ -24,7 +24,7 @@ std::unique_ptr CustomSpanExporterBuild static CustomSpanExporterBuilder singleton; -void CustomSpanExporterBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void CustomSpanExporterBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->AddExtensionSpanExporterBuilder("my_custom_span_exporter", &singleton); } diff --git a/examples/yaml/custom_span_exporter_builder.h b/examples/yaml/custom_span_exporter_builder.h index 526242762a..b562fb02fe 100644 --- a/examples/yaml/custom_span_exporter_builder.h +++ b/examples/yaml/custom_span_exporter_builder.h @@ -5,15 +5,16 @@ #include +#include "opentelemetry/sdk/configuration/extension_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/extension_span_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" -class CustomSpanExporterBuilder : public opentelemetry::sdk::init::ExtensionSpanExporterBuilder +class CustomSpanExporterBuilder + : public opentelemetry::sdk::configuration::ExtensionSpanExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc index 8c76ca077a..b19a8172aa 100644 --- a/examples/yaml/custom_span_processor_builder.cc +++ b/examples/yaml/custom_span_processor_builder.cc @@ -5,7 +5,7 @@ #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/processor.h" #include "custom_span_processor.h" @@ -24,7 +24,7 @@ std::unique_ptr CustomSpanProcessorBui static CustomSpanProcessorBuilder singleton; -void CustomSpanProcessorBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void CustomSpanProcessorBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->AddExtensionSpanProcessorBuilder("my_custom_span_processor", &singleton); } diff --git a/examples/yaml/custom_span_processor_builder.h b/examples/yaml/custom_span_processor_builder.h index 481cbc9d56..bc8fe0e720 100644 --- a/examples/yaml/custom_span_processor_builder.h +++ b/examples/yaml/custom_span_processor_builder.h @@ -5,15 +5,16 @@ #include +#include "opentelemetry/sdk/configuration/extension_span_processor_builder.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" -#include "opentelemetry/sdk/init/extension_span_processor_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/processor.h" -class CustomSpanProcessorBuilder : public opentelemetry::sdk::init::ExtensionSpanProcessorBuilder +class CustomSpanProcessorBuilder + : public opentelemetry::sdk::configuration::ExtensionSpanProcessorBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); std::unique_ptr Build( const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index 40754f1531..ab98dc907a 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -11,9 +11,9 @@ #include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/configured_sdk.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" -#include "opentelemetry/sdk/init/configured_sdk.h" -#include "opentelemetry/sdk/init/registry.h" #include "custom_log_record_exporter_builder.h" #include "custom_log_record_processor_builder.h" @@ -60,7 +60,7 @@ static bool opt_help = false; static std::string yaml_file_path = ""; -static std::unique_ptr sdk; +static std::unique_ptr sdk; namespace { @@ -73,8 +73,8 @@ void InitOtel(const std::string &config_file) /* 1 - Create a registry */ - std::shared_ptr registry( - new opentelemetry::sdk::init::Registry); + std::shared_ptr registry( + new opentelemetry::sdk::configuration::Registry); /* 2 - Populate the registry with the core components supported */ @@ -126,7 +126,7 @@ void InitOtel(const std::string &config_file) /* 5 - Build the SDK from the parsed config.yaml */ - sdk = opentelemetry::sdk::init::ConfiguredSdk::Create(registry, model); + sdk = opentelemetry::sdk::configuration::ConfiguredSdk::Create(registry, model); /* 6 - Deploy the SDK */ diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h index a5ae66fcb2..2673635e51 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/console_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/console_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace logs { class OPENTELEMETRY_EXPORT ConsoleLogRecordBuilder - : public opentelemetry::sdk::init::ConsoleLogRecordExporterBuilder + : public opentelemetry::sdk::configuration::ConsoleLogRecordExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); ConsoleLogRecordBuilder() = default; ~ConsoleLogRecordBuilder() override = default; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h index 4c411e30cc..6376844890 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/console_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace metrics { class OPENTELEMETRY_EXPORT ConsolePushMetricBuilder - : public opentelemetry::sdk::init::ConsolePushMetricExporterBuilder + : public opentelemetry::sdk::configuration::ConsolePushMetricExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); ConsolePushMetricBuilder() = default; ~ConsolePushMetricBuilder() override = default; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h index 356d180d87..1cb6ef9c64 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/console_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/console_span_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace trace { class OPENTELEMETRY_EXPORT ConsoleSpanBuilder - : public opentelemetry::sdk::init::ConsoleSpanExporterBuilder + : public opentelemetry::sdk::configuration::ConsoleSpanExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); ConsoleSpanBuilder() = default; ~ConsoleSpanBuilder() override = default; diff --git a/exporters/ostream/src/console_log_record_builder.cc b/exporters/ostream/src/console_log_record_builder.cc index 3f78c02cff..858e42993c 100644 --- a/exporters/ostream/src/console_log_record_builder.cc +++ b/exporters/ostream/src/console_log_record_builder.cc @@ -13,7 +13,7 @@ namespace logs static ConsoleLogRecordBuilder singleton; -void ConsoleLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void ConsoleLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetConsoleLogRecordBuilder(&singleton); } diff --git a/exporters/ostream/src/console_push_metric_builder.cc b/exporters/ostream/src/console_push_metric_builder.cc index 8b053a660b..d67f7a55d8 100644 --- a/exporters/ostream/src/console_push_metric_builder.cc +++ b/exporters/ostream/src/console_push_metric_builder.cc @@ -13,7 +13,7 @@ namespace metrics static ConsolePushMetricBuilder singleton; -void ConsolePushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void ConsolePushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetConsolePushMetricExporterBuilder(&singleton); } diff --git a/exporters/ostream/src/console_span_builder.cc b/exporters/ostream/src/console_span_builder.cc index 8e61234d27..78588a1e52 100644 --- a/exporters/ostream/src/console_span_builder.cc +++ b/exporters/ostream/src/console_span_builder.cc @@ -13,7 +13,7 @@ namespace trace static ConsoleSpanBuilder singleton; -void ConsoleSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void ConsoleSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetConsoleSpanBuilder(&singleton); } diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h index 4222e03197..82d3228b7f 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpFileLogRecordBuilder - : public opentelemetry::sdk::init::OtlpFileLogRecordExporterBuilder + : public opentelemetry::sdk::configuration::OtlpFileLogRecordExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpFileLogRecordBuilder() = default; ~OtlpFileLogRecordBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h index d41962928b..7e76b3df27 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpFilePushMetricBuilder - : public opentelemetry::sdk::init::OtlpFilePushMetricExporterBuilder + : public opentelemetry::sdk::configuration::OtlpFilePushMetricExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpFilePushMetricBuilder() = default; ~OtlpFilePushMetricBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h index 6b2e75c1c2..837410616d 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_file_span_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpFileSpanBuilder - : public opentelemetry::sdk::init::OtlpFileSpanExporterBuilder + : public opentelemetry::sdk::configuration::OtlpFileSpanExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpFileSpanBuilder() = default; ~OtlpFileSpanBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h index 816ef379ba..90ed19f1dd 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpGrpcLogRecordBuilder - : public opentelemetry::sdk::init::OtlpGrpcLogRecordExporterBuilder + : public opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpGrpcLogRecordBuilder() = default; ~OtlpGrpcLogRecordBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h index ab136cb5a8..b38dfab655 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpGrpcPushMetricBuilder - : public opentelemetry::sdk::init::OtlpGrpcPushMetricExporterBuilder + : public opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpGrpcPushMetricBuilder() = default; ~OtlpGrpcPushMetricBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h index cb7ce819ea..eed0277d95 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpGrpcSpanBuilder - : public opentelemetry::sdk::init::OtlpGrpcSpanExporterBuilder + : public opentelemetry::sdk::configuration::OtlpGrpcSpanExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpGrpcSpanBuilder() = default; ~OtlpGrpcSpanBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h index bceececeb9..3ec706eda9 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpHttpLogRecordBuilder - : public opentelemetry::sdk::init::OtlpHttpLogRecordExporterBuilder + : public opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpHttpLogRecordBuilder() = default; ~OtlpHttpLogRecordBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h index 3e17d220d0..2942aaed06 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpHttpPushMetricBuilder - : public opentelemetry::sdk::init::OtlpHttpPushMetricExporterBuilder + : public opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpHttpPushMetricBuilder() = default; ~OtlpHttpPushMetricBuilder() override = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h index 70604d305b..448877407d 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/otlp_http_span_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace otlp { class OPENTELEMETRY_EXPORT OtlpHttpSpanBuilder - : public opentelemetry::sdk::init::OtlpHttpSpanExporterBuilder + : public opentelemetry::sdk::configuration::OtlpHttpSpanExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); OtlpHttpSpanBuilder() = default; ~OtlpHttpSpanBuilder() override = default; diff --git a/exporters/otlp/src/otlp_file_log_record_builder.cc b/exporters/otlp/src/otlp_file_log_record_builder.cc index 445daddb65..e0e7da3382 100644 --- a/exporters/otlp/src/otlp_file_log_record_builder.cc +++ b/exporters/otlp/src/otlp_file_log_record_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpFileLogRecordBuilder singleton; -void OtlpFileLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpFileLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpFileLogRecordBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_file_push_metric_builder.cc b/exporters/otlp/src/otlp_file_push_metric_builder.cc index e7557f5775..2b3c1d094b 100644 --- a/exporters/otlp/src/otlp_file_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_file_push_metric_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpFilePushMetricBuilder singleton; -void OtlpFilePushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpFilePushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpFilePushMetricExporterBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_file_span_builder.cc b/exporters/otlp/src/otlp_file_span_builder.cc index fd3f57d795..4040b5d71e 100644 --- a/exporters/otlp/src/otlp_file_span_builder.cc +++ b/exporters/otlp/src/otlp_file_span_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpFileSpanBuilder singleton; -void OtlpFileSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpFileSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpFileSpanBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc index f08e392fb6..f2c96fdd88 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_builder.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpGrpcLogRecordBuilder singleton; -void OtlpGrpcLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpGrpcLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpGrpcLogRecordBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc index 02ffb02b80..f5e6228376 100644 --- a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpGrpcPushMetricBuilder singleton; -void OtlpGrpcPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpGrpcPushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpGrpcPushMetricExporterBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc index d525b754ae..e8684f0bd0 100644 --- a/exporters/otlp/src/otlp_grpc_span_builder.cc +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpGrpcSpanBuilder singleton; -void OtlpGrpcSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpGrpcSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpGrpcSpanBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_http_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc index 6d0d833291..d69efb6b13 100644 --- a/exporters/otlp/src/otlp_http_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpHttpLogRecordBuilder singleton; -void OtlpHttpLogRecordBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpHttpLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpHttpLogRecordBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_http_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc index 67dab7802b..8caceaa749 100644 --- a/exporters/otlp/src/otlp_http_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -14,7 +14,7 @@ namespace otlp static OtlpHttpPushMetricBuilder singleton; -void OtlpHttpPushMetricBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpHttpPushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpHttpPushMetricExporterBuilder(&singleton); } diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index c11e148ce7..9034b54ca5 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -9,7 +9,7 @@ #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -21,7 +21,7 @@ namespace otlp static OtlpHttpSpanBuilder singleton; -void OtlpHttpSpanBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void OtlpHttpSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetOtlpHttpSpanBuilder(&singleton); } diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h index b953feef36..6a96e5e55f 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/metric_reader.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace metrics { class OPENTELEMETRY_EXPORT PrometheusPullBuilder - : public opentelemetry::sdk::init::PrometheusPullMetricExporterBuilder + : public opentelemetry::sdk::configuration::PrometheusPullMetricExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); PrometheusPullBuilder() = default; ~PrometheusPullBuilder() override = default; diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc index b42303d22d..44a80c49dd 100644 --- a/exporters/prometheus/src/prometheus_pull_builder.cc +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -7,7 +7,7 @@ #include "opentelemetry/exporters/prometheus/exporter_options.h" #include "opentelemetry/exporters/prometheus/prometheus_pull_builder.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/metric_reader.h" #include "opentelemetry/version.h" @@ -19,7 +19,7 @@ namespace metrics static PrometheusPullBuilder singleton; -void PrometheusPullBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void PrometheusPullBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetPrometheusPullMetricExporterBuilder(&singleton); } diff --git a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h index 0b50e2fe46..bd6af96f3c 100644 --- a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h +++ b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h @@ -5,9 +5,9 @@ #include +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" -#include "opentelemetry/sdk/init/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -18,10 +18,10 @@ namespace zipkin { class OPENTELEMETRY_EXPORT ZipkinBuilder - : public opentelemetry::sdk::init::ZipkinSpanExporterBuilder + : public opentelemetry::sdk::configuration::ZipkinSpanExporterBuilder { public: - static void Register(opentelemetry::sdk::init::Registry *registry); + static void Register(opentelemetry::sdk::configuration::Registry *registry); ZipkinBuilder() = default; ~ZipkinBuilder() override = default; diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 3c0fec966b..969fedfbd2 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -7,8 +7,8 @@ #include "opentelemetry/exporters/zipkin/zipkin_builder.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -20,7 +20,7 @@ namespace zipkin static ZipkinBuilder singleton; -void ZipkinBuilder::Register(opentelemetry::sdk::init::Registry *registry) +void ZipkinBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { registry->SetZipkinSpanBuilder(&singleton); } diff --git a/sdk/include/opentelemetry/sdk/init/configured_sdk.h b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h similarity index 90% rename from sdk/include/opentelemetry/sdk/init/configured_sdk.h rename to sdk/include/opentelemetry/sdk/configuration/configured_sdk.h index 941269a801..1e5cf8f61b 100644 --- a/sdk/include/opentelemetry/sdk/init/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h @@ -3,9 +3,11 @@ #pragma once +#include + #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/init/registry.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/resource/resource.h" @@ -15,7 +17,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ConfiguredSdk @@ -37,6 +39,6 @@ class ConfiguredSdk std::shared_ptr m_logger_provider; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_builder.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_builder.h index aa203fd7dd..29d99bec5c 100644 --- a/sdk/include/opentelemetry/sdk/init/console_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ConsoleLogRecordExporterBuilder @@ -29,6 +31,6 @@ class ConsoleLogRecordExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h index c61721bd6d..0fe0725aa7 100644 --- a/sdk/include/opentelemetry/sdk/init/console_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ConsolePushMetricExporterBuilder @@ -29,6 +31,6 @@ class ConsolePushMetricExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_builder.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/console_span_exporter_builder.h index 31efa991c5..0db9ba9e5b 100644 --- a/sdk/include/opentelemetry/sdk/init/console_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ConsoleSpanExporterBuilder @@ -27,6 +29,6 @@ class ConsoleSpanExporterBuilder const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_builder.h index 9ed89f5027..e9a7c102cb 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ExtensionLogRecordExporterBuilder @@ -29,6 +31,6 @@ class ExtensionLogRecordExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h rename to sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_builder.h index 6af72a570d..51d21fd010 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_log_record_processor_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_log_record_processor_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" #include "opentelemetry/sdk/logs/processor.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ExtensionLogRecordProcessorBuilder @@ -29,6 +31,6 @@ class ExtensionLogRecordProcessorBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_builder.h index abe50567dd..fc621c2b78 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_pull_metric_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/metric_reader.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ExtensionPullMetricExporterBuilder @@ -29,6 +31,6 @@ class ExtensionPullMetricExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_builder.h index 9a3c3d0b70..b3eacfc770 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_push_metric_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ExtensionPushMetricExporterBuilder @@ -29,6 +31,6 @@ class ExtensionPushMetricExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_builder.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h rename to sdk/include/opentelemetry/sdk/configuration/extension_sampler_builder.h index 35c2dc8c00..3ac5d7263b 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_sampler_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_sampler_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" #include "opentelemetry/sdk/trace/sampler.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ExtensionSamplerBuilder @@ -27,6 +29,6 @@ class ExtensionSamplerBuilder const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_builder.h index 93de2e634a..50a5ac12d7 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ExtensionSpanExporterBuilder @@ -27,6 +29,6 @@ class ExtensionSpanExporterBuilder const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h rename to sdk/include/opentelemetry/sdk/configuration/extension_span_processor_builder.h index c5db2c1b36..86732e7817 100644 --- a/sdk/include/opentelemetry/sdk/init/extension_span_processor_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/extension_span_processor_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ExtensionSpanProcessorBuilder @@ -28,6 +30,6 @@ class ExtensionSpanProcessorBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_builder.h index 3a44b0a901..c7be2657cc 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpFileLogRecordExporterBuilder @@ -29,6 +31,6 @@ class OtlpFileLogRecordExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_builder.h index 27e55a685b..79d60f1ca4 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" @@ -11,7 +13,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpFilePushMetricExporterBuilder @@ -30,6 +32,6 @@ class OtlpFilePushMetricExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_builder.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_builder.h index 97a71c73b9..c2bec566df 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_file_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpFileSpanExporterBuilder @@ -27,6 +29,6 @@ class OtlpFileSpanExporterBuilder const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_builder.h index 4ad109184d..e560e6bc7d 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpGrpcLogRecordExporterBuilder @@ -29,6 +31,6 @@ class OtlpGrpcLogRecordExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_builder.h index 05a75a2e72..61adf7c089 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" @@ -11,7 +13,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpGrpcPushMetricExporterBuilder @@ -30,6 +32,6 @@ class OtlpGrpcPushMetricExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_builder.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_builder.h index 5cdc193299..79550ee830 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpGrpcSpanExporterBuilder @@ -27,6 +29,6 @@ class OtlpGrpcSpanExporterBuilder const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h index a0f459e52f..a8d1313da4 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpHttpLogRecordExporterBuilder @@ -29,6 +31,6 @@ class OtlpHttpLogRecordExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h index 1825dcd00d..c407eca52c 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" @@ -11,7 +13,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpHttpPushMetricExporterBuilder @@ -30,6 +32,6 @@ class OtlpHttpPushMetricExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h index f3c61ca9e5..8dda6f2b9e 100644 --- a/sdk/include/opentelemetry/sdk/init/otlp_http_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpHttpSpanExporterBuilder @@ -27,6 +29,6 @@ class OtlpHttpSpanExporterBuilder const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h similarity index 94% rename from sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h index bd9a0384fe..4a4496dc49 100644 --- a/sdk/include/opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/metrics/metric_reader.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class PrometheusPullMetricExporterBuilder @@ -29,6 +31,6 @@ class PrometheusPullMetricExporterBuilder const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/registry.h b/sdk/include/opentelemetry/sdk/configuration/registry.h similarity index 57% rename from sdk/include/opentelemetry/sdk/init/registry.h rename to sdk/include/opentelemetry/sdk/configuration/registry.h index 018bd9470e..2d7494d814 100644 --- a/sdk/include/opentelemetry/sdk/init/registry.h +++ b/sdk/include/opentelemetry/sdk/configuration/registry.h @@ -11,7 +11,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class OtlpHttpSpanExporterBuilder; class OtlpGrpcSpanExporterBuilder; @@ -51,181 +51,192 @@ class Registry /* Core optional components. */ - const OtlpHttpSpanExporterBuilder *GetOtlpHttpSpanBuilder() { return m_otlp_http_span_builder; } + const OtlpHttpSpanExporterBuilder *GetOtlpHttpSpanBuilder() const + { + return otlp_http_span_builder_; + } void SetOtlpHttpSpanBuilder(const OtlpHttpSpanExporterBuilder *builder) { - m_otlp_http_span_builder = builder; + otlp_http_span_builder_ = builder; } - const OtlpGrpcSpanExporterBuilder *GetOtlpGrpcSpanBuilder() { return m_otlp_grpc_span_builder; } + const OtlpGrpcSpanExporterBuilder *GetOtlpGrpcSpanBuilder() const + { + return otlp_grpc_span_builder_; + } void SetOtlpGrpcSpanBuilder(const OtlpGrpcSpanExporterBuilder *builder) { - m_otlp_grpc_span_builder = builder; + otlp_grpc_span_builder_ = builder; } - const OtlpFileSpanExporterBuilder *GetOtlpFileSpanBuilder() { return m_otlp_file_span_builder; } + const OtlpFileSpanExporterBuilder *GetOtlpFileSpanBuilder() const + { + return otlp_file_span_builder_; + } void SetOtlpFileSpanBuilder(const OtlpFileSpanExporterBuilder *builder) { - m_otlp_file_span_builder = builder; + otlp_file_span_builder_ = builder; } - const ConsoleSpanExporterBuilder *GetConsoleSpanBuilder() { return m_console_span_builder; } + const ConsoleSpanExporterBuilder *GetConsoleSpanBuilder() const { return console_span_builder_; } void SetConsoleSpanBuilder(const ConsoleSpanExporterBuilder *builder) { - m_console_span_builder = builder; + console_span_builder_ = builder; } - const ZipkinSpanExporterBuilder *GetZipkinSpanBuilder() { return m_zipkin_span_builder; } + const ZipkinSpanExporterBuilder *GetZipkinSpanBuilder() const { return zipkin_span_builder_; } void SetZipkinSpanBuilder(const ZipkinSpanExporterBuilder *builder) { - m_zipkin_span_builder = builder; + zipkin_span_builder_ = builder; } - const OtlpHttpPushMetricExporterBuilder *GetOtlpHttpPushMetricExporterBuilder() + const OtlpHttpPushMetricExporterBuilder *GetOtlpHttpPushMetricExporterBuilder() const { - return m_otlp_http_push_metric_builder; + return otlp_http_push_metric_builder_; } void SetOtlpHttpPushMetricExporterBuilder(const OtlpHttpPushMetricExporterBuilder *builder) { - m_otlp_http_push_metric_builder = builder; + otlp_http_push_metric_builder_ = builder; } - const OtlpGrpcPushMetricExporterBuilder *GetOtlpGrpcPushMetricExporterBuilder() + const OtlpGrpcPushMetricExporterBuilder *GetOtlpGrpcPushMetricExporterBuilder() const { - return m_otlp_grpc_push_metric_builder; + return otlp_grpc_push_metric_builder_; } void SetOtlpGrpcPushMetricExporterBuilder(const OtlpGrpcPushMetricExporterBuilder *builder) { - m_otlp_grpc_push_metric_builder = builder; + otlp_grpc_push_metric_builder_ = builder; } - const OtlpFilePushMetricExporterBuilder *GetOtlpFilePushMetricExporterBuilder() + const OtlpFilePushMetricExporterBuilder *GetOtlpFilePushMetricExporterBuilder() const { - return m_otlp_file_push_metric_builder; + return otlp_file_push_metric_builder_; } void SetOtlpFilePushMetricExporterBuilder(const OtlpFilePushMetricExporterBuilder *builder) { - m_otlp_file_push_metric_builder = builder; + otlp_file_push_metric_builder_ = builder; } - const ConsolePushMetricExporterBuilder *GetConsolePushMetricExporterBuilder() + const ConsolePushMetricExporterBuilder *GetConsolePushMetricExporterBuilder() const { - return m_console_metric_builder; + return console_metric_builder_; } void SetConsolePushMetricExporterBuilder(const ConsolePushMetricExporterBuilder *builder) { - m_console_metric_builder = builder; + console_metric_builder_ = builder; } - const PrometheusPullMetricExporterBuilder *GetPrometheusPullMetricExporterBuilder() + const PrometheusPullMetricExporterBuilder *GetPrometheusPullMetricExporterBuilder() const { - return m_prometheus_metric_builder; + return prometheus_metric_builder_; } void SetPrometheusPullMetricExporterBuilder(const PrometheusPullMetricExporterBuilder *builder) { - m_prometheus_metric_builder = builder; + prometheus_metric_builder_ = builder; } - const OtlpHttpLogRecordExporterBuilder *GetOtlpHttpLogRecordBuilder() + const OtlpHttpLogRecordExporterBuilder *GetOtlpHttpLogRecordBuilder() const { - return m_otlp_http_log_record_builder; + return otlp_http_log_record_builder_; } void SetOtlpHttpLogRecordBuilder(const OtlpHttpLogRecordExporterBuilder *builder) { - m_otlp_http_log_record_builder = builder; + otlp_http_log_record_builder_ = builder; } - const OtlpGrpcLogRecordExporterBuilder *GetOtlpGrpcLogRecordBuilder() + const OtlpGrpcLogRecordExporterBuilder *GetOtlpGrpcLogRecordBuilder() const { - return m_otlp_grpc_log_record_builder; + return otlp_grpc_log_record_builder_; } void SetOtlpGrpcLogRecordBuilder(const OtlpGrpcLogRecordExporterBuilder *builder) { - m_otlp_grpc_log_record_builder = builder; + otlp_grpc_log_record_builder_ = builder; } - const OtlpFileLogRecordExporterBuilder *GetOtlpFileLogRecordBuilder() + const OtlpFileLogRecordExporterBuilder *GetOtlpFileLogRecordBuilder() const { - return m_otlp_file_log_record_builder; + return otlp_file_log_record_builder_; } void SetOtlpFileLogRecordBuilder(const OtlpFileLogRecordExporterBuilder *builder) { - m_otlp_file_log_record_builder = builder; + otlp_file_log_record_builder_ = builder; } - const ConsoleLogRecordExporterBuilder *GetConsoleLogRecordBuilder() + const ConsoleLogRecordExporterBuilder *GetConsoleLogRecordBuilder() const { - return m_console_log_record_builder; + return console_log_record_builder_; } void SetConsoleLogRecordBuilder(const ConsoleLogRecordExporterBuilder *builder) { - m_console_log_record_builder = builder; + console_log_record_builder_ = builder; } /* Extension points */ - const TextMapPropagatorBuilder *GetTextMapPropagatorBuilder(const std::string &name); + const TextMapPropagatorBuilder *GetTextMapPropagatorBuilder(const std::string &name) const; void AddTextMapPropagatorBuilder(const std::string &name, TextMapPropagatorBuilder *builder); - const ExtensionSamplerBuilder *GetExtensionSamplerBuilder(const std::string &name); + const ExtensionSamplerBuilder *GetExtensionSamplerBuilder(const std::string &name) const; void AddExtensionSamplerBuilder(const std::string &name, ExtensionSamplerBuilder *builder); - const ExtensionSpanExporterBuilder *GetExtensionSpanExporterBuilder(const std::string &name); + const ExtensionSpanExporterBuilder *GetExtensionSpanExporterBuilder( + const std::string &name) const; void AddExtensionSpanExporterBuilder(const std::string &name, ExtensionSpanExporterBuilder *builder); - const ExtensionSpanProcessorBuilder *GetExtensionSpanProcessorBuilder(const std::string &name); + const ExtensionSpanProcessorBuilder *GetExtensionSpanProcessorBuilder( + const std::string &name) const; void AddExtensionSpanProcessorBuilder(const std::string &name, ExtensionSpanProcessorBuilder *builder); const ExtensionPushMetricExporterBuilder *GetExtensionPushMetricExporterBuilder( - const std::string &name); + const std::string &name) const; void AddExtensionPushMetricExporterBuilder(const std::string &name, ExtensionPushMetricExporterBuilder *builder); const ExtensionPullMetricExporterBuilder *GetExtensionPullMetricExporterBuilder( - const std::string &name); + const std::string &name) const; void AddExtensionPullMetricExporterBuilder(const std::string &name, ExtensionPullMetricExporterBuilder *builder); const ExtensionLogRecordExporterBuilder *GetExtensionLogRecordExporterBuilder( - const std::string &name); + const std::string &name) const; void AddExtensionLogRecordExporterBuilder(const std::string &name, ExtensionLogRecordExporterBuilder *builder); const ExtensionLogRecordProcessorBuilder *GetExtensionLogRecordProcessorBuilder( - const std::string &name); + const std::string &name) const; void AddExtensionLogRecordProcessorBuilder(const std::string &name, ExtensionLogRecordProcessorBuilder *builder); private: - const OtlpHttpSpanExporterBuilder *m_otlp_http_span_builder{nullptr}; - const OtlpGrpcSpanExporterBuilder *m_otlp_grpc_span_builder{nullptr}; - const OtlpFileSpanExporterBuilder *m_otlp_file_span_builder{nullptr}; - const ConsoleSpanExporterBuilder *m_console_span_builder{nullptr}; - const ZipkinSpanExporterBuilder *m_zipkin_span_builder{nullptr}; - - const OtlpHttpPushMetricExporterBuilder *m_otlp_http_push_metric_builder{nullptr}; - const OtlpGrpcPushMetricExporterBuilder *m_otlp_grpc_push_metric_builder{nullptr}; - const OtlpFilePushMetricExporterBuilder *m_otlp_file_push_metric_builder{nullptr}; - const ConsolePushMetricExporterBuilder *m_console_metric_builder{nullptr}; - const PrometheusPullMetricExporterBuilder *m_prometheus_metric_builder{nullptr}; - - const OtlpHttpLogRecordExporterBuilder *m_otlp_http_log_record_builder{nullptr}; - const OtlpGrpcLogRecordExporterBuilder *m_otlp_grpc_log_record_builder{nullptr}; - const OtlpFileLogRecordExporterBuilder *m_otlp_file_log_record_builder{nullptr}; - const ConsoleLogRecordExporterBuilder *m_console_log_record_builder{nullptr}; - - std::map m_propagator_builders; - std::map m_sampler_builders; - std::map m_span_exporter_builders; - std::map m_span_processor_builders; - std::map m_push_metric_exporter_builders; - std::map m_pull_metric_exporter_builders; - std::map m_log_record_exporter_builders; - std::map m_log_record_processor_builders; + const OtlpHttpSpanExporterBuilder *otlp_http_span_builder_{nullptr}; + const OtlpGrpcSpanExporterBuilder *otlp_grpc_span_builder_{nullptr}; + const OtlpFileSpanExporterBuilder *otlp_file_span_builder_{nullptr}; + const ConsoleSpanExporterBuilder *console_span_builder_{nullptr}; + const ZipkinSpanExporterBuilder *zipkin_span_builder_{nullptr}; + + const OtlpHttpPushMetricExporterBuilder *otlp_http_push_metric_builder_{nullptr}; + const OtlpGrpcPushMetricExporterBuilder *otlp_grpc_push_metric_builder_{nullptr}; + const OtlpFilePushMetricExporterBuilder *otlp_file_push_metric_builder_{nullptr}; + const ConsolePushMetricExporterBuilder *console_metric_builder_{nullptr}; + const PrometheusPullMetricExporterBuilder *prometheus_metric_builder_{nullptr}; + + const OtlpHttpLogRecordExporterBuilder *otlp_http_log_record_builder_{nullptr}; + const OtlpGrpcLogRecordExporterBuilder *otlp_grpc_log_record_builder_{nullptr}; + const OtlpFileLogRecordExporterBuilder *otlp_file_log_record_builder_{nullptr}; + const ConsoleLogRecordExporterBuilder *console_log_record_builder_{nullptr}; + + std::map propagator_builders_; + std::map sampler_builders_; + std::map span_exporter_builders_; + std::map span_processor_builders_; + std::map push_metric_exporter_builders_; + std::map pull_metric_exporter_builders_; + std::map log_record_exporter_builders_; + std::map log_record_processor_builders_; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/sdk_builder.h b/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h similarity index 98% rename from sdk/include/opentelemetry/sdk/init/sdk_builder.h rename to sdk/include/opentelemetry/sdk/configuration/sdk_builder.h index e26142dd34..88c961ea5a 100644 --- a/sdk/include/opentelemetry/sdk/init/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/always_off_sampler_configuration.h" #include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h" #include "opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h" @@ -10,6 +12,7 @@ #include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/configured_sdk.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h" @@ -36,13 +39,12 @@ #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #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/configuration/zipkin_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/configured_sdk.h" -#include "opentelemetry/sdk/init/registry.h" #include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h" @@ -58,7 +60,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class SdkBuilder @@ -290,6 +292,6 @@ class SdkBuilder std::shared_ptr m_registry; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h b/sdk/include/opentelemetry/sdk/configuration/text_map_propagator_builder.h similarity index 92% rename from sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h rename to sdk/include/opentelemetry/sdk/configuration/text_map_propagator_builder.h index 850c4e7845..76ec51ed4d 100644 --- a/sdk/include/opentelemetry/sdk/init/text_map_propagator_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/text_map_propagator_builder.h @@ -3,13 +3,15 @@ #pragma once +#include + #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class TextMapPropagatorBuilder @@ -25,6 +27,6 @@ class TextMapPropagatorBuilder virtual std::unique_ptr Build() const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/init/unsupported_exception.h b/sdk/include/opentelemetry/sdk/configuration/unsupported_exception.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/unsupported_exception.h rename to sdk/include/opentelemetry/sdk/configuration/unsupported_exception.h index f06b5d1689..95da867b99 100644 --- a/sdk/include/opentelemetry/sdk/init/unsupported_exception.h +++ b/sdk/include/opentelemetry/sdk/configuration/unsupported_exception.h @@ -11,7 +11,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class UnsupportedException : public std::runtime_error @@ -25,6 +25,6 @@ class UnsupportedException : public std::runtime_error ~UnsupportedException() override = default; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h index 7c47bdd1d3..248ff77578 100644 --- a/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h @@ -4,7 +4,6 @@ #pragma once #include -#include #include #include "opentelemetry/sdk/configuration/instrument_type.h" diff --git a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_builder.h similarity index 93% rename from sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h rename to sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_builder.h index d9b85a4fb6..2b140e4c48 100644 --- a/sdk/include/opentelemetry/sdk/init/zipkin_span_exporter_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_builder.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" @@ -10,7 +12,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class ZipkinSpanExporterBuilder @@ -27,6 +29,6 @@ class ZipkinSpanExporterBuilder const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const = 0; }; -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/CMakeLists.txt b/sdk/src/CMakeLists.txt index 67fac35208..c922726547 100644 --- a/sdk/src/CMakeLists.txt +++ b/sdk/src/CMakeLists.txt @@ -10,5 +10,4 @@ add_subdirectory(resource) if(WITH_CONFIGURATION) add_subdirectory(configuration) - add_subdirectory(init) endif() diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index 761b1fa07c..4b073f64a1 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -3,8 +3,14 @@ add_library( opentelemetry_configuration - configuration_parser.cc document_node.cc yaml_configuration_parser.cc - ryml_document.cc ryml_document_node.cc) + configuration_parser.cc + document_node.cc + yaml_configuration_parser.cc + ryml_document.cc + ryml_document_node.cc + configured_sdk.cc + sdk_builder.cc + registry.cc) set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME configuration) diff --git a/sdk/src/init/configured_sdk.cc b/sdk/src/configuration/configured_sdk.cc similarity index 92% rename from sdk/src/init/configured_sdk.cc rename to sdk/src/configuration/configured_sdk.cc index feffab168d..5728940e75 100644 --- a/sdk/src/init/configured_sdk.cc +++ b/sdk/src/configuration/configured_sdk.cc @@ -12,9 +12,9 @@ #include "opentelemetry/metrics/provider.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/init/configured_sdk.h" -#include "opentelemetry/sdk/init/registry.h" -#include "opentelemetry/sdk/init/sdk_builder.h" +#include "opentelemetry/sdk/configuration/configured_sdk.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/configuration/sdk_builder.h" #include "opentelemetry/sdk/logs/logger_provider.h" #include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/sdk/trace/tracer_provider.h" @@ -25,7 +25,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { std::unique_ptr ConfiguredSdk::Create( @@ -96,6 +96,6 @@ void ConfiguredSdk::UnInstall() } } -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/registry.cc b/sdk/src/configuration/registry.cc similarity index 74% rename from sdk/src/init/registry.cc rename to sdk/src/configuration/registry.cc index 67728a3427..37e630a4ae 100644 --- a/sdk/src/init/registry.cc +++ b/sdk/src/configuration/registry.cc @@ -8,8 +8,8 @@ #include "opentelemetry/baggage/propagation/baggage_propagator.h" #include "opentelemetry/context/propagation/text_map_propagator.h" -#include "opentelemetry/sdk/init/registry.h" -#include "opentelemetry/sdk/init/text_map_propagator_builder.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/configuration/text_map_propagator_builder.h" #include "opentelemetry/trace/propagation/b3_propagator.h" #include "opentelemetry/trace/propagation/http_trace_context.h" #include "opentelemetry/trace/propagation/jaeger.h" @@ -18,7 +18,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class TraceContextBuilder : public TextMapPropagatorBuilder @@ -82,26 +82,26 @@ Registry::Registry() std::pair entry; entry = {"tracecontext", &trace_context_builder}; - m_propagator_builders.insert(entry); + propagator_builders_.insert(entry); entry = {"baggage", &baggage_builder}; - m_propagator_builders.insert(entry); + propagator_builders_.insert(entry); entry = {"b3", &b3_builder}; - m_propagator_builders.insert(entry); + propagator_builders_.insert(entry); entry = {"b3multi", &b3_multi_builder}; - m_propagator_builders.insert(entry); + propagator_builders_.insert(entry); entry = {"jaeger", &jaeger_builder}; - m_propagator_builders.insert(entry); + propagator_builders_.insert(entry); } -const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) +const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) const { TextMapPropagatorBuilder *builder = nullptr; - auto search = m_propagator_builders.find(name); - if (search != m_propagator_builders.end()) + auto search = propagator_builders_.find(name); + if (search != propagator_builders_.end()) { builder = search->second; } @@ -112,14 +112,14 @@ void Registry::AddTextMapPropagatorBuilder(const std::string &name, TextMapPropagatorBuilder *builder) { std::pair entry{name, builder}; - m_propagator_builders.insert(entry); + propagator_builders_.insert(entry); } -const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::string &name) +const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::string &name) const { ExtensionSamplerBuilder *builder = nullptr; - auto search = m_sampler_builders.find(name); - if (search != m_sampler_builders.end()) + auto search = sampler_builders_.find(name); + if (search != sampler_builders_.end()) { builder = search->second; } @@ -129,15 +129,15 @@ const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::s void Registry::AddExtensionSamplerBuilder(const std::string &name, ExtensionSamplerBuilder *builder) { std::pair entry{name, builder}; - m_sampler_builders.insert(entry); + sampler_builders_.insert(entry); } const ExtensionSpanExporterBuilder *Registry::GetExtensionSpanExporterBuilder( - const std::string &name) + const std::string &name) const { ExtensionSpanExporterBuilder *builder = nullptr; - auto search = m_span_exporter_builders.find(name); - if (search != m_span_exporter_builders.end()) + auto search = span_exporter_builders_.find(name); + if (search != span_exporter_builders_.end()) { builder = search->second; } @@ -148,15 +148,15 @@ void Registry::AddExtensionSpanExporterBuilder(const std::string &name, ExtensionSpanExporterBuilder *builder) { std::pair entry{name, builder}; - m_span_exporter_builders.insert(entry); + span_exporter_builders_.insert(entry); } const ExtensionSpanProcessorBuilder *Registry::GetExtensionSpanProcessorBuilder( - const std::string &name) + const std::string &name) const { ExtensionSpanProcessorBuilder *builder = nullptr; - auto search = m_span_processor_builders.find(name); - if (search != m_span_processor_builders.end()) + auto search = span_processor_builders_.find(name); + if (search != span_processor_builders_.end()) { builder = search->second; } @@ -167,15 +167,15 @@ void Registry::AddExtensionSpanProcessorBuilder(const std::string &name, ExtensionSpanProcessorBuilder *builder) { std::pair entry{name, builder}; - m_span_processor_builders.insert(entry); + span_processor_builders_.insert(entry); } const ExtensionPushMetricExporterBuilder *Registry::GetExtensionPushMetricExporterBuilder( - const std::string &name) + const std::string &name) const { ExtensionPushMetricExporterBuilder *builder = nullptr; - auto search = m_push_metric_exporter_builders.find(name); - if (search != m_push_metric_exporter_builders.end()) + auto search = push_metric_exporter_builders_.find(name); + if (search != push_metric_exporter_builders_.end()) { builder = search->second; } @@ -186,15 +186,15 @@ void Registry::AddExtensionPushMetricExporterBuilder(const std::string &name, ExtensionPushMetricExporterBuilder *builder) { std::pair entry{name, builder}; - m_push_metric_exporter_builders.insert(entry); + push_metric_exporter_builders_.insert(entry); } const ExtensionPullMetricExporterBuilder *Registry::GetExtensionPullMetricExporterBuilder( - const std::string &name) + const std::string &name) const { ExtensionPullMetricExporterBuilder *builder = nullptr; - auto search = m_pull_metric_exporter_builders.find(name); - if (search != m_pull_metric_exporter_builders.end()) + auto search = pull_metric_exporter_builders_.find(name); + if (search != pull_metric_exporter_builders_.end()) { builder = search->second; } @@ -205,15 +205,15 @@ void Registry::AddExtensionPullMetricExporterBuilder(const std::string &name, ExtensionPullMetricExporterBuilder *builder) { std::pair entry{name, builder}; - m_pull_metric_exporter_builders.insert(entry); + pull_metric_exporter_builders_.insert(entry); } const ExtensionLogRecordExporterBuilder *Registry::GetExtensionLogRecordExporterBuilder( - const std::string &name) + const std::string &name) const { ExtensionLogRecordExporterBuilder *builder = nullptr; - auto search = m_log_record_exporter_builders.find(name); - if (search != m_log_record_exporter_builders.end()) + auto search = log_record_exporter_builders_.find(name); + if (search != log_record_exporter_builders_.end()) { builder = search->second; } @@ -224,15 +224,15 @@ void Registry::AddExtensionLogRecordExporterBuilder(const std::string &name, ExtensionLogRecordExporterBuilder *builder) { std::pair entry{name, builder}; - m_log_record_exporter_builders.insert(entry); + log_record_exporter_builders_.insert(entry); } const ExtensionLogRecordProcessorBuilder *Registry::GetExtensionLogRecordProcessorBuilder( - const std::string &name) + const std::string &name) const { ExtensionLogRecordProcessorBuilder *builder = nullptr; - auto search = m_log_record_processor_builders.find(name); - if (search != m_log_record_processor_builders.end()) + auto search = log_record_processor_builders_.find(name); + if (search != log_record_processor_builders_.end()) { builder = search->second; } @@ -243,9 +243,9 @@ void Registry::AddExtensionLogRecordProcessorBuilder(const std::string &name, ExtensionLogRecordProcessorBuilder *builder) { std::pair entry{name, builder}; - m_log_record_processor_builders.insert(entry); + log_record_processor_builders_.insert(entry); } -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc similarity index 96% rename from sdk/src/init/sdk_builder.cc rename to sdk/src/configuration/sdk_builder.cc index 9f1a222c3f..3f7e8a6e08 100644 --- a/sdk/src/init/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -27,18 +27,29 @@ #include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/configured_sdk.h" +#include "opentelemetry/sdk/configuration/console_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_builder.h" #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/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" +#include "opentelemetry/sdk/configuration/extension_log_record_processor_builder.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_sampler_builder.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/extension_span_processor_builder.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/include_exclude_configuration.h" #include "opentelemetry/sdk/configuration/instrument_type.h" @@ -53,17 +64,27 @@ #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/propagator_configuration.h" #include "opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h" @@ -71,9 +92,11 @@ #include "opentelemetry/sdk/configuration/pull_metric_reader_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/configuration/resource_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration.h" #include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/sdk_builder.h" #include "opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/simple_span_processor_configuration.h" #include "opentelemetry/sdk/configuration/span_exporter_configuration.h" @@ -82,38 +105,15 @@ #include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h" #include "opentelemetry/sdk/configuration/string_array_attribute_value_configuration.h" #include "opentelemetry/sdk/configuration/string_attribute_value_configuration.h" +#include "opentelemetry/sdk/configuration/text_map_propagator_builder.h" #include "opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h" #include "opentelemetry/sdk/configuration/tracer_provider_configuration.h" +#include "opentelemetry/sdk/configuration/unsupported_exception.h" #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/configuration/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" -#include "opentelemetry/sdk/init/configured_sdk.h" -#include "opentelemetry/sdk/init/console_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/console_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/console_span_exporter_builder.h" -#include "opentelemetry/sdk/init/extension_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/extension_log_record_processor_builder.h" -#include "opentelemetry/sdk/init/extension_pull_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/extension_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/extension_sampler_builder.h" -#include "opentelemetry/sdk/init/extension_span_exporter_builder.h" -#include "opentelemetry/sdk/init/extension_span_processor_builder.h" -#include "opentelemetry/sdk/init/otlp_file_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_file_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_file_span_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_grpc_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_grpc_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_grpc_span_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_http_log_record_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_http_push_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/otlp_http_span_exporter_builder.h" -#include "opentelemetry/sdk/init/prometheus_pull_metric_exporter_builder.h" -#include "opentelemetry/sdk/init/registry.h" -#include "opentelemetry/sdk/init/sdk_builder.h" -#include "opentelemetry/sdk/init/text_map_propagator_builder.h" -#include "opentelemetry/sdk/init/unsupported_exception.h" -#include "opentelemetry/sdk/init/zipkin_span_exporter_builder.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" @@ -155,7 +155,7 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace init +namespace configuration { class AttributeValueBuilder @@ -1694,6 +1694,6 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( return sdk; } -} // namespace init +} // namespace configuration } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/init/CMakeLists.txt b/sdk/src/init/CMakeLists.txt deleted file mode 100644 index efeac9139f..0000000000 --- a/sdk/src/init/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -add_library(opentelemetry_init configured_sdk.cc sdk_builder.cc registry.cc) - -set_target_properties(opentelemetry_init PROPERTIES EXPORT_NAME init) -set_target_version(opentelemetry_init) - -target_include_directories( - opentelemetry_init - PUBLIC "$") - -target_link_libraries(opentelemetry_init PUBLIC opentelemetry_configuration - opentelemetry_trace) - -if(OPENTELEMETRY_INSTALL) - install( - TARGETS opentelemetry_init - EXPORT "${PROJECT_NAME}-target" - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - - opentelemetry_add_pkgconfig( - init "OpenTelemetry SDK - Init" - "Components for exporting traces in the OpenTelemetry SDK." - "opentelemetry_init") -endif() From ff04475f6d20c14953baaab6abb43d6bbf33dace Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 15 Jul 2025 23:27:24 +0200 Subject: [PATCH 129/166] Code review comments, registry. --- .github/workflows/clang-tidy.yaml | 4 +- .../custom_log_record_exporter_builder.cc | 6 +- .../custom_log_record_processor_builder.cc | 6 +- .../custom_pull_metric_exporter_builder.cc | 6 +- .../custom_push_metric_exporter_builder.cc | 6 +- examples/yaml/custom_sampler_builder.cc | 5 +- examples/yaml/custom_span_exporter_builder.cc | 5 +- .../yaml/custom_span_processor_builder.cc | 5 +- .../ostream/src/console_log_record_builder.cc | 5 +- .../src/console_push_metric_builder.cc | 5 +- exporters/ostream/src/console_span_builder.cc | 5 +- .../otlp/src/otlp_file_log_record_builder.cc | 5 +- .../otlp/src/otlp_file_push_metric_builder.cc | 5 +- exporters/otlp/src/otlp_file_span_builder.cc | 5 +- .../otlp/src/otlp_grpc_log_record_builder.cc | 5 +- .../otlp/src/otlp_grpc_push_metric_builder.cc | 5 +- exporters/otlp/src/otlp_grpc_span_builder.cc | 5 +- .../otlp/src/otlp_http_log_record_builder.cc | 5 +- .../otlp/src/otlp_http_push_metric_builder.cc | 5 +- exporters/otlp/src/otlp_http_span_builder.cc | 5 +- .../prometheus/src/prometheus_pull_builder.cc | 5 +- exporters/zipkin/src/zipkin_builder.cc | 3 +- .../sdk/configuration/registry.h | 247 ++++++++++-------- sdk/src/configuration/registry.cc | 102 +++----- sdk/src/configuration/sdk_builder.cc | 2 +- 25 files changed, 235 insertions(+), 227 deletions(-) diff --git a/.github/workflows/clang-tidy.yaml b/.github/workflows/clang-tidy.yaml index 9f5e151745..4d55730699 100644 --- a/.github/workflows/clang-tidy.yaml +++ b/.github/workflows/clang-tidy.yaml @@ -17,9 +17,9 @@ jobs: matrix: include: - cmake_options: all-options-abiv1-preview - warning_limit: 61 + warning_limit: 66 - cmake_options: all-options-abiv2-preview - warning_limit: 61 + warning_limit: 66 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2 diff --git a/examples/yaml/custom_log_record_exporter_builder.cc b/examples/yaml/custom_log_record_exporter_builder.cc index 913d500416..93339b243d 100644 --- a/examples/yaml/custom_log_record_exporter_builder.cc +++ b/examples/yaml/custom_log_record_exporter_builder.cc @@ -22,9 +22,9 @@ std::unique_ptr CustomLogRecordExpo return sdk; } -static CustomLogRecordExporterBuilder singleton; - void CustomLogRecordExporterBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->AddExtensionLogRecordExporterBuilder("my_custom_log_record_exporter", &singleton); + auto builder = std::make_unique(); + registry->AddExtensionLogRecordExporterBuilder("my_custom_log_record_exporter", + std::move(builder)); } diff --git a/examples/yaml/custom_log_record_processor_builder.cc b/examples/yaml/custom_log_record_processor_builder.cc index 09ae0d7230..709726c9a2 100644 --- a/examples/yaml/custom_log_record_processor_builder.cc +++ b/examples/yaml/custom_log_record_processor_builder.cc @@ -23,10 +23,10 @@ CustomLogRecordProcessorBuilder::Build( return sdk; } -static CustomLogRecordProcessorBuilder singleton; - void CustomLogRecordProcessorBuilder::Register( opentelemetry::sdk::configuration::Registry *registry) { - registry->AddExtensionLogRecordProcessorBuilder("my_custom_log_record_processor", &singleton); + auto builder = std::make_unique(); + registry->AddExtensionLogRecordProcessorBuilder("my_custom_log_record_processor", + std::move(builder)); } diff --git a/examples/yaml/custom_pull_metric_exporter_builder.cc b/examples/yaml/custom_pull_metric_exporter_builder.cc index f4d0e31a67..b1106c5502 100644 --- a/examples/yaml/custom_pull_metric_exporter_builder.cc +++ b/examples/yaml/custom_pull_metric_exporter_builder.cc @@ -22,10 +22,10 @@ std::unique_ptr CustomPullMetricExpor return sdk; } -static CustomPullMetricExporterBuilder singleton; - void CustomPullMetricExporterBuilder::Register( opentelemetry::sdk::configuration::Registry *registry) { - registry->AddExtensionPullMetricExporterBuilder("my_custom_pull_metric_exporter", &singleton); + auto builder = std::make_unique(); + registry->AddExtensionPullMetricExporterBuilder("my_custom_pull_metric_exporter", + std::move(builder)); } diff --git a/examples/yaml/custom_push_metric_exporter_builder.cc b/examples/yaml/custom_push_metric_exporter_builder.cc index 6222e31c9a..5af3e5ee06 100644 --- a/examples/yaml/custom_push_metric_exporter_builder.cc +++ b/examples/yaml/custom_push_metric_exporter_builder.cc @@ -23,10 +23,10 @@ CustomPushMetricExporterBuilder::Build( return sdk; } -static CustomPushMetricExporterBuilder singleton; - void CustomPushMetricExporterBuilder::Register( opentelemetry::sdk::configuration::Registry *registry) { - registry->AddExtensionPushMetricExporterBuilder("my_custom_push_metric_exporter", &singleton); + auto builder = std::make_unique(); + registry->AddExtensionPushMetricExporterBuilder("my_custom_push_metric_exporter", + std::move(builder)); } diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc index 0633aed823..967fd9a211 100644 --- a/examples/yaml/custom_sampler_builder.cc +++ b/examples/yaml/custom_sampler_builder.cc @@ -20,9 +20,8 @@ std::unique_ptr CustomSamplerBuilder::Build( return sdk; } -static CustomSamplerBuilder singleton; - void CustomSamplerBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->AddExtensionSamplerBuilder("my_custom_sampler", &singleton); + auto builder = std::make_unique(); + registry->AddExtensionSamplerBuilder("my_custom_sampler", std::move(builder)); } diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc index 420ab490aa..413cd72afd 100644 --- a/examples/yaml/custom_span_exporter_builder.cc +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -22,9 +22,8 @@ std::unique_ptr CustomSpanExporterBuild return sdk; } -static CustomSpanExporterBuilder singleton; - void CustomSpanExporterBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->AddExtensionSpanExporterBuilder("my_custom_span_exporter", &singleton); + auto builder = std::make_unique(); + registry->AddExtensionSpanExporterBuilder("my_custom_span_exporter", std::move(builder)); } diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc index b19a8172aa..b5ed94a3ca 100644 --- a/examples/yaml/custom_span_processor_builder.cc +++ b/examples/yaml/custom_span_processor_builder.cc @@ -22,9 +22,8 @@ std::unique_ptr CustomSpanProcessorBui return sdk; } -static CustomSpanProcessorBuilder singleton; - void CustomSpanProcessorBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->AddExtensionSpanProcessorBuilder("my_custom_span_processor", &singleton); + auto builder = std::make_unique(); + registry->AddExtensionSpanProcessorBuilder("my_custom_span_processor", std::move(builder)); } diff --git a/exporters/ostream/src/console_log_record_builder.cc b/exporters/ostream/src/console_log_record_builder.cc index 858e42993c..5dd08d6142 100644 --- a/exporters/ostream/src/console_log_record_builder.cc +++ b/exporters/ostream/src/console_log_record_builder.cc @@ -11,11 +11,10 @@ namespace exporter namespace logs { -static ConsoleLogRecordBuilder singleton; - void ConsoleLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetConsoleLogRecordBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetConsoleLogRecordBuilder(std::move(builder)); } std::unique_ptr ConsoleLogRecordBuilder::Build( diff --git a/exporters/ostream/src/console_push_metric_builder.cc b/exporters/ostream/src/console_push_metric_builder.cc index d67f7a55d8..550c7a3fd3 100644 --- a/exporters/ostream/src/console_push_metric_builder.cc +++ b/exporters/ostream/src/console_push_metric_builder.cc @@ -11,11 +11,10 @@ namespace exporter namespace metrics { -static ConsolePushMetricBuilder singleton; - void ConsolePushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetConsolePushMetricExporterBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetConsolePushMetricExporterBuilder(std::move(builder)); } std::unique_ptr ConsolePushMetricBuilder::Build( diff --git a/exporters/ostream/src/console_span_builder.cc b/exporters/ostream/src/console_span_builder.cc index 78588a1e52..48853494a9 100644 --- a/exporters/ostream/src/console_span_builder.cc +++ b/exporters/ostream/src/console_span_builder.cc @@ -11,11 +11,10 @@ namespace exporter namespace trace { -static ConsoleSpanBuilder singleton; - void ConsoleSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetConsoleSpanBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetConsoleSpanBuilder(std::move(builder)); } std::unique_ptr ConsoleSpanBuilder::Build( diff --git a/exporters/otlp/src/otlp_file_log_record_builder.cc b/exporters/otlp/src/otlp_file_log_record_builder.cc index e0e7da3382..0f0e6915cf 100644 --- a/exporters/otlp/src/otlp_file_log_record_builder.cc +++ b/exporters/otlp/src/otlp_file_log_record_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpFileLogRecordBuilder singleton; - void OtlpFileLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpFileLogRecordBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpFileLogRecordBuilder(std::move(builder)); } std::unique_ptr OtlpFileLogRecordBuilder::Build( diff --git a/exporters/otlp/src/otlp_file_push_metric_builder.cc b/exporters/otlp/src/otlp_file_push_metric_builder.cc index 2b3c1d094b..2cd9a1dbda 100644 --- a/exporters/otlp/src/otlp_file_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_file_push_metric_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpFilePushMetricBuilder singleton; - void OtlpFilePushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpFilePushMetricExporterBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpFilePushMetricExporterBuilder(std::move(builder)); } std::unique_ptr OtlpFilePushMetricBuilder::Build( diff --git a/exporters/otlp/src/otlp_file_span_builder.cc b/exporters/otlp/src/otlp_file_span_builder.cc index 4040b5d71e..9b737459bc 100644 --- a/exporters/otlp/src/otlp_file_span_builder.cc +++ b/exporters/otlp/src/otlp_file_span_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpFileSpanBuilder singleton; - void OtlpFileSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpFileSpanBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpFileSpanBuilder(std::move(builder)); } std::unique_ptr OtlpFileSpanBuilder::Build( diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc index f2c96fdd88..6f4abf5d3d 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_builder.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpGrpcLogRecordBuilder singleton; - void OtlpGrpcLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpGrpcLogRecordBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpGrpcLogRecordBuilder(std::move(builder)); } std::unique_ptr OtlpGrpcLogRecordBuilder::Build( diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc index f5e6228376..3a62f3fa57 100644 --- a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpGrpcPushMetricBuilder singleton; - void OtlpGrpcPushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpGrpcPushMetricExporterBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpGrpcPushMetricExporterBuilder(std::move(builder)); } std::unique_ptr OtlpGrpcPushMetricBuilder::Build( diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc index e8684f0bd0..9f6fb2cb80 100644 --- a/exporters/otlp/src/otlp_grpc_span_builder.cc +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpGrpcSpanBuilder singleton; - void OtlpGrpcSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpGrpcSpanBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpGrpcSpanBuilder(std::move(builder)); } std::unique_ptr OtlpGrpcSpanBuilder::Build( diff --git a/exporters/otlp/src/otlp_http_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc index d69efb6b13..9aa6cec424 100644 --- a/exporters/otlp/src/otlp_http_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpHttpLogRecordBuilder singleton; - void OtlpHttpLogRecordBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpHttpLogRecordBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpHttpLogRecordBuilder(std::move(builder)); } std::unique_ptr OtlpHttpLogRecordBuilder::Build( diff --git a/exporters/otlp/src/otlp_http_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc index 8caceaa749..0d3340c82d 100644 --- a/exporters/otlp/src/otlp_http_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -12,11 +12,10 @@ namespace exporter namespace otlp { -static OtlpHttpPushMetricBuilder singleton; - void OtlpHttpPushMetricBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpHttpPushMetricExporterBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpHttpPushMetricExporterBuilder(std::move(builder)); } std::unique_ptr OtlpHttpPushMetricBuilder::Build( diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index 9034b54ca5..958b054e10 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -19,11 +19,10 @@ namespace exporter namespace otlp { -static OtlpHttpSpanBuilder singleton; - void OtlpHttpSpanBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetOtlpHttpSpanBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetOtlpHttpSpanBuilder(std::move(builder)); } std::unique_ptr OtlpHttpSpanBuilder::Build( diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc index 44a80c49dd..a101003c6c 100644 --- a/exporters/prometheus/src/prometheus_pull_builder.cc +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -17,11 +17,10 @@ namespace exporter namespace metrics { -static PrometheusPullBuilder singleton; - void PrometheusPullBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetPrometheusPullMetricExporterBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetPrometheusPullMetricExporterBuilder(std::move(builder)); } std::unique_ptr PrometheusPullBuilder::Build( diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 969fedfbd2..2a18e69c58 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -22,7 +22,8 @@ static ZipkinBuilder singleton; void ZipkinBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { - registry->SetZipkinSpanBuilder(&singleton); + auto builder = std::make_unique(); + registry->SetZipkinSpanBuilder(std::move(builder)); } std::unique_ptr ZipkinBuilder::Build( diff --git a/sdk/include/opentelemetry/sdk/configuration/registry.h b/sdk/include/opentelemetry/sdk/configuration/registry.h index 2d7494d814..7f9b01f73c 100644 --- a/sdk/include/opentelemetry/sdk/configuration/registry.h +++ b/sdk/include/opentelemetry/sdk/configuration/registry.h @@ -6,6 +6,28 @@ #include #include +#include "opentelemetry/sdk/configuration/console_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_log_record_processor_builder.h" +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_sampler_builder.h" +#include "opentelemetry/sdk/configuration/extension_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_span_processor_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/text_map_propagator_builder.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -13,30 +35,6 @@ namespace sdk { namespace configuration { -class OtlpHttpSpanExporterBuilder; -class OtlpGrpcSpanExporterBuilder; -class OtlpFileSpanExporterBuilder; -class ConsoleSpanExporterBuilder; -class ZipkinSpanExporterBuilder; -class TextMapPropagatorBuilder; -class ExtensionSamplerBuilder; -class ExtensionSpanExporterBuilder; -class ExtensionSpanProcessorBuilder; - -class OtlpHttpPushMetricExporterBuilder; -class OtlpGrpcPushMetricExporterBuilder; -class OtlpFilePushMetricExporterBuilder; -class ConsolePushMetricExporterBuilder; -class ExtensionPushMetricExporterBuilder; -class PrometheusPullMetricExporterBuilder; -class ExtensionPullMetricExporterBuilder; - -class OtlpHttpLogRecordExporterBuilder; -class OtlpGrpcLogRecordExporterBuilder; -class OtlpFileLogRecordExporterBuilder; -class ConsoleLogRecordExporterBuilder; -class ExtensionLogRecordExporterBuilder; -class ExtensionLogRecordProcessorBuilder; class Registry { @@ -53,188 +51,231 @@ class Registry const OtlpHttpSpanExporterBuilder *GetOtlpHttpSpanBuilder() const { - return otlp_http_span_builder_; + return otlp_http_span_builder_.get(); } - void SetOtlpHttpSpanBuilder(const OtlpHttpSpanExporterBuilder *builder) + + void SetOtlpHttpSpanBuilder(std::unique_ptr &&builder) { - otlp_http_span_builder_ = builder; + otlp_http_span_builder_ = std::move(builder); } const OtlpGrpcSpanExporterBuilder *GetOtlpGrpcSpanBuilder() const { - return otlp_grpc_span_builder_; + return otlp_grpc_span_builder_.get(); } - void SetOtlpGrpcSpanBuilder(const OtlpGrpcSpanExporterBuilder *builder) + + void SetOtlpGrpcSpanBuilder(std::unique_ptr &&builder) { - otlp_grpc_span_builder_ = builder; + otlp_grpc_span_builder_ = std::move(builder); } const OtlpFileSpanExporterBuilder *GetOtlpFileSpanBuilder() const { - return otlp_file_span_builder_; + return otlp_file_span_builder_.get(); } - void SetOtlpFileSpanBuilder(const OtlpFileSpanExporterBuilder *builder) + + void SetOtlpFileSpanBuilder(std::unique_ptr &&builder) { - otlp_file_span_builder_ = builder; + otlp_file_span_builder_ = std::move(builder); } - const ConsoleSpanExporterBuilder *GetConsoleSpanBuilder() const { return console_span_builder_; } - void SetConsoleSpanBuilder(const ConsoleSpanExporterBuilder *builder) + const ConsoleSpanExporterBuilder *GetConsoleSpanBuilder() const { - console_span_builder_ = builder; + return console_span_builder_.get(); } - const ZipkinSpanExporterBuilder *GetZipkinSpanBuilder() const { return zipkin_span_builder_; } - void SetZipkinSpanBuilder(const ZipkinSpanExporterBuilder *builder) + void SetConsoleSpanBuilder(std::unique_ptr &&builder) { - zipkin_span_builder_ = builder; + console_span_builder_ = std::move(builder); + } + + const ZipkinSpanExporterBuilder *GetZipkinSpanBuilder() const + { + return zipkin_span_builder_.get(); + } + + void SetZipkinSpanBuilder(std::unique_ptr &&builder) + { + zipkin_span_builder_ = std::move(builder); } const OtlpHttpPushMetricExporterBuilder *GetOtlpHttpPushMetricExporterBuilder() const { - return otlp_http_push_metric_builder_; + return otlp_http_push_metric_builder_.get(); } - void SetOtlpHttpPushMetricExporterBuilder(const OtlpHttpPushMetricExporterBuilder *builder) + + void SetOtlpHttpPushMetricExporterBuilder( + std::unique_ptr &&builder) { - otlp_http_push_metric_builder_ = builder; + otlp_http_push_metric_builder_ = std::move(builder); } const OtlpGrpcPushMetricExporterBuilder *GetOtlpGrpcPushMetricExporterBuilder() const { - return otlp_grpc_push_metric_builder_; + return otlp_grpc_push_metric_builder_.get(); } - void SetOtlpGrpcPushMetricExporterBuilder(const OtlpGrpcPushMetricExporterBuilder *builder) + + void SetOtlpGrpcPushMetricExporterBuilder( + std::unique_ptr &&builder) { - otlp_grpc_push_metric_builder_ = builder; + otlp_grpc_push_metric_builder_ = std::move(builder); } const OtlpFilePushMetricExporterBuilder *GetOtlpFilePushMetricExporterBuilder() const { - return otlp_file_push_metric_builder_; + return otlp_file_push_metric_builder_.get(); } - void SetOtlpFilePushMetricExporterBuilder(const OtlpFilePushMetricExporterBuilder *builder) + + void SetOtlpFilePushMetricExporterBuilder( + std::unique_ptr &&builder) { - otlp_file_push_metric_builder_ = builder; + otlp_file_push_metric_builder_ = std::move(builder); } const ConsolePushMetricExporterBuilder *GetConsolePushMetricExporterBuilder() const { - return console_metric_builder_; + return console_metric_builder_.get(); } - void SetConsolePushMetricExporterBuilder(const ConsolePushMetricExporterBuilder *builder) + + void SetConsolePushMetricExporterBuilder( + std::unique_ptr &&builder) { - console_metric_builder_ = builder; + console_metric_builder_ = std::move(builder); } const PrometheusPullMetricExporterBuilder *GetPrometheusPullMetricExporterBuilder() const { - return prometheus_metric_builder_; + return prometheus_metric_builder_.get(); } - void SetPrometheusPullMetricExporterBuilder(const PrometheusPullMetricExporterBuilder *builder) + + void SetPrometheusPullMetricExporterBuilder( + std::unique_ptr &&builder) { - prometheus_metric_builder_ = builder; + prometheus_metric_builder_ = std::move(builder); } const OtlpHttpLogRecordExporterBuilder *GetOtlpHttpLogRecordBuilder() const { - return otlp_http_log_record_builder_; + return otlp_http_log_record_builder_.get(); } - void SetOtlpHttpLogRecordBuilder(const OtlpHttpLogRecordExporterBuilder *builder) + + void SetOtlpHttpLogRecordBuilder(std::unique_ptr &&builder) { - otlp_http_log_record_builder_ = builder; + otlp_http_log_record_builder_ = std::move(builder); } const OtlpGrpcLogRecordExporterBuilder *GetOtlpGrpcLogRecordBuilder() const { - return otlp_grpc_log_record_builder_; + return otlp_grpc_log_record_builder_.get(); } - void SetOtlpGrpcLogRecordBuilder(const OtlpGrpcLogRecordExporterBuilder *builder) + + void SetOtlpGrpcLogRecordBuilder(std::unique_ptr &&builder) { - otlp_grpc_log_record_builder_ = builder; + otlp_grpc_log_record_builder_ = std::move(builder); } const OtlpFileLogRecordExporterBuilder *GetOtlpFileLogRecordBuilder() const { - return otlp_file_log_record_builder_; + return otlp_file_log_record_builder_.get(); } - void SetOtlpFileLogRecordBuilder(const OtlpFileLogRecordExporterBuilder *builder) + + void SetOtlpFileLogRecordBuilder(std::unique_ptr &&builder) { - otlp_file_log_record_builder_ = builder; + otlp_file_log_record_builder_ = std::move(builder); } const ConsoleLogRecordExporterBuilder *GetConsoleLogRecordBuilder() const { - return console_log_record_builder_; + return console_log_record_builder_.get(); } - void SetConsoleLogRecordBuilder(const ConsoleLogRecordExporterBuilder *builder) + + void SetConsoleLogRecordBuilder(std::unique_ptr &&builder) { - console_log_record_builder_ = builder; + console_log_record_builder_ = std::move(builder); } /* Extension points */ const TextMapPropagatorBuilder *GetTextMapPropagatorBuilder(const std::string &name) const; - void AddTextMapPropagatorBuilder(const std::string &name, TextMapPropagatorBuilder *builder); + + void AddTextMapPropagatorBuilder(const std::string &name, + std::unique_ptr &&builder); const ExtensionSamplerBuilder *GetExtensionSamplerBuilder(const std::string &name) const; - void AddExtensionSamplerBuilder(const std::string &name, ExtensionSamplerBuilder *builder); + + void AddExtensionSamplerBuilder(const std::string &name, + std::unique_ptr &&builder); const ExtensionSpanExporterBuilder *GetExtensionSpanExporterBuilder( const std::string &name) const; + void AddExtensionSpanExporterBuilder(const std::string &name, - ExtensionSpanExporterBuilder *builder); + std::unique_ptr &&builder); const ExtensionSpanProcessorBuilder *GetExtensionSpanProcessorBuilder( const std::string &name) const; + void AddExtensionSpanProcessorBuilder(const std::string &name, - ExtensionSpanProcessorBuilder *builder); + std::unique_ptr &&builder); const ExtensionPushMetricExporterBuilder *GetExtensionPushMetricExporterBuilder( const std::string &name) const; - void AddExtensionPushMetricExporterBuilder(const std::string &name, - ExtensionPushMetricExporterBuilder *builder); + + void AddExtensionPushMetricExporterBuilder( + const std::string &name, + std::unique_ptr &&builder); const ExtensionPullMetricExporterBuilder *GetExtensionPullMetricExporterBuilder( const std::string &name) const; - void AddExtensionPullMetricExporterBuilder(const std::string &name, - ExtensionPullMetricExporterBuilder *builder); + + void AddExtensionPullMetricExporterBuilder( + const std::string &name, + std::unique_ptr &&builder); const ExtensionLogRecordExporterBuilder *GetExtensionLogRecordExporterBuilder( const std::string &name) const; - void AddExtensionLogRecordExporterBuilder(const std::string &name, - ExtensionLogRecordExporterBuilder *builder); + + void AddExtensionLogRecordExporterBuilder( + const std::string &name, + std::unique_ptr &&builder); const ExtensionLogRecordProcessorBuilder *GetExtensionLogRecordProcessorBuilder( const std::string &name) const; - void AddExtensionLogRecordProcessorBuilder(const std::string &name, - ExtensionLogRecordProcessorBuilder *builder); + + void AddExtensionLogRecordProcessorBuilder( + const std::string &name, + std::unique_ptr &&builder); private: - const OtlpHttpSpanExporterBuilder *otlp_http_span_builder_{nullptr}; - const OtlpGrpcSpanExporterBuilder *otlp_grpc_span_builder_{nullptr}; - const OtlpFileSpanExporterBuilder *otlp_file_span_builder_{nullptr}; - const ConsoleSpanExporterBuilder *console_span_builder_{nullptr}; - const ZipkinSpanExporterBuilder *zipkin_span_builder_{nullptr}; - - const OtlpHttpPushMetricExporterBuilder *otlp_http_push_metric_builder_{nullptr}; - const OtlpGrpcPushMetricExporterBuilder *otlp_grpc_push_metric_builder_{nullptr}; - const OtlpFilePushMetricExporterBuilder *otlp_file_push_metric_builder_{nullptr}; - const ConsolePushMetricExporterBuilder *console_metric_builder_{nullptr}; - const PrometheusPullMetricExporterBuilder *prometheus_metric_builder_{nullptr}; - - const OtlpHttpLogRecordExporterBuilder *otlp_http_log_record_builder_{nullptr}; - const OtlpGrpcLogRecordExporterBuilder *otlp_grpc_log_record_builder_{nullptr}; - const OtlpFileLogRecordExporterBuilder *otlp_file_log_record_builder_{nullptr}; - const ConsoleLogRecordExporterBuilder *console_log_record_builder_{nullptr}; - - std::map propagator_builders_; - std::map sampler_builders_; - std::map span_exporter_builders_; - std::map span_processor_builders_; - std::map push_metric_exporter_builders_; - std::map pull_metric_exporter_builders_; - std::map log_record_exporter_builders_; - std::map log_record_processor_builders_; + std::unique_ptr otlp_http_span_builder_; + std::unique_ptr otlp_grpc_span_builder_; + std::unique_ptr otlp_file_span_builder_; + std::unique_ptr console_span_builder_; + std::unique_ptr zipkin_span_builder_; + + std::unique_ptr otlp_http_push_metric_builder_; + std::unique_ptr otlp_grpc_push_metric_builder_; + std::unique_ptr otlp_file_push_metric_builder_; + std::unique_ptr console_metric_builder_; + std::unique_ptr prometheus_metric_builder_; + + std::unique_ptr otlp_http_log_record_builder_; + std::unique_ptr otlp_grpc_log_record_builder_; + std::unique_ptr otlp_file_log_record_builder_; + std::unique_ptr console_log_record_builder_; + + std::map> propagator_builders_; + std::map> sampler_builders_; + std::map> span_exporter_builders_; + std::map> span_processor_builders_; + std::map> + push_metric_exporter_builders_; + std::map> + pull_metric_exporter_builders_; + std::map> + log_record_exporter_builders_; + std::map> + log_record_processor_builders_; }; } // namespace configuration diff --git a/sdk/src/configuration/registry.cc b/sdk/src/configuration/registry.cc index 37e630a4ae..06518422b4 100644 --- a/sdk/src/configuration/registry.cc +++ b/sdk/src/configuration/registry.cc @@ -71,30 +71,13 @@ class JaegerBuilder : public TextMapPropagatorBuilder } }; -static TraceContextBuilder trace_context_builder; -static BaggageBuilder baggage_builder; -static B3Builder b3_builder; -static B3MultiBuilder b3_multi_builder; -static JaegerBuilder jaeger_builder; - Registry::Registry() { - std::pair entry; - - entry = {"tracecontext", &trace_context_builder}; - propagator_builders_.insert(entry); - - entry = {"baggage", &baggage_builder}; - propagator_builders_.insert(entry); - - entry = {"b3", &b3_builder}; - propagator_builders_.insert(entry); - - entry = {"b3multi", &b3_multi_builder}; - propagator_builders_.insert(entry); - - entry = {"jaeger", &jaeger_builder}; - propagator_builders_.insert(entry); + AddTextMapPropagatorBuilder("tracecontext", std::make_unique()); + AddTextMapPropagatorBuilder("baggage", std::make_unique()); + AddTextMapPropagatorBuilder("b3", std::make_unique()); + AddTextMapPropagatorBuilder("b3multi", std::make_unique()); + AddTextMapPropagatorBuilder("jaeger", std::make_unique()); } const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) const @@ -103,16 +86,15 @@ const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std: auto search = propagator_builders_.find(name); if (search != propagator_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } void Registry::AddTextMapPropagatorBuilder(const std::string &name, - TextMapPropagatorBuilder *builder) + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - propagator_builders_.insert(entry); + propagator_builders_.insert_or_assign(name, std::move(builder)); } const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::string &name) const @@ -121,15 +103,15 @@ const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::s auto search = sampler_builders_.find(name); if (search != sampler_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } -void Registry::AddExtensionSamplerBuilder(const std::string &name, ExtensionSamplerBuilder *builder) +void Registry::AddExtensionSamplerBuilder(const std::string &name, + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - sampler_builders_.insert(entry); + sampler_builders_.insert_or_assign(name, std::move(builder)); } const ExtensionSpanExporterBuilder *Registry::GetExtensionSpanExporterBuilder( @@ -139,16 +121,16 @@ const ExtensionSpanExporterBuilder *Registry::GetExtensionSpanExporterBuilder( auto search = span_exporter_builders_.find(name); if (search != span_exporter_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } -void Registry::AddExtensionSpanExporterBuilder(const std::string &name, - ExtensionSpanExporterBuilder *builder) +void Registry::AddExtensionSpanExporterBuilder( + const std::string &name, + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - span_exporter_builders_.insert(entry); + span_exporter_builders_.insert_or_assign(name, std::move(builder)); } const ExtensionSpanProcessorBuilder *Registry::GetExtensionSpanProcessorBuilder( @@ -158,16 +140,16 @@ const ExtensionSpanProcessorBuilder *Registry::GetExtensionSpanProcessorBuilder( auto search = span_processor_builders_.find(name); if (search != span_processor_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } -void Registry::AddExtensionSpanProcessorBuilder(const std::string &name, - ExtensionSpanProcessorBuilder *builder) +void Registry::AddExtensionSpanProcessorBuilder( + const std::string &name, + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - span_processor_builders_.insert(entry); + span_processor_builders_.insert_or_assign(name, std::move(builder)); } const ExtensionPushMetricExporterBuilder *Registry::GetExtensionPushMetricExporterBuilder( @@ -177,16 +159,16 @@ const ExtensionPushMetricExporterBuilder *Registry::GetExtensionPushMetricExport auto search = push_metric_exporter_builders_.find(name); if (search != push_metric_exporter_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } -void Registry::AddExtensionPushMetricExporterBuilder(const std::string &name, - ExtensionPushMetricExporterBuilder *builder) +void Registry::AddExtensionPushMetricExporterBuilder( + const std::string &name, + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - push_metric_exporter_builders_.insert(entry); + push_metric_exporter_builders_.insert_or_assign(name, std::move(builder)); } const ExtensionPullMetricExporterBuilder *Registry::GetExtensionPullMetricExporterBuilder( @@ -196,16 +178,16 @@ const ExtensionPullMetricExporterBuilder *Registry::GetExtensionPullMetricExport auto search = pull_metric_exporter_builders_.find(name); if (search != pull_metric_exporter_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } -void Registry::AddExtensionPullMetricExporterBuilder(const std::string &name, - ExtensionPullMetricExporterBuilder *builder) +void Registry::AddExtensionPullMetricExporterBuilder( + const std::string &name, + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - pull_metric_exporter_builders_.insert(entry); + pull_metric_exporter_builders_.insert_or_assign(name, std::move(builder)); } const ExtensionLogRecordExporterBuilder *Registry::GetExtensionLogRecordExporterBuilder( @@ -215,16 +197,16 @@ const ExtensionLogRecordExporterBuilder *Registry::GetExtensionLogRecordExporter auto search = log_record_exporter_builders_.find(name); if (search != log_record_exporter_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } -void Registry::AddExtensionLogRecordExporterBuilder(const std::string &name, - ExtensionLogRecordExporterBuilder *builder) +void Registry::AddExtensionLogRecordExporterBuilder( + const std::string &name, + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - log_record_exporter_builders_.insert(entry); + log_record_exporter_builders_.insert_or_assign(name, std::move(builder)); } const ExtensionLogRecordProcessorBuilder *Registry::GetExtensionLogRecordProcessorBuilder( @@ -234,16 +216,16 @@ const ExtensionLogRecordProcessorBuilder *Registry::GetExtensionLogRecordProcess auto search = log_record_processor_builders_.find(name); if (search != log_record_processor_builders_.end()) { - builder = search->second; + builder = search->second.get(); } return builder; } -void Registry::AddExtensionLogRecordProcessorBuilder(const std::string &name, - ExtensionLogRecordProcessorBuilder *builder) +void Registry::AddExtensionLogRecordProcessorBuilder( + const std::string &name, + std::unique_ptr &&builder) { - std::pair entry{name, builder}; - log_record_processor_builders_.insert(entry); + log_record_processor_builders_.insert_or_assign(name, std::move(builder)); } } // namespace configuration diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 3f7e8a6e08..617279c2bf 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1219,7 +1219,7 @@ SdkBuilder::CreateBase2ExponentialBucketHistogramAggregation( std::make_unique(); sdk->max_buckets_ = model->max_size; - sdk->max_scale_ = model->max_scale; + sdk->max_scale_ = static_cast(model->max_scale); sdk->record_min_max_ = model->record_min_max; return sdk; From 069abe95ec22c2c8856cba0754cbc54337ac2309 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 16 Jul 2025 00:07:06 +0200 Subject: [PATCH 130/166] Cleanup --- sdk/src/configuration/registry.cc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/sdk/src/configuration/registry.cc b/sdk/src/configuration/registry.cc index 06518422b4..fea0827437 100644 --- a/sdk/src/configuration/registry.cc +++ b/sdk/src/configuration/registry.cc @@ -94,7 +94,8 @@ const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std: void Registry::AddTextMapPropagatorBuilder(const std::string &name, std::unique_ptr &&builder) { - propagator_builders_.insert_or_assign(name, std::move(builder)); + propagator_builders_.erase(name); + propagator_builders_.insert({name, std::move(builder)}); } const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::string &name) const @@ -111,7 +112,8 @@ const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::s void Registry::AddExtensionSamplerBuilder(const std::string &name, std::unique_ptr &&builder) { - sampler_builders_.insert_or_assign(name, std::move(builder)); + sampler_builders_.erase(name); + sampler_builders_.insert({name, std::move(builder)}); } const ExtensionSpanExporterBuilder *Registry::GetExtensionSpanExporterBuilder( @@ -130,7 +132,8 @@ void Registry::AddExtensionSpanExporterBuilder( const std::string &name, std::unique_ptr &&builder) { - span_exporter_builders_.insert_or_assign(name, std::move(builder)); + span_exporter_builders_.erase(name); + span_exporter_builders_.insert({name, std::move(builder)}); } const ExtensionSpanProcessorBuilder *Registry::GetExtensionSpanProcessorBuilder( @@ -149,7 +152,8 @@ void Registry::AddExtensionSpanProcessorBuilder( const std::string &name, std::unique_ptr &&builder) { - span_processor_builders_.insert_or_assign(name, std::move(builder)); + span_processor_builders_.erase(name); + span_processor_builders_.insert({name, std::move(builder)}); } const ExtensionPushMetricExporterBuilder *Registry::GetExtensionPushMetricExporterBuilder( @@ -168,7 +172,8 @@ void Registry::AddExtensionPushMetricExporterBuilder( const std::string &name, std::unique_ptr &&builder) { - push_metric_exporter_builders_.insert_or_assign(name, std::move(builder)); + push_metric_exporter_builders_.erase(name); + push_metric_exporter_builders_.insert({name, std::move(builder)}); } const ExtensionPullMetricExporterBuilder *Registry::GetExtensionPullMetricExporterBuilder( @@ -187,7 +192,8 @@ void Registry::AddExtensionPullMetricExporterBuilder( const std::string &name, std::unique_ptr &&builder) { - pull_metric_exporter_builders_.insert_or_assign(name, std::move(builder)); + pull_metric_exporter_builders_.erase(name); + pull_metric_exporter_builders_.insert({name, std::move(builder)}); } const ExtensionLogRecordExporterBuilder *Registry::GetExtensionLogRecordExporterBuilder( @@ -206,7 +212,8 @@ void Registry::AddExtensionLogRecordExporterBuilder( const std::string &name, std::unique_ptr &&builder) { - log_record_exporter_builders_.insert_or_assign(name, std::move(builder)); + log_record_exporter_builders_.erase(name); + log_record_exporter_builders_.insert({name, std::move(builder)}); } const ExtensionLogRecordProcessorBuilder *Registry::GetExtensionLogRecordProcessorBuilder( @@ -225,7 +232,8 @@ void Registry::AddExtensionLogRecordProcessorBuilder( const std::string &name, std::unique_ptr &&builder) { - log_record_processor_builders_.insert_or_assign(name, std::move(builder)); + log_record_processor_builders_.erase(name); + log_record_processor_builders_.insert({name, std::move(builder)}); } } // namespace configuration From 56def2c080f03bf35b2c9a7785aead11b99b6875 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 16 Jul 2025 00:25:30 +0200 Subject: [PATCH 131/166] iwyu --- exporters/ostream/src/console_log_record_builder.cc | 2 ++ exporters/ostream/src/console_push_metric_builder.cc | 2 ++ exporters/ostream/src/console_span_builder.cc | 2 ++ exporters/otlp/src/otlp_file_log_record_builder.cc | 2 ++ exporters/otlp/src/otlp_file_push_metric_builder.cc | 4 +++- exporters/otlp/src/otlp_file_span_builder.cc | 4 +++- exporters/otlp/src/otlp_grpc_log_record_builder.cc | 2 ++ exporters/otlp/src/otlp_grpc_push_metric_builder.cc | 4 +++- exporters/otlp/src/otlp_grpc_span_builder.cc | 4 +++- exporters/otlp/src/otlp_http_log_record_builder.cc | 2 ++ exporters/otlp/src/otlp_http_push_metric_builder.cc | 4 +++- exporters/otlp/src/otlp_http_span_builder.cc | 2 ++ exporters/prometheus/src/prometheus_pull_builder.cc | 2 ++ exporters/zipkin/src/zipkin_builder.cc | 1 + sdk/include/opentelemetry/sdk/configuration/registry.h | 8 ++++---- 15 files changed, 36 insertions(+), 9 deletions(-) diff --git a/exporters/ostream/src/console_log_record_builder.cc b/exporters/ostream/src/console_log_record_builder.cc index 5dd08d6142..d10259cf4e 100644 --- a/exporters/ostream/src/console_log_record_builder.cc +++ b/exporters/ostream/src/console_log_record_builder.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/exporters/ostream/console_log_record_builder.h" #include "opentelemetry/exporters/ostream/log_record_exporter_factory.h" #include "opentelemetry/version.h" diff --git a/exporters/ostream/src/console_push_metric_builder.cc b/exporters/ostream/src/console_push_metric_builder.cc index 550c7a3fd3..374864d045 100644 --- a/exporters/ostream/src/console_push_metric_builder.cc +++ b/exporters/ostream/src/console_push_metric_builder.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/exporters/ostream/console_push_metric_builder.h" #include "opentelemetry/exporters/ostream/metric_exporter_factory.h" #include "opentelemetry/version.h" diff --git a/exporters/ostream/src/console_span_builder.cc b/exporters/ostream/src/console_span_builder.cc index 48853494a9..f1d1f70e42 100644 --- a/exporters/ostream/src/console_span_builder.cc +++ b/exporters/ostream/src/console_span_builder.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/exporters/ostream/span_exporter_factory.h" #include "opentelemetry/version.h" diff --git a/exporters/otlp/src/otlp_file_log_record_builder.cc b/exporters/otlp/src/otlp_file_log_record_builder.cc index 0f0e6915cf..4b50b77230 100644 --- a/exporters/otlp/src/otlp_file_log_record_builder.cc +++ b/exporters/otlp/src/otlp_file_log_record_builder.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/exporters/otlp/otlp_file_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_options.h" diff --git a/exporters/otlp/src/otlp_file_push_metric_builder.cc b/exporters/otlp/src/otlp_file_push_metric_builder.cc index 2cd9a1dbda..16fcf5f966 100644 --- a/exporters/otlp/src/otlp_file_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_file_push_metric_builder.cc @@ -1,9 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" +#include + #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_options.h" +#include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_span_builder.cc b/exporters/otlp/src/otlp_file_span_builder.cc index 9b737459bc..fec27016fd 100644 --- a/exporters/otlp/src/otlp_file_span_builder.cc +++ b/exporters/otlp/src/otlp_file_span_builder.cc @@ -1,9 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_file_span_builder.h" +#include + #include "opentelemetry/exporters/otlp/otlp_file_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_file_exporter_options.h" +#include "opentelemetry/exporters/otlp/otlp_file_span_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc index 6f4abf5d3d..d03b8f282b 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_builder.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h" diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc index 3a62f3fa57..f00f710629 100644 --- a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -1,9 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" +#include + #include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc index 9f6fb2cb80..fa7f7a1020 100644 --- a/exporters/otlp/src/otlp_grpc_span_builder.cc +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -1,9 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" +#include + #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_http_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc index 9aa6cec424..456029fd58 100644 --- a/exporters/otlp/src/otlp_http_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h" diff --git a/exporters/otlp/src/otlp_http_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc index 0d3340c82d..e962819fff 100644 --- a/exporters/otlp/src/otlp_http_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -1,9 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" +#include + #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" +#include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index 958b054e10..e28d30b9de 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -4,10 +4,12 @@ #include #include #include +#include #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h" #include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/trace/exporter.h" diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc index a101003c6c..027fbebe59 100644 --- a/exporters/prometheus/src/prometheus_pull_builder.cc +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -2,10 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/exporters/prometheus/exporter_factory.h" #include "opentelemetry/exporters/prometheus/exporter_options.h" #include "opentelemetry/exporters/prometheus/prometheus_pull_builder.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h" #include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/metrics/metric_reader.h" diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 2a18e69c58..a401801891 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -3,6 +3,7 @@ #include #include +#include #include "opentelemetry/exporters/zipkin/zipkin_builder.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/registry.h b/sdk/include/opentelemetry/sdk/configuration/registry.h index 7f9b01f73c..52dd7270fc 100644 --- a/sdk/include/opentelemetry/sdk/configuration/registry.h +++ b/sdk/include/opentelemetry/sdk/configuration/registry.h @@ -40,10 +40,10 @@ class Registry { public: Registry(); - Registry(Registry &&) = default; - Registry(const Registry &) = default; - Registry &operator=(Registry &&) = default; - Registry &operator=(const Registry &other) = default; + Registry(Registry &&) = delete; + Registry(const Registry &) = delete; + Registry &operator=(Registry &&) = delete; + Registry &operator=(const Registry &other) = delete; ~Registry() = default; From 2c6502093dfb74a440fc674611dddcf561d581bf Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 16 Jul 2025 00:33:55 +0200 Subject: [PATCH 132/166] Fix merge with ci changes --- .github/workflows/ci.yml | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f9757179aa..433b81cd86 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -183,25 +183,28 @@ jobs: cmake_clang_yaml_config: name: CMake clang 18 (maintainer mode, yaml config) runs-on: ubuntu-24.04 + env: + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 + CXX_STANDARD: '14' steps: - - uses: actions/checkout@v4 + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2 + with: + egress-policy: audit + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: submodules: 'recursive' - name: setup - env: - CC: /usr/bin/clang-18 - CXX: /usr/bin/clang++-18 - PROTOBUF_VERSION: 21.12 run: | - sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 - sudo -E ./ci/setup_googletest.sh sudo -E ./ci/setup_ci_environment.sh - sudo -E ./ci/install_protobuf.sh + - name: install dependencies + run: | + sudo -E ./ci/install_thirdparty.sh --install-dir /usr/local --tags-file third_party_release + - name: install ryml + run: | sudo -E ./ci/install_ryml.sh - name: run cmake clang (maintainer mode, sync) - env: - CC: /usr/bin/clang-18 - CXX: /usr/bin/clang++-18 run: | ./ci/do_ci.sh cmake.maintainer.yaml.test - name: generate test cert From b2d96de594b343ad8d78e58e6505684afe5168ab Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 16 Jul 2025 01:17:28 +0200 Subject: [PATCH 133/166] iwyu --- .../custom_log_record_exporter_builder.cc | 3 +- .../custom_log_record_processor_builder.cc | 3 +- .../custom_pull_metric_exporter_builder.cc | 3 +- .../custom_push_metric_exporter_builder.cc | 3 +- examples/yaml/custom_sampler_builder.cc | 3 +- examples/yaml/custom_span_exporter_builder.cc | 3 +- .../yaml/custom_span_processor_builder.cc | 3 +- .../ostream/src/console_log_record_builder.cc | 5 +++ .../src/console_push_metric_builder.cc | 5 +++ exporters/ostream/src/console_span_builder.cc | 5 +++ .../otlp/src/otlp_file_log_record_builder.cc | 5 +++ .../otlp/src/otlp_file_push_metric_builder.cc | 5 +++ exporters/otlp/src/otlp_file_span_builder.cc | 5 +++ .../otlp/src/otlp_grpc_log_record_builder.cc | 5 +++ .../otlp/src/otlp_grpc_push_metric_builder.cc | 5 +++ exporters/otlp/src/otlp_grpc_span_builder.cc | 5 +++ .../otlp/src/otlp_http_log_record_builder.cc | 5 +++ .../otlp/src/otlp_http_push_metric_builder.cc | 5 +++ exporters/zipkin/src/zipkin_builder.cc | 1 + .../sdk/configuration/registry.h | 16 ++++----- sdk/src/configuration/registry.cc | 33 +++++++++++-------- sdk/src/configuration/sdk_builder.cc | 1 + 22 files changed, 99 insertions(+), 28 deletions(-) diff --git a/examples/yaml/custom_log_record_exporter_builder.cc b/examples/yaml/custom_log_record_exporter_builder.cc index 93339b243d..fab5f9f1a6 100644 --- a/examples/yaml/custom_log_record_exporter_builder.cc +++ b/examples/yaml/custom_log_record_exporter_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h" @@ -25,6 +26,6 @@ std::unique_ptr CustomLogRecordExpo void CustomLogRecordExporterBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); - registry->AddExtensionLogRecordExporterBuilder("my_custom_log_record_exporter", + registry->SetExtensionLogRecordExporterBuilder("my_custom_log_record_exporter", std::move(builder)); } diff --git a/examples/yaml/custom_log_record_processor_builder.cc b/examples/yaml/custom_log_record_processor_builder.cc index 709726c9a2..ceff65e6f3 100644 --- a/examples/yaml/custom_log_record_processor_builder.cc +++ b/examples/yaml/custom_log_record_processor_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h" @@ -27,6 +28,6 @@ void CustomLogRecordProcessorBuilder::Register( opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); - registry->AddExtensionLogRecordProcessorBuilder("my_custom_log_record_processor", + registry->SetExtensionLogRecordProcessorBuilder("my_custom_log_record_processor", std::move(builder)); } diff --git a/examples/yaml/custom_pull_metric_exporter_builder.cc b/examples/yaml/custom_pull_metric_exporter_builder.cc index b1106c5502..480a1ff60a 100644 --- a/examples/yaml/custom_pull_metric_exporter_builder.cc +++ b/examples/yaml/custom_pull_metric_exporter_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" @@ -26,6 +27,6 @@ void CustomPullMetricExporterBuilder::Register( opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); - registry->AddExtensionPullMetricExporterBuilder("my_custom_pull_metric_exporter", + registry->SetExtensionPullMetricExporterBuilder("my_custom_pull_metric_exporter", std::move(builder)); } diff --git a/examples/yaml/custom_push_metric_exporter_builder.cc b/examples/yaml/custom_push_metric_exporter_builder.cc index 5af3e5ee06..c2e76c8036 100644 --- a/examples/yaml/custom_push_metric_exporter_builder.cc +++ b/examples/yaml/custom_push_metric_exporter_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" @@ -27,6 +28,6 @@ void CustomPushMetricExporterBuilder::Register( opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); - registry->AddExtensionPushMetricExporterBuilder("my_custom_push_metric_exporter", + registry->SetExtensionPushMetricExporterBuilder("my_custom_push_metric_exporter", std::move(builder)); } diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/yaml/custom_sampler_builder.cc index 967fd9a211..9689620976 100644 --- a/examples/yaml/custom_sampler_builder.cc +++ b/examples/yaml/custom_sampler_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/registry.h" @@ -23,5 +24,5 @@ std::unique_ptr CustomSamplerBuilder::Build( void CustomSamplerBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); - registry->AddExtensionSamplerBuilder("my_custom_sampler", std::move(builder)); + registry->SetExtensionSamplerBuilder("my_custom_sampler", std::move(builder)); } diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/yaml/custom_span_exporter_builder.cc index 413cd72afd..cb130f72f3 100644 --- a/examples/yaml/custom_span_exporter_builder.cc +++ b/examples/yaml/custom_span_exporter_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_span_exporter_configuration.h" @@ -25,5 +26,5 @@ std::unique_ptr CustomSpanExporterBuild void CustomSpanExporterBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); - registry->AddExtensionSpanExporterBuilder("my_custom_span_exporter", std::move(builder)); + registry->SetExtensionSpanExporterBuilder("my_custom_span_exporter", std::move(builder)); } diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/yaml/custom_span_processor_builder.cc index b5ed94a3ca..d7196ea17a 100644 --- a/examples/yaml/custom_span_processor_builder.cc +++ b/examples/yaml/custom_span_processor_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "opentelemetry/sdk/configuration/document_node.h" #include "opentelemetry/sdk/configuration/extension_span_processor_configuration.h" @@ -25,5 +26,5 @@ std::unique_ptr CustomSpanProcessorBui void CustomSpanProcessorBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); - registry->AddExtensionSpanProcessorBuilder("my_custom_span_processor", std::move(builder)); + registry->SetExtensionSpanProcessorBuilder("my_custom_span_processor", std::move(builder)); } diff --git a/exporters/ostream/src/console_log_record_builder.cc b/exporters/ostream/src/console_log_record_builder.cc index d10259cf4e..a3849a41c3 100644 --- a/exporters/ostream/src/console_log_record_builder.cc +++ b/exporters/ostream/src/console_log_record_builder.cc @@ -1,10 +1,15 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/ostream/console_log_record_builder.h" #include "opentelemetry/exporters/ostream/log_record_exporter_factory.h" +#include "opentelemetry/sdk/configuration/console_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/ostream/src/console_push_metric_builder.cc b/exporters/ostream/src/console_push_metric_builder.cc index 374864d045..ca87561755 100644 --- a/exporters/ostream/src/console_push_metric_builder.cc +++ b/exporters/ostream/src/console_push_metric_builder.cc @@ -1,10 +1,15 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/ostream/console_push_metric_builder.h" #include "opentelemetry/exporters/ostream/metric_exporter_factory.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/ostream/src/console_span_builder.cc b/exporters/ostream/src/console_span_builder.cc index f1d1f70e42..e55190bda9 100644 --- a/exporters/ostream/src/console_span_builder.cc +++ b/exporters/ostream/src/console_span_builder.cc @@ -1,10 +1,15 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/ostream/console_span_builder.h" #include "opentelemetry/exporters/ostream/span_exporter_factory.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/console_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_log_record_builder.cc b/exporters/otlp/src/otlp_file_log_record_builder.cc index 4b50b77230..a1260f9f89 100644 --- a/exporters/otlp/src/otlp_file_log_record_builder.cc +++ b/exporters/otlp/src/otlp_file_log_record_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_file_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_options.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_push_metric_builder.cc b/exporters/otlp/src/otlp_file_push_metric_builder.cc index 16fcf5f966..e055d12578 100644 --- a/exporters/otlp/src/otlp_file_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_file_push_metric_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_span_builder.cc b/exporters/otlp/src/otlp_file_span_builder.cc index fec27016fd..05a4d9a33b 100644 --- a/exporters/otlp/src/otlp_file_span_builder.cc +++ b/exporters/otlp/src/otlp_file_span_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_file_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_file_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_file_span_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc index d03b8f282b..99bb4f33ef 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_builder.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc index f00f710629..452a5b9c18 100644 --- a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc index fa7f7a1020..91418fd953 100644 --- a/exporters/otlp/src/otlp_grpc_span_builder.cc +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_http_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc index 456029fd58..9c2b104dc6 100644 --- a/exporters/otlp/src/otlp_http_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/logs/exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/otlp/src/otlp_http_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc index e962819fff..9984cd214b 100644 --- a/exporters/otlp/src/otlp_http_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -1,11 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index a401801891..35a1dee003 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -9,6 +9,7 @@ #include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" #include "opentelemetry/exporters/zipkin/zipkin_exporter_options.h" #include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/configuration/zipkin_span_exporter_builder.h" #include "opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/configuration/registry.h b/sdk/include/opentelemetry/sdk/configuration/registry.h index 52dd7270fc..81d38d2ef6 100644 --- a/sdk/include/opentelemetry/sdk/configuration/registry.h +++ b/sdk/include/opentelemetry/sdk/configuration/registry.h @@ -198,51 +198,51 @@ class Registry const TextMapPropagatorBuilder *GetTextMapPropagatorBuilder(const std::string &name) const; - void AddTextMapPropagatorBuilder(const std::string &name, + void SetTextMapPropagatorBuilder(const std::string &name, std::unique_ptr &&builder); const ExtensionSamplerBuilder *GetExtensionSamplerBuilder(const std::string &name) const; - void AddExtensionSamplerBuilder(const std::string &name, + void SetExtensionSamplerBuilder(const std::string &name, std::unique_ptr &&builder); const ExtensionSpanExporterBuilder *GetExtensionSpanExporterBuilder( const std::string &name) const; - void AddExtensionSpanExporterBuilder(const std::string &name, + void SetExtensionSpanExporterBuilder(const std::string &name, std::unique_ptr &&builder); const ExtensionSpanProcessorBuilder *GetExtensionSpanProcessorBuilder( const std::string &name) const; - void AddExtensionSpanProcessorBuilder(const std::string &name, + void SetExtensionSpanProcessorBuilder(const std::string &name, std::unique_ptr &&builder); const ExtensionPushMetricExporterBuilder *GetExtensionPushMetricExporterBuilder( const std::string &name) const; - void AddExtensionPushMetricExporterBuilder( + void SetExtensionPushMetricExporterBuilder( const std::string &name, std::unique_ptr &&builder); const ExtensionPullMetricExporterBuilder *GetExtensionPullMetricExporterBuilder( const std::string &name) const; - void AddExtensionPullMetricExporterBuilder( + void SetExtensionPullMetricExporterBuilder( const std::string &name, std::unique_ptr &&builder); const ExtensionLogRecordExporterBuilder *GetExtensionLogRecordExporterBuilder( const std::string &name) const; - void AddExtensionLogRecordExporterBuilder( + void SetExtensionLogRecordExporterBuilder( const std::string &name, std::unique_ptr &&builder); const ExtensionLogRecordProcessorBuilder *GetExtensionLogRecordProcessorBuilder( const std::string &name) const; - void AddExtensionLogRecordProcessorBuilder( + void SetExtensionLogRecordProcessorBuilder( const std::string &name, std::unique_ptr &&builder); diff --git a/sdk/src/configuration/registry.cc b/sdk/src/configuration/registry.cc index fea0827437..804faf38fa 100644 --- a/sdk/src/configuration/registry.cc +++ b/sdk/src/configuration/registry.cc @@ -8,6 +8,13 @@ #include "opentelemetry/baggage/propagation/baggage_propagator.h" #include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/sdk/configuration/extension_log_record_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_log_record_processor_builder.h" +#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_sampler_builder.h" +#include "opentelemetry/sdk/configuration/extension_span_exporter_builder.h" +#include "opentelemetry/sdk/configuration/extension_span_processor_builder.h" #include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/configuration/text_map_propagator_builder.h" #include "opentelemetry/trace/propagation/b3_propagator.h" @@ -73,11 +80,11 @@ class JaegerBuilder : public TextMapPropagatorBuilder Registry::Registry() { - AddTextMapPropagatorBuilder("tracecontext", std::make_unique()); - AddTextMapPropagatorBuilder("baggage", std::make_unique()); - AddTextMapPropagatorBuilder("b3", std::make_unique()); - AddTextMapPropagatorBuilder("b3multi", std::make_unique()); - AddTextMapPropagatorBuilder("jaeger", std::make_unique()); + SetTextMapPropagatorBuilder("tracecontext", std::make_unique()); + SetTextMapPropagatorBuilder("baggage", std::make_unique()); + SetTextMapPropagatorBuilder("b3", std::make_unique()); + SetTextMapPropagatorBuilder("b3multi", std::make_unique()); + SetTextMapPropagatorBuilder("jaeger", std::make_unique()); } const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) const @@ -91,7 +98,7 @@ const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std: return builder; } -void Registry::AddTextMapPropagatorBuilder(const std::string &name, +void Registry::SetTextMapPropagatorBuilder(const std::string &name, std::unique_ptr &&builder) { propagator_builders_.erase(name); @@ -109,7 +116,7 @@ const ExtensionSamplerBuilder *Registry::GetExtensionSamplerBuilder(const std::s return builder; } -void Registry::AddExtensionSamplerBuilder(const std::string &name, +void Registry::SetExtensionSamplerBuilder(const std::string &name, std::unique_ptr &&builder) { sampler_builders_.erase(name); @@ -128,7 +135,7 @@ const ExtensionSpanExporterBuilder *Registry::GetExtensionSpanExporterBuilder( return builder; } -void Registry::AddExtensionSpanExporterBuilder( +void Registry::SetExtensionSpanExporterBuilder( const std::string &name, std::unique_ptr &&builder) { @@ -148,7 +155,7 @@ const ExtensionSpanProcessorBuilder *Registry::GetExtensionSpanProcessorBuilder( return builder; } -void Registry::AddExtensionSpanProcessorBuilder( +void Registry::SetExtensionSpanProcessorBuilder( const std::string &name, std::unique_ptr &&builder) { @@ -168,7 +175,7 @@ const ExtensionPushMetricExporterBuilder *Registry::GetExtensionPushMetricExport return builder; } -void Registry::AddExtensionPushMetricExporterBuilder( +void Registry::SetExtensionPushMetricExporterBuilder( const std::string &name, std::unique_ptr &&builder) { @@ -188,7 +195,7 @@ const ExtensionPullMetricExporterBuilder *Registry::GetExtensionPullMetricExport return builder; } -void Registry::AddExtensionPullMetricExporterBuilder( +void Registry::SetExtensionPullMetricExporterBuilder( const std::string &name, std::unique_ptr &&builder) { @@ -208,7 +215,7 @@ const ExtensionLogRecordExporterBuilder *Registry::GetExtensionLogRecordExporter return builder; } -void Registry::AddExtensionLogRecordExporterBuilder( +void Registry::SetExtensionLogRecordExporterBuilder( const std::string &name, std::unique_ptr &&builder) { @@ -228,7 +235,7 @@ const ExtensionLogRecordProcessorBuilder *Registry::GetExtensionLogRecordProcess return builder; } -void Registry::AddExtensionLogRecordProcessorBuilder( +void Registry::SetExtensionLogRecordProcessorBuilder( const std::string &name, std::unique_ptr &&builder) { diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 617279c2bf..ce102eb171 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include #include From 724d1b0a7d52b08dce796a317c22dab619ec96d2 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 17 Jul 2025 22:39:27 +0200 Subject: [PATCH 134/166] Reference existing issue when known --- sdk/src/configuration/sdk_builder.cc | 75 ++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 16 deletions(-) diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index ce102eb171..407f8a28d8 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -657,14 +657,51 @@ std::unique_ptr SdkBuilder::CreateParentBase const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) const { std::unique_ptr sdk; + std::unique_ptr remote_parent_sampled_sdk; + std::unique_ptr remote_parent_not_sampled_sdk; + std::unique_ptr local_parent_sampled_sdk; + std::unique_ptr local_parent_not_sampled_sdk; - auto root_sdk = SdkBuilder::CreateSampler(model->root); - auto remote_parent_sampled_sdk = SdkBuilder::CreateSampler(model->remote_parent_sampled); - auto remote_parent_not_sampled_sdk = SdkBuilder::CreateSampler(model->remote_parent_not_sampled); - auto local_parent_sampled_sdk = SdkBuilder::CreateSampler(model->local_parent_sampled); - auto local_parent_not_sampled_sdk = SdkBuilder::CreateSampler(model->local_parent_not_sampled); + auto root_sdk = SdkBuilder::CreateSampler(model->root); - OTEL_INTERNAL_LOG_ERROR("CreateParentBasedSampler: FIXME, missing param in parent factory"); + if (model->remote_parent_sampled != nullptr) + { + remote_parent_sampled_sdk = SdkBuilder::CreateSampler(model->remote_parent_sampled); + } + else + { + remote_parent_sampled_sdk = opentelemetry::sdk::trace::AlwaysOnSamplerFactory::Create(); + } + + if (model->remote_parent_not_sampled != nullptr) + { + remote_parent_not_sampled_sdk = SdkBuilder::CreateSampler(model->remote_parent_not_sampled); + } + else + { + remote_parent_not_sampled_sdk = opentelemetry::sdk::trace::AlwaysOffSamplerFactory::Create(); + } + + if (model->local_parent_sampled != nullptr) + { + local_parent_sampled_sdk = SdkBuilder::CreateSampler(model->local_parent_sampled); + } + else + { + local_parent_sampled_sdk = opentelemetry::sdk::trace::AlwaysOnSamplerFactory::Create(); + } + + if (model->local_parent_not_sampled != nullptr) + { + local_parent_not_sampled_sdk = SdkBuilder::CreateSampler(model->local_parent_not_sampled); + } + else + { + local_parent_not_sampled_sdk = opentelemetry::sdk::trace::AlwaysOffSamplerFactory::Create(); + } + + // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3545 + OTEL_INTERNAL_LOG_ERROR("CreateParentBasedSampler: FIXME-SDK, missing param in parent factory"); std::shared_ptr delegate_sampler = std::move(root_sdk); sdk = opentelemetry::sdk::trace::ParentBasedSamplerFactory::Create(delegate_sampler); @@ -908,7 +945,7 @@ std::unique_ptr SdkBuilder::CreateTra std::unique_ptr sdk; // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/70 - OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME (IdGenerator)"); + OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME-CONFIG (IdGenerator)"); std::unique_ptr sampler; @@ -924,9 +961,10 @@ std::unique_ptr SdkBuilder::CreateTra sdk_processors.push_back(CreateSpanProcessor(processor_model)); } - // FIXME: use sampler, limits, id_generator, ... - sdk = - opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(sdk_processors), resource); + // 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)); return sdk; } @@ -1260,8 +1298,9 @@ SdkBuilder::CreateAttributesProcessor( { std::unique_ptr sdk; + // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3546 // FIXME-SDK: Need a subclass of AttributesProcessor for IncludeExclude - OTEL_INTERNAL_LOG_ERROR("CreateAttributesProcessor() FIXME-SDK"); + OTEL_INTERNAL_LOG_ERROR("CreateAttributesProcessor() FIXME-SDK IncludeExclude"); return sdk; } @@ -1302,6 +1341,7 @@ void SdkBuilder::AddView( sdk_attribute_processor = CreateAttributesProcessor(stream->attribute_keys); } + // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3547 // FIXME-SDK: unit is unused in class View, should be removed. std::string unit("FIXME-SDK"); @@ -1532,7 +1572,8 @@ std::unique_ptr SdkBuilder::CreateLogg sdk_processors.push_back(CreateLogRecordProcessor(processor_model)); } - // FIXME: use limits + // 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); @@ -1642,7 +1683,9 @@ void SdkBuilder::SetResource( if (opt_model->detectors != nullptr) { - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResource: FIXME detectors"); + // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3548 + // FIXME-SDK: Implement resource detectors + OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResource: FIXME-SDK detectors"); } auto sdk_resource = @@ -1666,9 +1709,9 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (model->attribute_limits) { - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::CreateConfiguredSdk: FIXME limits"); - // Ignore limits - // throw UnsupportedException("attribute_limits not available in opentelemetry-cpp"); + // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3303 + // FIXME-SDK: Implement attribute limits + OTEL_INTERNAL_LOG_WARN("attribute_limits not supported, ignoring"); } if (model->tracer_provider) From 30df25598a7f70e4208b078ef195b76f183654f0 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 18 Jul 2025 00:34:43 +0200 Subject: [PATCH 135/166] Code cleanup --- .../sdk/configuration/configured_sdk.h | 12 +- .../sdk/configuration/sdk_builder.h | 32 +-- sdk/src/configuration/configured_sdk.cc | 30 ++- sdk/src/configuration/sdk_builder.cc | 251 +++++++++--------- 4 files changed, 159 insertions(+), 166 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h index 1e5cf8f61b..d3a05f2481 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h @@ -27,16 +27,16 @@ class ConfiguredSdk std::shared_ptr registry, const std::unique_ptr &model); - ConfiguredSdk() : m_resource(opentelemetry::sdk::resource::Resource::GetEmpty()) {} + ConfiguredSdk() : resource(opentelemetry::sdk::resource::Resource::GetEmpty()) {} void Install(); void UnInstall(); - opentelemetry::sdk::resource::Resource m_resource; - std::shared_ptr m_tracer_provider; - std::shared_ptr m_propagator; - std::shared_ptr m_meter_provider; - std::shared_ptr m_logger_provider; + opentelemetry::sdk::resource::Resource resource; + std::shared_ptr tracer_provider; + std::shared_ptr propagator; + std::shared_ptr meter_provider; + std::shared_ptr logger_provider; }; } // namespace configuration diff --git a/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h b/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h index 88c961ea5a..9f31ba68e0 100644 --- a/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h +++ b/sdk/include/opentelemetry/sdk/configuration/sdk_builder.h @@ -66,7 +66,7 @@ namespace configuration class SdkBuilder { public: - SdkBuilder(std::shared_ptr registry) : m_registry(std::move(registry)) {} + SdkBuilder(std::shared_ptr registry) : registry_(std::move(registry)) {} SdkBuilder(SdkBuilder &&) = default; SdkBuilder(const SdkBuilder &) = default; SdkBuilder &operator=(SdkBuilder &&) = default; @@ -205,7 +205,7 @@ class SdkBuilder const; void AddView( - opentelemetry::sdk::metrics::ViewRegistry *registry, + opentelemetry::sdk::metrics::ViewRegistry *view_registry, const std::unique_ptr &model) const; std::unique_ptr CreateMeterProvider( @@ -250,32 +250,6 @@ class SdkBuilder const std::unique_ptr &model, const opentelemetry::sdk::resource::Resource &resource) const; - opentelemetry::common::AttributeValue CreateStringAttribute( - const opentelemetry::sdk::configuration::StringAttributeValueConfiguration *model) const; - - opentelemetry::common::AttributeValue CreateIntegerAttribute( - const opentelemetry::sdk::configuration::IntegerAttributeValueConfiguration *model) const; - - opentelemetry::common::AttributeValue CreateDoubleAttribute( - const opentelemetry::sdk::configuration::DoubleAttributeValueConfiguration *model) const; - - opentelemetry::common::AttributeValue CreateBooleanAttribute( - const opentelemetry::sdk::configuration::BooleanAttributeValueConfiguration *model) const; - - opentelemetry::common::AttributeValue CreateStringArrayAttribute( - const opentelemetry::sdk::configuration::StringArrayAttributeValueConfiguration *model) const; - - opentelemetry::common::AttributeValue CreateIntegerArrayAttribute( - const opentelemetry::sdk::configuration::IntegerArrayAttributeValueConfiguration *model) - const; - - opentelemetry::common::AttributeValue CreateDoubleArrayAttribute( - const opentelemetry::sdk::configuration::DoubleArrayAttributeValueConfiguration *model) const; - - opentelemetry::common::AttributeValue CreateBooleanArrayAttribute( - const opentelemetry::sdk::configuration::BooleanArrayAttributeValueConfiguration *model) - const; - void SetResourceAttribute( opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, const std::string &name, @@ -289,7 +263,7 @@ class SdkBuilder const std::unique_ptr &model) const; private: - std::shared_ptr m_registry; + std::shared_ptr registry_; }; } // namespace configuration diff --git a/sdk/src/configuration/configured_sdk.cc b/sdk/src/configuration/configured_sdk.cc index 5728940e75..6bb065e823 100644 --- a/sdk/src/configuration/configured_sdk.cc +++ b/sdk/src/configuration/configured_sdk.cc @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/context/propagation/global_propagator.h" #include "opentelemetry/logs/logger_provider.h" #include "opentelemetry/logs/provider.h" #include "opentelemetry/metrics/meter_provider.h" @@ -56,40 +57,51 @@ std::unique_ptr ConfiguredSdk::Create( void ConfiguredSdk::Install() { - if (m_tracer_provider) + if (propagator) { - std::shared_ptr api_tracer_provider = m_tracer_provider; + opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(propagator); + } + + if (tracer_provider) + { + std::shared_ptr api_tracer_provider = tracer_provider; opentelemetry::trace::Provider::SetTracerProvider(api_tracer_provider); } - if (m_meter_provider) + if (meter_provider) { - std::shared_ptr api_meter_provider = m_meter_provider; + std::shared_ptr api_meter_provider = meter_provider; opentelemetry::metrics::Provider::SetMeterProvider(api_meter_provider); } - if (m_logger_provider) + if (logger_provider) { - std::shared_ptr api_logger_provider = m_logger_provider; + std::shared_ptr api_logger_provider = logger_provider; opentelemetry::logs::Provider::SetLoggerProvider(api_logger_provider); } } void ConfiguredSdk::UnInstall() { - if (m_tracer_provider) + if (propagator) + { + std::shared_ptr none; + opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(none); + } + + if (tracer_provider) { std::shared_ptr none; opentelemetry::trace::Provider::SetTracerProvider(none); } - if (m_meter_provider) + if (meter_provider) { std::shared_ptr none; opentelemetry::metrics::Provider::SetMeterProvider(none); } - if (m_logger_provider) + if (logger_provider) { std::shared_ptr none; opentelemetry::logs::Provider::SetLoggerProvider(none); diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 407f8a28d8..6fbe16f1ca 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -159,73 +159,130 @@ namespace sdk namespace configuration { -class AttributeValueBuilder +class AttributeValueSetter : public opentelemetry::sdk::configuration::AttributeValueConfigurationVisitor { public: - AttributeValueBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} - AttributeValueBuilder(AttributeValueBuilder &&) = delete; - AttributeValueBuilder(const AttributeValueBuilder &) = delete; - AttributeValueBuilder &operator=(AttributeValueBuilder &&) = delete; - AttributeValueBuilder &operator=(const AttributeValueBuilder &other) = delete; - ~AttributeValueBuilder() override = default; + AttributeValueSetter(const SdkBuilder *b, + opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, + const std::string &name) + : m_sdk_builder(b), resource_attributes_(resource_attributes), name_(name) + {} + AttributeValueSetter(AttributeValueSetter &&) = delete; + AttributeValueSetter(const AttributeValueSetter &) = delete; + AttributeValueSetter &operator=(AttributeValueSetter &&) = delete; + AttributeValueSetter &operator=(const AttributeValueSetter &other) = delete; + ~AttributeValueSetter() override = default; void VisitString( const opentelemetry::sdk::configuration::StringAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateStringAttribute(model); + opentelemetry::common::AttributeValue attribute_value(model->value); + resource_attributes_.SetAttribute(name_, attribute_value); } void VisitInteger( const opentelemetry::sdk::configuration::IntegerAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateIntegerAttribute(model); + opentelemetry::common::AttributeValue attribute_value(model->value); + resource_attributes_.SetAttribute(name_, attribute_value); } void VisitDouble( const opentelemetry::sdk::configuration::DoubleAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateDoubleAttribute(model); + opentelemetry::common::AttributeValue attribute_value(model->value); + resource_attributes_.SetAttribute(name_, attribute_value); } void VisitBoolean( const opentelemetry::sdk::configuration::BooleanAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateBooleanAttribute(model); + opentelemetry::common::AttributeValue attribute_value(model->value); + resource_attributes_.SetAttribute(name_, attribute_value); } void VisitStringArray( const opentelemetry::sdk::configuration::StringArrayAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateStringArrayAttribute(model); + size_t length = model->value.size(); + std::vector string_view_array(length); + + for (int i = 0; i < length; i++) + { + string_view_array[i] = model->value[i]; + } + + nostd::span span(string_view_array.data(), string_view_array.size()); + + opentelemetry::common::AttributeValue attribute_value(span); + resource_attributes_.SetAttribute(name_, attribute_value); } void VisitIntegerArray( const opentelemetry::sdk::configuration::IntegerArrayAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateIntegerArrayAttribute(model); + size_t length = model->value.size(); + std::vector int_array(length); + + for (int i = 0; i < length; i++) + { + int_array[i] = model->value[i]; + } + + nostd::span span(int_array.data(), int_array.size()); + + opentelemetry::common::AttributeValue attribute_value(span); + resource_attributes_.SetAttribute(name_, attribute_value); } void VisitDoubleArray( const opentelemetry::sdk::configuration::DoubleArrayAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateDoubleArrayAttribute(model); + size_t length = model->value.size(); + std::vector double_array(length); + + for (int i = 0; i < length; i++) + { + double_array[i] = model->value[i]; + } + + nostd::span span(double_array.data(), double_array.size()); + + opentelemetry::common::AttributeValue attribute_value(span); + resource_attributes_.SetAttribute(name_, attribute_value); } void VisitBooleanArray( const opentelemetry::sdk::configuration::BooleanArrayAttributeValueConfiguration *model) override { - attribute_value = m_sdk_builder->CreateBooleanArrayAttribute(model); + size_t length = model->value.size(); + + // Can not use std::vector, + // it has no data() to convert it to a span + std::unique_ptr bool_array(new bool[length]); + + for (int i = 0; i < length; i++) + { + bool_array[i] = model->value[i]; + } + + nostd::span span(&bool_array[0], length); + + opentelemetry::common::AttributeValue attribute_value(span); + resource_attributes_.SetAttribute(name_, attribute_value); } opentelemetry::common::AttributeValue attribute_value; private: const SdkBuilder *m_sdk_builder; + opentelemetry::sdk::resource::ResourceAttributes &resource_attributes_; + std::string name_; }; class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigurationVisitor @@ -724,7 +781,7 @@ std::unique_ptr SdkBuilder::CreateExtensionS std::unique_ptr sdk; std::string name = model->name; - const ExtensionSamplerBuilder *builder = m_registry->GetExtensionSamplerBuilder(name); + const ExtensionSamplerBuilder *builder = registry_->GetExtensionSamplerBuilder(name); if (builder != nullptr) { @@ -756,7 +813,7 @@ std::unique_ptr SdkBuilder::CreateOtlpH std::unique_ptr sdk; const OtlpHttpSpanExporterBuilder *builder; - builder = m_registry->GetOtlpHttpSpanBuilder(); + builder = registry_->GetOtlpHttpSpanBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpHttpSpanExporter() using registered http builder"); @@ -774,7 +831,7 @@ std::unique_ptr SdkBuilder::CreateOtlpG std::unique_ptr sdk; const OtlpGrpcSpanExporterBuilder *builder; - builder = m_registry->GetOtlpGrpcSpanBuilder(); + builder = registry_->GetOtlpGrpcSpanBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpGrpcSpanExporter() using registered grpc builder"); @@ -792,7 +849,7 @@ std::unique_ptr SdkBuilder::CreateOtlpF std::unique_ptr sdk; const OtlpFileSpanExporterBuilder *builder; - builder = m_registry->GetOtlpFileSpanBuilder(); + builder = registry_->GetOtlpFileSpanBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpFileSpanExporter() using registered file builder"); @@ -808,7 +865,7 @@ std::unique_ptr SdkBuilder::CreateConso const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const ConsoleSpanExporterBuilder *builder = m_registry->GetConsoleSpanBuilder(); + const ConsoleSpanExporterBuilder *builder = registry_->GetConsoleSpanBuilder(); if (builder != nullptr) { @@ -825,7 +882,7 @@ std::unique_ptr SdkBuilder::CreateZipki const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const { std::unique_ptr sdk; - const ZipkinSpanExporterBuilder *builder = m_registry->GetZipkinSpanBuilder(); + const ZipkinSpanExporterBuilder *builder = registry_->GetZipkinSpanBuilder(); if (builder != nullptr) { @@ -844,7 +901,7 @@ std::unique_ptr SdkBuilder::CreateExten std::unique_ptr sdk; std::string name = model->name; - const ExtensionSpanExporterBuilder *builder = m_registry->GetExtensionSpanExporterBuilder(name); + const ExtensionSpanExporterBuilder *builder = registry_->GetExtensionSpanExporterBuilder(name); if (builder != nullptr) { @@ -911,7 +968,7 @@ std::unique_ptr SdkBuilder::CreateExte std::unique_ptr sdk; std::string name = model->name; - const ExtensionSpanProcessorBuilder *builder = m_registry->GetExtensionSpanProcessorBuilder(name); + const ExtensionSpanProcessorBuilder *builder = registry_->GetExtensionSpanProcessorBuilder(name); if (builder != nullptr) { @@ -974,7 +1031,7 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const { std::unique_ptr sdk; - const TextMapPropagatorBuilder *builder = m_registry->GetTextMapPropagatorBuilder(name); + const TextMapPropagatorBuilder *builder = registry_->GetTextMapPropagatorBuilder(name); if (builder != nullptr) { @@ -1045,7 +1102,7 @@ SdkBuilder::CreateOtlpHttpPushMetricExporter( std::unique_ptr sdk; const OtlpHttpPushMetricExporterBuilder *builder; - builder = m_registry->GetOtlpHttpPushMetricExporterBuilder(); + builder = registry_->GetOtlpHttpPushMetricExporterBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpHttpPushMetricExporter() using registered http builder"); @@ -1064,7 +1121,7 @@ SdkBuilder::CreateOtlpGrpcPushMetricExporter( std::unique_ptr sdk; const OtlpGrpcPushMetricExporterBuilder *builder; - builder = m_registry->GetOtlpGrpcPushMetricExporterBuilder(); + builder = registry_->GetOtlpGrpcPushMetricExporterBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpGrpcPushMetricExporter() using registered grpc builder"); @@ -1083,7 +1140,7 @@ SdkBuilder::CreateOtlpFilePushMetricExporter( std::unique_ptr sdk; const OtlpFilePushMetricExporterBuilder *builder; - builder = m_registry->GetOtlpFilePushMetricExporterBuilder(); + builder = registry_->GetOtlpFilePushMetricExporterBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpFilePushMetricExporter() using registered file builder"); @@ -1102,7 +1159,7 @@ SdkBuilder::CreateConsolePushMetricExporter( std::unique_ptr sdk; const ConsolePushMetricExporterBuilder *builder = - m_registry->GetConsolePushMetricExporterBuilder(); + registry_->GetConsolePushMetricExporterBuilder(); if (builder != nullptr) { @@ -1123,7 +1180,7 @@ SdkBuilder::CreateExtensionPushMetricExporter( std::string name = model->name; const ExtensionPushMetricExporterBuilder *builder = - m_registry->GetExtensionPushMetricExporterBuilder(name); + registry_->GetExtensionPushMetricExporterBuilder(name); if (builder != nullptr) { @@ -1145,7 +1202,7 @@ SdkBuilder::CreatePrometheusPullMetricExporter( std::unique_ptr sdk; const PrometheusPullMetricExporterBuilder *builder = - m_registry->GetPrometheusPullMetricExporterBuilder(); + registry_->GetPrometheusPullMetricExporterBuilder(); if (builder != nullptr) { @@ -1166,7 +1223,7 @@ SdkBuilder::CreateExtensionPullMetricExporter( std::string name = model->name; const ExtensionPullMetricExporterBuilder *builder = - m_registry->GetExtensionPullMetricExporterBuilder(name); + registry_->GetExtensionPullMetricExporterBuilder(name); if (builder != nullptr) { @@ -1306,7 +1363,7 @@ SdkBuilder::CreateAttributesProcessor( } void SdkBuilder::AddView( - opentelemetry::sdk::metrics::ViewRegistry *registry, + opentelemetry::sdk::metrics::ViewRegistry *view_registry, const std::unique_ptr &model) const { auto *selector = model->selector.get(); @@ -1349,8 +1406,8 @@ void SdkBuilder::AddView( stream->name, stream->description, unit, sdk_aggregation_type, sdk_aggregation_config, std::move(sdk_attribute_processor)); - registry->AddView(std::move(sdk_instrument_selector), std::move(sdk_meter_selector), - std::move(sdk_view)); + view_registry->AddView(std::move(sdk_instrument_selector), std::move(sdk_meter_selector), + std::move(sdk_view)); } std::unique_ptr SdkBuilder::CreateMeterProvider( @@ -1388,7 +1445,7 @@ SdkBuilder::CreateOtlpHttpLogRecordExporter( std::unique_ptr sdk; const OtlpHttpLogRecordExporterBuilder *builder; - builder = m_registry->GetOtlpHttpLogRecordBuilder(); + builder = registry_->GetOtlpHttpLogRecordBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpHttpLogRecordExporter() using registered http builder"); @@ -1407,7 +1464,7 @@ SdkBuilder::CreateOtlpGrpcLogRecordExporter( std::unique_ptr sdk; const OtlpGrpcLogRecordExporterBuilder *builder; - builder = m_registry->GetOtlpGrpcLogRecordBuilder(); + builder = registry_->GetOtlpGrpcLogRecordBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpGrpcLogRecordExporter() using registered grpc builder"); @@ -1426,7 +1483,7 @@ SdkBuilder::CreateOtlpFileLogRecordExporter( std::unique_ptr sdk; const OtlpFileLogRecordExporterBuilder *builder; - builder = m_registry->GetOtlpFileLogRecordBuilder(); + builder = registry_->GetOtlpFileLogRecordBuilder(); if (builder != nullptr) { OTEL_INTERNAL_LOG_DEBUG("CreateOtlpFileLogRecordExporter() using registered file builder"); @@ -1443,7 +1500,7 @@ SdkBuilder::CreateConsoleLogRecordExporter( const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) const { std::unique_ptr sdk; - const ConsoleLogRecordExporterBuilder *builder = m_registry->GetConsoleLogRecordBuilder(); + const ConsoleLogRecordExporterBuilder *builder = registry_->GetConsoleLogRecordBuilder(); if (builder != nullptr) { @@ -1464,7 +1521,7 @@ SdkBuilder::CreateExtensionLogRecordExporter( std::string name = model->name; const ExtensionLogRecordExporterBuilder *builder = - m_registry->GetExtensionLogRecordExporterBuilder(name); + registry_->GetExtensionLogRecordExporterBuilder(name); if (builder != nullptr) { @@ -1531,7 +1588,7 @@ SdkBuilder::CreateExtensionLogRecordProcessor( std::string name = model->name; const ExtensionLogRecordProcessorBuilder *builder = - m_registry->GetExtensionLogRecordProcessorBuilder(name); + registry_->GetExtensionLogRecordProcessorBuilder(name); if (builder != nullptr) { @@ -1580,83 +1637,14 @@ std::unique_ptr SdkBuilder::CreateLogg return sdk; } -opentelemetry::common::AttributeValue SdkBuilder::CreateStringAttribute( - const opentelemetry::sdk::configuration::StringAttributeValueConfiguration *model) const -{ - opentelemetry::common::AttributeValue result(model->value); - - return result; -} - -opentelemetry::common::AttributeValue SdkBuilder::CreateIntegerAttribute( - const opentelemetry::sdk::configuration::IntegerAttributeValueConfiguration *model) const -{ - opentelemetry::common::AttributeValue result(model->value); - - return result; -} - -opentelemetry::common::AttributeValue SdkBuilder::CreateDoubleAttribute( - const opentelemetry::sdk::configuration::DoubleAttributeValueConfiguration *model) const -{ - opentelemetry::common::AttributeValue result(model->value); - - return result; -} - -opentelemetry::common::AttributeValue SdkBuilder::CreateBooleanAttribute( - const opentelemetry::sdk::configuration::BooleanAttributeValueConfiguration *model) const -{ - bool value = model->value; - opentelemetry::common::AttributeValue result(value); - - return result; -} - -opentelemetry::common::AttributeValue SdkBuilder::CreateStringArrayAttribute( - const opentelemetry::sdk::configuration::StringArrayAttributeValueConfiguration * /*model*/) - const -{ - opentelemetry::common::AttributeValue result("FIXME"); - - return result; -} - -opentelemetry::common::AttributeValue SdkBuilder::CreateIntegerArrayAttribute( - const opentelemetry::sdk::configuration::IntegerArrayAttributeValueConfiguration * /*model*/) - const -{ - opentelemetry::common::AttributeValue result("FIXME"); - - return result; -} - -opentelemetry::common::AttributeValue SdkBuilder::CreateDoubleArrayAttribute( - const opentelemetry::sdk::configuration::DoubleArrayAttributeValueConfiguration *model) const -{ - nostd::span data{model->value.data(), model->value.size()}; - opentelemetry::common::AttributeValue result(data); - - return result; -} - -opentelemetry::common::AttributeValue SdkBuilder::CreateBooleanArrayAttribute( - const opentelemetry::sdk::configuration::BooleanArrayAttributeValueConfiguration * /*model*/) - const -{ - opentelemetry::common::AttributeValue result("FIXME"); - - return result; -} - void SdkBuilder::SetResourceAttribute( opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, const std::string &name, const opentelemetry::sdk::configuration::AttributeValueConfiguration *model) const { - AttributeValueBuilder builder(this); - model->Accept(&builder); - resource_attributes.SetAttribute(name, builder.attribute_value); + AttributeValueSetter setter(this, resource_attributes, name); + // Invokes resource_attributes.SetAttribute(name, ) + model->Accept(&setter); } void SdkBuilder::SetResource( @@ -1668,17 +1656,36 @@ void SdkBuilder::SetResource( { opentelemetry::sdk::resource::ResourceAttributes sdk_attributes; - if (opt_model->attributes) + // First, scan attributes_list, which has low priority. + if (opt_model->attributes_list.size() != 0) { - for (const auto &kv : opt_model->attributes->kv_map) + opentelemetry::common::KeyValueStringTokenizer tokenizer{opt_model->attributes_list}; + + opentelemetry::nostd::string_view attribute_key; + opentelemetry::nostd::string_view attribute_value; + bool attribute_valid = true; + + while (tokenizer.next(attribute_valid, attribute_key, attribute_value)) { - SetResourceAttribute(sdk_attributes, kv.first, kv.second.get()); + if (attribute_valid) + { + opentelemetry::common::AttributeValue wrapped_attribute_value(attribute_value); + sdk_attributes.SetAttribute(attribute_key, wrapped_attribute_value); + } + else + { + OTEL_INTERNAL_LOG_WARN("Found invalid key/value pair in attributes_list"); + } } } - if (opt_model->attributes_list.size() != 0) + // Second, scan attributes, which has high priority. + if (opt_model->attributes) { - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResource: FIXME attributes_list"); + for (const auto &kv : opt_model->attributes->kv_map) + { + SetResourceAttribute(sdk_attributes, kv.first, kv.second.get()); + } } if (opt_model->detectors != nullptr) @@ -1705,7 +1712,7 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (!model->disabled) { - SetResource(sdk->m_resource, model->resource); + SetResource(sdk->resource, model->resource); if (model->attribute_limits) { @@ -1716,22 +1723,22 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (model->tracer_provider) { - sdk->m_tracer_provider = CreateTracerProvider(model->tracer_provider, sdk->m_resource); + sdk->tracer_provider = CreateTracerProvider(model->tracer_provider, sdk->resource); } if (model->propagator) { - sdk->m_propagator = CreatePropagator(model->propagator); + sdk->propagator = CreatePropagator(model->propagator); } if (model->meter_provider) { - sdk->m_meter_provider = CreateMeterProvider(model->meter_provider, sdk->m_resource); + sdk->meter_provider = CreateMeterProvider(model->meter_provider, sdk->resource); } if (model->logger_provider) { - sdk->m_logger_provider = CreateLoggerProvider(model->logger_provider, sdk->m_resource); + sdk->logger_provider = CreateLoggerProvider(model->logger_provider, sdk->resource); } } From e6928522e29f5f8e2790983d05b319f1e8acf96d Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 18 Jul 2025 01:19:29 +0200 Subject: [PATCH 136/166] build warnings cleanup --- sdk/src/configuration/configured_sdk.cc | 1 + sdk/src/configuration/sdk_builder.cc | 28 ++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/sdk/src/configuration/configured_sdk.cc b/sdk/src/configuration/configured_sdk.cc index 6bb065e823..3eb81c9e48 100644 --- a/sdk/src/configuration/configured_sdk.cc +++ b/sdk/src/configuration/configured_sdk.cc @@ -7,6 +7,7 @@ #include #include "opentelemetry/context/propagation/global_propagator.h" +#include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/logs/logger_provider.h" #include "opentelemetry/logs/provider.h" #include "opentelemetry/metrics/meter_provider.h" diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 6fbe16f1ca..a231dc466d 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include #include @@ -11,9 +12,11 @@ #include #include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/common/kv_properties.h" #include "opentelemetry/context/propagation/composite_propagator.h" #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/aggregation_configuration.h" #include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" @@ -209,7 +212,10 @@ class AttributeValueSetter size_t length = model->value.size(); std::vector string_view_array(length); - for (int i = 0; i < length; i++) + // We have: std::vector + // We need: nostd::span + + for (size_t i = 0; i < length; i++) { string_view_array[i] = model->value[i]; } @@ -227,7 +233,10 @@ class AttributeValueSetter size_t length = model->value.size(); std::vector int_array(length); - for (int i = 0; i < length; i++) + // We have: std::vector + // We need: nostd::span + + for (size_t i = 0; i < length; i++) { int_array[i] = model->value[i]; } @@ -242,15 +251,11 @@ class AttributeValueSetter const opentelemetry::sdk::configuration::DoubleArrayAttributeValueConfiguration *model) override { - size_t length = model->value.size(); - std::vector double_array(length); + // We have: std::vector + // We need: nostd::span + // so no data conversion needed - for (int i = 0; i < length; i++) - { - double_array[i] = model->value[i]; - } - - nostd::span span(double_array.data(), double_array.size()); + nostd::span span(model->value.data(), model->value.size()); opentelemetry::common::AttributeValue attribute_value(span); resource_attributes_.SetAttribute(name_, attribute_value); @@ -266,6 +271,9 @@ class AttributeValueSetter // it has no data() to convert it to a span std::unique_ptr bool_array(new bool[length]); + // We have: std::vector + // We need: nostd::span + for (int i = 0; i < length; i++) { bool_array[i] = model->value[i]; From 62e793bd2019b1e5b937eb512deace11e74062c6 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 18 Jul 2025 02:47:11 +0200 Subject: [PATCH 137/166] cleanup --- sdk/src/configuration/sdk_builder.cc | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index a231dc466d..10b8a5c3d9 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -162,20 +162,20 @@ namespace sdk namespace configuration { -class AttributeValueSetter +class ResourceAttributeValueSetter : public opentelemetry::sdk::configuration::AttributeValueConfigurationVisitor { public: - AttributeValueSetter(const SdkBuilder *b, - opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, - const std::string &name) - : m_sdk_builder(b), resource_attributes_(resource_attributes), name_(name) + ResourceAttributeValueSetter( + opentelemetry::sdk::resource::ResourceAttributes &resource_attributes, + const std::string &name) + : resource_attributes_(resource_attributes), name_(name) {} - AttributeValueSetter(AttributeValueSetter &&) = delete; - AttributeValueSetter(const AttributeValueSetter &) = delete; - AttributeValueSetter &operator=(AttributeValueSetter &&) = delete; - AttributeValueSetter &operator=(const AttributeValueSetter &other) = delete; - ~AttributeValueSetter() override = default; + ResourceAttributeValueSetter(ResourceAttributeValueSetter &&) = delete; + ResourceAttributeValueSetter(const ResourceAttributeValueSetter &) = delete; + ResourceAttributeValueSetter &operator=(ResourceAttributeValueSetter &&) = delete; + ResourceAttributeValueSetter &operator=(const ResourceAttributeValueSetter &other) = delete; + ~ResourceAttributeValueSetter() override = default; void VisitString( const opentelemetry::sdk::configuration::StringAttributeValueConfiguration *model) override @@ -274,7 +274,7 @@ class AttributeValueSetter // We have: std::vector // We need: nostd::span - for (int i = 0; i < length; i++) + for (size_t i = 0; i < length; i++) { bool_array[i] = model->value[i]; } @@ -288,7 +288,6 @@ class AttributeValueSetter opentelemetry::common::AttributeValue attribute_value; private: - const SdkBuilder *m_sdk_builder; opentelemetry::sdk::resource::ResourceAttributes &resource_attributes_; std::string name_; }; @@ -1650,7 +1649,7 @@ void SdkBuilder::SetResourceAttribute( const std::string &name, const opentelemetry::sdk::configuration::AttributeValueConfiguration *model) const { - AttributeValueSetter setter(this, resource_attributes, name); + ResourceAttributeValueSetter setter(resource_attributes, name); // Invokes resource_attributes.SetAttribute(name, ) model->Accept(&setter); } From c34ad9bd3b081d75dd0a07f8e187b3250225be55 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 18 Jul 2025 23:29:15 +0200 Subject: [PATCH 138/166] POC: functional tests (in progress) --- .github/workflows/ci.yml | 5 +- functional/CMakeLists.txt | 4 + functional/configuration/CMakeLists.txt | 59 ++++ functional/configuration/main.cc | 292 ++++++++++++++++++ functional/configuration/run_test.sh | 29 ++ .../shelltests/disabled_empty.test | 1 + .../shelltests/disabled_empty.yaml | 2 + .../shelltests/disabled_false.test | 1 + .../shelltests/disabled_false.yaml | 2 + .../shelltests/disabled_true.test | 1 + .../shelltests/disabled_true.yaml | 2 + .../configuration/shelltests/empty.test | 1 + .../configuration/shelltests/empty.yaml | 1 + .../shelltests/format_empty.test | 1 + .../shelltests/format_empty.yaml | 2 + 15 files changed, 402 insertions(+), 1 deletion(-) create mode 100644 functional/configuration/CMakeLists.txt create mode 100644 functional/configuration/main.cc create mode 100755 functional/configuration/run_test.sh create mode 100644 functional/configuration/shelltests/disabled_empty.test create mode 100644 functional/configuration/shelltests/disabled_empty.yaml create mode 100644 functional/configuration/shelltests/disabled_false.test create mode 100644 functional/configuration/shelltests/disabled_false.yaml create mode 100644 functional/configuration/shelltests/disabled_true.test create mode 100644 functional/configuration/shelltests/disabled_true.yaml create mode 100644 functional/configuration/shelltests/empty.test create mode 100644 functional/configuration/shelltests/empty.yaml create mode 100644 functional/configuration/shelltests/format_empty.test create mode 100644 functional/configuration/shelltests/format_empty.yaml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40be15a6fa..b142e563e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -213,9 +213,12 @@ jobs: run: | sudo -E ./tools/setup-cfssl.sh (cd ./functional/cert; ./generate_cert.sh) - - name: run func test + - name: run otlp func test run: | (cd ./functional/otlp; ./run_test.sh) + - name: run configuration func test + run: | + (cd ./functional/configuration; ./run_test.sh) cmake_clang_maintainer_async_test: name: CMake clang 18 (maintainer mode, async) diff --git a/functional/CMakeLists.txt b/functional/CMakeLists.txt index 66924fea8e..585ac11950 100644 --- a/functional/CMakeLists.txt +++ b/functional/CMakeLists.txt @@ -4,3 +4,7 @@ if(WITH_OTLP_HTTP) add_subdirectory(otlp) endif() + +if(WITH_CONFIGURATION) + add_subdirectory(configuration) +endif() diff --git a/functional/configuration/CMakeLists.txt b/functional/configuration/CMakeLists.txt new file mode 100644 index 0000000000..e0c7313c28 --- /dev/null +++ b/functional/configuration/CMakeLists.txt @@ -0,0 +1,59 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +if(DEFINED OPENTELEMETRY_BUILD_DLL) + add_definitions(-DOPENTELEMETRY_BUILD_IMPORT_DLL) +endif() + +include_directories(${CMAKE_SOURCE_DIR}/sdk/include) + +add_executable( + otel_configuration_check + main.cc) + +target_link_libraries( + otel_configuration_check + ${CMAKE_THREAD_LIBS_INIT} + common_metrics_foo_library + common_logs_foo_library + opentelemetry_exporter_ostream_span + opentelemetry_exporter_ostream_metrics + opentelemetry_exporter_ostream_logs) + +if(WITH_OTLP_HTTP) + include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) + add_definitions(-DOTEL_HAVE_OTLP_HTTP) + target_link_libraries(otel_configuration_check opentelemetry_otlp_http_builder) +endif() + +if(WITH_OTLP_GRPC) + include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) + add_definitions(-DOTEL_HAVE_OTLP_GRPC) + target_link_libraries(otel_configuration_check opentelemetry_otlp_grpc_builder) +endif() + +if(WITH_OTLP_FILE) + include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) + add_definitions(-DOTEL_HAVE_OTLP_FILE) + target_link_libraries(otel_configuration_check opentelemetry_otlp_file_builder) +endif() + +if(WITH_ZIPKIN) + include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) + add_definitions(-DOTEL_HAVE_ZIPKIN) + target_link_libraries(otel_configuration_check opentelemetry_exporter_zipkin_trace) +endif() + +if(WITH_PROMETHEUS) + include_directories(${CMAKE_SOURCE_DIR}/exporters/prometheus/include) + add_definitions(-DOTEL_HAVE_PROMETHEUS) + target_link_libraries(otel_configuration_check opentelemetry_exporter_prometheus) +endif() + +if(DEFINED OPENTELEMETRY_BUILD_DLL) + target_link_libraries(otel_configuration_check opentelemetry_cpp) +else() + target_link_libraries( + otel_configuration_check opentelemetry_configuration opentelemetry_common + opentelemetry_trace opentelemetry_logs) +endif() diff --git a/functional/configuration/main.cc b/functional/configuration/main.cc new file mode 100644 index 0000000000..cce58ca545 --- /dev/null +++ b/functional/configuration/main.cc @@ -0,0 +1,292 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include +#include + +#include "opentelemetry/exporters/ostream/console_log_record_builder.h" +#include "opentelemetry/exporters/ostream/console_push_metric_builder.h" +#include "opentelemetry/exporters/ostream/console_span_builder.h" +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/configured_sdk.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" + +#ifdef LATER +# include "custom_log_record_exporter_builder.h" +# include "custom_log_record_processor_builder.h" +# include "custom_pull_metric_exporter_builder.h" +# include "custom_push_metric_exporter_builder.h" +# include "custom_sampler_builder.h" +# include "custom_span_exporter_builder.h" +# include "custom_span_processor_builder.h" +#endif + +#ifdef BAZEL_BUILD +# include "examples/common/logs_foo_library/foo_library.h" +# include "examples/common/metrics_foo_library/foo_library.h" +#else +# include "logs_foo_library/foo_library.h" +# include "metrics_foo_library/foo_library.h" +#endif + +#ifdef OTEL_HAVE_OTLP_HTTP +# include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" +# include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" +#endif + +#ifdef OTEL_HAVE_OTLP_GRPC +# include "opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" +# include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" +#endif + +#ifdef OTEL_HAVE_OTLP_FILE +# include "opentelemetry/exporters/otlp/otlp_file_log_record_builder.h" +# include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" +# include "opentelemetry/exporters/otlp/otlp_file_span_builder.h" +#endif + +#ifdef OTEL_HAVE_ZIPKIN +# include "opentelemetry/exporters/zipkin/zipkin_builder.h" +#endif + +#ifdef OTEL_HAVE_PROMETHEUS +# include "opentelemetry/exporters/prometheus/prometheus_pull_builder.h" +#endif + +static bool opt_help = false; +static std::string yaml_file_path = ""; + +static std::unique_ptr sdk; + +namespace +{ + +class CheckerLogHandler : public opentelemetry::sdk::common::internal_log::LogHandler +{ +public: + void Handle(opentelemetry::sdk::common::internal_log::LogLevel level, + const char * /* file */, + int /* line */, + const char *msg, + const opentelemetry::sdk::common::AttributeMap & /* attributes */) noexcept override + { + if (msg == nullptr) + { + msg = ""; + } + switch (level) + { + case opentelemetry::sdk::common::internal_log::LogLevel::None: + break; + case opentelemetry::sdk::common::internal_log::LogLevel::Error: + fprintf(stdout, "[ERROR] %s\n", msg); + break; + case opentelemetry::sdk::common::internal_log::LogLevel::Warning: + fprintf(stdout, "[WARNING] %s\n", msg); + break; + case opentelemetry::sdk::common::internal_log::LogLevel::Info: + fprintf(stdout, "[INFO] %s\n", msg); + break; + case opentelemetry::sdk::common::internal_log::LogLevel::Debug: + fprintf(stdout, "[DEBUG] %s\n", msg); + break; + } + } +}; + +void InitOtel(const std::string &config_file) +{ + auto level = opentelemetry::sdk::common::internal_log::LogLevel::Info; + + opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); + + opentelemetry::nostd::shared_ptr + checker_log_handler(new CheckerLogHandler()); + + opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogHandler(checker_log_handler); + + /* 1 - Create a registry */ + + std::shared_ptr registry( + new opentelemetry::sdk::configuration::Registry); + + /* 2 - Populate the registry with the core components supported */ + + opentelemetry::exporter::trace::ConsoleSpanBuilder::Register(registry.get()); + opentelemetry::exporter::metrics::ConsolePushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::logs::ConsoleLogRecordBuilder::Register(registry.get()); + +#ifdef OTEL_HAVE_OTLP_HTTP + opentelemetry::exporter::otlp::OtlpHttpSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpHttpPushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpHttpLogRecordBuilder::Register(registry.get()); +#endif + +#ifdef OTEL_HAVE_OTLP_GRPC + opentelemetry::exporter::otlp::OtlpGrpcSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpGrpcPushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpGrpcLogRecordBuilder::Register(registry.get()); +#endif + +#ifdef OTEL_HAVE_OTLP_FILE + opentelemetry::exporter::otlp::OtlpFileSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpFilePushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpFileLogRecordBuilder::Register(registry.get()); +#endif + +#ifdef OTEL_HAVE_ZIPKIN + opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); +#endif + +#ifdef OTEL_HAVE_PROMETHEUS + opentelemetry::exporter::metrics::PrometheusPullBuilder::Register(registry.get()); +#endif + + /* 3 - Populate the registry with external extensions plugins */ + +#ifdef LATER + CustomSamplerBuilder::Register(registry.get()); + CustomSpanExporterBuilder::Register(registry.get()); + CustomSpanProcessorBuilder::Register(registry.get()); + CustomPushMetricExporterBuilder::Register(registry.get()); + CustomPullMetricExporterBuilder::Register(registry.get()); + CustomLogRecordExporterBuilder::Register(registry.get()); + CustomLogRecordProcessorBuilder::Register(registry.get()); +#endif + + /* 4 - Parse a config.yaml */ + + // See + // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml + auto model = opentelemetry::sdk::configuration::YamlConfigurationParser::ParseFile(config_file); + + if (model != nullptr) + { + fprintf(stdout, "MODEL PARSED\n"); + } + else + { + fprintf(stdout, "FAILED TO PARSE MODEL\n"); + exit(1); + } + + /* 5 - Build the SDK from the parsed config.yaml */ + + sdk = opentelemetry::sdk::configuration::ConfiguredSdk::Create(registry, model); + + if (model != nullptr) + { + fprintf(stdout, "SDK CREATED\n"); + } + else + { + fprintf(stdout, "FAILED TO CREATE SDK\n"); + exit(2); + } + + /* 6 - Deploy the SDK */ + + if (sdk != nullptr) + { + sdk->Install(); + } +} + +void CleanupOtel() +{ + if (sdk != nullptr) + { + sdk->UnInstall(); + } + sdk.reset(nullptr); +} +} // namespace + +static void usage(FILE *out) +{ + static const char *msg = + "Usage: example_yaml [options]\n" + "Valid options are:\n" + " --help Print this help\n" + " --yaml Path to a yaml configuration file\n" + "\n" + "The configuration file used will be:\n" + " 1) the file provided in the command line\n" + " 2) the file provided in environment variable ${OTEL_EXPERIMENTAL_CONFIG_FILE}\n" + " 3) file config.yaml\n"; + + fprintf(out, "%s", msg); +} + +static int parse_args(int argc, char *argv[]) +{ + int remaining_argc = argc; + char **remaining_argv = argv; + + while (remaining_argc > 0) + { + if (strcmp(*remaining_argv, "--help") == 0) + { + opt_help = true; + return 0; + } + + if (remaining_argc >= 2) + { + if (strcmp(*remaining_argv, "--yaml") == 0) + { + remaining_argc--; + remaining_argv++; + yaml_file_path = *remaining_argv; + remaining_argc--; + remaining_argv++; + continue; + } + } + + if (remaining_argc) + { + // Unknown option + return 1; + } + } + + return 0; +} + +int main(int argc, char *argv[]) +{ + // Program name + argc--; + argv++; + + int rc = parse_args(argc, argv); + + if (rc != 0) + { + usage(stderr); + return 1; + } + + if (opt_help) + { + usage(stdout); + return 0; + } + + InitOtel(yaml_file_path); + + foo_library(); + foo_library::counter_example("yaml"); + foo_library::observable_counter_example("yaml"); + foo_library::histogram_example("yaml"); + + CleanupOtel(); + return 0; +} diff --git a/functional/configuration/run_test.sh b/functional/configuration/run_test.sh new file mode 100755 index 0000000000..c83ffb9690 --- /dev/null +++ b/functional/configuration/run_test.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +set -e + +# To run tests in a local dev environment: +# - make sure docker is running +# - set BUILD_DIR to the top level build directory, + +[ -z "${BUILD_DIR}" ] && export BUILD_DIR="${HOME}/build" + +export TEST_BIN_DIR="${BUILD_DIR}/functional/configuration/" + +export PATH=${PATH}:${TEST_BIN_DIR} + +which otel_configuration_check + +otel_configuration_check --help + +which shelltest + +shelltest --version + +shelltest --help + +shelltest ./shelltests + diff --git a/functional/configuration/shelltests/disabled_empty.test b/functional/configuration/shelltests/disabled_empty.test new file mode 100644 index 0000000000..1a1e2cc90a --- /dev/null +++ b/functional/configuration/shelltests/disabled_empty.test @@ -0,0 +1 @@ +otel_configuration_check --yaml shelltests/disabled_empty.yaml diff --git a/functional/configuration/shelltests/disabled_empty.yaml b/functional/configuration/shelltests/disabled_empty.yaml new file mode 100644 index 0000000000..19bed93385 --- /dev/null +++ b/functional/configuration/shelltests/disabled_empty.yaml @@ -0,0 +1,2 @@ +format: 0.0 +disabled: diff --git a/functional/configuration/shelltests/disabled_false.test b/functional/configuration/shelltests/disabled_false.test new file mode 100644 index 0000000000..8552dbf25c --- /dev/null +++ b/functional/configuration/shelltests/disabled_false.test @@ -0,0 +1 @@ +otel_configuration_check --yaml shelltests/disabled_false.yaml diff --git a/functional/configuration/shelltests/disabled_false.yaml b/functional/configuration/shelltests/disabled_false.yaml new file mode 100644 index 0000000000..17509c2bb1 --- /dev/null +++ b/functional/configuration/shelltests/disabled_false.yaml @@ -0,0 +1,2 @@ +format: 0.0 +disabled: false diff --git a/functional/configuration/shelltests/disabled_true.test b/functional/configuration/shelltests/disabled_true.test new file mode 100644 index 0000000000..4cc44b5128 --- /dev/null +++ b/functional/configuration/shelltests/disabled_true.test @@ -0,0 +1 @@ +otel_configuration_check --yaml shelltests/disabled_true.yaml diff --git a/functional/configuration/shelltests/disabled_true.yaml b/functional/configuration/shelltests/disabled_true.yaml new file mode 100644 index 0000000000..80f2314ede --- /dev/null +++ b/functional/configuration/shelltests/disabled_true.yaml @@ -0,0 +1,2 @@ +format: 0.0 +disabled: true diff --git a/functional/configuration/shelltests/empty.test b/functional/configuration/shelltests/empty.test new file mode 100644 index 0000000000..1f501e8f37 --- /dev/null +++ b/functional/configuration/shelltests/empty.test @@ -0,0 +1 @@ +otel_configuration_check --yaml shelltests/empty.yaml diff --git a/functional/configuration/shelltests/empty.yaml b/functional/configuration/shelltests/empty.yaml new file mode 100644 index 0000000000..0e607101b0 --- /dev/null +++ b/functional/configuration/shelltests/empty.yaml @@ -0,0 +1 @@ +# empty yaml file diff --git a/functional/configuration/shelltests/format_empty.test b/functional/configuration/shelltests/format_empty.test new file mode 100644 index 0000000000..e4c601080e --- /dev/null +++ b/functional/configuration/shelltests/format_empty.test @@ -0,0 +1 @@ +otel_configuration_check --yaml shelltests/format_empty.yaml diff --git a/functional/configuration/shelltests/format_empty.yaml b/functional/configuration/shelltests/format_empty.yaml new file mode 100644 index 0000000000..737e2cef1d --- /dev/null +++ b/functional/configuration/shelltests/format_empty.yaml @@ -0,0 +1,2 @@ +# This must fail +format: From 322f8a6736a508fb225d209270bc601d1bd319db Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 18 Jul 2025 23:56:50 +0200 Subject: [PATCH 139/166] shelltest --- .github/workflows/ci.yml | 2 ++ functional/configuration/CMakeLists.txt | 19 +++++++++++-------- functional/configuration/run_test.sh | 8 ++++---- .../shelltests/disabled_empty.test | 3 +++ .../shelltests/disabled_empty.yaml | 5 ++++- .../shelltests/disabled_false.test | 3 +++ .../shelltests/disabled_false.yaml | 3 +++ .../shelltests/disabled_true.test | 3 +++ .../shelltests/disabled_true.yaml | 3 +++ .../configuration/shelltests/empty.test | 3 +++ .../configuration/shelltests/empty.yaml | 3 +++ .../shelltests/format_empty.test | 3 +++ .../shelltests/format_empty.yaml | 3 +++ 13 files changed, 48 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b142e563e1..2b0878237c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -207,6 +207,8 @@ jobs: - name: run cmake clang (maintainer mode, sync) run: | ./ci/do_ci.sh cmake.maintainer.yaml.test + - name: install shelltest + run: sudo apt update && sudo apt-get install -y shelltestrunner - name: generate test cert env: CFSSL_VERSION: 1.6.3 diff --git a/functional/configuration/CMakeLists.txt b/functional/configuration/CMakeLists.txt index e0c7313c28..3c0723e8a7 100644 --- a/functional/configuration/CMakeLists.txt +++ b/functional/configuration/CMakeLists.txt @@ -7,9 +7,7 @@ endif() include_directories(${CMAKE_SOURCE_DIR}/sdk/include) -add_executable( - otel_configuration_check - main.cc) +add_executable(otel_configuration_check main.cc) target_link_libraries( otel_configuration_check @@ -23,31 +21,36 @@ target_link_libraries( if(WITH_OTLP_HTTP) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_HTTP) - target_link_libraries(otel_configuration_check opentelemetry_otlp_http_builder) + target_link_libraries(otel_configuration_check + opentelemetry_otlp_http_builder) endif() if(WITH_OTLP_GRPC) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_GRPC) - target_link_libraries(otel_configuration_check opentelemetry_otlp_grpc_builder) + target_link_libraries(otel_configuration_check + opentelemetry_otlp_grpc_builder) endif() if(WITH_OTLP_FILE) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_FILE) - target_link_libraries(otel_configuration_check opentelemetry_otlp_file_builder) + target_link_libraries(otel_configuration_check + opentelemetry_otlp_file_builder) endif() if(WITH_ZIPKIN) include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) add_definitions(-DOTEL_HAVE_ZIPKIN) - target_link_libraries(otel_configuration_check opentelemetry_exporter_zipkin_trace) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_zipkin_trace) endif() if(WITH_PROMETHEUS) include_directories(${CMAKE_SOURCE_DIR}/exporters/prometheus/include) add_definitions(-DOTEL_HAVE_PROMETHEUS) - target_link_libraries(otel_configuration_check opentelemetry_exporter_prometheus) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_prometheus) endif() if(DEFINED OPENTELEMETRY_BUILD_DLL) diff --git a/functional/configuration/run_test.sh b/functional/configuration/run_test.sh index c83ffb9690..de9b220a21 100755 --- a/functional/configuration/run_test.sh +++ b/functional/configuration/run_test.sh @@ -17,13 +17,13 @@ export PATH=${PATH}:${TEST_BIN_DIR} which otel_configuration_check -otel_configuration_check --help +# otel_configuration_check --help -which shelltest +which shelltest || true -shelltest --version +shelltest --version || true -shelltest --help +shelltest --help || true shelltest ./shelltests diff --git a/functional/configuration/shelltests/disabled_empty.test b/functional/configuration/shelltests/disabled_empty.test index 1a1e2cc90a..fc7c42ed6d 100644 --- a/functional/configuration/shelltests/disabled_empty.test +++ b/functional/configuration/shelltests/disabled_empty.test @@ -1 +1,4 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + otel_configuration_check --yaml shelltests/disabled_empty.yaml diff --git a/functional/configuration/shelltests/disabled_empty.yaml b/functional/configuration/shelltests/disabled_empty.yaml index 19bed93385..802b0f9b26 100644 --- a/functional/configuration/shelltests/disabled_empty.yaml +++ b/functional/configuration/shelltests/disabled_empty.yaml @@ -1,2 +1,5 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + format: 0.0 -disabled: +disabled: diff --git a/functional/configuration/shelltests/disabled_false.test b/functional/configuration/shelltests/disabled_false.test index 8552dbf25c..cab5750e4b 100644 --- a/functional/configuration/shelltests/disabled_false.test +++ b/functional/configuration/shelltests/disabled_false.test @@ -1 +1,4 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + otel_configuration_check --yaml shelltests/disabled_false.yaml diff --git a/functional/configuration/shelltests/disabled_false.yaml b/functional/configuration/shelltests/disabled_false.yaml index 17509c2bb1..24b757c870 100644 --- a/functional/configuration/shelltests/disabled_false.yaml +++ b/functional/configuration/shelltests/disabled_false.yaml @@ -1,2 +1,5 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + format: 0.0 disabled: false diff --git a/functional/configuration/shelltests/disabled_true.test b/functional/configuration/shelltests/disabled_true.test index 4cc44b5128..b773cef372 100644 --- a/functional/configuration/shelltests/disabled_true.test +++ b/functional/configuration/shelltests/disabled_true.test @@ -1 +1,4 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + otel_configuration_check --yaml shelltests/disabled_true.yaml diff --git a/functional/configuration/shelltests/disabled_true.yaml b/functional/configuration/shelltests/disabled_true.yaml index 80f2314ede..f41f28ac69 100644 --- a/functional/configuration/shelltests/disabled_true.yaml +++ b/functional/configuration/shelltests/disabled_true.yaml @@ -1,2 +1,5 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + format: 0.0 disabled: true diff --git a/functional/configuration/shelltests/empty.test b/functional/configuration/shelltests/empty.test index 1f501e8f37..2034fed147 100644 --- a/functional/configuration/shelltests/empty.test +++ b/functional/configuration/shelltests/empty.test @@ -1 +1,4 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + otel_configuration_check --yaml shelltests/empty.yaml diff --git a/functional/configuration/shelltests/empty.yaml b/functional/configuration/shelltests/empty.yaml index 0e607101b0..b1bc75271a 100644 --- a/functional/configuration/shelltests/empty.yaml +++ b/functional/configuration/shelltests/empty.yaml @@ -1 +1,4 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + # empty yaml file diff --git a/functional/configuration/shelltests/format_empty.test b/functional/configuration/shelltests/format_empty.test index e4c601080e..7951c21ee6 100644 --- a/functional/configuration/shelltests/format_empty.test +++ b/functional/configuration/shelltests/format_empty.test @@ -1 +1,4 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + otel_configuration_check --yaml shelltests/format_empty.yaml diff --git a/functional/configuration/shelltests/format_empty.yaml b/functional/configuration/shelltests/format_empty.yaml index 737e2cef1d..4aca2541e8 100644 --- a/functional/configuration/shelltests/format_empty.yaml +++ b/functional/configuration/shelltests/format_empty.yaml @@ -1,2 +1,5 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + # This must fail format: From 69aa84bff120c974611296b6c05059f261cd08fb Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 19 Jul 2025 00:52:37 +0200 Subject: [PATCH 140/166] shelltest --- functional/configuration/main.cc | 2 +- functional/configuration/run_test.sh | 10 ---------- .../configuration/shelltests/disabled_empty.test | 6 +++++- .../configuration/shelltests/disabled_empty.yaml | 2 +- .../configuration/shelltests/disabled_false.test | 6 +++++- .../configuration/shelltests/disabled_false.yaml | 2 +- functional/configuration/shelltests/disabled_true.test | 6 +++++- functional/configuration/shelltests/disabled_true.yaml | 2 +- functional/configuration/shelltests/empty.test | 6 +++++- functional/configuration/shelltests/format_empty.test | 6 +++++- functional/configuration/shelltests/format_empty.yaml | 2 +- 11 files changed, 30 insertions(+), 20 deletions(-) diff --git a/functional/configuration/main.cc b/functional/configuration/main.cc index cce58ca545..c948e6c6fe 100644 --- a/functional/configuration/main.cc +++ b/functional/configuration/main.cc @@ -211,7 +211,7 @@ void CleanupOtel() static void usage(FILE *out) { static const char *msg = - "Usage: example_yaml [options]\n" + "Usage: otel_configuration_check [options]\n" "Valid options are:\n" " --help Print this help\n" " --yaml Path to a yaml configuration file\n" diff --git a/functional/configuration/run_test.sh b/functional/configuration/run_test.sh index de9b220a21..4acf75f29d 100755 --- a/functional/configuration/run_test.sh +++ b/functional/configuration/run_test.sh @@ -15,15 +15,5 @@ export TEST_BIN_DIR="${BUILD_DIR}/functional/configuration/" export PATH=${PATH}:${TEST_BIN_DIR} -which otel_configuration_check - -# otel_configuration_check --help - -which shelltest || true - -shelltest --version || true - -shelltest --help || true - shelltest ./shelltests diff --git a/functional/configuration/shelltests/disabled_empty.test b/functional/configuration/shelltests/disabled_empty.test index fc7c42ed6d..d4e8880882 100644 --- a/functional/configuration/shelltests/disabled_empty.test +++ b/functional/configuration/shelltests/disabled_empty.test @@ -1,4 +1,8 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -otel_configuration_check --yaml shelltests/disabled_empty.yaml +$ otel_configuration_check --yaml shelltests/disabled_empty.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/disabled_empty.yaml b/functional/configuration/shelltests/disabled_empty.yaml index 802b0f9b26..e33eb38ebb 100644 --- a/functional/configuration/shelltests/disabled_empty.yaml +++ b/functional/configuration/shelltests/disabled_empty.yaml @@ -1,5 +1,5 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -format: 0.0 +file_format: 0.0 disabled: diff --git a/functional/configuration/shelltests/disabled_false.test b/functional/configuration/shelltests/disabled_false.test index cab5750e4b..f3af5a75a1 100644 --- a/functional/configuration/shelltests/disabled_false.test +++ b/functional/configuration/shelltests/disabled_false.test @@ -1,4 +1,8 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -otel_configuration_check --yaml shelltests/disabled_false.yaml +$ otel_configuration_check --yaml shelltests/disabled_false.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/disabled_false.yaml b/functional/configuration/shelltests/disabled_false.yaml index 24b757c870..4cff2e08fe 100644 --- a/functional/configuration/shelltests/disabled_false.yaml +++ b/functional/configuration/shelltests/disabled_false.yaml @@ -1,5 +1,5 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -format: 0.0 +file_format: 0.0 disabled: false diff --git a/functional/configuration/shelltests/disabled_true.test b/functional/configuration/shelltests/disabled_true.test index b773cef372..3c3b91572b 100644 --- a/functional/configuration/shelltests/disabled_true.test +++ b/functional/configuration/shelltests/disabled_true.test @@ -1,4 +1,8 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -otel_configuration_check --yaml shelltests/disabled_true.yaml +$ otel_configuration_check --yaml shelltests/disabled_true.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/disabled_true.yaml b/functional/configuration/shelltests/disabled_true.yaml index f41f28ac69..c40ad924d6 100644 --- a/functional/configuration/shelltests/disabled_true.yaml +++ b/functional/configuration/shelltests/disabled_true.yaml @@ -1,5 +1,5 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -format: 0.0 +file_format: 0.0 disabled: true diff --git a/functional/configuration/shelltests/empty.test b/functional/configuration/shelltests/empty.test index 2034fed147..a08b33dd08 100644 --- a/functional/configuration/shelltests/empty.test +++ b/functional/configuration/shelltests/empty.test @@ -1,4 +1,8 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -otel_configuration_check --yaml shelltests/empty.yaml +$ otel_configuration_check --yaml shelltests/empty.yaml +> +[ERROR] [Yaml Configuration Parser] Parse failed with exception: Yaml: not a map, looking for: file_format +FAILED TO PARSE MODEL +>= 1 diff --git a/functional/configuration/shelltests/format_empty.test b/functional/configuration/shelltests/format_empty.test index 7951c21ee6..dffce003d5 100644 --- a/functional/configuration/shelltests/format_empty.test +++ b/functional/configuration/shelltests/format_empty.test @@ -1,4 +1,8 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -otel_configuration_check --yaml shelltests/format_empty.yaml +$ otel_configuration_check --yaml shelltests/format_empty.yaml +> +[ERROR] [Yaml Configuration Parser] Parse failed with exception: Yaml: string value is empty: file_format +FAILED TO PARSE MODEL +>= 1 diff --git a/functional/configuration/shelltests/format_empty.yaml b/functional/configuration/shelltests/format_empty.yaml index 4aca2541e8..44987ecc7f 100644 --- a/functional/configuration/shelltests/format_empty.yaml +++ b/functional/configuration/shelltests/format_empty.yaml @@ -2,4 +2,4 @@ # SPDX-License-Identifier: Apache-2.0 # This must fail -format: +file_format: From b2185eea641608a5113961edc97a90d4f091522b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 19 Jul 2025 23:39:37 +0200 Subject: [PATCH 141/166] More functional tests --- functional/configuration/main.cc | 8 +- .../shelltests/propagator_broken.test | 8 ++ .../shelltests/propagator_broken.yaml | 13 +++ .../shelltests/propagator_multi.test | 8 ++ .../shelltests/propagator_multi.yaml | 11 ++ .../shelltests/propagator_ottrace.test | 9 ++ .../shelltests/propagator_ottrace.yaml | 8 ++ .../shelltests/propagator_single.test | 8 ++ .../shelltests/propagator_single.yaml | 8 ++ .../shelltests/propagator_unknown.test | 9 ++ .../shelltests/propagator_unknown.yaml | 8 ++ .../shelltests/propagator_xray.test | 9 ++ .../shelltests/propagator_xray.yaml | 8 ++ .../configuration/propagator_configuration.h | 1 + sdk/src/configuration/configuration_parser.cc | 23 +++- sdk/src/configuration/sdk_builder.cc | 106 +++++++++--------- 16 files changed, 190 insertions(+), 55 deletions(-) create mode 100644 functional/configuration/shelltests/propagator_broken.test create mode 100644 functional/configuration/shelltests/propagator_broken.yaml create mode 100644 functional/configuration/shelltests/propagator_multi.test create mode 100644 functional/configuration/shelltests/propagator_multi.yaml create mode 100644 functional/configuration/shelltests/propagator_ottrace.test create mode 100644 functional/configuration/shelltests/propagator_ottrace.yaml create mode 100644 functional/configuration/shelltests/propagator_single.test create mode 100644 functional/configuration/shelltests/propagator_single.yaml create mode 100644 functional/configuration/shelltests/propagator_unknown.test create mode 100644 functional/configuration/shelltests/propagator_unknown.yaml create mode 100644 functional/configuration/shelltests/propagator_xray.test create mode 100644 functional/configuration/shelltests/propagator_xray.yaml diff --git a/functional/configuration/main.cc b/functional/configuration/main.cc index c948e6c6fe..4b7a551a64 100644 --- a/functional/configuration/main.cc +++ b/functional/configuration/main.cc @@ -2,13 +2,17 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include -#include #include +// #include + #include "opentelemetry/exporters/ostream/console_log_record_builder.h" #include "opentelemetry/exporters/ostream/console_push_metric_builder.h" #include "opentelemetry/exporters/ostream/console_span_builder.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/sdk/common/attribute_utils.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/configuration/configuration.h" #include "opentelemetry/sdk/configuration/configured_sdk.h" @@ -180,7 +184,7 @@ void InitOtel(const std::string &config_file) sdk = opentelemetry::sdk::configuration::ConfiguredSdk::Create(registry, model); - if (model != nullptr) + if (sdk != nullptr) { fprintf(stdout, "SDK CREATED\n"); } diff --git a/functional/configuration/shelltests/propagator_broken.test b/functional/configuration/shelltests/propagator_broken.test new file mode 100644 index 0000000000..db0cfd2337 --- /dev/null +++ b/functional/configuration/shelltests/propagator_broken.test @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_broken.yaml +> +[ERROR] [Yaml Configuration Parser] Parse failed with exception: Illegal composite child 2, properties count: 3 +FAILED TO PARSE MODEL +>= 1 diff --git a/functional/configuration/shelltests/propagator_broken.yaml b/functional/configuration/shelltests/propagator_broken.yaml new file mode 100644 index 0000000000..1e8bfc46a0 --- /dev/null +++ b/functional/configuration/shelltests/propagator_broken.yaml @@ -0,0 +1,13 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + # This is ok (child 1) + - tracecontext: + # This is broken (child 2) + - tracecontext: + foo: + bar: diff --git a/functional/configuration/shelltests/propagator_multi.test b/functional/configuration/shelltests/propagator_multi.test new file mode 100644 index 0000000000..eb7e3237a6 --- /dev/null +++ b/functional/configuration/shelltests/propagator_multi.test @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_multi.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/propagator_multi.yaml b/functional/configuration/shelltests/propagator_multi.yaml new file mode 100644 index 0000000000..e9fe8daa11 --- /dev/null +++ b/functional/configuration/shelltests/propagator_multi.yaml @@ -0,0 +1,11 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + - tracecontext: + - baggage: + - b3: + - b3multi: diff --git a/functional/configuration/shelltests/propagator_ottrace.test b/functional/configuration/shelltests/propagator_ottrace.test new file mode 100644 index 0000000000..072fd544dc --- /dev/null +++ b/functional/configuration/shelltests/propagator_ottrace.test @@ -0,0 +1,9 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_ottrace.yaml +> +MODEL PARSED +[ERROR] [Configured Sdk] builder failed with exception: CreateTextMapPropagator() no builder for ottrace +FAILED TO CREATE SDK +>= 2 diff --git a/functional/configuration/shelltests/propagator_ottrace.yaml b/functional/configuration/shelltests/propagator_ottrace.yaml new file mode 100644 index 0000000000..c3c4cf2008 --- /dev/null +++ b/functional/configuration/shelltests/propagator_ottrace.yaml @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + - ottrace: diff --git a/functional/configuration/shelltests/propagator_single.test b/functional/configuration/shelltests/propagator_single.test new file mode 100644 index 0000000000..9b1c36976d --- /dev/null +++ b/functional/configuration/shelltests/propagator_single.test @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_single.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/propagator_single.yaml b/functional/configuration/shelltests/propagator_single.yaml new file mode 100644 index 0000000000..89cd55c4ad --- /dev/null +++ b/functional/configuration/shelltests/propagator_single.yaml @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + - tracecontext: diff --git a/functional/configuration/shelltests/propagator_unknown.test b/functional/configuration/shelltests/propagator_unknown.test new file mode 100644 index 0000000000..9fec59ffd7 --- /dev/null +++ b/functional/configuration/shelltests/propagator_unknown.test @@ -0,0 +1,9 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_unknown.yaml +> +MODEL PARSED +[ERROR] [Configured Sdk] builder failed with exception: CreateTextMapPropagator() no builder for never_hear_of_this_one +FAILED TO CREATE SDK +>= 2 diff --git a/functional/configuration/shelltests/propagator_unknown.yaml b/functional/configuration/shelltests/propagator_unknown.yaml new file mode 100644 index 0000000000..505f105f57 --- /dev/null +++ b/functional/configuration/shelltests/propagator_unknown.yaml @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + - never_hear_of_this_one: diff --git a/functional/configuration/shelltests/propagator_xray.test b/functional/configuration/shelltests/propagator_xray.test new file mode 100644 index 0000000000..4fab9d5b21 --- /dev/null +++ b/functional/configuration/shelltests/propagator_xray.test @@ -0,0 +1,9 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_xray.yaml +> +MODEL PARSED +[ERROR] [Configured Sdk] builder failed with exception: CreateTextMapPropagator() no builder for xray +FAILED TO CREATE SDK +>= 2 diff --git a/functional/configuration/shelltests/propagator_xray.yaml b/functional/configuration/shelltests/propagator_xray.yaml new file mode 100644 index 0000000000..ebecf43c3a --- /dev/null +++ b/functional/configuration/shelltests/propagator_xray.yaml @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + - xray: diff --git a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h index cd1f7693d0..b2f6e476ae 100644 --- a/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h +++ b/sdk/include/opentelemetry/sdk/configuration/propagator_configuration.h @@ -20,6 +20,7 @@ class PropagatorConfiguration { public: std::vector composite; + std::string composite_list; }; } // namespace configuration diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 000b935662..13f8859bd0 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -1032,16 +1032,37 @@ static std::unique_ptr ParsePropagatorConfiguration( std::unique_ptr child; child = node->GetRequiredChildNode("composite"); + std::string name; + int num_child = 0; for (auto it = child->begin(); it != child->end(); ++it) { + // This is an entry in the composite array std::unique_ptr element(*it); + num_child++; + int count = 0; + + // Find out its name, we expect an object with a unique property. + for (auto it2 = element->begin_properties(); it2 != element->end_properties(); ++it2) + { + name = it2.Name(); + count++; + } - std::string name = element->AsString(); + if (count != 1) + { + std::string message("Illegal composite child "); + message.append(std::to_string(num_child)); + message.append(", properties count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); + } model->composite.push_back(name); } + model->composite_list = node->GetString("composite_list", ""); + return model; } diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 10b8a5c3d9..d184c59d51 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -295,7 +295,7 @@ class ResourceAttributeValueSetter class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigurationVisitor { public: - SamplerBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + SamplerBuilder(const SdkBuilder *b) : sdk_builder_(b) {} SamplerBuilder(SamplerBuilder &&) = delete; SamplerBuilder(const SamplerBuilder &) = delete; SamplerBuilder &operator=(SamplerBuilder &&) = delete; @@ -305,51 +305,51 @@ class SamplerBuilder : public opentelemetry::sdk::configuration::SamplerConfigur void VisitAlwaysOff( const opentelemetry::sdk::configuration::AlwaysOffSamplerConfiguration *model) override { - sampler = m_sdk_builder->CreateAlwaysOffSampler(model); + sampler = sdk_builder_->CreateAlwaysOffSampler(model); } void VisitAlwaysOn( const opentelemetry::sdk::configuration::AlwaysOnSamplerConfiguration *model) override { - sampler = m_sdk_builder->CreateAlwaysOnSampler(model); + sampler = sdk_builder_->CreateAlwaysOnSampler(model); } void VisitJaegerRemote( const opentelemetry::sdk::configuration::JaegerRemoteSamplerConfiguration *model) override { - sampler = m_sdk_builder->CreateJaegerRemoteSampler(model); + sampler = sdk_builder_->CreateJaegerRemoteSampler(model); } void VisitParentBased( const opentelemetry::sdk::configuration::ParentBasedSamplerConfiguration *model) override { - sampler = m_sdk_builder->CreateParentBasedSampler(model); + sampler = sdk_builder_->CreateParentBasedSampler(model); } void VisitTraceIdRatioBased( const opentelemetry::sdk::configuration::TraceIdRatioBasedSamplerConfiguration *model) override { - sampler = m_sdk_builder->CreateTraceIdRatioBasedSampler(model); + sampler = sdk_builder_->CreateTraceIdRatioBasedSampler(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionSamplerConfiguration *model) override { - sampler = m_sdk_builder->CreateExtensionSampler(model); + sampler = sdk_builder_->CreateExtensionSampler(model); } std::unique_ptr sampler; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class SpanProcessorBuilder : public opentelemetry::sdk::configuration::SpanProcessorConfigurationVisitor { public: - SpanProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + SpanProcessorBuilder(const SdkBuilder *b) : sdk_builder_(b) {} SpanProcessorBuilder(SpanProcessorBuilder &&) = delete; SpanProcessorBuilder(const SpanProcessorBuilder &) = delete; SpanProcessorBuilder &operator=(SpanProcessorBuilder &&) = delete; @@ -359,32 +359,32 @@ class SpanProcessorBuilder void VisitBatch( const opentelemetry::sdk::configuration::BatchSpanProcessorConfiguration *model) override { - processor = m_sdk_builder->CreateBatchSpanProcessor(model); + processor = sdk_builder_->CreateBatchSpanProcessor(model); } void VisitSimple( const opentelemetry::sdk::configuration::SimpleSpanProcessorConfiguration *model) override { - processor = m_sdk_builder->CreateSimpleSpanProcessor(model); + processor = sdk_builder_->CreateSimpleSpanProcessor(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionSpanProcessorConfiguration *model) override { - processor = m_sdk_builder->CreateExtensionSpanProcessor(model); + processor = sdk_builder_->CreateExtensionSpanProcessor(model); } std::unique_ptr processor; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class SpanExporterBuilder : public opentelemetry::sdk::configuration::SpanExporterConfigurationVisitor { public: - SpanExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + SpanExporterBuilder(const SdkBuilder *b) : sdk_builder_(b) {} SpanExporterBuilder(SpanExporterBuilder &&) = delete; SpanExporterBuilder(const SpanExporterBuilder &) = delete; SpanExporterBuilder &operator=(SpanExporterBuilder &&) = delete; @@ -394,50 +394,50 @@ class SpanExporterBuilder void VisitOtlpHttp( const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpHttpSpanExporter(model); + exporter = sdk_builder_->CreateOtlpHttpSpanExporter(model); } void VisitOtlpGrpc( const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpGrpcSpanExporter(model); + exporter = sdk_builder_->CreateOtlpGrpcSpanExporter(model); } void VisitOtlpFile( const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpFileSpanExporter(model); + exporter = sdk_builder_->CreateOtlpFileSpanExporter(model); } void VisitConsole( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateConsoleSpanExporter(model); + exporter = sdk_builder_->CreateConsoleSpanExporter(model); } void VisitZipkin( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateZipkinSpanExporter(model); + exporter = sdk_builder_->CreateZipkinSpanExporter(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionSpanExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateExtensionSpanExporter(model); + exporter = sdk_builder_->CreateExtensionSpanExporter(model); } std::unique_ptr exporter; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class MetricReaderBuilder : public opentelemetry::sdk::configuration::MetricReaderConfigurationVisitor { public: - MetricReaderBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + MetricReaderBuilder(const SdkBuilder *b) : sdk_builder_(b) {} MetricReaderBuilder(MetricReaderBuilder &&) = delete; MetricReaderBuilder(const MetricReaderBuilder &) = delete; MetricReaderBuilder &operator=(MetricReaderBuilder &&) = delete; @@ -447,26 +447,26 @@ class MetricReaderBuilder void VisitPeriodic( const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model) override { - metric_reader = m_sdk_builder->CreatePeriodicMetricReader(model); + metric_reader = sdk_builder_->CreatePeriodicMetricReader(model); } void VisitPull( const opentelemetry::sdk::configuration::PullMetricReaderConfiguration *model) override { - metric_reader = m_sdk_builder->CreatePullMetricReader(model); + metric_reader = sdk_builder_->CreatePullMetricReader(model); } std::unique_ptr metric_reader; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class PushMetricExporterBuilder : public opentelemetry::sdk::configuration::PushMetricExporterConfigurationVisitor { public: - PushMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + PushMetricExporterBuilder(const SdkBuilder *b) : sdk_builder_(b) {} PushMetricExporterBuilder(PushMetricExporterBuilder &&) = delete; PushMetricExporterBuilder(const PushMetricExporterBuilder &) = delete; PushMetricExporterBuilder &operator=(PushMetricExporterBuilder &&) = delete; @@ -477,47 +477,47 @@ class PushMetricExporterBuilder const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpHttpPushMetricExporter(model); + exporter = sdk_builder_->CreateOtlpHttpPushMetricExporter(model); } void VisitOtlpGrpc( const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpGrpcPushMetricExporter(model); + exporter = sdk_builder_->CreateOtlpGrpcPushMetricExporter(model); } void VisitOtlpFile( const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpFilePushMetricExporter(model); + exporter = sdk_builder_->CreateOtlpFilePushMetricExporter(model); } void VisitConsole(const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateConsolePushMetricExporter(model); + exporter = sdk_builder_->CreateConsolePushMetricExporter(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionPushMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateExtensionPushMetricExporter(model); + exporter = sdk_builder_->CreateExtensionPushMetricExporter(model); } std::unique_ptr exporter; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class PullMetricExporterBuilder : public opentelemetry::sdk::configuration::PullMetricExporterConfigurationVisitor { public: - PullMetricExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + PullMetricExporterBuilder(const SdkBuilder *b) : sdk_builder_(b) {} PullMetricExporterBuilder(PullMetricExporterBuilder &&) = delete; PullMetricExporterBuilder(const PullMetricExporterBuilder &) = delete; PullMetricExporterBuilder &operator=(PullMetricExporterBuilder &&) = delete; @@ -528,27 +528,27 @@ class PullMetricExporterBuilder const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreatePrometheusPullMetricExporter(model); + exporter = sdk_builder_->CreatePrometheusPullMetricExporter(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionPullMetricExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateExtensionPullMetricExporter(model); + exporter = sdk_builder_->CreateExtensionPullMetricExporter(model); } std::unique_ptr exporter; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class AggregationConfigBuilder : public opentelemetry::sdk::configuration::AggregationConfigurationVisitor { public: - AggregationConfigBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + AggregationConfigBuilder(const SdkBuilder *b) : sdk_builder_(b) {} AggregationConfigBuilder(AggregationConfigBuilder &&) = delete; AggregationConfigBuilder(const AggregationConfigBuilder &) = delete; AggregationConfigBuilder &operator=(AggregationConfigBuilder &&) = delete; @@ -560,7 +560,7 @@ class AggregationConfigBuilder Base2ExponentialBucketHistogramAggregationConfiguration *model) override { aggregation_type = opentelemetry::sdk::metrics::AggregationType::kBase2ExponentialHistogram; - aggregation_config = m_sdk_builder->CreateBase2ExponentialBucketHistogramAggregation(model); + aggregation_config = sdk_builder_->CreateBase2ExponentialBucketHistogramAggregation(model); } void VisitDefault(const opentelemetry::sdk::configuration::DefaultAggregationConfiguration @@ -580,7 +580,7 @@ class AggregationConfigBuilder *model) override { aggregation_type = opentelemetry::sdk::metrics::AggregationType::kHistogram; - aggregation_config = m_sdk_builder->CreateExplicitBucketHistogramAggregation(model); + aggregation_config = sdk_builder_->CreateExplicitBucketHistogramAggregation(model); } void VisitLastValue(const opentelemetry::sdk::configuration::LastValueAggregationConfiguration @@ -599,14 +599,14 @@ class AggregationConfigBuilder std::unique_ptr aggregation_config; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class LogRecordProcessorBuilder : public opentelemetry::sdk::configuration::LogRecordProcessorConfigurationVisitor { public: - LogRecordProcessorBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + LogRecordProcessorBuilder(const SdkBuilder *b) : sdk_builder_(b) {} LogRecordProcessorBuilder(LogRecordProcessorBuilder &&) = delete; LogRecordProcessorBuilder(const LogRecordProcessorBuilder &) = delete; LogRecordProcessorBuilder &operator=(LogRecordProcessorBuilder &&) = delete; @@ -616,33 +616,33 @@ class LogRecordProcessorBuilder void VisitBatch( const opentelemetry::sdk::configuration::BatchLogRecordProcessorConfiguration *model) override { - processor = m_sdk_builder->CreateBatchLogRecordProcessor(model); + processor = sdk_builder_->CreateBatchLogRecordProcessor(model); } void VisitSimple(const opentelemetry::sdk::configuration::SimpleLogRecordProcessorConfiguration *model) override { - processor = m_sdk_builder->CreateSimpleLogRecordProcessor(model); + processor = sdk_builder_->CreateSimpleLogRecordProcessor(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionLogRecordProcessorConfiguration *model) override { - processor = m_sdk_builder->CreateExtensionLogRecordProcessor(model); + processor = sdk_builder_->CreateExtensionLogRecordProcessor(model); } std::unique_ptr processor; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; class LogRecordExporterBuilder : public opentelemetry::sdk::configuration::LogRecordExporterConfigurationVisitor { public: - LogRecordExporterBuilder(const SdkBuilder *b) : m_sdk_builder(b) {} + LogRecordExporterBuilder(const SdkBuilder *b) : sdk_builder_(b) {} LogRecordExporterBuilder(LogRecordExporterBuilder &&) = delete; LogRecordExporterBuilder(const LogRecordExporterBuilder &) = delete; LogRecordExporterBuilder &operator=(LogRecordExporterBuilder &&) = delete; @@ -652,38 +652,38 @@ class LogRecordExporterBuilder void VisitOtlpHttp(const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpHttpLogRecordExporter(model); + exporter = sdk_builder_->CreateOtlpHttpLogRecordExporter(model); } void VisitOtlpGrpc(const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpGrpcLogRecordExporter(model); + exporter = sdk_builder_->CreateOtlpGrpcLogRecordExporter(model); } void VisitOtlpFile(const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateOtlpFileLogRecordExporter(model); + exporter = sdk_builder_->CreateOtlpFileLogRecordExporter(model); } void VisitConsole(const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateConsoleLogRecordExporter(model); + exporter = sdk_builder_->CreateConsoleLogRecordExporter(model); } void VisitExtension( const opentelemetry::sdk::configuration::ExtensionLogRecordExporterConfiguration *model) override { - exporter = m_sdk_builder->CreateExtensionLogRecordExporter(model); + exporter = sdk_builder_->CreateExtensionLogRecordExporter(model); } std::unique_ptr exporter; private: - const SdkBuilder *m_sdk_builder; + const SdkBuilder *sdk_builder_; }; std::unique_ptr SdkBuilder::CreateAlwaysOffSampler( @@ -1065,6 +1065,8 @@ SdkBuilder::CreatePropagator( propagators.push_back(std::move(propagator)); } + // FIXME: composite_list + auto sdk = std::make_unique( std::move(propagators)); From eb018dd1d98dbfce79ad6316684c3e1a20049adc Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 00:34:16 +0200 Subject: [PATCH 142/166] Code review comments (sdk_builder) --- examples/yaml/main.cc | 4 +-- functional/configuration/main.cc | 7 ++-- .../sdk/configuration/configured_sdk.h | 32 +++++++++++++------ sdk/src/configuration/configured_sdk.cc | 28 ++++++++-------- sdk/src/configuration/sdk_builder.cc | 19 +++++++---- 5 files changed, 56 insertions(+), 34 deletions(-) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index ab98dc907a..f1b401673d 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -132,7 +132,7 @@ void InitOtel(const std::string &config_file) if (sdk != nullptr) { - sdk->Install(); + sdk->Init(); } } @@ -140,7 +140,7 @@ void CleanupOtel() { if (sdk != nullptr) { - sdk->UnInstall(); + sdk->Cleanup(); } sdk.reset(nullptr); } diff --git a/functional/configuration/main.cc b/functional/configuration/main.cc index 4b7a551a64..132ba29c74 100644 --- a/functional/configuration/main.cc +++ b/functional/configuration/main.cc @@ -1,6 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +// NOTE: This file is adapted from example/yaml/main.cc, +// to execute functional tests driven by shelltest. + #include #include #include @@ -198,7 +201,7 @@ void InitOtel(const std::string &config_file) if (sdk != nullptr) { - sdk->Install(); + sdk->Init(); } } @@ -206,7 +209,7 @@ void CleanupOtel() { if (sdk != nullptr) { - sdk->UnInstall(); + sdk->Cleanup(); } sdk.reset(nullptr); } diff --git a/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h index d3a05f2481..1bd64552be 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h @@ -27,16 +27,28 @@ class ConfiguredSdk std::shared_ptr registry, const std::unique_ptr &model); - ConfiguredSdk() : resource(opentelemetry::sdk::resource::Resource::GetEmpty()) {} - - void Install(); - void UnInstall(); - - opentelemetry::sdk::resource::Resource resource; - std::shared_ptr tracer_provider; - std::shared_ptr propagator; - std::shared_ptr meter_provider; - std::shared_ptr logger_provider; + ConfiguredSdk( + opentelemetry::sdk::resource::Resource &&resource, + const std::shared_ptr &tracer_provider, + const std::shared_ptr &propagator, + const std::shared_ptr &meter_provider, + const std::shared_ptr &logger_provider) + : resource_(std::move(resource)), + tracer_provider_(tracer_provider), + propagator_(propagator), + meter_provider_(meter_provider), + logger_provider_(logger_provider) + {} + + void Init(); + void Cleanup(); + +private: + opentelemetry::sdk::resource::Resource resource_; + std::shared_ptr tracer_provider_; + std::shared_ptr propagator_; + std::shared_ptr meter_provider_; + std::shared_ptr logger_provider_; }; } // namespace configuration diff --git a/sdk/src/configuration/configured_sdk.cc b/sdk/src/configuration/configured_sdk.cc index 3eb81c9e48..ea370c7374 100644 --- a/sdk/src/configuration/configured_sdk.cc +++ b/sdk/src/configuration/configured_sdk.cc @@ -56,53 +56,53 @@ std::unique_ptr ConfiguredSdk::Create( return sdk; } -void ConfiguredSdk::Install() +void ConfiguredSdk::Init() { - if (propagator) + if (propagator_) { - opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(propagator); + opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(propagator_); } - if (tracer_provider) + if (tracer_provider_) { - std::shared_ptr api_tracer_provider = tracer_provider; + std::shared_ptr api_tracer_provider = tracer_provider_; opentelemetry::trace::Provider::SetTracerProvider(api_tracer_provider); } - if (meter_provider) + if (meter_provider_) { - std::shared_ptr api_meter_provider = meter_provider; + std::shared_ptr api_meter_provider = meter_provider_; opentelemetry::metrics::Provider::SetMeterProvider(api_meter_provider); } - if (logger_provider) + if (logger_provider_) { - std::shared_ptr api_logger_provider = logger_provider; + std::shared_ptr api_logger_provider = logger_provider_; opentelemetry::logs::Provider::SetLoggerProvider(api_logger_provider); } } -void ConfiguredSdk::UnInstall() +void ConfiguredSdk::Cleanup() { - if (propagator) + if (propagator_) { std::shared_ptr none; opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(none); } - if (tracer_provider) + if (tracer_provider_) { std::shared_ptr none; opentelemetry::trace::Provider::SetTracerProvider(none); } - if (meter_provider) + if (meter_provider_) { std::shared_ptr none; opentelemetry::metrics::Provider::SetMeterProvider(none); } - if (logger_provider) + if (logger_provider_) { std::shared_ptr none; opentelemetry::logs::Provider::SetLoggerProvider(none); diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index d184c59d51..1cc660850b 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1717,11 +1717,16 @@ void SdkBuilder::SetResource( std::unique_ptr SdkBuilder::CreateConfiguredSdk( const std::unique_ptr &model) const { - auto sdk = std::make_unique(); + std::unique_ptr sdk; + auto resource = opentelemetry::sdk::resource::Resource::GetEmpty(); + std::shared_ptr tracer_provider; + std::shared_ptr propagator; + std::shared_ptr meter_provider; + std::shared_ptr logger_provider; if (!model->disabled) { - SetResource(sdk->resource, model->resource); + SetResource(resource, model->resource); if (model->attribute_limits) { @@ -1732,25 +1737,27 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (model->tracer_provider) { - sdk->tracer_provider = CreateTracerProvider(model->tracer_provider, sdk->resource); + tracer_provider = CreateTracerProvider(model->tracer_provider, resource); } if (model->propagator) { - sdk->propagator = CreatePropagator(model->propagator); + propagator = CreatePropagator(model->propagator); } if (model->meter_provider) { - sdk->meter_provider = CreateMeterProvider(model->meter_provider, sdk->resource); + meter_provider = CreateMeterProvider(model->meter_provider, resource); } if (model->logger_provider) { - sdk->logger_provider = CreateLoggerProvider(model->logger_provider, sdk->resource); + logger_provider = CreateLoggerProvider(model->logger_provider, resource); } } + sdk = std::make_unique(std::move(resource), tracer_provider, propagator, + meter_provider, logger_provider); return sdk; } From 14c90db0e477f3c521d412f1bd5e0d0698ce07d7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 01:36:02 +0200 Subject: [PATCH 143/166] kitchen-sink functional test --- .../shelltests/kitchen-sink.test | 16 + .../shelltests/kitchen-sink.yaml | 950 ++++++++++++++++++ .../shelltests/sampler_jaeger.test | 11 + .../shelltests/sampler_jaeger.yaml | 12 + sdk/src/configuration/configuration_parser.cc | 2 +- sdk/src/configuration/sdk_builder.cc | 2 +- 6 files changed, 991 insertions(+), 2 deletions(-) create mode 100644 functional/configuration/shelltests/kitchen-sink.test create mode 100644 functional/configuration/shelltests/kitchen-sink.yaml create mode 100644 functional/configuration/shelltests/sampler_jaeger.test create mode 100644 functional/configuration/shelltests/sampler_jaeger.yaml diff --git a/functional/configuration/shelltests/kitchen-sink.test b/functional/configuration/shelltests/kitchen-sink.test new file mode 100644 index 0000000000..43191602e8 --- /dev/null +++ b/functional/configuration/shelltests/kitchen-sink.test @@ -0,0 +1,16 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/kitchen-sink.yaml +> +MODEL PARSED +[WARNING] attribute_limits not supported, ignoring +[ERROR] CreateTracerProvider: FIXME-CONFIG (IdGenerator) +[ERROR] CreateParentBasedSampler: FIXME-SDK, missing param in parent factory +[ERROR] CreateAttributesProcessor() FIXME-SDK IncludeExclude +[WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values +[WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values +[WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values +[WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/kitchen-sink.yaml b/functional/configuration/shelltests/kitchen-sink.yaml new file mode 100644 index 0000000000..a52d29b65d --- /dev/null +++ b/functional/configuration/shelltests/kitchen-sink.yaml @@ -0,0 +1,950 @@ +# kitchen-sink.yaml demonstrates all configurable surface area, including explanatory comments. +# +# It DOES NOT represent expected real world configuration, as it makes strange configuration +# choices in an effort to exercise the full surface area. +# +# Configuration values are set to their defaults when default values are defined. + +# The file format version. +# The yaml format is documented at +# https://github.com/open-telemetry/opentelemetry-configuration/tree/main/schema +file_format: "1.0-rc.1" +# Configure if the SDK is disabled or not. +# If omitted or null, false is used. +disabled: false +# Configure the log level of the internal logger used by the SDK. +# If omitted, info is used. +log_level: info +# Configure general attribute limits. See also tracer_provider.limits, logger_provider.limits. +attribute_limits: + # Configure max attribute value size. + # Value must be non-negative. + # If omitted or null, there is no limit. + attribute_value_length_limit: 4096 + # Configure max attribute count. + # Value must be non-negative. + # If omitted or null, 128 is used. + attribute_count_limit: 128 +# Configure logger provider. +# If omitted, a noop logger provider is used. +logger_provider: + # Configure log record processors. + processors: + - # Configure a batch log record processor. + batch: + # Configure delay interval (in milliseconds) between two consecutive exports. + # Value must be non-negative. + # If omitted or null, 1000 is used. + schedule_delay: 5000 + # Configure maximum allowed time (in milliseconds) to export data. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 30000 is used. + export_timeout: 30000 + # Configure maximum queue size. Value must be positive. + # If omitted or null, 2048 is used. + max_queue_size: 2048 + # Configure maximum batch size. Value must be positive. + # If omitted or null, 512 is used. + max_export_batch_size: 512 + # Configure exporter. + exporter: + # Configure exporter to be OTLP with HTTP transport. + otlp_http: + endpoint: http://localhost:4318/v1/logs + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure the encoding used for messages. + # Values include: protobuf, json. Implementations may not support json. + # If omitted or null, protobuf is used. + encoding: protobuf + - # Configure a batch log record processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with gRPC transport. + otlp_grpc: + # Configure endpoint. + # If omitted or null, http://localhost:4317 is used. + endpoint: http://localhost:4317 + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure client transport security for the exporter's connection. + # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. + # If omitted or null, false is used. + insecure: false + - # Configure a batch log record processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: file:///var/log/logs.jsonl + - # Configure a batch log record processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: stdout + - # Configure a simple log record processor. + simple: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: + # Configure log record limits. See also attribute_limits. + limits: + # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. + # Value must be non-negative. + # If omitted or null, there is no limit. + attribute_value_length_limit: 4096 + # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. + # Value must be non-negative. + # If omitted or null, 128 is used. + attribute_count_limit: 128 + # Configure loggers. + # This type is in development and subject to breaking changes in minor versions. + logger_configurator/development: + # Configure the default logger config used there is no matching entry in .logger_configurator/development.loggers. + default_config: + # Configure if the logger is enabled or not. + disabled: true + # Configure loggers. + loggers: + - # Configure logger names to match, evaluated as follows: + # + # * If the logger name exactly matches. + # * If the logger name matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + name: io.opentelemetry.contrib.* + # The logger config. + config: + # Configure if the logger is enabled or not. + disabled: false +# Configure meter provider. +# If omitted, a noop meter provider is used. +meter_provider: + # Configure metric readers. + readers: + - # Configure a pull based metric reader. + pull: + # Configure exporter. + exporter: + # Configure exporter to be prometheus. + # This type is in development and subject to breaking changes in minor versions. + prometheus/development: + # Configure host. + # If omitted or null, localhost is used. + host: localhost + # Configure port. + # If omitted or null, 9464 is used. + port: 9464 + # Configure Prometheus Exporter to produce metrics without a unit suffix or UNIT metadata. + # If omitted or null, false is used. + without_units: false + # Configure Prometheus Exporter to produce metrics without a type suffix. + # If omitted or null, false is used. + without_type_suffix: false + # Configure Prometheus Exporter to produce metrics without a scope info metric. + # If omitted or null, false is used. + without_scope_info: false + # Configure Prometheus Exporter to add resource attributes as metrics attributes. + with_resource_constant_labels: + # Configure resource attributes to be included. + # Attribute keys from resources are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, no resource attributes are included. + included: + - "service*" + # Configure resource attributes to be excluded. Applies after .with_resource_constant_labels.included (i.e. excluded has higher priority than included). + # Attribute keys from resources are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, .included resource attributes are included. + excluded: + - "service.attr1" + # Configure metric producers. + producers: + - # Configure metric producer to be opencensus. + opencensus: + # Configure cardinality limits. + cardinality_limits: + # Configure default cardinality limit for all instrument types. + # Instrument-specific cardinality limits take priority. + # If omitted or null, 2000 is used. + default: 2000 + # Configure default cardinality limit for counter instruments. + # If omitted or null, the value from .default is used. + counter: 2000 + # Configure default cardinality limit for gauge instruments. + # If omitted or null, the value from .default is used. + gauge: 2000 + # Configure default cardinality limit for histogram instruments. + # If omitted or null, the value from .default is used. + histogram: 2000 + # Configure default cardinality limit for observable_counter instruments. + # If omitted or null, the value from .default is used. + observable_counter: 2000 + # Configure default cardinality limit for observable_gauge instruments. + # If omitted or null, the value from .default is used. + observable_gauge: 2000 + # Configure default cardinality limit for observable_up_down_counter instruments. + # If omitted or null, the value from .default is used. + observable_up_down_counter: 2000 + # Configure default cardinality limit for up_down_counter instruments. + # If omitted or null, the value from .default is used. + up_down_counter: 2000 + - # Configure a periodic metric reader. + periodic: + # Configure delay interval (in milliseconds) between start of two consecutive exports. + # Value must be non-negative. + # If omitted or null, 60000 is used. + interval: 60000 + # Configure maximum allowed time (in milliseconds) to export data. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 30000 is used. + timeout: 30000 + # Configure exporter. + exporter: + # Configure exporter to be OTLP with HTTP transport. + otlp_http: + # Configure endpoint, including the metric specific path. + # If omitted or null, http://localhost:4318/v1/metrics is used. + endpoint: http://localhost:4318/v1/metrics + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure the encoding used for messages. + # Values include: protobuf, json. Implementations may not support json. + # If omitted or null, protobuf is used. + encoding: protobuf + # Configure temporality preference. + # Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. + temporality_preference: delta + # Configure default histogram aggregation. + # Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. + default_histogram_aggregation: base2_exponential_bucket_histogram + # Configure metric producers. + producers: + - # Configure metric producer to be prometheus. + prometheus: + # Configure cardinality limits. + cardinality_limits: + # Configure default cardinality limit for all instrument types. + # Instrument-specific cardinality limits take priority. + # If omitted or null, 2000 is used. + default: 2000 + # Configure default cardinality limit for counter instruments. + # If omitted or null, the value from .default is used. + counter: 2000 + # Configure default cardinality limit for gauge instruments. + # If omitted or null, the value from .default is used. + gauge: 2000 + # Configure default cardinality limit for histogram instruments. + # If omitted or null, the value from .default is used. + histogram: 2000 + # Configure default cardinality limit for observable_counter instruments. + # If omitted or null, the value from .default is used. + observable_counter: 2000 + # Configure default cardinality limit for observable_gauge instruments. + # If omitted or null, the value from .default is used. + observable_gauge: 2000 + # Configure default cardinality limit for observable_up_down_counter instruments. + # If omitted or null, the value from .default is used. + observable_up_down_counter: 2000 + # Configure default cardinality limit for up_down_counter instruments. + # If omitted or null, the value from .default is used. + up_down_counter: 2000 + - # Configure a periodic metric reader. + periodic: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with gRPC transport. + otlp_grpc: + # Configure endpoint. + # If omitted or null, http://localhost:4317 is used. + endpoint: http://localhost:4317 + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure client transport security for the exporter's connection. + # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. + # If omitted or null, false is used. + insecure: false + # Configure temporality preference. + # Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. + temporality_preference: delta + # Configure default histogram aggregation. + # Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. + default_histogram_aggregation: base2_exponential_bucket_histogram + - # Configure a periodic metric reader. + periodic: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: file:///var/log/metrics.jsonl + # Configure temporality preference. Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. + temporality_preference: delta + # Configure default histogram aggregation. Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. + default_histogram_aggregation: base2_exponential_bucket_histogram + - # Configure a periodic metric reader. + periodic: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: stdout + # Configure temporality preference. Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, cumulative is used. + temporality_preference: delta + # Configure default histogram aggregation. Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. + # If omitted or null, explicit_bucket_histogram is used. + default_histogram_aggregation: base2_exponential_bucket_histogram + - # Configure a periodic metric reader. + periodic: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: + # Configure views. + # Each view has a selector which determines the instrument(s) it applies to, and a configuration for the resulting stream(s). + views: + - # Configure view selector. + # Selection criteria is additive as described in https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#instrument-selection-criteria. + selector: + # Configure instrument name selection criteria. + # If omitted or null, all instrument names match. + instrument_name: my-instrument + # Configure instrument type selection criteria. + # Values include: counter, gauge, histogram, observable_counter, observable_gauge, observable_up_down_counter, up_down_counter. + # If omitted or null, all instrument types match. + instrument_type: histogram + # Configure the instrument unit selection criteria. + # If omitted or null, all instrument units match. + unit: ms + # Configure meter name selection criteria. + # If omitted or null, all meter names match. + meter_name: my-meter + # Configure meter version selection criteria. + # If omitted or null, all meter versions match. + meter_version: 1.0.0 + # Configure meter schema url selection criteria. + # If omitted or null, all meter schema URLs match. + meter_schema_url: https://opentelemetry.io/schemas/1.16.0 + # Configure view stream. + stream: + # Configure metric name of the resulting stream(s). + # If omitted or null, the instrument's original name is used. + name: new_instrument_name + # Configure metric description of the resulting stream(s). + # If omitted or null, the instrument's origin description is used. + description: new_description + # Configure aggregation of the resulting stream(s). + # Values include: default, drop, explicit_bucket_histogram, base2_exponential_bucket_histogram, last_value, sum. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#aggregation. + # If omitted, default is used. + aggregation: + # Configure aggregation to be explicit_bucket_histogram. + explicit_bucket_histogram: + # Configure bucket boundaries. + # If omitted, [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000] is used. + boundaries: + [ + 0.0, + 5.0, + 10.0, + 25.0, + 50.0, + 75.0, + 100.0, + 250.0, + 500.0, + 750.0, + 1000.0, + 2500.0, + 5000.0, + 7500.0, + 10000.0 + ] + # Configure record min and max. + # If omitted or null, true is used. + record_min_max: true + # Configure the aggregation cardinality limit. + # If omitted or null, the metric reader's default cardinality limit is used. + aggregation_cardinality_limit: 2000 + # Configure attribute keys retained in the resulting stream(s). + attribute_keys: + # Configure list of attribute keys to include in the resulting stream(s). All other attributes are dropped. + # If omitted, all attributes are included. + included: + - key1 + - key2 + # Configure list of attribute keys to exclude from the resulting stream(s). Applies after .attribute_keys.included (i.e. excluded has higher priority than included). + # If omitted, .attribute_keys.included are included. + excluded: + - key3 + # Configure the exemplar filter. + # Values include: trace_based, always_on, always_off. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#metrics-sdk-configuration. + # If omitted or null, trace_based is used. + exemplar_filter: trace_based + # Configure meters. + # This type is in development and subject to breaking changes in minor versions. + meter_configurator/development: + # Configure the default meter config used there is no matching entry in .meter_configurator/development.meters. + default_config: + # Configure if the meter is enabled or not. + disabled: true + # Configure meters. + meters: + - # Configure meter names to match, evaluated as follows: + # + # * If the meter name exactly matches. + # * If the meter name matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + name: io.opentelemetry.contrib.* + # The meter config. + config: + # Configure if the meter is enabled or not. + disabled: false +# Configure text map context propagators. +# If omitted, a noop propagator is used. +propagator: + # Configure the propagators in the composite text map propagator. Entries from .composite_list are appended to the list here with duplicates filtered out. + # Built-in propagator keys include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party keys include: xray. + # If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used. + composite: + - # Include the w3c trace context propagator. + tracecontext: + - # Include the w3c baggage propagator. + baggage: + - # Include the zipkin b3 propagator. + b3: + - # Include the zipkin b3 multi propagator. + b3multi: + - # Include the jaeger propagator. + jaeger: + +# ottrace not supported in opentelemetry-cpp +# - # Include the opentracing propagator. +# ottrace: + + # Configure the propagators in the composite text map propagator. Entries are appended to .composite with duplicates filtered out. + # The value is a comma separated list of propagator identifiers matching the format of OTEL_PROPAGATORS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details. + # Built-in propagator identifiers include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party identifiers include: xray. + # If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used. + composite_list: "tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray" +# Configure tracer provider. +# If omitted, a noop tracer provider is used. +tracer_provider: + # Configure span processors. + processors: + - # Configure a batch span processor. + batch: + # Configure delay interval (in milliseconds) between two consecutive exports. + # Value must be non-negative. + # If omitted or null, 5000 is used. + schedule_delay: 5000 + # Configure maximum allowed time (in milliseconds) to export data. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 30000 is used. + export_timeout: 30000 + # Configure maximum queue size. Value must be positive. + # If omitted or null, 2048 is used. + max_queue_size: 2048 + # Configure maximum batch size. Value must be positive. + # If omitted or null, 512 is used. + max_export_batch_size: 512 + # Configure exporter. + exporter: + # Configure exporter to be OTLP with HTTP transport. + otlp_http: + # Configure endpoint, including the trace specific path. + # If omitted or null, http://localhost:4318/v1/traces is used. + endpoint: http://localhost:4318/v1/traces + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure the encoding used for messages. + # Values include: protobuf, json. Implementations may not support json. + # If omitted or null, protobuf is used. + encoding: protobuf + - # Configure a batch span processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with gRPC transport. + otlp_grpc: + # Configure endpoint. + # If omitted or null, http://localhost:4317 is used. + endpoint: http://localhost:4317 + # Configure certificate used to verify a server's TLS credentials. + # Absolute path to certificate file in PEM format. + # If omitted or null, system default certificate verification is used for secure connections. + certificate_file: /app/cert.pem + # Configure mTLS private client key. + # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. + # If omitted or null, mTLS is not used. + client_key_file: /app/cert.pem + # Configure mTLS client certificate. + # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. + # If omitted or null, mTLS is not used. + client_certificate_file: /app/cert.pem + # Configure headers. Entries have higher priority than entries from .headers_list. + # If an entry's .value is null, the entry is ignored. + headers: + - name: api-key + value: "1234" + # Configure headers. Entries have lower priority than entries from .headers. + # The value is a list of comma separated key-value pairs matching the format of OTEL_EXPORTER_OTLP_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options for details. + # If omitted or null, no headers are added. + headers_list: "api-key=1234" + # Configure compression. + # Values include: gzip, none. Implementations may support other compression algorithms. + # If omitted or null, none is used. + compression: gzip + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates no limit (infinity). + # If omitted or null, 10000 is used. + timeout: 10000 + # Configure client transport security for the exporter's connection. + # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. + # If omitted or null, false is used. + insecure: false + - # Configure a batch span processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: file:///var/log/traces.jsonl + - # Configure a batch span processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be OTLP with file transport. + # This type is in development and subject to breaking changes in minor versions. + otlp_file/development: + # Configure output stream. + # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. + # If omitted or null, stdout is used. + output_stream: stdout + - # Configure a batch span processor. + batch: + # Configure exporter. + exporter: + # Configure exporter to be zipkin. + zipkin: + # Configure endpoint. + # If omitted or null, http://localhost:9411/api/v2/spans is used. + endpoint: http://localhost:9411/api/v2/spans + # Configure max time (in milliseconds) to wait for each export. + # Value must be non-negative. A value of 0 indicates indefinite. + # If omitted or null, 10000 is used. + timeout: 10000 + - # Configure a simple span processor. + simple: + # Configure exporter. + exporter: + # Configure exporter to be console. + console: + # Configure span limits. See also attribute_limits. + limits: + # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. + # Value must be non-negative. + # If omitted or null, there is no limit. + attribute_value_length_limit: 4096 + # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. + # Value must be non-negative. + # If omitted or null, 128 is used. + attribute_count_limit: 128 + # Configure max span event count. + # Value must be non-negative. + # If omitted or null, 128 is used. + event_count_limit: 128 + # Configure max span link count. + # Value must be non-negative. + # If omitted or null, 128 is used. + link_count_limit: 128 + # Configure max attributes per span event. + # Value must be non-negative. + # If omitted or null, 128 is used. + event_attribute_count_limit: 128 + # Configure max attributes per span link. + # Value must be non-negative. + # If omitted or null, 128 is used. + link_attribute_count_limit: 128 + # Configure the sampler. + # If omitted, parent based sampler with a root of always_on is used. + sampler: + # Configure sampler to be parent_based. + parent_based: + # Configure root sampler. + # If omitted or null, always_on is used. + root: + # Configure sampler to be trace_id_ratio_based. + trace_id_ratio_based: + # Configure trace_id_ratio. + # If omitted or null, 1.0 is used. + ratio: 0.0001 + # Configure remote_parent_sampled sampler. + # If omitted or null, always_on is used. + remote_parent_sampled: + # Configure sampler to be always_on. + always_on: + # Configure remote_parent_not_sampled sampler. + # If omitted or null, always_off is used. + remote_parent_not_sampled: + # Configure sampler to be always_off. + always_off: + # Configure local_parent_sampled sampler. + # If omitted or null, always_on is used. + local_parent_sampled: + # Configure sampler to be always_on. + always_on: + # Configure local_parent_not_sampled sampler. + # If omitted or null, always_off is used. + local_parent_not_sampled: + # Configure sampler to be always_off. + always_off: + # Configure tracers. + # This type is in development and subject to breaking changes in minor versions. + tracer_configurator/development: + # Configure the default tracer config used there is no matching entry in .tracer_configurator/development.tracers. + default_config: + # Configure if the tracer is enabled or not. + disabled: true + # Configure tracers. + tracers: + - # Configure tracer names to match, evaluated as follows: + # + # * If the tracer name exactly matches. + # * If the tracer name matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + name: io.opentelemetry.contrib.* + # The tracer config. + config: + # Configure if the tracer is enabled or not. + disabled: false +# Configure resource for all signals. +# If omitted, the default resource is used. +resource: + # Configure resource attributes. Entries have higher priority than entries from .resource.attributes_list. + # Entries must contain .name and .value, and may optionally include .type. If an entry's .type omitted or null, string is used. + # The .value's type must match the .type. Values for .type include: string, bool, int, double, string_array, bool_array, int_array, double_array. + attributes: + - name: service.name + value: unknown_service + - name: string_key + value: value + type: string + - name: bool_key + value: true + type: bool + - name: int_key + value: 1 + type: int + - name: double_key + value: 1.1 + type: double + - name: string_array_key + value: [ "value1", "value2" ] + type: string_array + - name: bool_array_key + value: [ true, false ] + type: bool_array + - name: int_array_key + value: [ 1, 2 ] + type: int_array + - name: double_array_key + value: [ 1.1, 2.2 ] + type: double_array + # Configure resource attributes. Entries have lower priority than entries from .resource.attributes. + # The value is a list of comma separated key-value pairs matching the format of OTEL_RESOURCE_ATTRIBUTES. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details. + # If omitted or null, no resource attributes are added. + attributes_list: "service.namespace=my-namespace,service.version=1.0.0" + # Configure resource detection. + # This type is in development and subject to breaking changes in minor versions. + # If omitted or null, resource detection is disabled. + detection/development: + # Configure attributes provided by resource detectors. + attributes: + # Configure list of attribute key patterns to include from resource detectors. + # Attribute keys from resource detectors are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, all attributes are included. + included: + - process.* + # Configure list of attribute key patterns to exclude from resource detectors. Applies after .resource.detectors.attributes.included (i.e. excluded has higher priority than included). + # Attribute keys from resource detectors are evaluated to match as follows: + # * If the value of the attribute key exactly matches. + # * If the value of the attribute key matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + # If omitted, .included attributes are included. + excluded: + - process.command_args + # Configure resource detectors. + # Resource detector names are dependent on the SDK language ecosystem. Please consult documentation for each respective language. + # If omitted or null, no resource detectors are enabled. + detectors: + - # Enable the container resource detector, which populates container.* attributes. + container: + - # Enable the host resource detector, which populates host.* and os.* attributes. + host: + - # Enable the process resource detector, which populates process.* attributes. + process: + - # Enable the service detector, which populates service.name based on the OTEL_SERVICE_NAME environment variable and service.instance.id. + service: + # Configure resource schema URL. + # If omitted or null, no schema URL is used. + schema_url: https://opentelemetry.io/schemas/1.16.0 +# Configure instrumentation. +# This type is in development and subject to breaking changes in minor versions. +instrumentation/development: + # Configure general SemConv options that may apply to multiple languages and instrumentations. + # Instrumenation may merge general config options with the language specific configuration at .instrumentation.. + general: + # Configure instrumentations following the peer semantic conventions. + # See peer semantic conventions: https://opentelemetry.io/docs/specs/semconv/attributes-registry/peer/ + peer: + # Configure the service mapping for instrumentations following peer.service semantic conventions. + # Each entry is a key value pair where "peer" defines the IP address and "service" defines the corresponding logical name of the service. + # See peer.service semantic conventions: https://opentelemetry.io/docs/specs/semconv/general/attributes/#general-remote-service-attributes + service_mapping: + - peer: 1.2.3.4 + service: FooService + - peer: 2.3.4.5 + service: BarService + # Configure instrumentations following the http semantic conventions. + # See http semantic conventions: https://opentelemetry.io/docs/specs/semconv/http/ + http: + # Configure instrumentations following the http client semantic conventions. + client: + # Configure headers to capture for outbound http requests. + request_captured_headers: + - Content-Type + - Accept + # Configure headers to capture for outbound http responses. + response_captured_headers: + - Content-Type + - Content-Encoding + # Configure instrumentations following the http server semantic conventions. + server: + # Configure headers to capture for inbound http requests. + request_captured_headers: + - Content-Type + - Accept + # Configure headers to capture for outbound http responses. + response_captured_headers: + - Content-Type + - Content-Encoding + # Configure C++ language-specific instrumentation libraries. + cpp: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure .NET language-specific instrumentation libraries. + dotnet: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Erlang language-specific instrumentation libraries. + erlang: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Go language-specific instrumentation libraries. + go: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Java language-specific instrumentation libraries. + java: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure JavaScript language-specific instrumentation libraries. + js: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure PHP language-specific instrumentation libraries. + php: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Python language-specific instrumentation libraries. + python: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Ruby language-specific instrumentation libraries. + ruby: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Rust language-specific instrumentation libraries. + rust: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" + # Configure Swift language-specific instrumentation libraries. + swift: + # Configure the instrumentation corresponding to key "example". + example: + property: "value" diff --git a/functional/configuration/shelltests/sampler_jaeger.test b/functional/configuration/shelltests/sampler_jaeger.test new file mode 100644 index 0000000000..2d845105e2 --- /dev/null +++ b/functional/configuration/shelltests/sampler_jaeger.test @@ -0,0 +1,11 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/sampler_jaeger.yaml +> +[ERROR] JaegerRemoteSamplerConfiguration: FIXME +MODEL PARSED +[ERROR] CreateTracerProvider: FIXME-CONFIG (IdGenerator) +[ERROR] [Configured Sdk] builder failed with exception: JaegerRemoteSampler not supported +FAILED TO CREATE SDK +>= 2 diff --git a/functional/configuration/shelltests/sampler_jaeger.yaml b/functional/configuration/shelltests/sampler_jaeger.yaml new file mode 100644 index 0000000000..0439fb0c86 --- /dev/null +++ b/functional/configuration/shelltests/sampler_jaeger.yaml @@ -0,0 +1,12 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +tracer_provider: + processors: + simple: + console: + sampler: + # Must fail, not supported in C++ + jaeger_remote: diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 13f8859bd0..a9d77ff8f0 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -691,7 +691,7 @@ static std::unique_ptr ParsePullMetricExporterC throw InvalidSchemaException(message); } - if (name == "prometheus") + if (name == "prometheus/development") { model = ParsePrometheusPullMetricExporterConfiguration(child); } diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 1cc660850b..15a92c8d59 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -711,7 +711,7 @@ std::unique_ptr SdkBuilder::CreateJaegerRemo { std::unique_ptr sdk; - static const std::string die("JeagerRemoteSampler not supported"); + static const std::string die("JaegerRemoteSampler not supported"); throw UnsupportedException(die); return sdk; From 5bad609aac06d717e1f09253d4835059ecd1d0a7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 02:24:59 +0200 Subject: [PATCH 144/166] build cleanup --- .../shelltests/kitchen-sink.yaml | 137 +++++++++--------- sdk/test/configuration/yaml_metrics_test.cc | 6 +- 2 files changed, 73 insertions(+), 70 deletions(-) diff --git a/functional/configuration/shelltests/kitchen-sink.yaml b/functional/configuration/shelltests/kitchen-sink.yaml index a52d29b65d..f5cd7396ff 100644 --- a/functional/configuration/shelltests/kitchen-sink.yaml +++ b/functional/configuration/shelltests/kitchen-sink.yaml @@ -1,3 +1,6 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + # kitchen-sink.yaml demonstrates all configurable surface area, including explanatory comments. # # It DOES NOT represent expected real world configuration, as it makes strange configuration @@ -17,11 +20,11 @@ disabled: false log_level: info # Configure general attribute limits. See also tracer_provider.limits, logger_provider.limits. attribute_limits: - # Configure max attribute value size. + # Configure max attribute value size. # Value must be non-negative. # If omitted or null, there is no limit. attribute_value_length_limit: 4096 - # Configure max attribute count. + # Configure max attribute count. # Value must be non-negative. # If omitted or null, 128 is used. attribute_count_limit: 128 @@ -32,11 +35,11 @@ logger_provider: processors: - # Configure a batch log record processor. batch: - # Configure delay interval (in milliseconds) between two consecutive exports. + # Configure delay interval (in milliseconds) between two consecutive exports. # Value must be non-negative. # If omitted or null, 1000 is used. schedule_delay: 5000 - # Configure maximum allowed time (in milliseconds) to export data. + # Configure maximum allowed time (in milliseconds) to export data. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 30000 is used. export_timeout: 30000 @@ -51,15 +54,15 @@ logger_provider: # Configure exporter to be OTLP with HTTP transport. otlp_http: endpoint: http://localhost:4318/v1/logs - # Configure certificate used to verify a server's TLS credentials. + # Configure certificate used to verify a server's TLS credentials. # Absolute path to certificate file in PEM format. # If omitted or null, system default certificate verification is used for secure connections. certificate_file: /app/cert.pem - # Configure mTLS private client key. + # Configure mTLS private client key. # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. # If omitted or null, mTLS is not used. client_key_file: /app/cert.pem - # Configure mTLS client certificate. + # Configure mTLS client certificate. # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. # If omitted or null, mTLS is not used. client_certificate_file: /app/cert.pem @@ -76,11 +79,11 @@ logger_provider: # Values include: gzip, none. Implementations may support other compression algorithms. # If omitted or null, none is used. compression: gzip - # Configure max time (in milliseconds) to wait for each export. + # Configure max time (in milliseconds) to wait for each export. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 10000 is used. timeout: 10000 - # Configure the encoding used for messages. + # Configure the encoding used for messages. # Values include: protobuf, json. Implementations may not support json. # If omitted or null, protobuf is used. encoding: protobuf @@ -93,15 +96,15 @@ logger_provider: # Configure endpoint. # If omitted or null, http://localhost:4317 is used. endpoint: http://localhost:4317 - # Configure certificate used to verify a server's TLS credentials. + # Configure certificate used to verify a server's TLS credentials. # Absolute path to certificate file in PEM format. # If omitted or null, system default certificate verification is used for secure connections. certificate_file: /app/cert.pem - # Configure mTLS private client key. + # Configure mTLS private client key. # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. # If omitted or null, mTLS is not used. client_key_file: /app/cert.pem - # Configure mTLS client certificate. + # Configure mTLS client certificate. # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. # If omitted or null, mTLS is not used. client_certificate_file: /app/cert.pem @@ -118,11 +121,11 @@ logger_provider: # Values include: gzip, none. Implementations may support other compression algorithms. # If omitted or null, none is used. compression: gzip - # Configure max time (in milliseconds) to wait for each export. + # Configure max time (in milliseconds) to wait for each export. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 10000 is used. timeout: 10000 - # Configure client transport security for the exporter's connection. + # Configure client transport security for the exporter's connection. # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. # If omitted or null, false is used. insecure: false @@ -133,7 +136,7 @@ logger_provider: # Configure exporter to be OTLP with file transport. # This type is in development and subject to breaking changes in minor versions. otlp_file/development: - # Configure output stream. + # Configure output stream. # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. # If omitted or null, stdout is used. output_stream: file:///var/log/logs.jsonl @@ -144,7 +147,7 @@ logger_provider: # Configure exporter to be OTLP with file transport. # This type is in development and subject to breaking changes in minor versions. otlp_file/development: - # Configure output stream. + # Configure output stream. # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. # If omitted or null, stdout is used. output_stream: stdout @@ -156,11 +159,11 @@ logger_provider: console: # Configure log record limits. See also attribute_limits. limits: - # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. + # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. # Value must be non-negative. # If omitted or null, there is no limit. attribute_value_length_limit: 4096 - # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. + # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. # Value must be non-negative. # If omitted or null, 128 is used. attribute_count_limit: 128 @@ -232,7 +235,7 @@ meter_provider: # Configure cardinality limits. cardinality_limits: # Configure default cardinality limit for all instrument types. - # Instrument-specific cardinality limits take priority. + # Instrument-specific cardinality limits take priority. # If omitted or null, 2000 is used. default: 2000 # Configure default cardinality limit for counter instruments. @@ -258,11 +261,11 @@ meter_provider: up_down_counter: 2000 - # Configure a periodic metric reader. periodic: - # Configure delay interval (in milliseconds) between start of two consecutive exports. + # Configure delay interval (in milliseconds) between start of two consecutive exports. # Value must be non-negative. # If omitted or null, 60000 is used. interval: 60000 - # Configure maximum allowed time (in milliseconds) to export data. + # Configure maximum allowed time (in milliseconds) to export data. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 30000 is used. timeout: 30000 @@ -273,15 +276,15 @@ meter_provider: # Configure endpoint, including the metric specific path. # If omitted or null, http://localhost:4318/v1/metrics is used. endpoint: http://localhost:4318/v1/metrics - # Configure certificate used to verify a server's TLS credentials. + # Configure certificate used to verify a server's TLS credentials. # Absolute path to certificate file in PEM format. # If omitted or null, system default certificate verification is used for secure connections. certificate_file: /app/cert.pem - # Configure mTLS private client key. + # Configure mTLS private client key. # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. # If omitted or null, mTLS is not used. client_key_file: /app/cert.pem - # Configure mTLS client certificate. + # Configure mTLS client certificate. # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. # If omitted or null, mTLS is not used. client_certificate_file: /app/cert.pem @@ -298,19 +301,19 @@ meter_provider: # Values include: gzip, none. Implementations may support other compression algorithms. # If omitted or null, none is used. compression: gzip - # Configure max time (in milliseconds) to wait for each export. + # Configure max time (in milliseconds) to wait for each export. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 10000 is used. timeout: 10000 - # Configure the encoding used for messages. + # Configure the encoding used for messages. # Values include: protobuf, json. Implementations may not support json. # If omitted or null, protobuf is used. encoding: protobuf - # Configure temporality preference. + # Configure temporality preference. # Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. # If omitted or null, cumulative is used. temporality_preference: delta - # Configure default histogram aggregation. + # Configure default histogram aggregation. # Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. # If omitted or null, explicit_bucket_histogram is used. default_histogram_aggregation: base2_exponential_bucket_histogram @@ -321,7 +324,7 @@ meter_provider: # Configure cardinality limits. cardinality_limits: # Configure default cardinality limit for all instrument types. - # Instrument-specific cardinality limits take priority. + # Instrument-specific cardinality limits take priority. # If omitted or null, 2000 is used. default: 2000 # Configure default cardinality limit for counter instruments. @@ -354,15 +357,15 @@ meter_provider: # Configure endpoint. # If omitted or null, http://localhost:4317 is used. endpoint: http://localhost:4317 - # Configure certificate used to verify a server's TLS credentials. + # Configure certificate used to verify a server's TLS credentials. # Absolute path to certificate file in PEM format. # If omitted or null, system default certificate verification is used for secure connections. certificate_file: /app/cert.pem - # Configure mTLS private client key. + # Configure mTLS private client key. # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. # If omitted or null, mTLS is not used. client_key_file: /app/cert.pem - # Configure mTLS client certificate. + # Configure mTLS client certificate. # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. # If omitted or null, mTLS is not used. client_certificate_file: /app/cert.pem @@ -379,19 +382,19 @@ meter_provider: # Values include: gzip, none. Implementations may support other compression algorithms. # If omitted or null, none is used. compression: gzip - # Configure max time (in milliseconds) to wait for each export. + # Configure max time (in milliseconds) to wait for each export. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 10000 is used. timeout: 10000 - # Configure client transport security for the exporter's connection. + # Configure client transport security for the exporter's connection. # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. # If omitted or null, false is used. insecure: false - # Configure temporality preference. + # Configure temporality preference. # Values include: cumulative, delta, low_memory. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. # If omitted or null, cumulative is used. temporality_preference: delta - # Configure default histogram aggregation. + # Configure default histogram aggregation. # Values include: explicit_bucket_histogram, base2_exponential_bucket_histogram. For behavior of values, see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk_exporters/otlp.md. # If omitted or null, explicit_bucket_histogram is used. default_histogram_aggregation: base2_exponential_bucket_histogram @@ -402,7 +405,7 @@ meter_provider: # Configure exporter to be OTLP with file transport. # This type is in development and subject to breaking changes in minor versions. otlp_file/development: - # Configure output stream. + # Configure output stream. # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. # If omitted or null, stdout is used. output_stream: file:///var/log/metrics.jsonl @@ -419,7 +422,7 @@ meter_provider: # Configure exporter to be OTLP with file transport. # This type is in development and subject to breaking changes in minor versions. otlp_file/development: - # Configure output stream. + # Configure output stream. # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. # If omitted or null, stdout is used. output_stream: stdout @@ -435,10 +438,10 @@ meter_provider: exporter: # Configure exporter to be console. console: - # Configure views. + # Configure views. # Each view has a selector which determines the instrument(s) it applies to, and a configuration for the resulting stream(s). views: - - # Configure view selector. + - # Configure view selector. # Selection criteria is additive as described in https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#instrument-selection-criteria. selector: # Configure instrument name selection criteria. @@ -468,7 +471,7 @@ meter_provider: # Configure metric description of the resulting stream(s). # If omitted or null, the instrument's origin description is used. description: new_description - # Configure aggregation of the resulting stream(s). + # Configure aggregation of the resulting stream(s). # Values include: default, drop, explicit_bucket_histogram, base2_exponential_bucket_histogram, last_value, sum. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#aggregation. # If omitted, default is used. aggregation: @@ -502,7 +505,7 @@ meter_provider: aggregation_cardinality_limit: 2000 # Configure attribute keys retained in the resulting stream(s). attribute_keys: - # Configure list of attribute keys to include in the resulting stream(s). All other attributes are dropped. + # Configure list of attribute keys to include in the resulting stream(s). All other attributes are dropped. # If omitted, all attributes are included. included: - key1 @@ -511,7 +514,7 @@ meter_provider: # If omitted, .attribute_keys.included are included. excluded: - key3 - # Configure the exemplar filter. + # Configure the exemplar filter. # Values include: trace_based, always_on, always_off. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#metrics-sdk-configuration. # If omitted or null, trace_based is used. exemplar_filter: trace_based @@ -537,7 +540,7 @@ meter_provider: # If omitted, a noop propagator is used. propagator: # Configure the propagators in the composite text map propagator. Entries from .composite_list are appended to the list here with duplicates filtered out. - # Built-in propagator keys include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party keys include: xray. + # Built-in propagator keys include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party keys include: xray. # If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used. composite: - # Include the w3c trace context propagator. @@ -557,7 +560,7 @@ propagator: # Configure the propagators in the composite text map propagator. Entries are appended to .composite with duplicates filtered out. # The value is a comma separated list of propagator identifiers matching the format of OTEL_PROPAGATORS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details. - # Built-in propagator identifiers include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party identifiers include: xray. + # Built-in propagator identifiers include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party identifiers include: xray. # If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used. composite_list: "tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray" # Configure tracer provider. @@ -567,11 +570,11 @@ tracer_provider: processors: - # Configure a batch span processor. batch: - # Configure delay interval (in milliseconds) between two consecutive exports. + # Configure delay interval (in milliseconds) between two consecutive exports. # Value must be non-negative. # If omitted or null, 5000 is used. schedule_delay: 5000 - # Configure maximum allowed time (in milliseconds) to export data. + # Configure maximum allowed time (in milliseconds) to export data. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 30000 is used. export_timeout: 30000 @@ -588,15 +591,15 @@ tracer_provider: # Configure endpoint, including the trace specific path. # If omitted or null, http://localhost:4318/v1/traces is used. endpoint: http://localhost:4318/v1/traces - # Configure certificate used to verify a server's TLS credentials. + # Configure certificate used to verify a server's TLS credentials. # Absolute path to certificate file in PEM format. # If omitted or null, system default certificate verification is used for secure connections. certificate_file: /app/cert.pem - # Configure mTLS private client key. + # Configure mTLS private client key. # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. # If omitted or null, mTLS is not used. client_key_file: /app/cert.pem - # Configure mTLS client certificate. + # Configure mTLS client certificate. # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. # If omitted or null, mTLS is not used. client_certificate_file: /app/cert.pem @@ -613,11 +616,11 @@ tracer_provider: # Values include: gzip, none. Implementations may support other compression algorithms. # If omitted or null, none is used. compression: gzip - # Configure max time (in milliseconds) to wait for each export. + # Configure max time (in milliseconds) to wait for each export. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 10000 is used. timeout: 10000 - # Configure the encoding used for messages. + # Configure the encoding used for messages. # Values include: protobuf, json. Implementations may not support json. # If omitted or null, protobuf is used. encoding: protobuf @@ -630,15 +633,15 @@ tracer_provider: # Configure endpoint. # If omitted or null, http://localhost:4317 is used. endpoint: http://localhost:4317 - # Configure certificate used to verify a server's TLS credentials. + # Configure certificate used to verify a server's TLS credentials. # Absolute path to certificate file in PEM format. # If omitted or null, system default certificate verification is used for secure connections. certificate_file: /app/cert.pem - # Configure mTLS private client key. + # Configure mTLS private client key. # Absolute path to client key file in PEM format. If set, .client_certificate must also be set. # If omitted or null, mTLS is not used. client_key_file: /app/cert.pem - # Configure mTLS client certificate. + # Configure mTLS client certificate. # Absolute path to client certificate file in PEM format. If set, .client_key must also be set. # If omitted or null, mTLS is not used. client_certificate_file: /app/cert.pem @@ -655,11 +658,11 @@ tracer_provider: # Values include: gzip, none. Implementations may support other compression algorithms. # If omitted or null, none is used. compression: gzip - # Configure max time (in milliseconds) to wait for each export. + # Configure max time (in milliseconds) to wait for each export. # Value must be non-negative. A value of 0 indicates no limit (infinity). # If omitted or null, 10000 is used. timeout: 10000 - # Configure client transport security for the exporter's connection. + # Configure client transport security for the exporter's connection. # Only applicable when .endpoint is provided without http or https scheme. Implementations may choose to ignore .insecure. # If omitted or null, false is used. insecure: false @@ -670,7 +673,7 @@ tracer_provider: # Configure exporter to be OTLP with file transport. # This type is in development and subject to breaking changes in minor versions. otlp_file/development: - # Configure output stream. + # Configure output stream. # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. # If omitted or null, stdout is used. output_stream: file:///var/log/traces.jsonl @@ -681,7 +684,7 @@ tracer_provider: # Configure exporter to be OTLP with file transport. # This type is in development and subject to breaking changes in minor versions. otlp_file/development: - # Configure output stream. + # Configure output stream. # Values include stdout, or scheme+destination. For example: file:///path/to/file.jsonl. # If omitted or null, stdout is used. output_stream: stdout @@ -694,7 +697,7 @@ tracer_provider: # Configure endpoint. # If omitted or null, http://localhost:9411/api/v2/spans is used. endpoint: http://localhost:9411/api/v2/spans - # Configure max time (in milliseconds) to wait for each export. + # Configure max time (in milliseconds) to wait for each export. # Value must be non-negative. A value of 0 indicates indefinite. # If omitted or null, 10000 is used. timeout: 10000 @@ -706,27 +709,27 @@ tracer_provider: console: # Configure span limits. See also attribute_limits. limits: - # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. + # Configure max attribute value size. Overrides .attribute_limits.attribute_value_length_limit. # Value must be non-negative. # If omitted or null, there is no limit. attribute_value_length_limit: 4096 - # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. + # Configure max attribute count. Overrides .attribute_limits.attribute_count_limit. # Value must be non-negative. # If omitted or null, 128 is used. attribute_count_limit: 128 - # Configure max span event count. + # Configure max span event count. # Value must be non-negative. # If omitted or null, 128 is used. event_count_limit: 128 - # Configure max span link count. + # Configure max span link count. # Value must be non-negative. # If omitted or null, 128 is used. link_count_limit: 128 - # Configure max attributes per span event. + # Configure max attributes per span event. # Value must be non-negative. # If omitted or null, 128 is used. event_attribute_count_limit: 128 - # Configure max attributes per span link. + # Configure max attributes per span link. # Value must be non-negative. # If omitted or null, 128 is used. link_attribute_count_limit: 128 @@ -839,7 +842,7 @@ resource: excluded: - process.command_args # Configure resource detectors. - # Resource detector names are dependent on the SDK language ecosystem. Please consult documentation for each respective language. + # Resource detector names are dependent on the SDK language ecosystem. Please consult documentation for each respective language. # If omitted or null, no resource detectors are enabled. detectors: - # Enable the container resource detector, which populates container.* attributes. diff --git a/sdk/test/configuration/yaml_metrics_test.cc b/sdk/test/configuration/yaml_metrics_test.cc index 8f963f293e..4b202c2cf1 100644 --- a/sdk/test/configuration/yaml_metrics_test.cc +++ b/sdk/test/configuration/yaml_metrics_test.cc @@ -144,7 +144,7 @@ file_format: xx.yy readers: - pull: exporter: - prometheus: + prometheus/development: )"; auto config = DoParse(yaml); @@ -519,7 +519,7 @@ file_format: xx.yy readers: - pull: exporter: - prometheus: + prometheus/development: )"; auto config = DoParse(yaml); @@ -550,7 +550,7 @@ file_format: xx.yy readers: - pull: exporter: - prometheus: + prometheus/development: host: "prometheus" port: 1234 without_units: true From 31610b8ce55dbfc6c9a2f5b462d54704ed208628 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 03:41:47 +0200 Subject: [PATCH 145/166] Add GRPC to yaml build poc functional tests --- ci/do_ci.sh | 1 + functional/configuration/main.cc | 4 +++ .../shelltests/kitchen-sink.test | 32 ++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/ci/do_ci.sh b/ci/do_ci.sh index b8450fff72..0fab7a9c1d 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -223,6 +223,7 @@ elif [[ "$1" == "cmake.maintainer.yaml.test" ]]; then rm -rf * cmake "${CMAKE_OPTIONS[@]}" \ -DWITH_OTLP_HTTP=ON \ + -DWITH_OTLP_GRPC=ON \ -DWITH_OTLP_FILE=ON \ -DWITH_PROMETHEUS=ON \ -DWITH_EXAMPLES=ON \ diff --git a/functional/configuration/main.cc b/functional/configuration/main.cc index 132ba29c74..72173ff731 100644 --- a/functional/configuration/main.cc +++ b/functional/configuration/main.cc @@ -289,6 +289,10 @@ int main(int argc, char *argv[]) InitOtel(yaml_file_path); + // Do not record noise during payload + auto level = opentelemetry::sdk::common::internal_log::LogLevel::None; + opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); + foo_library(); foo_library::counter_example("yaml"); foo_library::observable_counter_example("yaml"); diff --git a/functional/configuration/shelltests/kitchen-sink.test b/functional/configuration/shelltests/kitchen-sink.test index 43191602e8..cf74baa56d 100644 --- a/functional/configuration/shelltests/kitchen-sink.test +++ b/functional/configuration/shelltests/kitchen-sink.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/kitchen-sink.yaml +$ otel_configuration_check --yaml shelltests/kitchen-sink.yaml | egrep -v "(observed_timestamp|trace_id|span_id)" > MODEL PARSED [WARNING] attribute_limits not supported, ignoring @@ -13,4 +13,34 @@ MODEL PARSED [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values SDK CREATED +{ + timestamp : 0 + severity_num : 5 + severity_text : DEBUG + body : body + resource : + telemetry.sdk.version: 1.22.0 + service.version: 1.0.0 + double_array_key: [1.1,2.2] + double_key: 1.1 + bool_key: 1 + int_array_key: [1,2] + int_key: 1 + string_array_key: [value1,value2] + string_key: value + service.namespace: my-namespace + telemetry.sdk.language: cpp + bool_array_key: [1,0] + service.name: unknown_service + telemetry.sdk.name: opentelemetry + attributes : + event_id : 0 + event_name : + trace_flags : 00 + scope : + name : foo_library + version : + schema_url : + attributes : +} >= 0 From a024ac26db09538de8709c36fce49c94fa4051da Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 12:58:45 +0200 Subject: [PATCH 146/166] Fixed format to ignore tests data and scripts --- tools/format.sh | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/tools/format.sh b/tools/format.sh index 3a3863a8ea..bd47df7c93 100755 --- a/tools/format.sh +++ b/tools/format.sh @@ -10,7 +10,21 @@ fi set -e -FIND="find . -name third_party -prune -o -name tools -prune -o -name .git -prune -o -name _deps -prune -o -name .build -prune -o -name out -prune -o -name .vs -prune -o -name opentelemetry_logo.png -prune -o -name TraceLoggingDynamic.h -prune -o" +FIND="find . -name third_party -prune -o" +FIND="${FIND} -name tools -prune -o" +FIND="${FIND} -name .git -prune -o" +FIND="${FIND} -name _deps -prune -o" +FIND="${FIND} -name .build -prune -o" +FIND="${FIND} -name out -prune -o" +FIND="${FIND} -name .vs -prune -o" +FIND="${FIND} -name opentelemetry_logo.png -prune -o" +FIND="${FIND} -name TraceLoggingDynamic.h -prune -o" +# Do not format yaml files +FIND="${FIND} -name \"*.yaml\" -prune -o" +# Do not format shelltest files +FIND="${FIND} -name \"*.test\"-prune -o" +# Do not format patch files +FIND="${FIND} -name \"*.patch\"-prune -o" # GNU syntax. SED=(sed -i) @@ -23,8 +37,8 @@ fi # No CRLF line endings, except Windows files. "${SED[@]}" 's/\r$//' $($FIND -name '*.ps1' -prune -o \ -name '*.cmd' -prune -o -type f -print) -# No trailing spaces, except in patch. -"${SED[@]}" 's/ \+$//' $($FIND -name "*.patch" -prune -o -type f -print) +# No trailing spaces. +"${SED[@]}" 's/ \+$//' $($FIND -type f -print) # If not overridden, try to use clang-format-18 or clang-format. if [[ -z "$CLANG_FORMAT" ]]; then From ac1ab49d55ba0b40110f5fd6a79e048443290049 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 13:46:06 +0200 Subject: [PATCH 147/166] Fixed format --- tools/format.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/format.sh b/tools/format.sh index bd47df7c93..f745061de7 100755 --- a/tools/format.sh +++ b/tools/format.sh @@ -22,9 +22,9 @@ FIND="${FIND} -name TraceLoggingDynamic.h -prune -o" # Do not format yaml files FIND="${FIND} -name \"*.yaml\" -prune -o" # Do not format shelltest files -FIND="${FIND} -name \"*.test\"-prune -o" +FIND="${FIND} -name \"*.test\" -prune -o" # Do not format patch files -FIND="${FIND} -name \"*.patch\"-prune -o" +FIND="${FIND} -name \"*.patch\" -prune -o" # GNU syntax. SED=(sed -i) From 0c44815d5f1224884b22e66f153234eb5d066169 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 14:24:53 +0200 Subject: [PATCH 148/166] format for tests --- tools/format.sh | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/tools/format.sh b/tools/format.sh index f745061de7..d551ab21dd 100755 --- a/tools/format.sh +++ b/tools/format.sh @@ -10,21 +10,7 @@ fi set -e -FIND="find . -name third_party -prune -o" -FIND="${FIND} -name tools -prune -o" -FIND="${FIND} -name .git -prune -o" -FIND="${FIND} -name _deps -prune -o" -FIND="${FIND} -name .build -prune -o" -FIND="${FIND} -name out -prune -o" -FIND="${FIND} -name .vs -prune -o" -FIND="${FIND} -name opentelemetry_logo.png -prune -o" -FIND="${FIND} -name TraceLoggingDynamic.h -prune -o" -# Do not format yaml files -FIND="${FIND} -name \"*.yaml\" -prune -o" -# Do not format shelltest files -FIND="${FIND} -name \"*.test\" -prune -o" -# Do not format patch files -FIND="${FIND} -name \"*.patch\" -prune -o" +FIND="find . -name third_party -prune -o -name tools -prune -o -name .git -prune -o -name _deps -prune -o -name .build -prune -o -name out -prune -o -name .vs -prune -o -name opentelemetry_logo.png -prune -o -name TraceLoggingDynamic.h -prune -o" # GNU syntax. SED=(sed -i) @@ -37,8 +23,8 @@ fi # No CRLF line endings, except Windows files. "${SED[@]}" 's/\r$//' $($FIND -name '*.ps1' -prune -o \ -name '*.cmd' -prune -o -type f -print) -# No trailing spaces. -"${SED[@]}" 's/ \+$//' $($FIND -type f -print) +# No trailing spaces, except in patch, yaml and shelltest. +"${SED[@]}" 's/ \+$//' $($FIND -name "*.patch" -prune -o -name "*.yaml" -prune -o -name "*.test" -prune -o -type f -print) # If not overridden, try to use clang-format-18 or clang-format. if [[ -z "$CLANG_FORMAT" ]]; then From 44acc5f5057e989872e243783ebd961efeb8d39f Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 20 Jul 2025 22:54:13 +0200 Subject: [PATCH 149/166] Rework on ConfiguredSdk --- examples/yaml/main.cc | 4 +- functional/configuration/main.cc | 4 +- .../sdk/configuration/configured_sdk.h | 48 ++++++++++--------- sdk/src/configuration/configured_sdk.cc | 28 +++++------ sdk/src/configuration/sdk_builder.cc | 19 +++----- 5 files changed, 50 insertions(+), 53 deletions(-) diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc index f1b401673d..ab98dc907a 100644 --- a/examples/yaml/main.cc +++ b/examples/yaml/main.cc @@ -132,7 +132,7 @@ void InitOtel(const std::string &config_file) if (sdk != nullptr) { - sdk->Init(); + sdk->Install(); } } @@ -140,7 +140,7 @@ void CleanupOtel() { if (sdk != nullptr) { - sdk->Cleanup(); + sdk->UnInstall(); } sdk.reset(nullptr); } diff --git a/functional/configuration/main.cc b/functional/configuration/main.cc index 72173ff731..66824909de 100644 --- a/functional/configuration/main.cc +++ b/functional/configuration/main.cc @@ -201,7 +201,7 @@ void InitOtel(const std::string &config_file) if (sdk != nullptr) { - sdk->Init(); + sdk->Install(); } } @@ -209,7 +209,7 @@ void CleanupOtel() { if (sdk != nullptr) { - sdk->Cleanup(); + sdk->UnInstall(); } sdk.reset(nullptr); } diff --git a/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h index 1bd64552be..c2205a8be3 100644 --- a/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h +++ b/sdk/include/opentelemetry/sdk/configuration/configured_sdk.h @@ -20,6 +20,11 @@ namespace sdk namespace configuration { +/** + * This class represents a fully configured SDK. + * A SDK contains various objects, like propagators and providers for each + * signals, that collectively describe the opentelemetry configuration. + */ class ConfiguredSdk { public: @@ -27,28 +32,27 @@ class ConfiguredSdk std::shared_ptr registry, const std::unique_ptr &model); - ConfiguredSdk( - opentelemetry::sdk::resource::Resource &&resource, - const std::shared_ptr &tracer_provider, - const std::shared_ptr &propagator, - const std::shared_ptr &meter_provider, - const std::shared_ptr &logger_provider) - : resource_(std::move(resource)), - tracer_provider_(tracer_provider), - propagator_(propagator), - meter_provider_(meter_provider), - logger_provider_(logger_provider) - {} - - void Init(); - void Cleanup(); - -private: - opentelemetry::sdk::resource::Resource resource_; - std::shared_ptr tracer_provider_; - std::shared_ptr propagator_; - std::shared_ptr meter_provider_; - std::shared_ptr logger_provider_; + ConfiguredSdk() : resource(opentelemetry::sdk::resource::Resource::GetEmpty()) {} + + /** + * Install the SDK, so that an instrumented application can make calls + * to it. + * This methods sets the global provider singletons to point to the SDK. + */ + void Install(); + + /** + * Uninstall the SDK, so that an instrumented application no longer makes + * calls to it. + * This method clears the global provider singletons. + */ + void UnInstall(); + + opentelemetry::sdk::resource::Resource resource; + std::shared_ptr tracer_provider; + std::shared_ptr propagator; + std::shared_ptr meter_provider; + std::shared_ptr logger_provider; }; } // namespace configuration diff --git a/sdk/src/configuration/configured_sdk.cc b/sdk/src/configuration/configured_sdk.cc index ea370c7374..3eb81c9e48 100644 --- a/sdk/src/configuration/configured_sdk.cc +++ b/sdk/src/configuration/configured_sdk.cc @@ -56,53 +56,53 @@ std::unique_ptr ConfiguredSdk::Create( return sdk; } -void ConfiguredSdk::Init() +void ConfiguredSdk::Install() { - if (propagator_) + if (propagator) { - opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(propagator_); + opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(propagator); } - if (tracer_provider_) + if (tracer_provider) { - std::shared_ptr api_tracer_provider = tracer_provider_; + std::shared_ptr api_tracer_provider = tracer_provider; opentelemetry::trace::Provider::SetTracerProvider(api_tracer_provider); } - if (meter_provider_) + if (meter_provider) { - std::shared_ptr api_meter_provider = meter_provider_; + std::shared_ptr api_meter_provider = meter_provider; opentelemetry::metrics::Provider::SetMeterProvider(api_meter_provider); } - if (logger_provider_) + if (logger_provider) { - std::shared_ptr api_logger_provider = logger_provider_; + std::shared_ptr api_logger_provider = logger_provider; opentelemetry::logs::Provider::SetLoggerProvider(api_logger_provider); } } -void ConfiguredSdk::Cleanup() +void ConfiguredSdk::UnInstall() { - if (propagator_) + if (propagator) { std::shared_ptr none; opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(none); } - if (tracer_provider_) + if (tracer_provider) { std::shared_ptr none; opentelemetry::trace::Provider::SetTracerProvider(none); } - if (meter_provider_) + if (meter_provider) { std::shared_ptr none; opentelemetry::metrics::Provider::SetMeterProvider(none); } - if (logger_provider_) + if (logger_provider) { std::shared_ptr none; opentelemetry::logs::Provider::SetLoggerProvider(none); diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 15a92c8d59..758791e76e 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1717,16 +1717,11 @@ void SdkBuilder::SetResource( std::unique_ptr SdkBuilder::CreateConfiguredSdk( const std::unique_ptr &model) const { - std::unique_ptr sdk; - auto resource = opentelemetry::sdk::resource::Resource::GetEmpty(); - std::shared_ptr tracer_provider; - std::shared_ptr propagator; - std::shared_ptr meter_provider; - std::shared_ptr logger_provider; + auto sdk = std::make_unique(); if (!model->disabled) { - SetResource(resource, model->resource); + SetResource(sdk->resource, model->resource); if (model->attribute_limits) { @@ -1737,27 +1732,25 @@ std::unique_ptr SdkBuilder::CreateConfiguredSdk( if (model->tracer_provider) { - tracer_provider = CreateTracerProvider(model->tracer_provider, resource); + sdk->tracer_provider = CreateTracerProvider(model->tracer_provider, sdk->resource); } if (model->propagator) { - propagator = CreatePropagator(model->propagator); + sdk->propagator = CreatePropagator(model->propagator); } if (model->meter_provider) { - meter_provider = CreateMeterProvider(model->meter_provider, resource); + sdk->meter_provider = CreateMeterProvider(model->meter_provider, sdk->resource); } if (model->logger_provider) { - logger_provider = CreateLoggerProvider(model->logger_provider, resource); + sdk->logger_provider = CreateLoggerProvider(model->logger_provider, sdk->resource); } } - sdk = std::make_unique(std::move(resource), tracer_provider, propagator, - meter_provider, logger_provider); return sdk; } From 09ab6dde22588a59203126c389eca285bb658641 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 22 Jul 2025 00:53:08 +0200 Subject: [PATCH 150/166] Merge after ParentBasedSampler fix --- .../shelltests/kitchen-sink.test | 4 +--- .../shelltests/sampler_jaeger.test | 1 - sdk/src/configuration/sdk_builder.cc | 23 +++++++++++++------ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/functional/configuration/shelltests/kitchen-sink.test b/functional/configuration/shelltests/kitchen-sink.test index cf74baa56d..f779754572 100644 --- a/functional/configuration/shelltests/kitchen-sink.test +++ b/functional/configuration/shelltests/kitchen-sink.test @@ -5,9 +5,7 @@ $ otel_configuration_check --yaml shelltests/kitchen-sink.yaml | egrep -v "(obse > MODEL PARSED [WARNING] attribute_limits not supported, ignoring -[ERROR] CreateTracerProvider: FIXME-CONFIG (IdGenerator) -[ERROR] CreateParentBasedSampler: FIXME-SDK, missing param in parent factory -[ERROR] CreateAttributesProcessor() FIXME-SDK IncludeExclude +[WARNING] IncludeExclude attribute processor not supported, ignoring [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values diff --git a/functional/configuration/shelltests/sampler_jaeger.test b/functional/configuration/shelltests/sampler_jaeger.test index 2d845105e2..bd377478da 100644 --- a/functional/configuration/shelltests/sampler_jaeger.test +++ b/functional/configuration/shelltests/sampler_jaeger.test @@ -5,7 +5,6 @@ $ otel_configuration_check --yaml shelltests/sampler_jaeger.yaml > [ERROR] JaegerRemoteSamplerConfiguration: FIXME MODEL PARSED -[ERROR] CreateTracerProvider: FIXME-CONFIG (IdGenerator) [ERROR] [Configured Sdk] builder failed with exception: JaegerRemoteSampler not supported FAILED TO CREATE SDK >= 2 diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 758791e76e..9cfdb56d7e 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -764,10 +764,19 @@ std::unique_ptr SdkBuilder::CreateParentBase local_parent_not_sampled_sdk = opentelemetry::sdk::trace::AlwaysOffSamplerFactory::Create(); } - // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3545 - OTEL_INTERNAL_LOG_ERROR("CreateParentBasedSampler: FIXME-SDK, missing param in parent factory"); - std::shared_ptr delegate_sampler = std::move(root_sdk); - sdk = opentelemetry::sdk::trace::ParentBasedSamplerFactory::Create(delegate_sampler); + std::shared_ptr shared_root = std::move(root_sdk); + std::shared_ptr shared_remote_parent_sampled = + std::move(remote_parent_sampled_sdk); + std::shared_ptr shared_remote_parent_not_sampled = + std::move(remote_parent_not_sampled_sdk); + std::shared_ptr shared_local_parent_sampled = + std::move(local_parent_sampled_sdk); + std::shared_ptr shared_local_parent_not_sampled = + std::move(local_parent_not_sampled_sdk); + + sdk = opentelemetry::sdk::trace::ParentBasedSamplerFactory::Create( + shared_root, shared_remote_parent_sampled, shared_remote_parent_not_sampled, + shared_local_parent_sampled, shared_local_parent_not_sampled); return sdk; } @@ -1009,7 +1018,7 @@ std::unique_ptr SdkBuilder::CreateTra std::unique_ptr sdk; // FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/70 - OTEL_INTERNAL_LOG_ERROR("CreateTracerProvider: FIXME-CONFIG (IdGenerator)"); + // FIXME-CONFIG: Add support for IdGenerator std::unique_ptr sampler; @@ -1366,7 +1375,7 @@ SdkBuilder::CreateAttributesProcessor( // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3546 // FIXME-SDK: Need a subclass of AttributesProcessor for IncludeExclude - OTEL_INTERNAL_LOG_ERROR("CreateAttributesProcessor() FIXME-SDK IncludeExclude"); + OTEL_INTERNAL_LOG_WARN("IncludeExclude attribute processor not supported, ignoring"); return sdk; } @@ -1701,7 +1710,7 @@ void SdkBuilder::SetResource( { // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3548 // FIXME-SDK: Implement resource detectors - OTEL_INTERNAL_LOG_ERROR("SdkBuilder::SetResource: FIXME-SDK detectors"); + OTEL_INTERNAL_LOG_WARN("resource detectors not supported, ignoring"); } auto sdk_resource = From 6fc4d37f6fe70d28f577da6a20a2b34b6c2a97b5 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 23 Jul 2025 02:57:41 +0200 Subject: [PATCH 151/166] Add propagator unit tests --- sdk/src/configuration/configuration_parser.cc | 47 +++--- sdk/test/configuration/CMakeLists.txt | 4 +- .../configuration/yaml_propagator_test.cc | 148 ++++++++++++++++++ 3 files changed, 175 insertions(+), 24 deletions(-) create mode 100644 sdk/test/configuration/yaml_propagator_test.cc diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index a9d77ff8f0..9e7cc136df 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -1031,34 +1031,37 @@ static std::unique_ptr ParsePropagatorConfiguration( auto model = std::make_unique(); std::unique_ptr child; - child = node->GetRequiredChildNode("composite"); + child = node->GetChildNode("composite"); std::string name; int num_child = 0; - for (auto it = child->begin(); it != child->end(); ++it) + if (child) { - // This is an entry in the composite array - std::unique_ptr element(*it); - num_child++; - int count = 0; - - // Find out its name, we expect an object with a unique property. - for (auto it2 = element->begin_properties(); it2 != element->end_properties(); ++it2) - { - name = it2.Name(); - count++; - } - - if (count != 1) + for (auto it = child->begin(); it != child->end(); ++it) { - std::string message("Illegal composite child "); - message.append(std::to_string(num_child)); - message.append(", properties count: "); - message.append(std::to_string(count)); - throw InvalidSchemaException(message); + // This is an entry in the composite array + std::unique_ptr element(*it); + num_child++; + int count = 0; + + // Find out its name, we expect an object with a unique property. + for (auto it2 = element->begin_properties(); it2 != element->end_properties(); ++it2) + { + name = it2.Name(); + count++; + } + + if (count != 1) + { + std::string message("Illegal composite child "); + message.append(std::to_string(num_child)); + message.append(", properties count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); + } + + model->composite.push_back(name); } - - model->composite.push_back(name); } model->composite_list = node->GetString("composite_list", ""); diff --git a/sdk/test/configuration/CMakeLists.txt b/sdk/test/configuration/CMakeLists.txt index 402f4fc261..3bec414ca4 100644 --- a/sdk/test/configuration/CMakeLists.txt +++ b/sdk/test/configuration/CMakeLists.txt @@ -1,8 +1,8 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -foreach(testname yaml_test yaml_trace_test yaml_resource_test yaml_logs_test - yaml_metrics_test) +foreach(testname yaml_test yaml_propagator_test yaml_trace_test + yaml_resource_test yaml_logs_test yaml_metrics_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} opentelemetry_configuration) diff --git a/sdk/test/configuration/yaml_propagator_test.cc b/sdk/test/configuration/yaml_propagator_test.cc new file mode 100644 index 0000000000..d04bf2372b --- /dev/null +++ b/sdk/test/configuration/yaml_propagator_test.cc @@ -0,0 +1,148 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include +#include + +#include "opentelemetry/sdk/configuration/configuration.h" +#include "opentelemetry/sdk/configuration/propagator_configuration.h" +#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" + +static std::unique_ptr DoParse( + const std::string &yaml) +{ + static const std::string source("test"); + return opentelemetry::sdk::configuration::YamlConfigurationParser::ParseString(source, yaml); +} + +TEST(YamlPropagator, empty_propagator) +{ + std::string yaml = R"( +file_format: xx.yy +propagator: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->propagator, nullptr); + ASSERT_EQ(config->propagator->composite.size(), 0); + ASSERT_EQ(config->propagator->composite_list, ""); +} + +TEST(YamlPropagator, empty_composite) +{ + std::string yaml = R"( +file_format: xx.yy +propagator: + composite: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->propagator, nullptr); + ASSERT_EQ(config->propagator->composite.size(), 0); + ASSERT_EQ(config->propagator->composite_list, ""); +} + +TEST(YamlPropagator, old_propagator_1) +{ + // This is the old format, must fail + std::string yaml = R"( +file_format: xx.yy +propagator: + composite: + - foo + - bar +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlPropagator, old_propagator_2) +{ + // This is the old format, must fail + std::string yaml = R"( +file_format: xx.yy +propagator: + composite: [foo, bar] +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlPropagator, propagator_array_ok) +{ + std::string yaml = R"( +file_format: xx.yy +propagator: + composite: + - foo: + - bar: + - baz: +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->propagator, nullptr); + ASSERT_EQ(config->propagator->composite.size(), 3); + ASSERT_EQ(config->propagator->composite[0], "foo"); + ASSERT_EQ(config->propagator->composite[1], "bar"); + ASSERT_EQ(config->propagator->composite[2], "baz"); + ASSERT_EQ(config->propagator->composite_list, ""); +} + +TEST(YamlPropagator, propagator_array_broken) +{ + std::string yaml = R"( +file_format: xx.yy +propagator: + composite: + - foo: + - bar: + baz: +)"; + + auto config = DoParse(yaml); + ASSERT_EQ(config, nullptr); +} + +TEST(YamlPropagator, propagator_composite_list) +{ + std::string yaml = R"( +file_format: xx.yy +propagator: + composite_list: "foo,bar,baz" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->propagator, nullptr); + ASSERT_EQ(config->propagator->composite.size(), 0); + ASSERT_EQ(config->propagator->composite_list, "foo,bar,baz"); +} + +TEST(YamlPropagator, propagator_both) +{ + std::string yaml = R"( +file_format: xx.yy +propagator: + composite: + - aaa: + - bbb: + - ccc: + composite_list: "ddd,eee,fff" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->propagator, nullptr); + ASSERT_EQ(config->propagator->composite.size(), 3); + ASSERT_EQ(config->propagator->composite[0], "aaa"); + ASSERT_EQ(config->propagator->composite[1], "bbb"); + ASSERT_EQ(config->propagator->composite[2], "ccc"); + ASSERT_EQ(config->propagator->composite_list, "ddd,eee,fff"); +} From d9580d0600d62505cdd026afa0df8665b6bd734c Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 23 Jul 2025 20:34:22 +0200 Subject: [PATCH 152/166] Rework on MetricProducer --- .../extension_metric_producer_configuration.h | 34 ++++++++ .../metric_producer_configuration_visitor.h | 34 ++++++++ ...pen_census_metric_producer_configuration.h | 31 ++++++++ sdk/src/configuration/configuration_parser.cc | 78 +++++++++++++++++++ sdk/src/configuration/sdk_builder.cc | 31 +++++++- 5 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 sdk/include/opentelemetry/sdk/configuration/extension_metric_producer_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/open_census_metric_producer_configuration.h diff --git a/sdk/include/opentelemetry/sdk/configuration/extension_metric_producer_configuration.h b/sdk/include/opentelemetry/sdk/configuration/extension_metric_producer_configuration.h new file mode 100644 index 0000000000..f715e12f06 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/extension_metric_producer_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/document_node.h" +#include "opentelemetry/sdk/configuration/metric_producer_configuration.h" +#include "opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class ExtensionMetricProducerConfiguration : public MetricProducerConfiguration +{ +public: + void Accept(MetricProducerConfigurationVisitor *visitor) const override + { + visitor->VisitExtension(this); + } + + std::string name; + std::unique_ptr node; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h new file mode 100644 index 0000000000..73340f3166 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OpenCensusMetricProducerConfiguration; +class ExtensionMetricProducerConfiguration; + +class MetricProducerConfigurationVisitor +{ +public: + MetricProducerConfigurationVisitor() = default; + MetricProducerConfigurationVisitor(MetricProducerConfigurationVisitor &&) = default; + MetricProducerConfigurationVisitor(const MetricProducerConfigurationVisitor &) = default; + MetricProducerConfigurationVisitor &operator=(MetricProducerConfigurationVisitor &&) = default; + MetricProducerConfigurationVisitor &operator=(const MetricProducerConfigurationVisitor &other) = + default; + virtual ~MetricProducerConfigurationVisitor() = default; + + virtual void VisitOpenCensus(const OpenCensusMetricProducerConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionMetricProducerConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/open_census_metric_producer_configuration.h b/sdk/include/opentelemetry/sdk/configuration/open_census_metric_producer_configuration.h new file mode 100644 index 0000000000..b8b7eb6b66 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/open_census_metric_producer_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/metric_producer_configuration.h" +#include "opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: OpenCensusMetricProducer +class OpenCensusMetricProducerConfiguration : public MetricProducerConfiguration +{ +public: + void Accept(MetricProducerConfigurationVisitor *visitor) const override + { + visitor->VisitOpenCensus(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/configuration/configuration_parser.cc b/sdk/src/configuration/configuration_parser.cc index 9e7cc136df..7b0abcbca7 100644 --- a/sdk/src/configuration/configuration_parser.cc +++ b/sdk/src/configuration/configuration_parser.cc @@ -37,6 +37,7 @@ #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" +#include "opentelemetry/sdk/configuration/extension_metric_producer_configuration.h" #include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/extension_sampler_configuration.h" @@ -55,7 +56,9 @@ #include "opentelemetry/sdk/configuration/log_record_processor_configuration.h" #include "opentelemetry/sdk/configuration/logger_provider_configuration.h" #include "opentelemetry/sdk/configuration/meter_provider_configuration.h" +#include "opentelemetry/sdk/configuration/metric_producer_configuration.h" #include "opentelemetry/sdk/configuration/metric_reader_configuration.h" +#include "opentelemetry/sdk/configuration/open_census_metric_producer_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h" #include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h" @@ -703,6 +706,61 @@ static std::unique_ptr ParsePullMetricExporterC return model; } +static std::unique_ptr +ParseOpenCensusMetricProducerConfiguration(const std::unique_ptr & /* node */) +{ + auto model = std::make_unique(); + + return model; +} + +static std::unique_ptr +ParseExtensionMetricProducerConfiguration(const std::string &name, + std::unique_ptr node) +{ + auto model = std::make_unique(); + + model->name = name; + model->node = std::move(node); + + return model; +} + +static std::unique_ptr ParseMetricProducerConfiguration( + const std::unique_ptr &node) +{ + std::unique_ptr model; + + std::string name; + std::unique_ptr child; + size_t count = 0; + + for (auto it = node->begin_properties(); it != node->end_properties(); ++it) + { + name = it.Name(); + child = it.Value(); + count++; + } + + if (count != 1) + { + std::string message("Illegal metric producer, properties count: "); + message.append(std::to_string(count)); + throw InvalidSchemaException(message); + } + + if (name == "opencensus") + { + model = ParseOpenCensusMetricProducerConfiguration(child); + } + else + { + model = ParseExtensionMetricProducerConfiguration(name, std::move(child)); + } + + return model; +} + static std::unique_ptr ParsePeriodicMetricReaderConfiguration( const std::unique_ptr &node) { @@ -715,6 +773,16 @@ static std::unique_ptr ParsePeriodicMetricRea child = node->GetRequiredChildNode("exporter"); model->exporter = ParsePushMetricExporterConfiguration(child); + child = node->GetChildNode("producers"); + + if (child) + { + for (auto it = child->begin(); it != child->end(); ++it) + { + model->producers.push_back(ParseMetricProducerConfiguration(*it)); + } + } + return model; } @@ -727,6 +795,16 @@ static std::unique_ptr ParsePullMetricReaderConfi child = node->GetRequiredChildNode("exporter"); model->exporter = ParsePullMetricExporterConfiguration(child); + child = node->GetChildNode("producers"); + + if (child) + { + for (auto it = child->begin(); it != child->end(); ++it) + { + model->producers.push_back(ParseMetricProducerConfiguration(*it)); + } + } + return model; } diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 9cfdb56d7e..4ec75485ef 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1074,7 +1074,26 @@ SdkBuilder::CreatePropagator( propagators.push_back(std::move(propagator)); } - // FIXME: composite_list + if (model->composite_list.size() > 0) + { + std::string str_list = model->composite_list; + size_t start_pos = 0; + size_t end_pos = 0; + char separator = ','; + std::string name; + + while ((end_pos = str_list.find(separator, start_pos)) != std::string::npos) + { + name = str_list.substr(start_pos, end_pos - start_pos); + propagator = CreateTextMapPropagator(name); + propagators.push_back(std::move(propagator)); + start_pos = end_pos + 1; + } + + name = str_list.substr(start_pos); + propagator = CreateTextMapPropagator(name); + propagators.push_back(std::move(propagator)); + } auto sdk = std::make_unique( std::move(propagators)); @@ -1295,6 +1314,11 @@ std::unique_ptr SdkBuilder::CreatePer auto exporter_sdk = CreatePushMetricExporter(model->exporter); + if (model->producers.size() > 0) + { + OTEL_INTERNAL_LOG_WARN("metric producer not supported, ignoring"); + } + sdk = opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create( std::move(exporter_sdk), options); @@ -1308,6 +1332,11 @@ std::unique_ptr SdkBuilder::CreatePul sdk = CreatePullMetricExporter(model->exporter); + if (model->producers.size() > 0) + { + OTEL_INTERNAL_LOG_WARN("metric producer not supported, ignoring"); + } + return sdk; } From d95b53e747ccce5f7f059edce66830e0b1594211 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 23 Jul 2025 21:55:29 +0200 Subject: [PATCH 153/166] Rework for propagators, added tests. --- .../shelltests/kitchen-sink.yaml | 6 +- .../shelltests/propagator_both.test | 8 +++ .../shelltests/propagator_both.yaml | 10 +++ .../shelltests/propagator_composite_list.test | 8 +++ .../shelltests/propagator_composite_list.yaml | 7 ++ .../shelltests/propagator_duplicates.test | 8 +++ .../shelltests/propagator_duplicates.yaml | 10 +++ sdk/src/configuration/sdk_builder.cc | 67 ++++++++++++++++--- .../configuration/yaml_propagator_test.cc | 24 +++++++ 9 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 functional/configuration/shelltests/propagator_both.test create mode 100644 functional/configuration/shelltests/propagator_both.yaml create mode 100644 functional/configuration/shelltests/propagator_composite_list.test create mode 100644 functional/configuration/shelltests/propagator_composite_list.yaml create mode 100644 functional/configuration/shelltests/propagator_duplicates.test create mode 100644 functional/configuration/shelltests/propagator_duplicates.yaml diff --git a/functional/configuration/shelltests/kitchen-sink.yaml b/functional/configuration/shelltests/kitchen-sink.yaml index f5cd7396ff..de8d00be68 100644 --- a/functional/configuration/shelltests/kitchen-sink.yaml +++ b/functional/configuration/shelltests/kitchen-sink.yaml @@ -562,7 +562,11 @@ propagator: # The value is a comma separated list of propagator identifiers matching the format of OTEL_PROPAGATORS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details. # Built-in propagator identifiers include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party identifiers include: xray. # If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used. - composite_list: "tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray" +# composite_list: "tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray" + +# ottrace, xray not supported in opentelemetry-cpp + composite_list: "tracecontext,baggage,b3,b3multi,jaeger" + # Configure tracer provider. # If omitted, a noop tracer provider is used. tracer_provider: diff --git a/functional/configuration/shelltests/propagator_both.test b/functional/configuration/shelltests/propagator_both.test new file mode 100644 index 0000000000..cdcac52038 --- /dev/null +++ b/functional/configuration/shelltests/propagator_both.test @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_both.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/propagator_both.yaml b/functional/configuration/shelltests/propagator_both.yaml new file mode 100644 index 0000000000..ed8a695942 --- /dev/null +++ b/functional/configuration/shelltests/propagator_both.yaml @@ -0,0 +1,10 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + - tracecontext: + - baggage: + composite_list: "b3,b3multi" diff --git a/functional/configuration/shelltests/propagator_composite_list.test b/functional/configuration/shelltests/propagator_composite_list.test new file mode 100644 index 0000000000..ed696f358c --- /dev/null +++ b/functional/configuration/shelltests/propagator_composite_list.test @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_composite_list.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/propagator_composite_list.yaml b/functional/configuration/shelltests/propagator_composite_list.yaml new file mode 100644 index 0000000000..92688efbc4 --- /dev/null +++ b/functional/configuration/shelltests/propagator_composite_list.yaml @@ -0,0 +1,7 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite_list: "tracecontext,baggage,b3,b3multi" diff --git a/functional/configuration/shelltests/propagator_duplicates.test b/functional/configuration/shelltests/propagator_duplicates.test new file mode 100644 index 0000000000..6fc59bcde3 --- /dev/null +++ b/functional/configuration/shelltests/propagator_duplicates.test @@ -0,0 +1,8 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +$ otel_configuration_check --yaml shelltests/propagator_duplicates.yaml +> +MODEL PARSED +SDK CREATED +>= 0 diff --git a/functional/configuration/shelltests/propagator_duplicates.yaml b/functional/configuration/shelltests/propagator_duplicates.yaml new file mode 100644 index 0000000000..96a7ba82e5 --- /dev/null +++ b/functional/configuration/shelltests/propagator_duplicates.yaml @@ -0,0 +1,10 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +file_format: 0.0 + +propagator: + composite: + - tracecontext: + - baggage: + composite_list: "tracecontext,baggage,baggage,b3,b3multi" diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 4ec75485ef..0eadc17a6e 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1061,42 +1061,87 @@ SdkBuilder::CreateTextMapPropagator(const std::string &name) const throw UnsupportedException(die); } +static bool IsDuplicate(const std::vector &propagator_seen, const std::string &name) +{ + bool duplicate = false; + for (const auto &seen : propagator_seen) + { + if (name == seen) + { + duplicate = true; + } + } + + return duplicate; +} + std::unique_ptr SdkBuilder::CreatePropagator( const std::unique_ptr &model) const { + std::unique_ptr sdk; std::vector> propagators; std::unique_ptr propagator; + std::vector propagator_seen; + bool duplicate; + + /* + * Note that the spec only requires to check duplicates between + * composite and composite_list. + * Here we check for duplicates globally, for ease of use. + */ for (const auto &name : model->composite) { - propagator = CreateTextMapPropagator(name); - propagators.push_back(std::move(propagator)); + duplicate = IsDuplicate(propagator_seen, name); + + if (!duplicate) + { + propagator = CreateTextMapPropagator(name); + propagators.push_back(std::move(propagator)); + propagator_seen.push_back(name); + } } if (model->composite_list.size() > 0) { std::string str_list = model->composite_list; - size_t start_pos = 0; - size_t end_pos = 0; - char separator = ','; + size_t start_pos = 0; + size_t end_pos = 0; + char separator = ','; std::string name; while ((end_pos = str_list.find(separator, start_pos)) != std::string::npos) { name = str_list.substr(start_pos, end_pos - start_pos); - propagator = CreateTextMapPropagator(name); - propagators.push_back(std::move(propagator)); + + duplicate = IsDuplicate(propagator_seen, name); + + if (!duplicate) + { + propagator = CreateTextMapPropagator(name); + propagators.push_back(std::move(propagator)); + propagator_seen.push_back(name); + } start_pos = end_pos + 1; } name = str_list.substr(start_pos); - propagator = CreateTextMapPropagator(name); - propagators.push_back(std::move(propagator)); + + duplicate = IsDuplicate(propagator_seen, name); + + if (!duplicate) + { + propagator = CreateTextMapPropagator(name); + propagators.push_back(std::move(propagator)); + } } - auto sdk = std::make_unique( - std::move(propagators)); + if (propagators.size() > 0) + { + sdk = std::make_unique( + std::move(propagators)); + } return sdk; } diff --git a/sdk/test/configuration/yaml_propagator_test.cc b/sdk/test/configuration/yaml_propagator_test.cc index d04bf2372b..cba8bde4da 100644 --- a/sdk/test/configuration/yaml_propagator_test.cc +++ b/sdk/test/configuration/yaml_propagator_test.cc @@ -146,3 +146,27 @@ file_format: xx.yy ASSERT_EQ(config->propagator->composite[2], "ccc"); ASSERT_EQ(config->propagator->composite_list, "ddd,eee,fff"); } + +TEST(YamlPropagator, propagator_duplicates) +{ + std::string yaml = R"( +file_format: xx.yy +propagator: + composite: + - aaa: + - bbb: + - bbb: + - ccc: + composite_list: "aaa,eee,eee,fff,ccc" +)"; + + auto config = DoParse(yaml); + ASSERT_NE(config, nullptr); + ASSERT_NE(config->propagator, nullptr); + ASSERT_EQ(config->propagator->composite.size(), 4); + ASSERT_EQ(config->propagator->composite[0], "aaa"); + ASSERT_EQ(config->propagator->composite[1], "bbb"); + ASSERT_EQ(config->propagator->composite[2], "bbb"); + ASSERT_EQ(config->propagator->composite[3], "ccc"); + ASSERT_EQ(config->propagator->composite_list, "aaa,eee,eee,fff,ccc"); +} From 7d4163f2f3fd93292e16d7593be02dabd06ab347 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 23 Jul 2025 22:56:01 +0200 Subject: [PATCH 154/166] Functional test cleanup --- functional/configuration/shelltests/kitchen-sink.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/functional/configuration/shelltests/kitchen-sink.test b/functional/configuration/shelltests/kitchen-sink.test index f779754572..999dab125e 100644 --- a/functional/configuration/shelltests/kitchen-sink.test +++ b/functional/configuration/shelltests/kitchen-sink.test @@ -6,6 +6,8 @@ $ otel_configuration_check --yaml shelltests/kitchen-sink.yaml | egrep -v "(obse MODEL PARSED [WARNING] attribute_limits not supported, ignoring [WARNING] IncludeExclude attribute processor not supported, ignoring +[WARNING] metric producer not supported, ignoring +[WARNING] metric producer not supported, ignoring [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values [WARNING] [Periodic Exporting Metric Reader] Invalid configuration: export_timeout_millis_ should be less than export_interval_millis_, using default values From 604502b509af67c143526e607fc8ef1a2ac25eeb Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 24 Jul 2025 21:11:37 +0200 Subject: [PATCH 155/166] Cleanup --- examples/yaml/kitchen-sink.yaml | 168 +++++++++++++++++++++++++-- sdk/src/configuration/sdk_builder.cc | 2 +- 2 files changed, 161 insertions(+), 9 deletions(-) diff --git a/examples/yaml/kitchen-sink.yaml b/examples/yaml/kitchen-sink.yaml index d32f789356..de8d00be68 100644 --- a/examples/yaml/kitchen-sink.yaml +++ b/examples/yaml/kitchen-sink.yaml @@ -11,7 +11,7 @@ # The file format version. # The yaml format is documented at # https://github.com/open-telemetry/opentelemetry-configuration/tree/main/schema -file_format: "0.3" +file_format: "1.0-rc.1" # Configure if the SDK is disabled or not. # If omitted or null, false is used. disabled: false @@ -167,6 +167,24 @@ logger_provider: # Value must be non-negative. # If omitted or null, 128 is used. attribute_count_limit: 128 + # Configure loggers. + # This type is in development and subject to breaking changes in minor versions. + logger_configurator/development: + # Configure the default logger config used there is no matching entry in .logger_configurator/development.loggers. + default_config: + # Configure if the logger is enabled or not. + disabled: true + # Configure loggers. + loggers: + - # Configure logger names to match, evaluated as follows: + # + # * If the logger name exactly matches. + # * If the logger name matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + name: io.opentelemetry.contrib.* + # The logger config. + config: + # Configure if the logger is enabled or not. + disabled: false # Configure meter provider. # If omitted, a noop meter provider is used. meter_provider: @@ -177,7 +195,8 @@ meter_provider: # Configure exporter. exporter: # Configure exporter to be prometheus. - prometheus: + # This type is in development and subject to breaking changes in minor versions. + prometheus/development: # Configure host. # If omitted or null, localhost is used. host: localhost @@ -213,6 +232,33 @@ meter_provider: producers: - # Configure metric producer to be opencensus. opencensus: + # Configure cardinality limits. + cardinality_limits: + # Configure default cardinality limit for all instrument types. + # Instrument-specific cardinality limits take priority. + # If omitted or null, 2000 is used. + default: 2000 + # Configure default cardinality limit for counter instruments. + # If omitted or null, the value from .default is used. + counter: 2000 + # Configure default cardinality limit for gauge instruments. + # If omitted or null, the value from .default is used. + gauge: 2000 + # Configure default cardinality limit for histogram instruments. + # If omitted or null, the value from .default is used. + histogram: 2000 + # Configure default cardinality limit for observable_counter instruments. + # If omitted or null, the value from .default is used. + observable_counter: 2000 + # Configure default cardinality limit for observable_gauge instruments. + # If omitted or null, the value from .default is used. + observable_gauge: 2000 + # Configure default cardinality limit for observable_up_down_counter instruments. + # If omitted or null, the value from .default is used. + observable_up_down_counter: 2000 + # Configure default cardinality limit for up_down_counter instruments. + # If omitted or null, the value from .default is used. + up_down_counter: 2000 - # Configure a periodic metric reader. periodic: # Configure delay interval (in milliseconds) between start of two consecutive exports. @@ -275,6 +321,33 @@ meter_provider: producers: - # Configure metric producer to be prometheus. prometheus: + # Configure cardinality limits. + cardinality_limits: + # Configure default cardinality limit for all instrument types. + # Instrument-specific cardinality limits take priority. + # If omitted or null, 2000 is used. + default: 2000 + # Configure default cardinality limit for counter instruments. + # If omitted or null, the value from .default is used. + counter: 2000 + # Configure default cardinality limit for gauge instruments. + # If omitted or null, the value from .default is used. + gauge: 2000 + # Configure default cardinality limit for histogram instruments. + # If omitted or null, the value from .default is used. + histogram: 2000 + # Configure default cardinality limit for observable_counter instruments. + # If omitted or null, the value from .default is used. + observable_counter: 2000 + # Configure default cardinality limit for observable_gauge instruments. + # If omitted or null, the value from .default is used. + observable_gauge: 2000 + # Configure default cardinality limit for observable_up_down_counter instruments. + # If omitted or null, the value from .default is used. + observable_up_down_counter: 2000 + # Configure default cardinality limit for up_down_counter instruments. + # If omitted or null, the value from .default is used. + up_down_counter: 2000 - # Configure a periodic metric reader. periodic: # Configure exporter. @@ -375,6 +448,7 @@ meter_provider: # If omitted or null, all instrument names match. instrument_name: my-instrument # Configure instrument type selection criteria. + # Values include: counter, gauge, histogram, observable_counter, observable_gauge, observable_up_down_counter, up_down_counter. # If omitted or null, all instrument types match. instrument_type: histogram # Configure the instrument unit selection criteria. @@ -426,6 +500,9 @@ meter_provider: # Configure record min and max. # If omitted or null, true is used. record_min_max: true + # Configure the aggregation cardinality limit. + # If omitted or null, the metric reader's default cardinality limit is used. + aggregation_cardinality_limit: 2000 # Configure attribute keys retained in the resulting stream(s). attribute_keys: # Configure list of attribute keys to include in the resulting stream(s). All other attributes are dropped. @@ -441,12 +518,55 @@ meter_provider: # Values include: trace_based, always_on, always_off. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#metrics-sdk-configuration. # If omitted or null, trace_based is used. exemplar_filter: trace_based + # Configure meters. + # This type is in development and subject to breaking changes in minor versions. + meter_configurator/development: + # Configure the default meter config used there is no matching entry in .meter_configurator/development.meters. + default_config: + # Configure if the meter is enabled or not. + disabled: true + # Configure meters. + meters: + - # Configure meter names to match, evaluated as follows: + # + # * If the meter name exactly matches. + # * If the meter name matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + name: io.opentelemetry.contrib.* + # The meter config. + config: + # Configure if the meter is enabled or not. + disabled: false # Configure text map context propagators. -# If omitted, tracecontext and baggage are used. +# If omitted, a noop propagator is used. propagator: - # Configure the set of propagators to include in the composite text map propagator. - # Built-in values include: tracecontext, baggage, b3, b3multi, jaeger, none. Known third party values include: xray, ottrace. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration. - composite: [ tracecontext, baggage, b3, b3multi, jaeger ] + # Configure the propagators in the composite text map propagator. Entries from .composite_list are appended to the list here with duplicates filtered out. + # Built-in propagator keys include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party keys include: xray. + # If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used. + composite: + - # Include the w3c trace context propagator. + tracecontext: + - # Include the w3c baggage propagator. + baggage: + - # Include the zipkin b3 propagator. + b3: + - # Include the zipkin b3 multi propagator. + b3multi: + - # Include the jaeger propagator. + jaeger: + +# ottrace not supported in opentelemetry-cpp +# - # Include the opentracing propagator. +# ottrace: + + # Configure the propagators in the composite text map propagator. Entries are appended to .composite with duplicates filtered out. + # The value is a comma separated list of propagator identifiers matching the format of OTEL_PROPAGATORS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details. + # Built-in propagator identifiers include: tracecontext, baggage, b3, b3multi, jaeger, ottrace. Known third party identifiers include: xray. + # If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used. +# composite_list: "tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray" + +# ottrace, xray not supported in opentelemetry-cpp + composite_list: "tracecontext,baggage,b3,b3multi,jaeger" + # Configure tracer provider. # If omitted, a noop tracer provider is used. tracer_provider: @@ -650,6 +770,24 @@ tracer_provider: local_parent_not_sampled: # Configure sampler to be always_off. always_off: + # Configure tracers. + # This type is in development and subject to breaking changes in minor versions. + tracer_configurator/development: + # Configure the default tracer config used there is no matching entry in .tracer_configurator/development.tracers. + default_config: + # Configure if the tracer is enabled or not. + disabled: true + # Configure tracers. + tracers: + - # Configure tracer names to match, evaluated as follows: + # + # * If the tracer name exactly matches. + # * If the tracer name matches the wildcard pattern, where '?' matches any single character and '*' matches any number of characters including none. + name: io.opentelemetry.contrib.* + # The tracer config. + config: + # Configure if the tracer is enabled or not. + disabled: false # Configure resource for all signals. # If omitted, the default resource is used. resource: @@ -687,8 +825,10 @@ resource: # The value is a list of comma separated key-value pairs matching the format of OTEL_RESOURCE_ATTRIBUTES. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details. # If omitted or null, no resource attributes are added. attributes_list: "service.namespace=my-namespace,service.version=1.0.0" - # Configure resource detectors. - detectors: + # Configure resource detection. + # This type is in development and subject to breaking changes in minor versions. + # If omitted or null, resource detection is disabled. + detection/development: # Configure attributes provided by resource detectors. attributes: # Configure list of attribute key patterns to include from resource detectors. @@ -705,6 +845,18 @@ resource: # If omitted, .included attributes are included. excluded: - process.command_args + # Configure resource detectors. + # Resource detector names are dependent on the SDK language ecosystem. Please consult documentation for each respective language. + # If omitted or null, no resource detectors are enabled. + detectors: + - # Enable the container resource detector, which populates container.* attributes. + container: + - # Enable the host resource detector, which populates host.* and os.* attributes. + host: + - # Enable the process resource detector, which populates process.* attributes. + process: + - # Enable the service detector, which populates service.name based on the OTEL_SERVICE_NAME environment variable and service.instance.id. + service: # Configure resource schema URL. # If omitted or null, no schema URL is used. schema_url: https://opentelemetry.io/schemas/1.16.0 diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index 0eadc17a6e..c084ef930c 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1083,7 +1083,7 @@ SdkBuilder::CreatePropagator( std::vector> propagators; std::unique_ptr propagator; std::vector propagator_seen; - bool duplicate; + bool duplicate = false; /* * Note that the spec only requires to check duplicates between From 3f1e66b8e687f387e4b00d89e2fd603aa58fc3f1 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Fri, 25 Jul 2025 01:12:01 +0200 Subject: [PATCH 156/166] Rework exporters CMake --- examples/yaml/CMakeLists.txt | 29 +- exporters/ostream/BUILD | 6 - exporters/ostream/CMakeLists.txt | 134 +++++++-- exporters/otlp/BUILD | 12 - exporters/otlp/CMakeLists.txt | 354 +++++++++++++++++++----- exporters/prometheus/BUILD | 2 - exporters/prometheus/CMakeLists.txt | 43 ++- exporters/zipkin/BUILD | 2 - exporters/zipkin/CMakeLists.txt | 42 ++- functional/configuration/CMakeLists.txt | 28 +- 10 files changed, 525 insertions(+), 127 deletions(-) diff --git a/examples/yaml/CMakeLists.txt b/examples/yaml/CMakeLists.txt index 6a49504b49..c67b815cf6 100644 --- a/examples/yaml/CMakeLists.txt +++ b/examples/yaml/CMakeLists.txt @@ -30,38 +30,51 @@ target_link_libraries( ${CMAKE_THREAD_LIBS_INIT} common_metrics_foo_library common_logs_foo_library - opentelemetry_exporter_ostream_span - opentelemetry_exporter_ostream_metrics - opentelemetry_exporter_ostream_logs) + opentelemetry_exporter_ostream_span_builder + opentelemetry_exporter_ostream_metrics_builder + opentelemetry_exporter_ostream_logs_builder) if(WITH_OTLP_HTTP) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_HTTP) - target_link_libraries(example_yaml opentelemetry_otlp_http_builder) + target_link_libraries(example_yaml opentelemetry_exporter_otlp_http_builder) + target_link_libraries(example_yaml + opentelemetry_exporter_otlp_http_log_builder) + target_link_libraries(example_yaml + opentelemetry_exporter_otlp_http_metric_builder) endif() if(WITH_OTLP_GRPC) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_GRPC) - target_link_libraries(example_yaml opentelemetry_otlp_grpc_builder) + target_link_libraries(example_yaml opentelemetry_exporter_otlp_grpc_builder) + target_link_libraries(example_yaml + opentelemetry_exporter_otlp_grpc_log_builder) + target_link_libraries(example_yaml + opentelemetry_exporter_otlp_grpc_metrics_builder) endif() if(WITH_OTLP_FILE) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_FILE) - target_link_libraries(example_yaml opentelemetry_otlp_file_builder) + target_link_libraries(example_yaml opentelemetry_exporter_otlp_file_builder) + target_link_libraries(example_yaml + opentelemetry_exporter_otlp_file_log_builder) + target_link_libraries(example_yaml + opentelemetry_exporter_otlp_file_metric_builder) endif() if(WITH_ZIPKIN) include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) add_definitions(-DOTEL_HAVE_ZIPKIN) - target_link_libraries(example_yaml opentelemetry_exporter_zipkin_trace) + target_link_libraries(example_yaml + opentelemetry_exporter_zipkin_trace_builder) endif() if(WITH_PROMETHEUS) include_directories(${CMAKE_SOURCE_DIR}/exporters/prometheus/include) add_definitions(-DOTEL_HAVE_PROMETHEUS) - target_link_libraries(example_yaml opentelemetry_exporter_prometheus) + target_link_libraries(example_yaml opentelemetry_exporter_prometheus_builder) endif() if(DEFINED OPENTELEMETRY_BUILD_DLL) diff --git a/exporters/ostream/BUILD b/exporters/ostream/BUILD index 36f8ce9316..177bf6a968 100644 --- a/exporters/ostream/BUILD +++ b/exporters/ostream/BUILD @@ -6,13 +6,11 @@ package(default_visibility = ["//visibility:public"]) cc_library( name = "ostream_log_record_exporter", srcs = [ - "src/console_log_record_builder.cc", "src/log_record_exporter.cc", "src/log_record_exporter_factory.cc", ], hdrs = [ "include/opentelemetry/exporters/ostream/common_utils.h", - "include/opentelemetry/exporters/ostream/console_log_record_builder.h", "include/opentelemetry/exporters/ostream/log_record_exporter.h", "include/opentelemetry/exporters/ostream/log_record_exporter_factory.h", ], @@ -39,13 +37,11 @@ cc_test( cc_library( name = "ostream_metric_exporter", srcs = [ - "src/console_push_metric_builder.cc", "src/metric_exporter.cc", "src/metric_exporter_factory.cc", ], hdrs = [ "include/opentelemetry/exporters/ostream/common_utils.h", - "include/opentelemetry/exporters/ostream/console_push_metric_builder.h", "include/opentelemetry/exporters/ostream/metric_exporter.h", "include/opentelemetry/exporters/ostream/metric_exporter_factory.h", ], @@ -75,13 +71,11 @@ cc_test( cc_library( name = "ostream_span_exporter", srcs = [ - "src/console_span_builder.cc", "src/span_exporter.cc", "src/span_exporter_factory.cc", ], hdrs = [ "include/opentelemetry/exporters/ostream/common_utils.h", - "include/opentelemetry/exporters/ostream/console_span_builder.h", "include/opentelemetry/exporters/ostream/span_exporter.h", "include/opentelemetry/exporters/ostream/span_exporter_factory.h", ], diff --git a/exporters/ostream/CMakeLists.txt b/exporters/ostream/CMakeLists.txt index c41270144f..9308eb7d9f 100644 --- a/exporters/ostream/CMakeLists.txt +++ b/exporters/ostream/CMakeLists.txt @@ -1,9 +1,12 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -add_library( - opentelemetry_exporter_ostream_span - src/span_exporter.cc src/span_exporter_factory.cc src/console_span_builder.cc) +# +# opentelemetry_exporter_ostream_span +# + +add_library(opentelemetry_exporter_ostream_span src/span_exporter.cc + src/span_exporter_factory.cc) set_target_properties(opentelemetry_exporter_ostream_span PROPERTIES EXPORT_NAME ostream_span_exporter) @@ -28,10 +31,33 @@ if(BUILD_TESTING) TEST_LIST ostream_span_test) endif() # BUILD_TESTING -add_library( - opentelemetry_exporter_ostream_metrics - src/metric_exporter.cc src/metric_exporter_factory.cc - src/console_push_metric_builder.cc) +# +# opentelemetry_exporter_ostream_span_builder +# + +add_library(opentelemetry_exporter_ostream_span_builder + src/console_span_builder.cc) + +set_target_properties(opentelemetry_exporter_ostream_span_builder + PROPERTIES EXPORT_NAME ostream_span_exporter_builder) +set_target_version(opentelemetry_exporter_ostream_span_builder) + +target_include_directories( + opentelemetry_exporter_ostream_span_builder + PUBLIC "$") + +target_link_libraries(opentelemetry_exporter_ostream_span_builder + PUBLIC opentelemetry_exporter_ostream_span) + +list(APPEND OPENTELEMETRY_OSTREAM_BUILDER_TARGETS + opentelemetry_exporter_ostream_span_builder) + +# +# opentelemetry_exporter_ostream_metrics +# + +add_library(opentelemetry_exporter_ostream_metrics + src/metric_exporter.cc src/metric_exporter_factory.cc) set_target_properties(opentelemetry_exporter_ostream_metrics PROPERTIES EXPORT_NAME ostream_metrics_exporter) set_target_version(opentelemetry_exporter_ostream_metrics) @@ -56,10 +82,31 @@ if(BUILD_TESTING) TEST_LIST ostream_metric_test) endif() -add_library( - opentelemetry_exporter_ostream_logs - src/log_record_exporter.cc src/log_record_exporter_factory.cc - src/console_log_record_builder.cc) +# +# opentelemetry_exporter_ostream_metrics_builder +# + +add_library(opentelemetry_exporter_ostream_metrics_builder + src/console_push_metric_builder.cc) +set_target_properties(opentelemetry_exporter_ostream_metrics_builder + PROPERTIES EXPORT_NAME ostream_metrics_exporter_builder) +set_target_version(opentelemetry_exporter_ostream_metrics_builder) + +target_include_directories( + opentelemetry_exporter_ostream_metrics_builder + PUBLIC "$") +target_link_libraries(opentelemetry_exporter_ostream_metrics_builder + PUBLIC opentelemetry_exporter_ostream_metrics) + +list(APPEND OPENTELEMETRY_OSTREAM_BUILDER_TARGETS + opentelemetry_exporter_ostream_metrics_builder) + +# +# opentelemetry_exporter_ostream_logs +# + +add_library(opentelemetry_exporter_ostream_logs + src/log_record_exporter.cc src/log_record_exporter_factory.cc) set_target_properties(opentelemetry_exporter_ostream_logs PROPERTIES EXPORT_NAME ostream_log_record_exporter) set_target_version(opentelemetry_exporter_ostream_logs) @@ -71,6 +118,35 @@ target_link_libraries(opentelemetry_exporter_ostream_logs PUBLIC opentelemetry_logs) list(APPEND OPENTELEMETRY_OSTREAM_TARGETS opentelemetry_exporter_ostream_logs) +if(BUILD_TESTING) + add_executable(ostream_log_test test/ostream_log_test.cc) + target_link_libraries(ostream_log_test ${GTEST_BOTH_LIBRARIES} + opentelemetry_exporter_ostream_logs) + gtest_add_tests( + TARGET ostream_log_test + TEST_PREFIX exporter. + TEST_LIST ostream_log_test) +endif() + +# +# opentelemetry_exporter_ostream_logs_builder +# + +add_library(opentelemetry_exporter_ostream_logs_builder + src/console_log_record_builder.cc) +set_target_properties( + opentelemetry_exporter_ostream_logs_builder + PROPERTIES EXPORT_NAME ostream_log_record_exporter_builder) +set_target_version(opentelemetry_exporter_ostream_logs_builder) + +target_include_directories( + opentelemetry_exporter_ostream_logs_builder + PUBLIC "$") +target_link_libraries(opentelemetry_exporter_ostream_logs_builder + PUBLIC opentelemetry_exporter_ostream_logs) +list(APPEND OPENTELEMETRY_OSTREAM_BUILDER_TARGETS + opentelemetry_exporter_ostream_logs_builder) + otel_add_component( COMPONENT exporters_ostream @@ -82,14 +158,30 @@ otel_add_component( "include/opentelemetry/exporters" FILES_MATCHING PATTERN - "*.h") + "*.h" + PATTERN + "console_log_record_builder.h" + EXCLUDE + PATTERN + "console_push_metric_builder.h" + EXCLUDE + PATTERN + "console_span_builder.h" + EXCLUDE) -if(BUILD_TESTING) - add_executable(ostream_log_test test/ostream_log_test.cc) - target_link_libraries(ostream_log_test ${GTEST_BOTH_LIBRARIES} - opentelemetry_exporter_ostream_logs) - gtest_add_tests( - TARGET ostream_log_test - TEST_PREFIX exporter. - TEST_LIST ostream_log_test) -endif() +otel_add_component( + COMPONENT + exporters_ostream_builder + TARGETS + ${OPENTELEMETRY_OSTREAM_BUILDER_TARGETS} + FILES_DIRECTORY + "include/opentelemetry/exporters/ostream" + FILES_DESTINATION + "include/opentelemetry/exporters" + FILES_MATCHING + PATTERN + "console_log_record_builder.h" + PATTERN + "console_push_metric_builder.h" + PATTERN + "console_span_builder.h") diff --git a/exporters/otlp/BUILD b/exporters/otlp/BUILD index 0994271493..2b841954a6 100644 --- a/exporters/otlp/BUILD +++ b/exporters/otlp/BUILD @@ -93,7 +93,6 @@ cc_library( "src/otlp_grpc_exporter.cc", "src/otlp_grpc_exporter_factory.cc", "src/otlp_grpc_exporter_options.cc", - "src/otlp_grpc_span_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", @@ -101,7 +100,6 @@ cc_library( "include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h", "include/opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h", - "include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h", "include/opentelemetry/exporters/otlp/otlp_grpc_utils.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", @@ -168,7 +166,6 @@ cc_library( "src/otlp_http_exporter.cc", "src/otlp_http_exporter_factory.cc", "src/otlp_http_exporter_options.cc", - "src/otlp_http_span_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", @@ -176,7 +173,6 @@ cc_library( "include/opentelemetry/exporters/otlp/otlp_http_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h", "include/opentelemetry/exporters/otlp/otlp_http_exporter_runtime_options.h", - "include/opentelemetry/exporters/otlp/otlp_http_span_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -256,7 +252,6 @@ cc_library( "src/otlp_grpc_metric_exporter.cc", "src/otlp_grpc_metric_exporter_factory.cc", "src/otlp_grpc_metric_exporter_options.cc", - "src/otlp_grpc_push_metric_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", @@ -264,7 +259,6 @@ cc_library( "include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h", "include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h", - "include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -290,7 +284,6 @@ cc_library( "src/otlp_http_metric_exporter.cc", "src/otlp_http_metric_exporter_factory.cc", "src/otlp_http_metric_exporter_options.cc", - "src/otlp_http_push_metric_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", @@ -298,7 +291,6 @@ cc_library( "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h", "include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_runtime_options.h", - "include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -347,14 +339,12 @@ cc_library( cc_library( name = "otlp_http_log_record_exporter", srcs = [ - "src/otlp_http_log_record_builder.cc", "src/otlp_http_log_record_exporter.cc", "src/otlp_http_log_record_exporter_factory.cc", "src/otlp_http_log_record_exporter_options.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", - "include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h", @@ -407,7 +397,6 @@ cc_library( cc_library( name = "otlp_grpc_log_record_exporter", srcs = [ - "src/otlp_grpc_log_record_builder.cc", "src/otlp_grpc_log_record_exporter.cc", "src/otlp_grpc_log_record_exporter_factory.cc", "src/otlp_grpc_log_record_exporter_options.cc", @@ -415,7 +404,6 @@ cc_library( hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_grpc_client_options.h", - "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h", "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h", "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h", "include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h", diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index ef39543a5e..e4ddb7c841 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -7,6 +7,10 @@ else() set(OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE) endif() +# +# opentelemetry_otlp_recordable +# + add_library( opentelemetry_otlp_recordable ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} @@ -42,6 +46,11 @@ if(WITH_OTLP_GRPC) else() set(OPENTELEMETRY_OTLP_GRPC_CLIENT_LIB_TYPE) endif() + + # + # opentelemetry_exporter_otlp_grpc_client + # + add_library( opentelemetry_exporter_otlp_grpc_client ${OPENTELEMETRY_OTLP_GRPC_CLIENT_LIB_TYPE} src/otlp_grpc_client.cc @@ -78,6 +87,10 @@ if(WITH_OTLP_GRPC) list(APPEND OPENTELEMETRY_OTLP_GRPC_TARGETS opentelemetry_exporter_otlp_grpc_client opentelemetry_proto_grpc) + # + # opentelemetry_exporter_otlp_grpc + # + add_library( opentelemetry_exporter_otlp_grpc ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_exporter.cc @@ -94,6 +107,28 @@ if(WITH_OTLP_GRPC) list(APPEND OPENTELEMETRY_OTLP_GRPC_TARGETS opentelemetry_exporter_otlp_grpc) + # + # opentelemetry_exporter_otlp_grpc_builder + # + + add_library( + opentelemetry_exporter_otlp_grpc_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_span_builder.cc) + + set_target_properties(opentelemetry_exporter_otlp_grpc_builder + PROPERTIES EXPORT_NAME otlp_grpc_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_grpc_builder) + + target_link_libraries(opentelemetry_exporter_otlp_grpc_builder + PUBLIC opentelemetry_exporter_otlp_grpc) + + list(APPEND OPENTELEMETRY_OTLP_GRPC_BUILDER_TARGETS + opentelemetry_exporter_otlp_grpc_builder) + + # + # opentelemetry_exporter_otlp_grpc_log + # + add_library( opentelemetry_exporter_otlp_grpc_log ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_log_record_exporter.cc @@ -112,6 +147,29 @@ if(WITH_OTLP_GRPC) list(APPEND OPENTELEMETRY_OTLP_GRPC_TARGETS opentelemetry_exporter_otlp_grpc_log) + # + # opentelemetry_exporter_otlp_grpc_log_builder + # + + add_library( + opentelemetry_exporter_otlp_grpc_log_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_log_record_builder.cc) + + set_target_properties( + opentelemetry_exporter_otlp_grpc_log_builder + PROPERTIES EXPORT_NAME otlp_grpc_log_record_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_grpc_log_builder) + + target_link_libraries(opentelemetry_exporter_otlp_grpc_log_builder + PUBLIC opentelemetry_exporter_otlp_grpc_log) + + list(APPEND OPENTELEMETRY_OTLP_GRPC_BUILDER_TARGETS + opentelemetry_exporter_otlp_grpc_log_builder) + + # + # opentelemetry_exporter_otlp_grpc_metrics + # + add_library( opentelemetry_exporter_otlp_grpc_metrics ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_metric_exporter.cc @@ -130,35 +188,33 @@ if(WITH_OTLP_GRPC) list(APPEND OPENTELEMETRY_OTLP_GRPC_TARGETS opentelemetry_exporter_otlp_grpc_metrics) - add_library( - opentelemetry_otlp_grpc_builder - ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_span_builder.cc - src/otlp_grpc_push_metric_builder.cc src/otlp_grpc_log_record_builder.cc) - set_target_properties(opentelemetry_otlp_grpc_builder - PROPERTIES EXPORT_NAME otlp_grpc_builder) - set_target_version(opentelemetry_otlp_grpc_builder) + # + # opentelemetry_exporter_otlp_grpc_metrics_builder + # - target_include_directories( - opentelemetry_otlp_grpc_builder - PUBLIC "$" - "$") + add_library( + opentelemetry_exporter_otlp_grpc_metrics_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_grpc_push_metric_builder.cc) - # Make sure to build with the proper ABI - target_link_libraries(opentelemetry_otlp_grpc_builder - PUBLIC opentelemetry_api) + set_target_properties( + opentelemetry_exporter_otlp_grpc_metrics_builder + PROPERTIES EXPORT_NAME otlp_grpc_metrics_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_grpc_metrics_builder) - target_link_libraries(opentelemetry_otlp_grpc_builder - PUBLIC opentelemetry_exporter_otlp_grpc) - target_link_libraries(opentelemetry_otlp_grpc_builder + target_link_libraries(opentelemetry_exporter_otlp_grpc_metrics_builder PUBLIC opentelemetry_exporter_otlp_grpc_metrics) - target_link_libraries(opentelemetry_otlp_grpc_builder - PUBLIC opentelemetry_exporter_otlp_grpc_log) - list(APPEND OPENTELEMETRY_OTLP_GRPC_TARGETS opentelemetry_otlp_grpc_builder) + list(APPEND OPENTELEMETRY_OTLP_GRPC_BUILDER_TARGETS + opentelemetry_exporter_otlp_grpc_metrics_builder) endif() if(WITH_OTLP_HTTP) + + # + # opentelemetry_exporter_otlp_http_client + # + add_library( opentelemetry_exporter_otlp_http_client ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http.cc @@ -185,6 +241,10 @@ if(WITH_OTLP_HTTP) list(APPEND OPENTELEMETRY_OTLP_HTTP_TARGETS opentelemetry_exporter_otlp_http_client) + # + # opentelemetry_exporter_otlp_http + # + add_library( opentelemetry_exporter_otlp_http ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_exporter.cc @@ -201,6 +261,28 @@ if(WITH_OTLP_HTTP) list(APPEND OPENTELEMETRY_OTLP_HTTP_TARGETS opentelemetry_exporter_otlp_http) + # + # opentelemetry_exporter_otlp_http_builder + # + + add_library( + opentelemetry_exporter_otlp_http_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_span_builder.cc) + + set_target_properties(opentelemetry_exporter_otlp_http_builder + PROPERTIES EXPORT_NAME otlp_http_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_http_builder) + + target_link_libraries(opentelemetry_exporter_otlp_http_builder + PUBLIC opentelemetry_exporter_otlp_http) + + list(APPEND OPENTELEMETRY_OTLP_HTTP_BUILDER_TARGETS + opentelemetry_exporter_otlp_http_builder) + + # + # opentelemetry_exporter_otlp_http_log + # + add_library( opentelemetry_exporter_otlp_http_log ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_log_record_exporter.cc @@ -219,6 +301,29 @@ if(WITH_OTLP_HTTP) list(APPEND OPENTELEMETRY_OTLP_HTTP_TARGETS opentelemetry_exporter_otlp_http_log) + # + # opentelemetry_exporter_otlp_http_log_builder + # + + add_library( + opentelemetry_exporter_otlp_http_log_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_log_record_builder.cc) + + set_target_properties( + opentelemetry_exporter_otlp_http_log_builder + PROPERTIES EXPORT_NAME otlp_http_log_record_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_http_log_builder) + + target_link_libraries(opentelemetry_exporter_otlp_http_log_builder + PUBLIC opentelemetry_exporter_otlp_http_log) + + list(APPEND OPENTELEMETRY_OTLP_HTTP_BUILDER_TARGETS + opentelemetry_exporter_otlp_http_log_builder) + + # + # opentelemetry_exporter_otlp_http_metric + # + add_library( opentelemetry_exporter_otlp_http_metric ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_metric_exporter.cc @@ -237,34 +342,33 @@ if(WITH_OTLP_HTTP) list(APPEND OPENTELEMETRY_OTLP_HTTP_TARGETS opentelemetry_exporter_otlp_http_metric) - add_library( - opentelemetry_otlp_http_builder - ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_span_builder.cc - src/otlp_http_push_metric_builder.cc src/otlp_http_log_record_builder.cc) - set_target_properties(opentelemetry_otlp_http_builder - PROPERTIES EXPORT_NAME otlp_http_builder) - set_target_version(opentelemetry_otlp_http_builder) + # + # opentelemetry_exporter_otlp_http_metric_builder + # - target_include_directories( - opentelemetry_otlp_http_builder - PUBLIC "$" - "$") + add_library( + opentelemetry_exporter_otlp_http_metric_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_http_push_metric_builder.cc) - # Make sure to build with the proper ABI - target_link_libraries(opentelemetry_otlp_http_builder - PUBLIC opentelemetry_api) + set_target_properties( + opentelemetry_exporter_otlp_http_metric_builder + PROPERTIES EXPORT_NAME otlp_http_metric_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_http_metric_builder) - target_link_libraries(opentelemetry_otlp_http_builder - PUBLIC opentelemetry_exporter_otlp_http) - target_link_libraries(opentelemetry_otlp_http_builder + target_link_libraries(opentelemetry_exporter_otlp_http_metric_builder PUBLIC opentelemetry_exporter_otlp_http_metric) - target_link_libraries(opentelemetry_otlp_http_builder - PUBLIC opentelemetry_exporter_otlp_http_log) - list(APPEND OPENTELEMETRY_OTLP_HTTP_TARGETS opentelemetry_otlp_http_builder) + list(APPEND OPENTELEMETRY_OTLP_HTTP_BUILDER_TARGETS + opentelemetry_exporter_otlp_http_metric_builder) + endif() if(WITH_OTLP_FILE) + + # + # opentelemetry_exporter_otlp_file_client + # + add_library(opentelemetry_exporter_otlp_file_client ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_client.cc) set_target_properties(opentelemetry_exporter_otlp_file_client @@ -284,6 +388,10 @@ if(WITH_OTLP_FILE) list(APPEND OPENTELEMETRY_OTLP_FILE_TARGETS opentelemetry_exporter_otlp_file_client) + # + # opentelemetry_exporter_otlp_file + # + add_library( opentelemetry_exporter_otlp_file ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_exporter.cc @@ -300,6 +408,28 @@ if(WITH_OTLP_FILE) list(APPEND OPENTELEMETRY_OTLP_FILE_TARGETS opentelemetry_exporter_otlp_file) + # + # opentelemetry_exporter_otlp_file_builder + # + + add_library( + opentelemetry_exporter_otlp_file_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_span_builder.cc) + + set_target_properties(opentelemetry_exporter_otlp_file_builder + PROPERTIES EXPORT_NAME otlp_file_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_file_builder) + + target_link_libraries(opentelemetry_exporter_otlp_file_builder + PUBLIC opentelemetry_exporter_otlp_file) + + list(APPEND OPENTELEMETRY_OTLP_FILE_BUILDER_TARGETS + opentelemetry_exporter_otlp_file_builder) + + # + # opentelemetry_exporter_otlp_file_log + # + add_library( opentelemetry_exporter_otlp_file_log ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_log_record_exporter.cc @@ -318,6 +448,29 @@ if(WITH_OTLP_FILE) list(APPEND OPENTELEMETRY_OTLP_FILE_TARGETS opentelemetry_exporter_otlp_file_log) + # + # opentelemetry_exporter_otlp_file_log_builder + # + + add_library( + opentelemetry_exporter_otlp_file_log_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_log_record_builder.cc) + + set_target_properties( + opentelemetry_exporter_otlp_file_log_builder + PROPERTIES EXPORT_NAME otlp_file_log_record_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_file_log_builder) + + target_link_libraries(opentelemetry_exporter_otlp_file_log_builder + PUBLIC opentelemetry_exporter_otlp_file_log) + + list(APPEND OPENTELEMETRY_OTLP_FILE_BUILDER_TARGETS + opentelemetry_exporter_otlp_file_log_builder) + + # + # opentelemetry_exporter_otlp_file_metric + # + add_library( opentelemetry_exporter_otlp_file_metric ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_metric_exporter.cc @@ -336,32 +489,24 @@ if(WITH_OTLP_FILE) list(APPEND OPENTELEMETRY_OTLP_FILE_TARGETS opentelemetry_exporter_otlp_file_metric) - add_library( - opentelemetry_otlp_file_builder - ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_span_builder.cc - src/otlp_file_push_metric_builder.cc src/otlp_file_log_record_builder.cc) - - set_target_properties(opentelemetry_otlp_file_builder - PROPERTIES EXPORT_NAME otlp_file_builder) - set_target_version(opentelemetry_otlp_file_builder) + # + # opentelemetry_exporter_otlp_file_metric_builder + # - target_include_directories( - opentelemetry_otlp_file_builder - PUBLIC "$" - "$") + add_library( + opentelemetry_exporter_otlp_file_metric_builder + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_file_push_metric_builder.cc) - # Make sure to build with the proper ABI - target_link_libraries(opentelemetry_otlp_file_builder - PUBLIC opentelemetry_api) + set_target_properties( + opentelemetry_exporter_otlp_file_metric_builder + PROPERTIES EXPORT_NAME otlp_file_metric_exporter_builder) + set_target_version(opentelemetry_exporter_otlp_file_metric_builder) - target_link_libraries(opentelemetry_otlp_file_builder - PUBLIC opentelemetry_exporter_otlp_file) - target_link_libraries(opentelemetry_otlp_file_builder + target_link_libraries(opentelemetry_exporter_otlp_file_metric_builder PUBLIC opentelemetry_exporter_otlp_file_metric) - target_link_libraries(opentelemetry_otlp_file_builder - PUBLIC opentelemetry_exporter_otlp_file_log) - list(APPEND OPENTELEMETRY_OTLP_FILE_TARGETS opentelemetry_otlp_file_builder) + list(APPEND OPENTELEMETRY_OTLP_FILE_BUILDER_TARGETS + opentelemetry_exporter_otlp_file_metric_builder) endif() @@ -404,7 +549,34 @@ if(WITH_OTLP_GRPC) "include/opentelemetry/exporters" FILES_MATCHING PATTERN - "otlp_grpc*.h") + "otlp_grpc*.h" + PATTERN + "otlp_grpc_span_builder.h" + EXCLUDE + PATTERN + "otlp_grpc_log_record_builder.h" + EXCLUDE + PATTERN + "otlp_grpc_push_metric_builder.h" + EXCLUDE) + + otel_add_component( + COMPONENT + exporters_otlp_grpc_builder + TARGETS + ${OPENTELEMETRY_OTLP_GRPC_BUILDER_TARGETS} + FILES_DIRECTORY + "include/opentelemetry/exporters/otlp" + FILES_DESTINATION + "include/opentelemetry/exporters" + FILES_MATCHING + PATTERN + "otlp_grpc_span_builder.h" + PATTERN + "otlp_grpc_log_record_builder.h" + PATTERN + "otlp_grpc_push_metric_builder.h") + endif() if(WITH_OTLP_HTTP) @@ -419,7 +591,34 @@ if(WITH_OTLP_HTTP) "include/opentelemetry/exporters" FILES_MATCHING PATTERN - "otlp_http*.h") + "otlp_http*.h" + PATTERN + "otlp_http_span_builder.h" + EXCLUDE + PATTERN + "otlp_http_log_record_builder.h" + EXCLUDE + PATTERN + "otlp_http_push_metric_builder.h" + EXCLUDE) + + otel_add_component( + COMPONENT + exporters_otlp_http_builder + TARGETS + ${OPENTELEMETRY_OTLP_HTTP_BUILDER_TARGETS} + FILES_DIRECTORY + "include/opentelemetry/exporters/otlp" + FILES_DESTINATION + "include/opentelemetry/exporters" + FILES_MATCHING + PATTERN + "otlp_http_span_builder.h" + PATTERN + "otlp_http_log_record_builder.h" + PATTERN + "otlp_http_push_metric_builder.h") + endif() if(WITH_OTLP_FILE) @@ -434,7 +633,34 @@ if(WITH_OTLP_FILE) "include/opentelemetry/exporters" FILES_MATCHING PATTERN - "otlp_file*.h") + "otlp_file*.h" + PATTERN + "otlp_file_span_builder.h" + EXCLUDE + PATTERN + "otlp_file_log_record_builder.h" + EXCLUDE + PATTERN + "otlp_file_push_metric_builder.h" + EXCLUDE) + + otel_add_component( + COMPONENT + exporters_otlp_file_builder + TARGETS + ${OPENTELEMETRY_OTLP_FILE_BUILDER_TARGETS} + FILES_DIRECTORY + "include/opentelemetry/exporters/otlp" + FILES_DESTINATION + "include/opentelemetry/exporters" + FILES_MATCHING + PATTERN + "otlp_file_span_builder.h" + PATTERN + "otlp_file_log_record_builder.h" + PATTERN + "otlp_file_push_metric_builder.h") + endif() if(BUILD_TESTING) diff --git a/exporters/prometheus/BUILD b/exporters/prometheus/BUILD index 0d6aa8c2e3..fc981921d9 100644 --- a/exporters/prometheus/BUILD +++ b/exporters/prometheus/BUILD @@ -9,13 +9,11 @@ cc_library( "src/exporter.cc", "src/exporter_factory.cc", "src/exporter_options.cc", - "src/prometheus_pull_builder.cc", ], hdrs = [ "include/opentelemetry/exporters/prometheus/exporter.h", "include/opentelemetry/exporters/prometheus/exporter_factory.h", "include/opentelemetry/exporters/prometheus/exporter_options.h", - "include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h", ], strip_include_prefix = "include", tags = ["prometheus"], diff --git a/exporters/prometheus/CMakeLists.txt b/exporters/prometheus/CMakeLists.txt index 31fba7272b..8b9e974169 100644 --- a/exporters/prometheus/CMakeLists.txt +++ b/exporters/prometheus/CMakeLists.txt @@ -1,10 +1,14 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 +# +# opentelemetry_exporter_prometheus +# + add_library( opentelemetry_exporter_prometheus src/exporter.cc src/exporter_options.cc src/exporter_factory.cc - src/collector.cc src/exporter_utils.cc src/prometheus_pull_builder.cc) + src/collector.cc src/exporter_utils.cc) set_target_properties(opentelemetry_exporter_prometheus PROPERTIES EXPORT_NAME prometheus_exporter) @@ -20,6 +24,25 @@ target_link_libraries( PUBLIC opentelemetry_metrics prometheus-cpp::core PRIVATE prometheus-cpp::pull) +# +# opentelemetry_exporter_prometheus_builder +# + +add_library(opentelemetry_exporter_prometheus_builder + src/prometheus_pull_builder.cc) + +set_target_properties(opentelemetry_exporter_prometheus_builder + PROPERTIES EXPORT_NAME prometheus_exporter_builder) +set_target_version(opentelemetry_exporter_prometheus_builder) + +target_include_directories( + opentelemetry_exporter_prometheus_builder + PUBLIC "$" + "$") + +target_link_libraries(opentelemetry_exporter_prometheus_builder + PUBLIC opentelemetry_exporter_prometheus) + otel_add_component( COMPONENT exporters_prometheus @@ -31,7 +54,23 @@ otel_add_component( "include/opentelemetry/exporters" FILES_MATCHING PATTERN - "*.h") + "*.h" + PATTERN + "prometheus_pull_builder.h" + EXCLUDE) + +otel_add_component( + COMPONENT + exporters_prometheus_builder + TARGETS + opentelemetry_exporter_prometheus_builder + FILES_DIRECTORY + "include/opentelemetry/exporters/prometheus" + FILES_DESTINATION + "include/opentelemetry/exporters" + FILES_MATCHING + PATTERN + "prometheus_pull_builder.h") if(BUILD_TESTING) add_subdirectory(test) diff --git a/exporters/zipkin/BUILD b/exporters/zipkin/BUILD index 8553984450..16774e80df 100644 --- a/exporters/zipkin/BUILD +++ b/exporters/zipkin/BUILD @@ -23,12 +23,10 @@ cc_library( cc_library( name = "zipkin_exporter", srcs = [ - "src/zipkin_builder.cc", "src/zipkin_exporter.cc", "src/zipkin_exporter_factory.cc", ], hdrs = [ - "include/opentelemetry/exporters/zipkin/zipkin_builder.h", "include/opentelemetry/exporters/zipkin/zipkin_exporter.h", "include/opentelemetry/exporters/zipkin/zipkin_exporter_factory.h", "include/opentelemetry/exporters/zipkin/zipkin_exporter_options.h", diff --git a/exporters/zipkin/CMakeLists.txt b/exporters/zipkin/CMakeLists.txt index 9338451379..c8e3e9be2f 100644 --- a/exporters/zipkin/CMakeLists.txt +++ b/exporters/zipkin/CMakeLists.txt @@ -1,10 +1,13 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 +# +# opentelemetry_exporter_zipkin_trace +# + add_library( opentelemetry_exporter_zipkin_trace - src/zipkin_exporter.cc src/zipkin_exporter_factory.cc src/recordable.cc - src/zipkin_builder.cc) + src/zipkin_exporter.cc src/zipkin_exporter_factory.cc src/recordable.cc) target_include_directories( opentelemetry_exporter_zipkin_trace @@ -21,6 +24,25 @@ target_link_libraries( PUBLIC opentelemetry_trace opentelemetry_http_client_curl nlohmann_json::nlohmann_json) +# +# opentelemetry_exporter_zipkin_trace_builder +# + +add_library(opentelemetry_exporter_zipkin_trace_builder src/zipkin_builder.cc) + +target_include_directories( + opentelemetry_exporter_zipkin_trace_builder + PUBLIC "$" + "$") + +set_target_properties(opentelemetry_exporter_zipkin_trace_builder + PROPERTIES EXPORT_NAME zipkin_trace_exporter_builder) + +set_target_version(opentelemetry_exporter_zipkin_trace_builder) + +target_link_libraries(opentelemetry_exporter_zipkin_trace_builder + PUBLIC opentelemetry_exporter_zipkin_trace) + otel_add_component( COMPONENT exporters_zipkin @@ -35,8 +57,24 @@ otel_add_component( "*.h" PATTERN "recordable.h" + EXCLUDE + PATTERN + "zipkin_builder.h" EXCLUDE) +otel_add_component( + COMPONENT + exporters_zipkin_builder + TARGETS + opentelemetry_exporter_zipkin_trace_builder + FILES_DIRECTORY + "include/opentelemetry/exporters/zipkin" + FILES_DESTINATION + "include/opentelemetry/exporters" + FILES_MATCHING + PATTERN + "zipkin_builder.h") + if(BUILD_TESTING) add_definitions(-DGTEST_LINKED_AS_SHARED_LIBRARY=1) diff --git a/functional/configuration/CMakeLists.txt b/functional/configuration/CMakeLists.txt index 3c0723e8a7..991c9e2fa8 100644 --- a/functional/configuration/CMakeLists.txt +++ b/functional/configuration/CMakeLists.txt @@ -14,43 +14,55 @@ target_link_libraries( ${CMAKE_THREAD_LIBS_INIT} common_metrics_foo_library common_logs_foo_library - opentelemetry_exporter_ostream_span - opentelemetry_exporter_ostream_metrics - opentelemetry_exporter_ostream_logs) + opentelemetry_exporter_ostream_span_builder + opentelemetry_exporter_ostream_metrics_builder + opentelemetry_exporter_ostream_logs_builder) if(WITH_OTLP_HTTP) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_HTTP) target_link_libraries(otel_configuration_check - opentelemetry_otlp_http_builder) + opentelemetry_exporter_otlp_http_builder) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_otlp_http_log_builder) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_otlp_http_metric_builder) endif() if(WITH_OTLP_GRPC) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_GRPC) target_link_libraries(otel_configuration_check - opentelemetry_otlp_grpc_builder) + opentelemetry_exporter_otlp_grpc_builder) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_otlp_grpc_log_builder) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_otlp_grpc_metrics_builder) endif() if(WITH_OTLP_FILE) include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) add_definitions(-DOTEL_HAVE_OTLP_FILE) target_link_libraries(otel_configuration_check - opentelemetry_otlp_file_builder) + opentelemetry_exporter_otlp_file_builder) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_otlp_file_log_builder) + target_link_libraries(otel_configuration_check + opentelemetry_exporter_otlp_file_metric_builder) endif() if(WITH_ZIPKIN) include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) add_definitions(-DOTEL_HAVE_ZIPKIN) target_link_libraries(otel_configuration_check - opentelemetry_exporter_zipkin_trace) + opentelemetry_exporter_zipkin_trace_builder) endif() if(WITH_PROMETHEUS) include_directories(${CMAKE_SOURCE_DIR}/exporters/prometheus/include) add_definitions(-DOTEL_HAVE_PROMETHEUS) target_link_libraries(otel_configuration_check - opentelemetry_exporter_prometheus) + opentelemetry_exporter_prometheus_builder) endif() if(DEFINED OPENTELEMETRY_BUILD_DLL) From c9e4d27f794657e0386546cfbc4047597652d473 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 26 Jul 2025 19:24:16 +0200 Subject: [PATCH 157/166] exporter cleanup --- .../exporters/prometheus/exporter_options.h | 4 +++ exporters/prometheus/src/exporter_options.cc | 8 +++++ .../prometheus/src/prometheus_pull_builder.cc | 29 ++++++++----------- .../zipkin/zipkin_exporter_options.h | 10 +++++-- exporters/zipkin/src/zipkin_builder.cc | 6 +--- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h index da9d124029..9d41d268e8 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h @@ -18,8 +18,12 @@ namespace metrics */ struct PrometheusExporterOptions { + // Lookup environment variables PrometheusExporterOptions(); + // No defaults + PrometheusExporterOptions(void *); + // The endpoint the Prometheus backend can collect metrics from std::string url; diff --git a/exporters/prometheus/src/exporter_options.cc b/exporters/prometheus/src/exporter_options.cc index 2ac24b635d..95fd899ac6 100644 --- a/exporters/prometheus/src/exporter_options.cc +++ b/exporters/prometheus/src/exporter_options.cc @@ -77,6 +77,14 @@ PrometheusExporterOptions::PrometheusExporterOptions() without_type_suffix(GetPrometheusWithoutTypeSuffix()) {} +PrometheusExporterOptions::PrometheusExporterOptions(void *) + : url(""), + populate_target_info(true), + without_otel_scope(false), + without_units(false), + without_type_suffix(false) +{} + } // namespace metrics } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc index 027fbebe59..8265383f82 100644 --- a/exporters/prometheus/src/prometheus_pull_builder.cc +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -26,24 +26,19 @@ void PrometheusPullBuilder::Register(opentelemetry::sdk::configuration::Registry } std::unique_ptr PrometheusPullBuilder::Build( - const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration - * /* model */) const + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) const { - opentelemetry::exporter::metrics::PrometheusExporterOptions options; - -#ifdef LATER - // Expected - options.url = model->xxx; - options.populate_target_info = model->xxx; - options.without_otel_scope = model->xxx; - - // Configuration model - options.xxx = model->host; - options.xxx = model->port; - options.xxx = model->without_units; - options.xxx = model->without_type_suffix; - options.xxx = model->without_scope_info; -#endif + opentelemetry::exporter::metrics::PrometheusExporterOptions options(nullptr); + + std::string url(model->host); + url.append(":"); + url.append(std::to_string(model->port)); + + options.url = url; + options.populate_target_info = true; + options.without_otel_scope = model->without_scope_info; + options.without_units = model->without_units; + options.without_type_suffix = model->without_type_suffix; return PrometheusExporterFactory::Create(options); } diff --git a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_exporter_options.h b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_exporter_options.h index f5ee941d22..45cfef45dc 100644 --- a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_exporter_options.h +++ b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_exporter_options.h @@ -13,6 +13,7 @@ namespace exporter namespace zipkin { +// The endpoint to export to. By default the OpenTelemetry Collector's default endpoint. inline const std::string GetDefaultZipkinEndpoint() { const char *otel_exporter_zipkin_endpoint_env = "OTEL_EXPORTER_ZIPKIN_ENDPOINT"; @@ -36,8 +37,13 @@ enum class TransportFormat */ struct ZipkinExporterOptions { - // The endpoint to export to. By default the OpenTelemetry Collector's default endpoint. - std::string endpoint = GetDefaultZipkinEndpoint(); + // Lookup environment variables + ZipkinExporterOptions() : endpoint(GetDefaultZipkinEndpoint()) {} + + // No defaults + ZipkinExporterOptions(void *) : endpoint("") {} + + std::string endpoint; TransportFormat format = TransportFormat::kJson; std::string service_name = "default-service"; std::string ipv4; diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 35a1dee003..1095557f5a 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -31,14 +31,10 @@ void ZipkinBuilder::Register(opentelemetry::sdk::configuration::Registry *regist std::unique_ptr ZipkinBuilder::Build( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const { - ZipkinExporterOptions options; + ZipkinExporterOptions options(nullptr); options.endpoint = model->endpoint; -#ifdef LATER - options.xxx = model->timeout; -#endif - return ZipkinExporterFactory::Create(options); } From 73473ef8af36626a727aab045a1940a534ad9a02 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 26 Jul 2025 23:56:52 +0200 Subject: [PATCH 158/166] exporters, use model parameters. --- exporters/otlp/CMakeLists.txt | 41 +++++++ .../exporters/otlp/otlp_builder_utils.h | 38 +++++++ .../otlp/otlp_grpc_exporter_options.h | 3 + .../otlp_grpc_log_record_exporter_options.h | 3 + .../otlp/otlp_grpc_metric_exporter_options.h | 3 + .../otlp/otlp_http_exporter_options.h | 2 +- .../otlp_http_log_record_exporter_options.h | 3 + .../otlp/otlp_http_metric_exporter_options.h | 3 + exporters/otlp/src/otlp_builder_utils.cc | 104 ++++++++++++++++++ .../otlp/src/otlp_file_log_record_builder.cc | 4 +- .../otlp/src/otlp_file_push_metric_builder.cc | 11 +- exporters/otlp/src/otlp_file_span_builder.cc | 4 +- .../otlp/src/otlp_grpc_exporter_options.cc | 10 ++ .../otlp/src/otlp_grpc_log_record_builder.cc | 23 +++- .../otlp_grpc_log_record_exporter_options.cc | 10 ++ .../src/otlp_grpc_metric_exporter_options.cc | 11 ++ .../otlp/src/otlp_grpc_push_metric_builder.cc | 26 ++++- exporters/otlp/src/otlp_grpc_span_builder.cc | 22 +++- .../otlp/src/otlp_http_log_record_builder.cc | 23 +++- .../otlp_http_log_record_exporter_options.cc | 30 +++++ .../src/otlp_http_metric_exporter_options.cc | 31 ++++++ .../otlp/src/otlp_http_push_metric_builder.cc | 25 ++++- exporters/otlp/src/otlp_http_span_builder.cc | 23 ++-- 23 files changed, 421 insertions(+), 32 deletions(-) create mode 100644 exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h create mode 100644 exporters/otlp/src/otlp_builder_utils.cc diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index e4ddb7c841..b943696c28 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -35,6 +35,25 @@ target_link_libraries(opentelemetry_otlp_recordable PUBLIC opentelemetry_logs) target_link_libraries(opentelemetry_otlp_recordable PUBLIC opentelemetry_metrics) +# +# opentelemetry_exporter_otlp_builder_utils +# + +add_library(opentelemetry_exporter_otlp_builder_utils + ${OPENTELEMETRY_OTLP_TARGETS_LIB_TYPE} src/otlp_builder_utils.cc) + +set_target_properties(opentelemetry_exporter_otlp_builder_utils + PROPERTIES EXPORT_NAME otlp_builder_utils) +set_target_version(opentelemetry_exporter_otlp_builder_utils) + +target_include_directories( + opentelemetry_exporter_otlp_builder_utils + PUBLIC "$" + "$") + +target_link_libraries(opentelemetry_exporter_otlp_builder_utils + PUBLIC opentelemetry_otlp_recordable) + if(WITH_OTLP_GRPC) if(NOT DEFINED grpc_lib_type) message( @@ -275,6 +294,8 @@ if(WITH_OTLP_HTTP) target_link_libraries(opentelemetry_exporter_otlp_http_builder PUBLIC opentelemetry_exporter_otlp_http) + target_link_libraries(opentelemetry_exporter_otlp_http_builder + PUBLIC opentelemetry_exporter_otlp_builder_utils) list(APPEND OPENTELEMETRY_OTLP_HTTP_BUILDER_TARGETS opentelemetry_exporter_otlp_http_builder) @@ -316,6 +337,8 @@ if(WITH_OTLP_HTTP) target_link_libraries(opentelemetry_exporter_otlp_http_log_builder PUBLIC opentelemetry_exporter_otlp_http_log) + target_link_libraries(opentelemetry_exporter_otlp_http_log_builder + PUBLIC opentelemetry_exporter_otlp_builder_utils) list(APPEND OPENTELEMETRY_OTLP_HTTP_BUILDER_TARGETS opentelemetry_exporter_otlp_http_log_builder) @@ -357,6 +380,8 @@ if(WITH_OTLP_HTTP) target_link_libraries(opentelemetry_exporter_otlp_http_metric_builder PUBLIC opentelemetry_exporter_otlp_http_metric) + target_link_libraries(opentelemetry_exporter_otlp_http_metric_builder + PUBLIC opentelemetry_exporter_otlp_builder_utils) list(APPEND OPENTELEMETRY_OTLP_HTTP_BUILDER_TARGETS opentelemetry_exporter_otlp_http_metric_builder) @@ -528,6 +553,9 @@ otel_add_component( PATTERN "*.h" PATTERN + "otlp_builder_utils*.h" + EXCLUDE + PATTERN "otlp_http*.h" EXCLUDE PATTERN @@ -537,6 +565,19 @@ otel_add_component( "otlp_file*.h" EXCLUDE) +otel_add_component( + COMPONENT + exporter_otlp_builder_utils + TARGETS + opentelemetry_exporter_otlp_builder_utils + FILES_DIRECTORY + "include/opentelemetry/exporters/otlp" + FILES_DESTINATION + "include/opentelemetry/exporters" + FILES_MATCHING + PATTERN + "otlp_builder_utils.h") + if(WITH_OTLP_GRPC) otel_add_component( COMPONENT diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h new file mode 100644 index 0000000000..0b268810b9 --- /dev/null +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/exporters/otlp/otlp_environment.h" // For OtlpHeaders +#include "opentelemetry/exporters/otlp/otlp_http.h" +#include "opentelemetry/exporters/otlp/otlp_preferred_temporality.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" +#include "opentelemetry/sdk/configuration/temporality_preference.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +class OtlpBuilderUtils +{ +public: + static HttpRequestContentType ConvertOtlpHttpEncoding( + opentelemetry::sdk::configuration::OtlpHttpEncoding model); + + static OtlpHeaders ConvertHeadersConfigurationModel( + const opentelemetry::sdk::configuration::HeadersConfiguration *model, + const std::string &headers_list); + + static PreferredAggregationTemporality ConvertTemporalityPreference( + opentelemetry::sdk::configuration::TemporalityPreference model); +}; + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h index 407296e251..4fceaa9151 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h @@ -23,7 +23,10 @@ namespace otlp */ struct OPENTELEMETRY_EXPORT OtlpGrpcExporterOptions : public OtlpGrpcClientOptions { + /** Lookup environment variables. */ OtlpGrpcExporterOptions(); + /** No defaults. */ + OtlpGrpcExporterOptions(void *); OtlpGrpcExporterOptions(const OtlpGrpcExporterOptions &) = default; OtlpGrpcExporterOptions(OtlpGrpcExporterOptions &&) = default; OtlpGrpcExporterOptions &operator=(const OtlpGrpcExporterOptions &) = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h index 5f5b2b0a1f..8e6f53644d 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h @@ -23,7 +23,10 @@ namespace otlp */ struct OPENTELEMETRY_EXPORT OtlpGrpcLogRecordExporterOptions : public OtlpGrpcClientOptions { + /** Lookup environment variables. */ OtlpGrpcLogRecordExporterOptions(); + /** No defaults. */ + OtlpGrpcLogRecordExporterOptions(void *); OtlpGrpcLogRecordExporterOptions(const OtlpGrpcLogRecordExporterOptions &) = default; OtlpGrpcLogRecordExporterOptions(OtlpGrpcLogRecordExporterOptions &&) = default; OtlpGrpcLogRecordExporterOptions &operator=(const OtlpGrpcLogRecordExporterOptions &) = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h index 82dcab3881..ab6c8795f7 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h @@ -24,7 +24,10 @@ namespace otlp */ struct OPENTELEMETRY_EXPORT OtlpGrpcMetricExporterOptions : public OtlpGrpcClientOptions { + /** Lookup environment variables. */ OtlpGrpcMetricExporterOptions(); + /** No defaults. */ + OtlpGrpcMetricExporterOptions(void *); OtlpGrpcMetricExporterOptions(const OtlpGrpcMetricExporterOptions &) = default; OtlpGrpcMetricExporterOptions(OtlpGrpcMetricExporterOptions &&) = default; OtlpGrpcMetricExporterOptions &operator=(const OtlpGrpcMetricExporterOptions &) = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h index 6e329325c1..93e15ed887 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h @@ -35,7 +35,7 @@ struct OPENTELEMETRY_EXPORT OtlpHttpExporterOptions /** Lookup environment variables. */ OtlpHttpExporterOptions(); /** No defaults. */ - OtlpHttpExporterOptions(void * /* raw */); + OtlpHttpExporterOptions(void *); OtlpHttpExporterOptions(const OtlpHttpExporterOptions &) = default; OtlpHttpExporterOptions(OtlpHttpExporterOptions &&) = default; OtlpHttpExporterOptions &operator=(const OtlpHttpExporterOptions &) = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h index 14c7f1a7cf..60785ed9f8 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h @@ -32,7 +32,10 @@ namespace otlp */ struct OPENTELEMETRY_EXPORT OtlpHttpLogRecordExporterOptions { + /** Lookup environment variables. */ OtlpHttpLogRecordExporterOptions(); + /** No defaults. */ + OtlpHttpLogRecordExporterOptions(void *); OtlpHttpLogRecordExporterOptions(const OtlpHttpLogRecordExporterOptions &) = default; OtlpHttpLogRecordExporterOptions(OtlpHttpLogRecordExporterOptions &&) = default; OtlpHttpLogRecordExporterOptions &operator=(const OtlpHttpLogRecordExporterOptions &) = default; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h index c0b8a39eba..76f2e9a513 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h @@ -33,7 +33,10 @@ namespace otlp */ struct OPENTELEMETRY_EXPORT OtlpHttpMetricExporterOptions { + /** Lookup environment variables. */ OtlpHttpMetricExporterOptions(); + /** No defaults. */ + OtlpHttpMetricExporterOptions(void *); OtlpHttpMetricExporterOptions(const OtlpHttpMetricExporterOptions &) = default; OtlpHttpMetricExporterOptions(OtlpHttpMetricExporterOptions &&) = default; OtlpHttpMetricExporterOptions &operator=(const OtlpHttpMetricExporterOptions &) = default; diff --git a/exporters/otlp/src/otlp_builder_utils.cc b/exporters/otlp/src/otlp_builder_utils.cc new file mode 100644 index 0000000000..3e68bfbc54 --- /dev/null +++ b/exporters/otlp/src/otlp_builder_utils.cc @@ -0,0 +1,104 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" +#include "opentelemetry/common/kv_properties.h" +#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace otlp +{ + +HttpRequestContentType OtlpBuilderUtils::ConvertOtlpHttpEncoding( + opentelemetry::sdk::configuration::OtlpHttpEncoding model) +{ + auto result = exporter::otlp::HttpRequestContentType::kBinary; + + switch (model) + { + case opentelemetry::sdk::configuration::OtlpHttpEncoding::protobuf: + result = exporter::otlp::HttpRequestContentType::kBinary; + case opentelemetry::sdk::configuration::OtlpHttpEncoding::json: + result = exporter::otlp::HttpRequestContentType::kJson; + } + + return result; +} + +OtlpHeaders OtlpBuilderUtils::ConvertHeadersConfigurationModel( + const opentelemetry::sdk::configuration::HeadersConfiguration *model, + const std::string &headers_list) +{ + OtlpHeaders headers; + + // First, scan headers_list, which has low priority. + if (headers_list.size() > 0) + { + opentelemetry::common::KeyValueStringTokenizer tokenizer{headers_list}; + + opentelemetry::nostd::string_view header_key; + opentelemetry::nostd::string_view header_value; + bool header_valid = true; + + while (tokenizer.next(header_valid, header_key, header_value)) + { + if (header_valid) + { + std::string key(header_key); + std::string value(header_value); + + if (headers.find(key) == headers.end()) + { + headers.emplace(std::make_pair(std::move(key), std::move(value))); + } + else + { + OTEL_INTERNAL_LOG_WARN("Found duplicate key in headers_list"); + } + } + else + { + OTEL_INTERNAL_LOG_WARN("Found invalid key/value pair in headers_list"); + } + } + } + + // Second, scan headers, which has high priority. + for (const auto &kv : model->kv_map) + { + const auto &search = headers.find(kv.first); + if (search != headers.end()) + { + headers.erase(search); + } + + headers.emplace(std::make_pair(kv.first, kv.second)); + } + + return headers; +} + +PreferredAggregationTemporality OtlpBuilderUtils::ConvertTemporalityPreference( + opentelemetry::sdk::configuration::TemporalityPreference model) +{ + auto result = exporter::otlp::PreferredAggregationTemporality::kCumulative; + + switch (model) + { + case opentelemetry::sdk::configuration::TemporalityPreference::cumulative: + result = exporter::otlp::PreferredAggregationTemporality::kCumulative; + case opentelemetry::sdk::configuration::TemporalityPreference::delta: + result = exporter::otlp::PreferredAggregationTemporality::kDelta; + case opentelemetry::sdk::configuration::TemporalityPreference::low_memory: + result = exporter::otlp::PreferredAggregationTemporality::kLowMemory; + } + + return result; +} + +} // namespace otlp +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/src/otlp_file_log_record_builder.cc b/exporters/otlp/src/otlp_file_log_record_builder.cc index a1260f9f89..c09c7f2f30 100644 --- a/exporters/otlp/src/otlp_file_log_record_builder.cc +++ b/exporters/otlp/src/otlp_file_log_record_builder.cc @@ -29,8 +29,10 @@ std::unique_ptr OtlpFileLogRecordBu const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration * /* model */) const { - // FIXME, use model OtlpFileLogRecordExporterOptions options; + + // FIXME: unclear how to map model->output_stream to a OtlpFileClientBackendOptions + return OtlpFileLogRecordExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_file_push_metric_builder.cc b/exporters/otlp/src/otlp_file_push_metric_builder.cc index e055d12578..cdf3a6fe39 100644 --- a/exporters/otlp/src/otlp_file_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_file_push_metric_builder.cc @@ -4,6 +4,7 @@ #include #include +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" @@ -26,11 +27,15 @@ void OtlpFilePushMetricBuilder::Register(opentelemetry::sdk::configuration::Regi } std::unique_ptr OtlpFilePushMetricBuilder::Build( - const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) const { - // FIXME, use model OtlpFileMetricExporterOptions options; + + // FIXME: unclear how to map model->output_stream to a OtlpFileClientBackendOptions + + options.aggregation_temporality = + OtlpBuilderUtils::ConvertTemporalityPreference(model->temporality_preference); + return OtlpFileMetricExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_file_span_builder.cc b/exporters/otlp/src/otlp_file_span_builder.cc index 05a4d9a33b..8fbbc335b3 100644 --- a/exporters/otlp/src/otlp_file_span_builder.cc +++ b/exporters/otlp/src/otlp_file_span_builder.cc @@ -28,8 +28,10 @@ void OtlpFileSpanBuilder::Register(opentelemetry::sdk::configuration::Registry * std::unique_ptr OtlpFileSpanBuilder::Build( const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration * /* model */) const { - // FIXME, use model OtlpFileExporterOptions options; + + // FIXME: unclear how to map model->output_stream to a OtlpFileClientBackendOptions + return OtlpFileExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_grpc_exporter_options.cc b/exporters/otlp/src/otlp_grpc_exporter_options.cc index 1f921abdbc..482a5193ec 100644 --- a/exporters/otlp/src/otlp_grpc_exporter_options.cc +++ b/exporters/otlp/src/otlp_grpc_exporter_options.cc @@ -45,6 +45,16 @@ OtlpGrpcExporterOptions::OtlpGrpcExporterOptions() retry_policy_backoff_multiplier = GetOtlpDefaultTracesRetryBackoffMultiplier(); } +OtlpGrpcExporterOptions::OtlpGrpcExporterOptions(void *) +{ + use_ssl_credentials = true; + max_threads = 0; + +#ifdef ENABLE_ASYNC_EXPORT + max_concurrent_requests = 64; +#endif +} + OtlpGrpcExporterOptions::~OtlpGrpcExporterOptions() {} } // namespace otlp diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc index 99bb4f33ef..2b1235a1d9 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_builder.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -4,6 +4,7 @@ #include #include +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h" @@ -26,11 +27,25 @@ void OtlpGrpcLogRecordBuilder::Register(opentelemetry::sdk::configuration::Regis } std::unique_ptr OtlpGrpcLogRecordBuilder::Build( - const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) const { - // FIXME, use model - OtlpGrpcLogRecordExporterOptions options; + OtlpGrpcLogRecordExporterOptions options(nullptr); + + options.endpoint = model->endpoint; + options.use_ssl_credentials = !model->insecure; + + options.ssl_credentials_cacert_path = model->certificate_file; +#ifdef ENABLE_OTLP_GRPC_SSL_MTLS_PREVIEW + options.ssl_client_key_path = model->client_key_file; + options.ssl_client_cert_path = model->client_certificate_file; +#endif + + options.timeout = std::chrono::duration_cast( + std::chrono::seconds{model->timeout}); + options.metadata = + OtlpBuilderUtils::ConvertHeadersConfigurationModel(model->headers.get(), model->headers_list); + options.compression = model->compression; + return OtlpGrpcLogRecordExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_grpc_log_record_exporter_options.cc b/exporters/otlp/src/otlp_grpc_log_record_exporter_options.cc index 6bdf8fb98f..55c108c03d 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_exporter_options.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_exporter_options.cc @@ -45,6 +45,16 @@ OtlpGrpcLogRecordExporterOptions::OtlpGrpcLogRecordExporterOptions() retry_policy_backoff_multiplier = GetOtlpDefaultLogsRetryBackoffMultiplier(); } +OtlpGrpcLogRecordExporterOptions::OtlpGrpcLogRecordExporterOptions(void *) +{ + use_ssl_credentials = true; + max_threads = 0; + +#ifdef ENABLE_ASYNC_EXPORT + max_concurrent_requests = 64; +#endif +} + OtlpGrpcLogRecordExporterOptions::~OtlpGrpcLogRecordExporterOptions() {} } // namespace otlp diff --git a/exporters/otlp/src/otlp_grpc_metric_exporter_options.cc b/exporters/otlp/src/otlp_grpc_metric_exporter_options.cc index a75b95b11f..540357ff9c 100644 --- a/exporters/otlp/src/otlp_grpc_metric_exporter_options.cc +++ b/exporters/otlp/src/otlp_grpc_metric_exporter_options.cc @@ -47,6 +47,17 @@ OtlpGrpcMetricExporterOptions::OtlpGrpcMetricExporterOptions() retry_policy_backoff_multiplier = GetOtlpDefaultMetricsRetryBackoffMultiplier(); } +OtlpGrpcMetricExporterOptions::OtlpGrpcMetricExporterOptions(void *) + : aggregation_temporality(PreferredAggregationTemporality::kCumulative) +{ + use_ssl_credentials = true; + max_threads = 0; + +#ifdef ENABLE_ASYNC_EXPORT + max_concurrent_requests = 64; +#endif +} + OtlpGrpcMetricExporterOptions::~OtlpGrpcMetricExporterOptions() {} } // namespace otlp diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc index 452a5b9c18..6eb0aa5578 100644 --- a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -4,6 +4,7 @@ #include #include +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" #include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" @@ -26,11 +27,28 @@ void OtlpGrpcPushMetricBuilder::Register(opentelemetry::sdk::configuration::Regi } std::unique_ptr OtlpGrpcPushMetricBuilder::Build( - const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) const { - // FIXME, use model - OtlpGrpcMetricExporterOptions options; + OtlpGrpcMetricExporterOptions options(nullptr); + + options.endpoint = model->endpoint; + options.use_ssl_credentials = !model->insecure; + + options.ssl_credentials_cacert_path = model->certificate_file; +#ifdef ENABLE_OTLP_GRPC_SSL_MTLS_PREVIEW + options.ssl_client_key_path = model->client_key_file; + options.ssl_client_cert_path = model->client_certificate_file; +#endif + + options.timeout = std::chrono::duration_cast( + std::chrono::seconds{model->timeout}); + options.metadata = + OtlpBuilderUtils::ConvertHeadersConfigurationModel(model->headers.get(), model->headers_list); + options.compression = model->compression; + + options.aggregation_temporality = + OtlpBuilderUtils::ConvertTemporalityPreference(model->temporality_preference); + return OtlpGrpcMetricExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc index 91418fd953..8ed9720533 100644 --- a/exporters/otlp/src/otlp_grpc_span_builder.cc +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -4,6 +4,7 @@ #include #include +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" @@ -26,10 +27,25 @@ void OtlpGrpcSpanBuilder::Register(opentelemetry::sdk::configuration::Registry * } std::unique_ptr OtlpGrpcSpanBuilder::Build( - const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration * /* model */) const + const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const { - // FIXME, use model - OtlpGrpcExporterOptions options; + OtlpGrpcExporterOptions options(nullptr); + + options.endpoint = model->endpoint; + options.use_ssl_credentials = !model->insecure; + + options.ssl_credentials_cacert_path = model->certificate_file; +#ifdef ENABLE_OTLP_GRPC_SSL_MTLS_PREVIEW + options.ssl_client_key_path = model->client_key_file; + options.ssl_client_cert_path = model->client_certificate_file; +#endif + + options.timeout = std::chrono::duration_cast( + std::chrono::seconds{model->timeout}); + options.metadata = + OtlpBuilderUtils::ConvertHeadersConfigurationModel(model->headers.get(), model->headers_list); + options.compression = model->compression; + return OtlpGrpcExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_http_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc index 9c2b104dc6..0ad287d8e9 100644 --- a/exporters/otlp/src/otlp_http_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -4,6 +4,7 @@ #include #include +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h" @@ -26,11 +27,25 @@ void OtlpHttpLogRecordBuilder::Register(opentelemetry::sdk::configuration::Regis } std::unique_ptr OtlpHttpLogRecordBuilder::Build( - const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) const { - // FIXME, use model - OtlpHttpLogRecordExporterOptions options; + OtlpHttpLogRecordExporterOptions options(nullptr); + + options.url = model->endpoint; + options.content_type = OtlpBuilderUtils::ConvertOtlpHttpEncoding(model->encoding); + options.json_bytes_mapping = JsonBytesMappingKind::kHexId; + options.use_json_name = false; + options.console_debug = false; + options.timeout = std::chrono::duration_cast( + std::chrono::seconds{model->timeout}); + options.http_headers = + OtlpBuilderUtils::ConvertHeadersConfigurationModel(model->headers.get(), model->headers_list); + options.ssl_insecure_skip_verify = false; + options.ssl_ca_cert_path = model->certificate_file; + options.ssl_client_key_path = model->client_key_file; + options.ssl_client_cert_path = model->client_certificate_file; + options.compression = model->compression; + return OtlpHttpLogRecordExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_http_log_record_exporter_options.cc b/exporters/otlp/src/otlp_http_log_record_exporter_options.cc index 212bc3f6cd..55b18c00ab 100644 --- a/exporters/otlp/src/otlp_http_log_record_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_log_record_exporter_options.cc @@ -43,6 +43,36 @@ OtlpHttpLogRecordExporterOptions::OtlpHttpLogRecordExporterOptions() retry_policy_backoff_multiplier(GetOtlpDefaultLogsRetryBackoffMultiplier()) {} +OtlpHttpLogRecordExporterOptions::OtlpHttpLogRecordExporterOptions(void *) + : url(), + content_type(exporter::otlp::HttpRequestContentType::kBinary), + json_bytes_mapping(JsonBytesMappingKind::kHexId), + use_json_name(false), + console_debug(false), + timeout(), + http_headers(), +#ifdef ENABLE_ASYNC_EXPORT + max_concurrent_requests{64}, + max_requests_per_connection{8}, +#endif + ssl_insecure_skip_verify(false), + ssl_ca_cert_path(), + ssl_ca_cert_string(), + ssl_client_key_path(), + ssl_client_key_string(), + ssl_client_cert_path(), + ssl_client_cert_string(), + ssl_min_tls(), + ssl_max_tls(), + ssl_cipher(), + ssl_cipher_suite(), + compression(), + retry_policy_max_attempts(), + retry_policy_initial_backoff(), + retry_policy_max_backoff(), + retry_policy_backoff_multiplier() +{} + OtlpHttpLogRecordExporterOptions::~OtlpHttpLogRecordExporterOptions() {} } // namespace otlp diff --git a/exporters/otlp/src/otlp_http_metric_exporter_options.cc b/exporters/otlp/src/otlp_http_metric_exporter_options.cc index 0ccdc0ab94..fbe334a347 100644 --- a/exporters/otlp/src/otlp_http_metric_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_metric_exporter_options.cc @@ -45,6 +45,37 @@ OtlpHttpMetricExporterOptions::OtlpHttpMetricExporterOptions() retry_policy_backoff_multiplier(GetOtlpDefaultMetricsRetryBackoffMultiplier()) {} +OtlpHttpMetricExporterOptions::OtlpHttpMetricExporterOptions(void *) + : url(), + content_type(exporter::otlp::HttpRequestContentType::kBinary), + json_bytes_mapping(JsonBytesMappingKind::kHexId), + use_json_name(false), + console_debug(false), + timeout(), + http_headers(), + aggregation_temporality(PreferredAggregationTemporality::kCumulative), +#ifdef ENABLE_ASYNC_EXPORT + max_concurrent_requests{64}, + max_requests_per_connection{8}, +#endif + ssl_insecure_skip_verify(false), + ssl_ca_cert_path(), + ssl_ca_cert_string(), + ssl_client_key_path(), + ssl_client_key_string(), + ssl_client_cert_path(), + ssl_client_cert_string(), + ssl_min_tls(), + ssl_max_tls(), + ssl_cipher(), + ssl_cipher_suite(), + compression(), + retry_policy_max_attempts(), + retry_policy_initial_backoff(), + retry_policy_max_backoff(), + retry_policy_backoff_multiplier() +{} + OtlpHttpMetricExporterOptions::~OtlpHttpMetricExporterOptions() {} } // namespace otlp diff --git a/exporters/otlp/src/otlp_http_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc index 9984cd214b..fed4b70645 100644 --- a/exporters/otlp/src/otlp_http_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -4,6 +4,7 @@ #include #include +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" @@ -26,11 +27,27 @@ void OtlpHttpPushMetricBuilder::Register(opentelemetry::sdk::configuration::Regi } std::unique_ptr OtlpHttpPushMetricBuilder::Build( - const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration * /* model */) - const + const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) const { - // FIXME, use model - OtlpHttpMetricExporterOptions options; + OtlpHttpMetricExporterOptions options(nullptr); + + options.url = model->endpoint; + options.content_type = OtlpBuilderUtils::ConvertOtlpHttpEncoding(model->encoding); + options.json_bytes_mapping = JsonBytesMappingKind::kHexId; + options.use_json_name = false; + options.console_debug = false; + options.timeout = std::chrono::duration_cast( + std::chrono::seconds{model->timeout}); + options.http_headers = + OtlpBuilderUtils::ConvertHeadersConfigurationModel(model->headers.get(), model->headers_list); + options.aggregation_temporality = + OtlpBuilderUtils::ConvertTemporalityPreference(model->temporality_preference); + options.ssl_insecure_skip_verify = false; + options.ssl_ca_cert_path = model->certificate_file; + options.ssl_client_key_path = model->client_key_file; + options.ssl_client_cert_path = model->client_certificate_file; + options.compression = model->compression; + return OtlpHttpMetricExporterFactory::Create(options); } diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index e28d30b9de..0d6a50bacd 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" @@ -31,14 +32,22 @@ std::unique_ptr OtlpHttpSpanBuilder::Bu const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const { OtlpHttpExporterOptions options(nullptr); - options.url = model->endpoint; - // options.content_type = xxx; - options.timeout = std::chrono::duration_cast( + + options.url = model->endpoint; + options.content_type = OtlpBuilderUtils::ConvertOtlpHttpEncoding(model->encoding); + options.json_bytes_mapping = JsonBytesMappingKind::kHexId; + options.use_json_name = false; + options.console_debug = false; + options.timeout = std::chrono::duration_cast( std::chrono::seconds{model->timeout}); - // options.http_headers = model->xxx; - options.ssl_ca_cert_path = model->certificate_file; - options.ssl_client_key_path = model->client_key_file; - options.ssl_client_cert_path = model->client_certificate_file; + options.http_headers = + OtlpBuilderUtils::ConvertHeadersConfigurationModel(model->headers.get(), model->headers_list); + options.ssl_insecure_skip_verify = false; + options.ssl_ca_cert_path = model->certificate_file; + options.ssl_client_key_path = model->client_key_file; + options.ssl_client_cert_path = model->client_certificate_file; + options.compression = model->compression; + return OtlpHttpExporterFactory::Create(options); } From c9f9628ab7c9ca9aef5dee9496dbc7bcce4a0f4f Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 27 Jul 2025 01:30:55 +0200 Subject: [PATCH 159/166] cleanup --- .../opentelemetry/exporters/otlp/otlp_builder_utils.h | 2 +- exporters/otlp/src/otlp_builder_utils.cc | 5 +++++ exporters/otlp/src/otlp_grpc_log_record_builder.cc | 2 ++ exporters/otlp/src/otlp_grpc_push_metric_builder.cc | 2 ++ exporters/otlp/src/otlp_grpc_span_builder.cc | 2 ++ exporters/otlp/src/otlp_http_log_record_builder.cc | 3 +++ exporters/otlp/src/otlp_http_push_metric_builder.cc | 3 +++ exporters/otlp/src/otlp_http_span_builder.cc | 1 + exporters/prometheus/src/prometheus_pull_builder.cc | 1 + 9 files changed, 20 insertions(+), 1 deletion(-) diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h index 0b268810b9..029e73b78e 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_builder_utils.h @@ -3,7 +3,7 @@ #pragma once -#include +#include #include "opentelemetry/exporters/otlp/otlp_environment.h" // For OtlpHeaders #include "opentelemetry/exporters/otlp/otlp_http.h" diff --git a/exporters/otlp/src/otlp_builder_utils.cc b/exporters/otlp/src/otlp_builder_utils.cc index 3e68bfbc54..017a7d63c6 100644 --- a/exporters/otlp/src/otlp_builder_utils.cc +++ b/exporters/otlp/src/otlp_builder_utils.cc @@ -21,8 +21,10 @@ HttpRequestContentType OtlpBuilderUtils::ConvertOtlpHttpEncoding( { case opentelemetry::sdk::configuration::OtlpHttpEncoding::protobuf: result = exporter::otlp::HttpRequestContentType::kBinary; + break; case opentelemetry::sdk::configuration::OtlpHttpEncoding::json: result = exporter::otlp::HttpRequestContentType::kJson; + break; } return result; @@ -90,10 +92,13 @@ PreferredAggregationTemporality OtlpBuilderUtils::ConvertTemporalityPreference( { case opentelemetry::sdk::configuration::TemporalityPreference::cumulative: result = exporter::otlp::PreferredAggregationTemporality::kCumulative; + break; case opentelemetry::sdk::configuration::TemporalityPreference::delta: result = exporter::otlp::PreferredAggregationTemporality::kDelta; + break; case opentelemetry::sdk::configuration::TemporalityPreference::low_memory: result = exporter::otlp::PreferredAggregationTemporality::kLowMemory; + break; } return result; diff --git a/exporters/otlp/src/otlp_grpc_log_record_builder.cc b/exporters/otlp/src/otlp_grpc_log_record_builder.cc index 2b1235a1d9..e65b584838 100644 --- a/exporters/otlp/src/otlp_grpc_log_record_builder.cc +++ b/exporters/otlp/src/otlp_grpc_log_record_builder.cc @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include #include #include "opentelemetry/exporters/otlp/otlp_builder_utils.h" diff --git a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc index 6eb0aa5578..6f0acd3e78 100644 --- a/exporters/otlp/src/otlp_grpc_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_grpc_push_metric_builder.cc @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include #include #include "opentelemetry/exporters/otlp/otlp_builder_utils.h" diff --git a/exporters/otlp/src/otlp_grpc_span_builder.cc b/exporters/otlp/src/otlp_grpc_span_builder.cc index 8ed9720533..42aeeb56f5 100644 --- a/exporters/otlp/src/otlp_grpc_span_builder.cc +++ b/exporters/otlp/src/otlp_grpc_span_builder.cc @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include #include #include "opentelemetry/exporters/otlp/otlp_builder_utils.h" diff --git a/exporters/otlp/src/otlp_http_log_record_builder.cc b/exporters/otlp/src/otlp_http_log_record_builder.cc index 0ad287d8e9..ad72b91868 100644 --- a/exporters/otlp/src/otlp_http_log_record_builder.cc +++ b/exporters/otlp/src/otlp_http_log_record_builder.cc @@ -1,10 +1,13 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include #include #include "opentelemetry/exporters/otlp/otlp_builder_utils.h" +#include "opentelemetry/exporters/otlp/otlp_http.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h" diff --git a/exporters/otlp/src/otlp_http_push_metric_builder.cc b/exporters/otlp/src/otlp_http_push_metric_builder.cc index fed4b70645..afc59adabe 100644 --- a/exporters/otlp/src/otlp_http_push_metric_builder.cc +++ b/exporters/otlp/src/otlp_http_push_metric_builder.cc @@ -1,10 +1,13 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include +#include #include #include "opentelemetry/exporters/otlp/otlp_builder_utils.h" +#include "opentelemetry/exporters/otlp/otlp_http.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" diff --git a/exporters/otlp/src/otlp_http_span_builder.cc b/exporters/otlp/src/otlp_http_span_builder.cc index 0d6a50bacd..98b79c6a58 100644 --- a/exporters/otlp/src/otlp_http_span_builder.cc +++ b/exporters/otlp/src/otlp_http_span_builder.cc @@ -7,6 +7,7 @@ #include #include "opentelemetry/exporters/otlp/otlp_builder_utils.h" +#include "opentelemetry/exporters/otlp/otlp_http.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc index 8265383f82..18cf814051 100644 --- a/exporters/prometheus/src/prometheus_pull_builder.cc +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include "opentelemetry/exporters/prometheus/exporter_factory.h" From 1554ec91f867d7ce5bc454057fdabdce6324ed2a Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 27 Jul 2025 13:11:30 +0200 Subject: [PATCH 160/166] build cleanup --- exporters/otlp/src/otlp_builder_utils.cc | 6 +++++- .../otlp_http_log_record_exporter_options.cc | 19 +------------------ .../src/otlp_http_metric_exporter_options.cc | 19 +------------------ exporters/prometheus/src/exporter_options.cc | 8 +------- 4 files changed, 8 insertions(+), 44 deletions(-) diff --git a/exporters/otlp/src/otlp_builder_utils.cc b/exporters/otlp/src/otlp_builder_utils.cc index 017a7d63c6..6137bfc8da 100644 --- a/exporters/otlp/src/otlp_builder_utils.cc +++ b/exporters/otlp/src/otlp_builder_utils.cc @@ -1,8 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" +#include +#include + #include "opentelemetry/common/kv_properties.h" +#include "opentelemetry/exporters/otlp/otlp_builder_utils.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/version.h" diff --git a/exporters/otlp/src/otlp_http_log_record_exporter_options.cc b/exporters/otlp/src/otlp_http_log_record_exporter_options.cc index 55b18c00ab..32c42940da 100644 --- a/exporters/otlp/src/otlp_http_log_record_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_log_record_exporter_options.cc @@ -49,28 +49,11 @@ OtlpHttpLogRecordExporterOptions::OtlpHttpLogRecordExporterOptions(void *) json_bytes_mapping(JsonBytesMappingKind::kHexId), use_json_name(false), console_debug(false), - timeout(), - http_headers(), #ifdef ENABLE_ASYNC_EXPORT max_concurrent_requests{64}, max_requests_per_connection{8}, #endif - ssl_insecure_skip_verify(false), - ssl_ca_cert_path(), - ssl_ca_cert_string(), - ssl_client_key_path(), - ssl_client_key_string(), - ssl_client_cert_path(), - ssl_client_cert_string(), - ssl_min_tls(), - ssl_max_tls(), - ssl_cipher(), - ssl_cipher_suite(), - compression(), - retry_policy_max_attempts(), - retry_policy_initial_backoff(), - retry_policy_max_backoff(), - retry_policy_backoff_multiplier() + ssl_insecure_skip_verify(false) {} OtlpHttpLogRecordExporterOptions::~OtlpHttpLogRecordExporterOptions() {} diff --git a/exporters/otlp/src/otlp_http_metric_exporter_options.cc b/exporters/otlp/src/otlp_http_metric_exporter_options.cc index fbe334a347..f78ed4f087 100644 --- a/exporters/otlp/src/otlp_http_metric_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_metric_exporter_options.cc @@ -51,29 +51,12 @@ OtlpHttpMetricExporterOptions::OtlpHttpMetricExporterOptions(void *) json_bytes_mapping(JsonBytesMappingKind::kHexId), use_json_name(false), console_debug(false), - timeout(), - http_headers(), aggregation_temporality(PreferredAggregationTemporality::kCumulative), #ifdef ENABLE_ASYNC_EXPORT max_concurrent_requests{64}, max_requests_per_connection{8}, #endif - ssl_insecure_skip_verify(false), - ssl_ca_cert_path(), - ssl_ca_cert_string(), - ssl_client_key_path(), - ssl_client_key_string(), - ssl_client_cert_path(), - ssl_client_cert_string(), - ssl_min_tls(), - ssl_max_tls(), - ssl_cipher(), - ssl_cipher_suite(), - compression(), - retry_policy_max_attempts(), - retry_policy_initial_backoff(), - retry_policy_max_backoff(), - retry_policy_backoff_multiplier() + ssl_insecure_skip_verify(false) {} OtlpHttpMetricExporterOptions::~OtlpHttpMetricExporterOptions() {} diff --git a/exporters/prometheus/src/exporter_options.cc b/exporters/prometheus/src/exporter_options.cc index 95fd899ac6..122baf5198 100644 --- a/exporters/prometheus/src/exporter_options.cc +++ b/exporters/prometheus/src/exporter_options.cc @@ -77,13 +77,7 @@ PrometheusExporterOptions::PrometheusExporterOptions() without_type_suffix(GetPrometheusWithoutTypeSuffix()) {} -PrometheusExporterOptions::PrometheusExporterOptions(void *) - : url(""), - populate_target_info(true), - without_otel_scope(false), - without_units(false), - without_type_suffix(false) -{} +PrometheusExporterOptions::PrometheusExporterOptions(void *) : url("") {} } // namespace metrics } // namespace exporter From 22b5ecb812745ee275ec773bc549ecb5c6e41b3a Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 27 Jul 2025 14:48:50 +0200 Subject: [PATCH 161/166] build cleanup --- api/include/opentelemetry/common/string_util.h | 2 ++ exporters/otlp/src/otlp_builder_utils.cc | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/api/include/opentelemetry/common/string_util.h b/api/include/opentelemetry/common/string_util.h index 273a65272b..5108f186e7 100644 --- a/api/include/opentelemetry/common/string_util.h +++ b/api/include/opentelemetry/common/string_util.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/version.h" diff --git a/exporters/otlp/src/otlp_builder_utils.cc b/exporters/otlp/src/otlp_builder_utils.cc index 6137bfc8da..cac5efcbad 100644 --- a/exporters/otlp/src/otlp_builder_utils.cc +++ b/exporters/otlp/src/otlp_builder_utils.cc @@ -2,12 +2,19 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include #include "opentelemetry/common/kv_properties.h" #include "opentelemetry/exporters/otlp/otlp_builder_utils.h" +#include "opentelemetry/exporters/otlp/otlp_environment.h" +#include "opentelemetry/exporters/otlp/otlp_http.h" +#include "opentelemetry/exporters/otlp/otlp_preferred_temporality.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/configuration/headers_configuration.h" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" +#include "opentelemetry/sdk/configuration/temporality_preference.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE From 8cd1b6b20ef9d49457135d989bcf5ac1a96da02e Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 27 Jul 2025 23:50:55 +0200 Subject: [PATCH 162/166] Code review comments, rule of 0, misc cleanup --- .../ostream/console_log_record_builder.h | 3 --- .../ostream/console_push_metric_builder.h | 3 --- .../exporters/ostream/console_span_builder.h | 3 --- .../exporters/otlp/otlp_file_log_record_builder.h | 3 --- .../otlp/otlp_file_push_metric_builder.h | 3 --- .../exporters/otlp/otlp_file_span_builder.h | 3 --- .../exporters/otlp/otlp_grpc_log_record_builder.h | 3 --- .../otlp/otlp_grpc_push_metric_builder.h | 3 --- .../exporters/otlp/otlp_grpc_span_builder.h | 3 --- .../exporters/otlp/otlp_http_log_record_builder.h | 3 --- .../otlp/otlp_http_push_metric_builder.h | 3 --- .../exporters/otlp/otlp_http_span_builder.h | 3 --- exporters/otlp/src/otlp_http_exporter_options.cc | 15 +-------------- .../prometheus/prometheus_pull_builder.h | 3 --- .../exporters/zipkin/zipkin_builder.h | 3 --- exporters/zipkin/src/zipkin_builder.cc | 2 -- 16 files changed, 1 insertion(+), 58 deletions(-) diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h index 2673635e51..16822d92bb 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_log_record_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT ConsoleLogRecordBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - ConsoleLogRecordBuilder() = default; - ~ConsoleLogRecordBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::ConsoleLogRecordExporterConfiguration *model) const override; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h index 6376844890..3b1bd7f224 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_push_metric_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT ConsolePushMetricBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - ConsolePushMetricBuilder() = default; - ~ConsolePushMetricBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) const override; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h b/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h index 1cb6ef9c64..03a7b615c2 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/console_span_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT ConsoleSpanBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - ConsoleSpanBuilder() = default; - ~ConsoleSpanBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::ConsoleSpanExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h index 82d3228b7f..3ace85c1f9 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpFileLogRecordBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpFileLogRecordBuilder() = default; - ~OtlpFileLogRecordBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpFileLogRecordExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h index 7e76b3df27..6fb830d75b 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpFilePushMetricBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpFilePushMetricBuilder() = default; - ~OtlpFilePushMetricBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpFilePushMetricExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h index 837410616d..b96c9411a4 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_span_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpFileSpanBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpFileSpanBuilder() = default; - ~OtlpFileSpanBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpFileSpanExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h index 90ed19f1dd..642f7cf317 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpGrpcLogRecordBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpGrpcLogRecordBuilder() = default; - ~OtlpGrpcLogRecordBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpGrpcLogRecordExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h index b38dfab655..8ab6c3022c 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpGrpcPushMetricBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpGrpcPushMetricBuilder() = default; - ~OtlpGrpcPushMetricBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpGrpcPushMetricExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h index eed0277d95..86c588c4d5 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_span_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpGrpcSpanBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpGrpcSpanBuilder() = default; - ~OtlpGrpcSpanBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpGrpcSpanExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h index 3ec706eda9..48c916d268 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpHttpLogRecordBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpHttpLogRecordBuilder() = default; - ~OtlpHttpLogRecordBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpHttpLogRecordExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h index 2942aaed06..795dcb2a16 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpHttpPushMetricBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpHttpPushMetricBuilder() = default; - ~OtlpHttpPushMetricBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) const override; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h index 448877407d..b1e9342d95 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_span_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT OtlpHttpSpanBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - OtlpHttpSpanBuilder() = default; - ~OtlpHttpSpanBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::OtlpHttpSpanExporterConfiguration *model) const override; diff --git a/exporters/otlp/src/otlp_http_exporter_options.cc b/exporters/otlp/src/otlp_http_exporter_options.cc index ad4b500666..f50e3e1bfd 100644 --- a/exporters/otlp/src/otlp_http_exporter_options.cc +++ b/exporters/otlp/src/otlp_http_exporter_options.cc @@ -49,24 +49,11 @@ OtlpHttpExporterOptions::OtlpHttpExporterOptions(void *) json_bytes_mapping(JsonBytesMappingKind::kHexId), use_json_name(false), console_debug(false), - timeout(0), - http_headers(), #ifdef ENABLE_ASYNC_EXPORT max_concurrent_requests{64}, max_requests_per_connection{8}, #endif - ssl_insecure_skip_verify(false), - ssl_ca_cert_path(), - ssl_ca_cert_string(), - ssl_client_key_path(), - ssl_client_key_string(), - ssl_client_cert_path(), - ssl_client_cert_string(), - ssl_min_tls(), - ssl_max_tls(), - ssl_cipher(), - ssl_cipher_suite(), - compression() + ssl_insecure_skip_verify(false) {} OtlpHttpExporterOptions::~OtlpHttpExporterOptions() {} diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h index 6a96e5e55f..621643b08f 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT PrometheusPullBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - PrometheusPullBuilder() = default; - ~PrometheusPullBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) const override; diff --git a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h index bd6af96f3c..c5d28d09ce 100644 --- a/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h +++ b/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT ZipkinBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - ZipkinBuilder() = default; - ~ZipkinBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::ZipkinSpanExporterConfiguration *model) const override; diff --git a/exporters/zipkin/src/zipkin_builder.cc b/exporters/zipkin/src/zipkin_builder.cc index 1095557f5a..a7bdc770d4 100644 --- a/exporters/zipkin/src/zipkin_builder.cc +++ b/exporters/zipkin/src/zipkin_builder.cc @@ -20,8 +20,6 @@ namespace exporter namespace zipkin { -static ZipkinBuilder singleton; - void ZipkinBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) { auto builder = std::make_unique(); From 3b31867bcecf28f929fd1d3d461299956f787bfc Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 29 Jul 2025 00:21:44 +0200 Subject: [PATCH 163/166] adjust after merge --- sdk/src/configuration/sdk_builder.cc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/sdk/src/configuration/sdk_builder.cc b/sdk/src/configuration/sdk_builder.cc index c084ef930c..0da1af86dc 100644 --- a/sdk/src/configuration/sdk_builder.cc +++ b/sdk/src/configuration/sdk_builder.cc @@ -1490,12 +1490,8 @@ void SdkBuilder::AddView( sdk_attribute_processor = CreateAttributesProcessor(stream->attribute_keys); } - // FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3547 - // FIXME-SDK: unit is unused in class View, should be removed. - std::string unit("FIXME-SDK"); - auto sdk_view = std::make_unique( - stream->name, stream->description, unit, sdk_aggregation_type, sdk_aggregation_config, + stream->name, stream->description, sdk_aggregation_type, sdk_aggregation_config, std::move(sdk_attribute_processor)); view_registry->AddView(std::move(sdk_instrument_selector), std::move(sdk_meter_selector), From 74d43954c0bc2ddf70210717d152521328a1efc8 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 29 Jul 2025 21:06:17 +0200 Subject: [PATCH 164/166] configuration example --- examples/CMakeLists.txt | 2 +- .../{yaml => configuration}/CMakeLists.txt | 0 examples/{yaml => configuration}/anchors.yaml | 0 .../custom_log_record_exporter.cc | 0 .../custom_log_record_exporter.h | 0 .../custom_log_record_exporter_builder.cc | 0 .../custom_log_record_exporter_builder.h | 0 .../custom_log_record_processor.cc | 0 .../custom_log_record_processor.h | 0 .../custom_log_record_processor_builder.cc | 0 .../custom_log_record_processor_builder.h | 0 .../custom_pull_metric_exporter.cc | 0 .../custom_pull_metric_exporter.h | 0 .../custom_pull_metric_exporter_builder.cc | 0 .../custom_pull_metric_exporter_builder.h | 0 .../custom_push_metric_exporter.cc | 0 .../custom_push_metric_exporter.h | 0 .../custom_push_metric_exporter_builder.cc | 0 .../custom_push_metric_exporter_builder.h | 0 .../{yaml => configuration}/custom_sampler.cc | 0 .../{yaml => configuration}/custom_sampler.h | 0 .../custom_sampler_builder.cc | 0 .../custom_sampler_builder.h | 0 .../custom_span_exporter.cc | 0 .../custom_span_exporter.h | 0 .../custom_span_exporter_builder.cc | 0 .../custom_span_exporter_builder.h | 0 .../custom_span_processor.cc | 0 .../custom_span_processor.h | 0 .../custom_span_processor_builder.cc | 0 .../custom_span_processor_builder.h | 0 .../{yaml => configuration}/extensions.yaml | 0 .../{yaml => configuration}/kitchen-sink.yaml | 0 .../configuration/main.cc | 212 +++++++++++----- examples/yaml/main.cc | 230 ------------------ functional/CMakeLists.txt | 4 - functional/configuration/CMakeLists.txt | 74 ------ functional/configuration/run_test.sh | 4 +- .../shelltests/disabled_empty.test | 2 +- .../shelltests/disabled_false.test | 2 +- .../shelltests/disabled_true.test | 2 +- .../configuration/shelltests/empty.test | 2 +- .../shelltests/format_empty.test | 2 +- .../shelltests/kitchen-sink.test | 2 +- .../shelltests/propagator_both.test | 2 +- .../shelltests/propagator_broken.test | 2 +- .../shelltests/propagator_composite_list.test | 2 +- .../shelltests/propagator_duplicates.test | 2 +- .../shelltests/propagator_multi.test | 2 +- .../shelltests/propagator_ottrace.test | 2 +- .../shelltests/propagator_single.test | 2 +- .../shelltests/propagator_unknown.test | 2 +- .../shelltests/propagator_xray.test | 2 +- .../shelltests/sampler_jaeger.test | 2 +- ...periodic_exporting_metric_reader_factory.h | 1 - 55 files changed, 171 insertions(+), 388 deletions(-) rename examples/{yaml => configuration}/CMakeLists.txt (100%) rename examples/{yaml => configuration}/anchors.yaml (100%) rename examples/{yaml => configuration}/custom_log_record_exporter.cc (100%) rename examples/{yaml => configuration}/custom_log_record_exporter.h (100%) rename examples/{yaml => configuration}/custom_log_record_exporter_builder.cc (100%) rename examples/{yaml => configuration}/custom_log_record_exporter_builder.h (100%) rename examples/{yaml => configuration}/custom_log_record_processor.cc (100%) rename examples/{yaml => configuration}/custom_log_record_processor.h (100%) rename examples/{yaml => configuration}/custom_log_record_processor_builder.cc (100%) rename examples/{yaml => configuration}/custom_log_record_processor_builder.h (100%) rename examples/{yaml => configuration}/custom_pull_metric_exporter.cc (100%) rename examples/{yaml => configuration}/custom_pull_metric_exporter.h (100%) rename examples/{yaml => configuration}/custom_pull_metric_exporter_builder.cc (100%) rename examples/{yaml => configuration}/custom_pull_metric_exporter_builder.h (100%) rename examples/{yaml => configuration}/custom_push_metric_exporter.cc (100%) rename examples/{yaml => configuration}/custom_push_metric_exporter.h (100%) rename examples/{yaml => configuration}/custom_push_metric_exporter_builder.cc (100%) rename examples/{yaml => configuration}/custom_push_metric_exporter_builder.h (100%) rename examples/{yaml => configuration}/custom_sampler.cc (100%) rename examples/{yaml => configuration}/custom_sampler.h (100%) rename examples/{yaml => configuration}/custom_sampler_builder.cc (100%) rename examples/{yaml => configuration}/custom_sampler_builder.h (100%) rename examples/{yaml => configuration}/custom_span_exporter.cc (100%) rename examples/{yaml => configuration}/custom_span_exporter.h (100%) rename examples/{yaml => configuration}/custom_span_exporter_builder.cc (100%) rename examples/{yaml => configuration}/custom_span_exporter_builder.h (100%) rename examples/{yaml => configuration}/custom_span_processor.cc (100%) rename examples/{yaml => configuration}/custom_span_processor.h (100%) rename examples/{yaml => configuration}/custom_span_processor_builder.cc (100%) rename examples/{yaml => configuration}/custom_span_processor_builder.h (100%) rename examples/{yaml => configuration}/extensions.yaml (100%) rename examples/{yaml => configuration}/kitchen-sink.yaml (100%) rename {functional => examples}/configuration/main.cc (57%) delete mode 100644 examples/yaml/main.cc delete mode 100644 functional/configuration/CMakeLists.txt diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 5324e8ee96..0bee685546 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -33,5 +33,5 @@ if(WITH_EXAMPLES_HTTP) endif() if(WITH_CONFIGURATION) - add_subdirectory(yaml) + add_subdirectory(configuration) endif() diff --git a/examples/yaml/CMakeLists.txt b/examples/configuration/CMakeLists.txt similarity index 100% rename from examples/yaml/CMakeLists.txt rename to examples/configuration/CMakeLists.txt diff --git a/examples/yaml/anchors.yaml b/examples/configuration/anchors.yaml similarity index 100% rename from examples/yaml/anchors.yaml rename to examples/configuration/anchors.yaml diff --git a/examples/yaml/custom_log_record_exporter.cc b/examples/configuration/custom_log_record_exporter.cc similarity index 100% rename from examples/yaml/custom_log_record_exporter.cc rename to examples/configuration/custom_log_record_exporter.cc diff --git a/examples/yaml/custom_log_record_exporter.h b/examples/configuration/custom_log_record_exporter.h similarity index 100% rename from examples/yaml/custom_log_record_exporter.h rename to examples/configuration/custom_log_record_exporter.h diff --git a/examples/yaml/custom_log_record_exporter_builder.cc b/examples/configuration/custom_log_record_exporter_builder.cc similarity index 100% rename from examples/yaml/custom_log_record_exporter_builder.cc rename to examples/configuration/custom_log_record_exporter_builder.cc diff --git a/examples/yaml/custom_log_record_exporter_builder.h b/examples/configuration/custom_log_record_exporter_builder.h similarity index 100% rename from examples/yaml/custom_log_record_exporter_builder.h rename to examples/configuration/custom_log_record_exporter_builder.h diff --git a/examples/yaml/custom_log_record_processor.cc b/examples/configuration/custom_log_record_processor.cc similarity index 100% rename from examples/yaml/custom_log_record_processor.cc rename to examples/configuration/custom_log_record_processor.cc diff --git a/examples/yaml/custom_log_record_processor.h b/examples/configuration/custom_log_record_processor.h similarity index 100% rename from examples/yaml/custom_log_record_processor.h rename to examples/configuration/custom_log_record_processor.h diff --git a/examples/yaml/custom_log_record_processor_builder.cc b/examples/configuration/custom_log_record_processor_builder.cc similarity index 100% rename from examples/yaml/custom_log_record_processor_builder.cc rename to examples/configuration/custom_log_record_processor_builder.cc diff --git a/examples/yaml/custom_log_record_processor_builder.h b/examples/configuration/custom_log_record_processor_builder.h similarity index 100% rename from examples/yaml/custom_log_record_processor_builder.h rename to examples/configuration/custom_log_record_processor_builder.h diff --git a/examples/yaml/custom_pull_metric_exporter.cc b/examples/configuration/custom_pull_metric_exporter.cc similarity index 100% rename from examples/yaml/custom_pull_metric_exporter.cc rename to examples/configuration/custom_pull_metric_exporter.cc diff --git a/examples/yaml/custom_pull_metric_exporter.h b/examples/configuration/custom_pull_metric_exporter.h similarity index 100% rename from examples/yaml/custom_pull_metric_exporter.h rename to examples/configuration/custom_pull_metric_exporter.h diff --git a/examples/yaml/custom_pull_metric_exporter_builder.cc b/examples/configuration/custom_pull_metric_exporter_builder.cc similarity index 100% rename from examples/yaml/custom_pull_metric_exporter_builder.cc rename to examples/configuration/custom_pull_metric_exporter_builder.cc diff --git a/examples/yaml/custom_pull_metric_exporter_builder.h b/examples/configuration/custom_pull_metric_exporter_builder.h similarity index 100% rename from examples/yaml/custom_pull_metric_exporter_builder.h rename to examples/configuration/custom_pull_metric_exporter_builder.h diff --git a/examples/yaml/custom_push_metric_exporter.cc b/examples/configuration/custom_push_metric_exporter.cc similarity index 100% rename from examples/yaml/custom_push_metric_exporter.cc rename to examples/configuration/custom_push_metric_exporter.cc diff --git a/examples/yaml/custom_push_metric_exporter.h b/examples/configuration/custom_push_metric_exporter.h similarity index 100% rename from examples/yaml/custom_push_metric_exporter.h rename to examples/configuration/custom_push_metric_exporter.h diff --git a/examples/yaml/custom_push_metric_exporter_builder.cc b/examples/configuration/custom_push_metric_exporter_builder.cc similarity index 100% rename from examples/yaml/custom_push_metric_exporter_builder.cc rename to examples/configuration/custom_push_metric_exporter_builder.cc diff --git a/examples/yaml/custom_push_metric_exporter_builder.h b/examples/configuration/custom_push_metric_exporter_builder.h similarity index 100% rename from examples/yaml/custom_push_metric_exporter_builder.h rename to examples/configuration/custom_push_metric_exporter_builder.h diff --git a/examples/yaml/custom_sampler.cc b/examples/configuration/custom_sampler.cc similarity index 100% rename from examples/yaml/custom_sampler.cc rename to examples/configuration/custom_sampler.cc diff --git a/examples/yaml/custom_sampler.h b/examples/configuration/custom_sampler.h similarity index 100% rename from examples/yaml/custom_sampler.h rename to examples/configuration/custom_sampler.h diff --git a/examples/yaml/custom_sampler_builder.cc b/examples/configuration/custom_sampler_builder.cc similarity index 100% rename from examples/yaml/custom_sampler_builder.cc rename to examples/configuration/custom_sampler_builder.cc diff --git a/examples/yaml/custom_sampler_builder.h b/examples/configuration/custom_sampler_builder.h similarity index 100% rename from examples/yaml/custom_sampler_builder.h rename to examples/configuration/custom_sampler_builder.h diff --git a/examples/yaml/custom_span_exporter.cc b/examples/configuration/custom_span_exporter.cc similarity index 100% rename from examples/yaml/custom_span_exporter.cc rename to examples/configuration/custom_span_exporter.cc diff --git a/examples/yaml/custom_span_exporter.h b/examples/configuration/custom_span_exporter.h similarity index 100% rename from examples/yaml/custom_span_exporter.h rename to examples/configuration/custom_span_exporter.h diff --git a/examples/yaml/custom_span_exporter_builder.cc b/examples/configuration/custom_span_exporter_builder.cc similarity index 100% rename from examples/yaml/custom_span_exporter_builder.cc rename to examples/configuration/custom_span_exporter_builder.cc diff --git a/examples/yaml/custom_span_exporter_builder.h b/examples/configuration/custom_span_exporter_builder.h similarity index 100% rename from examples/yaml/custom_span_exporter_builder.h rename to examples/configuration/custom_span_exporter_builder.h diff --git a/examples/yaml/custom_span_processor.cc b/examples/configuration/custom_span_processor.cc similarity index 100% rename from examples/yaml/custom_span_processor.cc rename to examples/configuration/custom_span_processor.cc diff --git a/examples/yaml/custom_span_processor.h b/examples/configuration/custom_span_processor.h similarity index 100% rename from examples/yaml/custom_span_processor.h rename to examples/configuration/custom_span_processor.h diff --git a/examples/yaml/custom_span_processor_builder.cc b/examples/configuration/custom_span_processor_builder.cc similarity index 100% rename from examples/yaml/custom_span_processor_builder.cc rename to examples/configuration/custom_span_processor_builder.cc diff --git a/examples/yaml/custom_span_processor_builder.h b/examples/configuration/custom_span_processor_builder.h similarity index 100% rename from examples/yaml/custom_span_processor_builder.h rename to examples/configuration/custom_span_processor_builder.h diff --git a/examples/yaml/extensions.yaml b/examples/configuration/extensions.yaml similarity index 100% rename from examples/yaml/extensions.yaml rename to examples/configuration/extensions.yaml diff --git a/examples/yaml/kitchen-sink.yaml b/examples/configuration/kitchen-sink.yaml similarity index 100% rename from examples/yaml/kitchen-sink.yaml rename to examples/configuration/kitchen-sink.yaml diff --git a/functional/configuration/main.cc b/examples/configuration/main.cc similarity index 57% rename from functional/configuration/main.cc rename to examples/configuration/main.cc index 66824909de..ab1f317ae0 100644 --- a/functional/configuration/main.cc +++ b/examples/configuration/main.cc @@ -1,16 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -// NOTE: This file is adapted from example/yaml/main.cc, -// to execute functional tests driven by shelltest. - #include #include #include +#include #include -// #include - #include "opentelemetry/exporters/ostream/console_log_record_builder.h" #include "opentelemetry/exporters/ostream/console_push_metric_builder.h" #include "opentelemetry/exporters/ostream/console_span_builder.h" @@ -22,15 +18,13 @@ #include "opentelemetry/sdk/configuration/registry.h" #include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" -#ifdef LATER -# include "custom_log_record_exporter_builder.h" -# include "custom_log_record_processor_builder.h" -# include "custom_pull_metric_exporter_builder.h" -# include "custom_push_metric_exporter_builder.h" -# include "custom_sampler_builder.h" -# include "custom_span_exporter_builder.h" -# include "custom_span_processor_builder.h" -#endif +#include "custom_log_record_exporter_builder.h" +#include "custom_log_record_processor_builder.h" +#include "custom_pull_metric_exporter_builder.h" +#include "custom_push_metric_exporter_builder.h" +#include "custom_sampler_builder.h" +#include "custom_span_exporter_builder.h" +#include "custom_span_processor_builder.h" #ifdef BAZEL_BUILD # include "examples/common/logs_foo_library/foo_library.h" @@ -67,6 +61,9 @@ #endif static bool opt_help = false; +static bool opt_debug = false; +static bool opt_test = false; +static bool opt_no_registry = false; static std::string yaml_file_path = ""; static std::unique_ptr sdk; @@ -107,16 +104,70 @@ class CheckerLogHandler : public opentelemetry::sdk::common::internal_log::LogHa } }; +void SetLoggerForTesting() +{ + if (opt_test) + { + opentelemetry::nostd::shared_ptr + checker_log_handler(new CheckerLogHandler()); + + opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogHandler(checker_log_handler); + } +} + +void PrintModelParsedForTesting(bool pass) +{ + if (opt_test) + { + if (pass) + { + fprintf(stdout, "MODEL PARSED\n"); + } + else + { + fprintf(stdout, "FAILED TO PARSE MODEL\n"); + exit(1); + } + } +} + +void PrintSdkCreatedForTesting(bool pass) +{ + if (opt_test) + { + if (pass) + { + fprintf(stdout, "SDK CREATED\n"); + } + else + { + fprintf(stdout, "FAILED TO CREATE SDK\n"); + exit(2); + } + } +} + +void SetSilentLoggerForTesting() +{ + if (opt_test) + { + // Do not record noise during payload, + // so it does not go into the shelltest output. + auto level = opentelemetry::sdk::common::internal_log::LogLevel::None; + opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); + } +} + void InitOtel(const std::string &config_file) { auto level = opentelemetry::sdk::common::internal_log::LogLevel::Info; - opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); - - opentelemetry::nostd::shared_ptr - checker_log_handler(new CheckerLogHandler()); + if (opt_debug) + { + level = opentelemetry::sdk::common::internal_log::LogLevel::Debug; + } - opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogHandler(checker_log_handler); + opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); /* 1 - Create a registry */ @@ -125,39 +176,57 @@ void InitOtel(const std::string &config_file) /* 2 - Populate the registry with the core components supported */ - opentelemetry::exporter::trace::ConsoleSpanBuilder::Register(registry.get()); - opentelemetry::exporter::metrics::ConsolePushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::logs::ConsoleLogRecordBuilder::Register(registry.get()); + /* + * Note: + * + * In a typical application, decide which component are allowed, and just + * Register them, without compile time (#ifdef OTEL_HAVE_OTLP_HTTP) + * or runtime (opt_no_registry) logic. + * + * Because this example is used in CI with various build configurations, + * we add compile time checks to have a working build in all cases. + * Do not use ifdef, just pick the components the application uses. + * + * Also, because this example is used in CI to run functional tests, + * we add a runtime check to execute stress tests for coverage. + * Do not blindly copy and paste if(!opt_no_registry), it is test code. + */ + + if (!opt_no_registry) + { + opentelemetry::exporter::trace::ConsoleSpanBuilder::Register(registry.get()); + opentelemetry::exporter::metrics::ConsolePushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::logs::ConsoleLogRecordBuilder::Register(registry.get()); #ifdef OTEL_HAVE_OTLP_HTTP - opentelemetry::exporter::otlp::OtlpHttpSpanBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpHttpPushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpHttpLogRecordBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpHttpSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpHttpPushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpHttpLogRecordBuilder::Register(registry.get()); #endif #ifdef OTEL_HAVE_OTLP_GRPC - opentelemetry::exporter::otlp::OtlpGrpcSpanBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpGrpcPushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpGrpcLogRecordBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpGrpcSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpGrpcPushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpGrpcLogRecordBuilder::Register(registry.get()); #endif #ifdef OTEL_HAVE_OTLP_FILE - opentelemetry::exporter::otlp::OtlpFileSpanBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpFilePushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpFileLogRecordBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpFileSpanBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpFilePushMetricBuilder::Register(registry.get()); + opentelemetry::exporter::otlp::OtlpFileLogRecordBuilder::Register(registry.get()); #endif #ifdef OTEL_HAVE_ZIPKIN - opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); + opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); #endif #ifdef OTEL_HAVE_PROMETHEUS - opentelemetry::exporter::metrics::PrometheusPullBuilder::Register(registry.get()); + opentelemetry::exporter::metrics::PrometheusPullBuilder::Register(registry.get()); #endif + } /* 3 - Populate the registry with external extensions plugins */ -#ifdef LATER CustomSamplerBuilder::Register(registry.get()); CustomSpanExporterBuilder::Register(registry.get()); CustomSpanProcessorBuilder::Register(registry.get()); @@ -165,7 +234,6 @@ void InitOtel(const std::string &config_file) CustomPullMetricExporterBuilder::Register(registry.get()); CustomLogRecordExporterBuilder::Register(registry.get()); CustomLogRecordProcessorBuilder::Register(registry.get()); -#endif /* 4 - Parse a config.yaml */ @@ -173,29 +241,15 @@ void InitOtel(const std::string &config_file) // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml auto model = opentelemetry::sdk::configuration::YamlConfigurationParser::ParseFile(config_file); - if (model != nullptr) - { - fprintf(stdout, "MODEL PARSED\n"); - } - else - { - fprintf(stdout, "FAILED TO PARSE MODEL\n"); - exit(1); - } + // Functional test helpers, ignore. + PrintModelParsedForTesting(model != nullptr); /* 5 - Build the SDK from the parsed config.yaml */ sdk = opentelemetry::sdk::configuration::ConfiguredSdk::Create(registry, model); - if (sdk != nullptr) - { - fprintf(stdout, "SDK CREATED\n"); - } - else - { - fprintf(stdout, "FAILED TO CREATE SDK\n"); - exit(2); - } + // Functional test helpers, ignore. + PrintSdkCreatedForTesting(sdk != nullptr); /* 6 - Deploy the SDK */ @@ -218,15 +272,27 @@ void CleanupOtel() static void usage(FILE *out) { static const char *msg = - "Usage: otel_configuration_check [options]\n" + "Usage: example_yaml [options]\n" "Valid options are:\n" - " --help Print this help\n" - " --yaml Path to a yaml configuration file\n" + " --help\n" + " Print this help\n" + " --yaml \n" + " Path to a yaml configuration file\n" + " --debug\n" + " Set logger to debug\n" "\n" "The configuration file used will be:\n" " 1) the file provided in the command line\n" " 2) the file provided in environment variable ${OTEL_EXPERIMENTAL_CONFIG_FILE}\n" - " 3) file config.yaml\n"; + " 3) file config.yaml\n" + "\n" + "This utility is also used for functional tests.\n" + "\n" + "Valid test options are:\n" + " --test\n" + " Run in test mode\n" + " --no-registry\n" + " Run with an empty registry\n"; fprintf(out, "%s", msg); } @@ -257,6 +323,30 @@ static int parse_args(int argc, char *argv[]) } } + if (strcmp(*remaining_argv, "--debug") == 0) + { + remaining_argc--; + remaining_argv++; + opt_debug = true; + continue; + } + + if (strcmp(*remaining_argv, "--test") == 0) + { + remaining_argc--; + remaining_argv++; + opt_test = true; + continue; + } + + if (strcmp(*remaining_argv, "--no-registry") == 0) + { + remaining_argc--; + remaining_argv++; + opt_no_registry = true; + continue; + } + if (remaining_argc) { // Unknown option @@ -287,11 +377,13 @@ int main(int argc, char *argv[]) return 0; } + // Functional test helpers, ignore. + SetLoggerForTesting(); + InitOtel(yaml_file_path); - // Do not record noise during payload - auto level = opentelemetry::sdk::common::internal_log::LogLevel::None; - opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); + // Functional test helpers, ignore. + SetSilentLoggerForTesting(); foo_library(); foo_library::counter_example("yaml"); diff --git a/examples/yaml/main.cc b/examples/yaml/main.cc deleted file mode 100644 index ab98dc907a..0000000000 --- a/examples/yaml/main.cc +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#include -#include -#include -#include - -#include "opentelemetry/exporters/ostream/console_log_record_builder.h" -#include "opentelemetry/exporters/ostream/console_push_metric_builder.h" -#include "opentelemetry/exporters/ostream/console_span_builder.h" -#include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/configuration/configuration.h" -#include "opentelemetry/sdk/configuration/configured_sdk.h" -#include "opentelemetry/sdk/configuration/registry.h" -#include "opentelemetry/sdk/configuration/yaml_configuration_parser.h" - -#include "custom_log_record_exporter_builder.h" -#include "custom_log_record_processor_builder.h" -#include "custom_pull_metric_exporter_builder.h" -#include "custom_push_metric_exporter_builder.h" -#include "custom_sampler_builder.h" -#include "custom_span_exporter_builder.h" -#include "custom_span_processor_builder.h" - -#ifdef BAZEL_BUILD -# include "examples/common/logs_foo_library/foo_library.h" -# include "examples/common/metrics_foo_library/foo_library.h" -#else -# include "logs_foo_library/foo_library.h" -# include "metrics_foo_library/foo_library.h" -#endif - -#ifdef OTEL_HAVE_OTLP_HTTP -# include "opentelemetry/exporters/otlp/otlp_http_log_record_builder.h" -# include "opentelemetry/exporters/otlp/otlp_http_push_metric_builder.h" -# include "opentelemetry/exporters/otlp/otlp_http_span_builder.h" -#endif - -#ifdef OTEL_HAVE_OTLP_GRPC -# include "opentelemetry/exporters/otlp/otlp_grpc_log_record_builder.h" -# include "opentelemetry/exporters/otlp/otlp_grpc_push_metric_builder.h" -# include "opentelemetry/exporters/otlp/otlp_grpc_span_builder.h" -#endif - -#ifdef OTEL_HAVE_OTLP_FILE -# include "opentelemetry/exporters/otlp/otlp_file_log_record_builder.h" -# include "opentelemetry/exporters/otlp/otlp_file_push_metric_builder.h" -# include "opentelemetry/exporters/otlp/otlp_file_span_builder.h" -#endif - -#ifdef OTEL_HAVE_ZIPKIN -# include "opentelemetry/exporters/zipkin/zipkin_builder.h" -#endif - -#ifdef OTEL_HAVE_PROMETHEUS -# include "opentelemetry/exporters/prometheus/prometheus_pull_builder.h" -#endif - -static bool opt_help = false; -static std::string yaml_file_path = ""; - -static std::unique_ptr sdk; - -namespace -{ - -void InitOtel(const std::string &config_file) -{ - auto level = opentelemetry::sdk::common::internal_log::LogLevel::Debug; - - opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(level); - - /* 1 - Create a registry */ - - std::shared_ptr registry( - new opentelemetry::sdk::configuration::Registry); - - /* 2 - Populate the registry with the core components supported */ - - opentelemetry::exporter::trace::ConsoleSpanBuilder::Register(registry.get()); - opentelemetry::exporter::metrics::ConsolePushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::logs::ConsoleLogRecordBuilder::Register(registry.get()); - -#ifdef OTEL_HAVE_OTLP_HTTP - opentelemetry::exporter::otlp::OtlpHttpSpanBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpHttpPushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpHttpLogRecordBuilder::Register(registry.get()); -#endif - -#ifdef OTEL_HAVE_OTLP_GRPC - opentelemetry::exporter::otlp::OtlpGrpcSpanBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpGrpcPushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpGrpcLogRecordBuilder::Register(registry.get()); -#endif - -#ifdef OTEL_HAVE_OTLP_FILE - opentelemetry::exporter::otlp::OtlpFileSpanBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpFilePushMetricBuilder::Register(registry.get()); - opentelemetry::exporter::otlp::OtlpFileLogRecordBuilder::Register(registry.get()); -#endif - -#ifdef OTEL_HAVE_ZIPKIN - opentelemetry::exporter::zipkin::ZipkinBuilder::Register(registry.get()); -#endif - -#ifdef OTEL_HAVE_PROMETHEUS - opentelemetry::exporter::metrics::PrometheusPullBuilder::Register(registry.get()); -#endif - - /* 3 - Populate the registry with external extensions plugins */ - - CustomSamplerBuilder::Register(registry.get()); - CustomSpanExporterBuilder::Register(registry.get()); - CustomSpanProcessorBuilder::Register(registry.get()); - CustomPushMetricExporterBuilder::Register(registry.get()); - CustomPullMetricExporterBuilder::Register(registry.get()); - CustomLogRecordExporterBuilder::Register(registry.get()); - CustomLogRecordProcessorBuilder::Register(registry.get()); - - /* 4 - Parse a config.yaml */ - - // See - // https://github.com/open-telemetry/opentelemetry-configuration/blob/main/examples/kitchen-sink.yaml - auto model = opentelemetry::sdk::configuration::YamlConfigurationParser::ParseFile(config_file); - - /* 5 - Build the SDK from the parsed config.yaml */ - - sdk = opentelemetry::sdk::configuration::ConfiguredSdk::Create(registry, model); - - /* 6 - Deploy the SDK */ - - if (sdk != nullptr) - { - sdk->Install(); - } -} - -void CleanupOtel() -{ - if (sdk != nullptr) - { - sdk->UnInstall(); - } - sdk.reset(nullptr); -} -} // namespace - -static void usage(FILE *out) -{ - static const char *msg = - "Usage: example_yaml [options]\n" - "Valid options are:\n" - " --help Print this help\n" - " --yaml Path to a yaml configuration file\n" - "\n" - "The configuration file used will be:\n" - " 1) the file provided in the command line\n" - " 2) the file provided in environment variable ${OTEL_EXPERIMENTAL_CONFIG_FILE}\n" - " 3) file config.yaml\n"; - - fprintf(out, "%s", msg); -} - -static int parse_args(int argc, char *argv[]) -{ - int remaining_argc = argc; - char **remaining_argv = argv; - - while (remaining_argc > 0) - { - if (strcmp(*remaining_argv, "--help") == 0) - { - opt_help = true; - return 0; - } - - if (remaining_argc >= 2) - { - if (strcmp(*remaining_argv, "--yaml") == 0) - { - remaining_argc--; - remaining_argv++; - yaml_file_path = *remaining_argv; - remaining_argc--; - remaining_argv++; - continue; - } - } - - if (remaining_argc) - { - // Unknown option - return 1; - } - } - - return 0; -} - -int main(int argc, char *argv[]) -{ - // Program name - argc--; - argv++; - - int rc = parse_args(argc, argv); - - if (rc != 0) - { - usage(stderr); - return 1; - } - - if (opt_help) - { - usage(stdout); - return 0; - } - - InitOtel(yaml_file_path); - - foo_library(); - foo_library::counter_example("yaml"); - foo_library::observable_counter_example("yaml"); - foo_library::histogram_example("yaml"); - - CleanupOtel(); - return 0; -} diff --git a/functional/CMakeLists.txt b/functional/CMakeLists.txt index 585ac11950..66924fea8e 100644 --- a/functional/CMakeLists.txt +++ b/functional/CMakeLists.txt @@ -4,7 +4,3 @@ if(WITH_OTLP_HTTP) add_subdirectory(otlp) endif() - -if(WITH_CONFIGURATION) - add_subdirectory(configuration) -endif() diff --git a/functional/configuration/CMakeLists.txt b/functional/configuration/CMakeLists.txt deleted file mode 100644 index 991c9e2fa8..0000000000 --- a/functional/configuration/CMakeLists.txt +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -if(DEFINED OPENTELEMETRY_BUILD_DLL) - add_definitions(-DOPENTELEMETRY_BUILD_IMPORT_DLL) -endif() - -include_directories(${CMAKE_SOURCE_DIR}/sdk/include) - -add_executable(otel_configuration_check main.cc) - -target_link_libraries( - otel_configuration_check - ${CMAKE_THREAD_LIBS_INIT} - common_metrics_foo_library - common_logs_foo_library - opentelemetry_exporter_ostream_span_builder - opentelemetry_exporter_ostream_metrics_builder - opentelemetry_exporter_ostream_logs_builder) - -if(WITH_OTLP_HTTP) - include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) - add_definitions(-DOTEL_HAVE_OTLP_HTTP) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_http_builder) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_http_log_builder) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_http_metric_builder) -endif() - -if(WITH_OTLP_GRPC) - include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) - add_definitions(-DOTEL_HAVE_OTLP_GRPC) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_grpc_builder) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_grpc_log_builder) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_grpc_metrics_builder) -endif() - -if(WITH_OTLP_FILE) - include_directories(${CMAKE_SOURCE_DIR}/exporters/otlp/include) - add_definitions(-DOTEL_HAVE_OTLP_FILE) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_file_builder) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_file_log_builder) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_otlp_file_metric_builder) -endif() - -if(WITH_ZIPKIN) - include_directories(${CMAKE_SOURCE_DIR}/exporters/zipkin/include) - add_definitions(-DOTEL_HAVE_ZIPKIN) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_zipkin_trace_builder) -endif() - -if(WITH_PROMETHEUS) - include_directories(${CMAKE_SOURCE_DIR}/exporters/prometheus/include) - add_definitions(-DOTEL_HAVE_PROMETHEUS) - target_link_libraries(otel_configuration_check - opentelemetry_exporter_prometheus_builder) -endif() - -if(DEFINED OPENTELEMETRY_BUILD_DLL) - target_link_libraries(otel_configuration_check opentelemetry_cpp) -else() - target_link_libraries( - otel_configuration_check opentelemetry_configuration opentelemetry_common - opentelemetry_trace opentelemetry_logs) -endif() diff --git a/functional/configuration/run_test.sh b/functional/configuration/run_test.sh index 4acf75f29d..925ed5850c 100755 --- a/functional/configuration/run_test.sh +++ b/functional/configuration/run_test.sh @@ -11,9 +11,9 @@ set -e [ -z "${BUILD_DIR}" ] && export BUILD_DIR="${HOME}/build" -export TEST_BIN_DIR="${BUILD_DIR}/functional/configuration/" +export EXAMPLE_BIN_DIR="${BUILD_DIR}/example/configuration/" -export PATH=${PATH}:${TEST_BIN_DIR} +export PATH=${PATH}:${EXAMPLE_BIN_DIR} shelltest ./shelltests diff --git a/functional/configuration/shelltests/disabled_empty.test b/functional/configuration/shelltests/disabled_empty.test index d4e8880882..ce1e5dc10f 100644 --- a/functional/configuration/shelltests/disabled_empty.test +++ b/functional/configuration/shelltests/disabled_empty.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/disabled_empty.yaml +$ example_yaml --test --yaml shelltests/disabled_empty.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/disabled_false.test b/functional/configuration/shelltests/disabled_false.test index f3af5a75a1..46cf173f5c 100644 --- a/functional/configuration/shelltests/disabled_false.test +++ b/functional/configuration/shelltests/disabled_false.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/disabled_false.yaml +$ example_yaml --test --yaml shelltests/disabled_false.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/disabled_true.test b/functional/configuration/shelltests/disabled_true.test index 3c3b91572b..fae4b946f3 100644 --- a/functional/configuration/shelltests/disabled_true.test +++ b/functional/configuration/shelltests/disabled_true.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/disabled_true.yaml +$ example_yaml --test --yaml shelltests/disabled_true.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/empty.test b/functional/configuration/shelltests/empty.test index a08b33dd08..ba6869976d 100644 --- a/functional/configuration/shelltests/empty.test +++ b/functional/configuration/shelltests/empty.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/empty.yaml +$ example_yaml --test --yaml shelltests/empty.yaml > [ERROR] [Yaml Configuration Parser] Parse failed with exception: Yaml: not a map, looking for: file_format FAILED TO PARSE MODEL diff --git a/functional/configuration/shelltests/format_empty.test b/functional/configuration/shelltests/format_empty.test index dffce003d5..820cea69a1 100644 --- a/functional/configuration/shelltests/format_empty.test +++ b/functional/configuration/shelltests/format_empty.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/format_empty.yaml +$ example_yaml --test --yaml shelltests/format_empty.yaml > [ERROR] [Yaml Configuration Parser] Parse failed with exception: Yaml: string value is empty: file_format FAILED TO PARSE MODEL diff --git a/functional/configuration/shelltests/kitchen-sink.test b/functional/configuration/shelltests/kitchen-sink.test index 999dab125e..24d58a03c5 100644 --- a/functional/configuration/shelltests/kitchen-sink.test +++ b/functional/configuration/shelltests/kitchen-sink.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/kitchen-sink.yaml | egrep -v "(observed_timestamp|trace_id|span_id)" +$ example_yaml --test --yaml shelltests/kitchen-sink.yaml | egrep -v "(observed_timestamp|trace_id|span_id)" > MODEL PARSED [WARNING] attribute_limits not supported, ignoring diff --git a/functional/configuration/shelltests/propagator_both.test b/functional/configuration/shelltests/propagator_both.test index cdcac52038..51f6b55daf 100644 --- a/functional/configuration/shelltests/propagator_both.test +++ b/functional/configuration/shelltests/propagator_both.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_both.yaml +$ example_yaml --test --yaml shelltests/propagator_both.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/propagator_broken.test b/functional/configuration/shelltests/propagator_broken.test index db0cfd2337..b02b1f9c39 100644 --- a/functional/configuration/shelltests/propagator_broken.test +++ b/functional/configuration/shelltests/propagator_broken.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_broken.yaml +$ example_yaml --test --yaml shelltests/propagator_broken.yaml > [ERROR] [Yaml Configuration Parser] Parse failed with exception: Illegal composite child 2, properties count: 3 FAILED TO PARSE MODEL diff --git a/functional/configuration/shelltests/propagator_composite_list.test b/functional/configuration/shelltests/propagator_composite_list.test index ed696f358c..eb39f6fce8 100644 --- a/functional/configuration/shelltests/propagator_composite_list.test +++ b/functional/configuration/shelltests/propagator_composite_list.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_composite_list.yaml +$ example_yaml --test --yaml shelltests/propagator_composite_list.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/propagator_duplicates.test b/functional/configuration/shelltests/propagator_duplicates.test index 6fc59bcde3..f63688928c 100644 --- a/functional/configuration/shelltests/propagator_duplicates.test +++ b/functional/configuration/shelltests/propagator_duplicates.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_duplicates.yaml +$ example_yaml --test --yaml shelltests/propagator_duplicates.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/propagator_multi.test b/functional/configuration/shelltests/propagator_multi.test index eb7e3237a6..3fd8d069c6 100644 --- a/functional/configuration/shelltests/propagator_multi.test +++ b/functional/configuration/shelltests/propagator_multi.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_multi.yaml +$ example_yaml --test --yaml shelltests/propagator_multi.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/propagator_ottrace.test b/functional/configuration/shelltests/propagator_ottrace.test index 072fd544dc..83c58d7500 100644 --- a/functional/configuration/shelltests/propagator_ottrace.test +++ b/functional/configuration/shelltests/propagator_ottrace.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_ottrace.yaml +$ example_yaml --test --yaml shelltests/propagator_ottrace.yaml > MODEL PARSED [ERROR] [Configured Sdk] builder failed with exception: CreateTextMapPropagator() no builder for ottrace diff --git a/functional/configuration/shelltests/propagator_single.test b/functional/configuration/shelltests/propagator_single.test index 9b1c36976d..ce2586d47e 100644 --- a/functional/configuration/shelltests/propagator_single.test +++ b/functional/configuration/shelltests/propagator_single.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_single.yaml +$ example_yaml --test --yaml shelltests/propagator_single.yaml > MODEL PARSED SDK CREATED diff --git a/functional/configuration/shelltests/propagator_unknown.test b/functional/configuration/shelltests/propagator_unknown.test index 9fec59ffd7..9412638fce 100644 --- a/functional/configuration/shelltests/propagator_unknown.test +++ b/functional/configuration/shelltests/propagator_unknown.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_unknown.yaml +$ example_yaml --test --yaml shelltests/propagator_unknown.yaml > MODEL PARSED [ERROR] [Configured Sdk] builder failed with exception: CreateTextMapPropagator() no builder for never_hear_of_this_one diff --git a/functional/configuration/shelltests/propagator_xray.test b/functional/configuration/shelltests/propagator_xray.test index 4fab9d5b21..0ff73021ec 100644 --- a/functional/configuration/shelltests/propagator_xray.test +++ b/functional/configuration/shelltests/propagator_xray.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/propagator_xray.yaml +$ example_yaml --test --yaml shelltests/propagator_xray.yaml > MODEL PARSED [ERROR] [Configured Sdk] builder failed with exception: CreateTextMapPropagator() no builder for xray diff --git a/functional/configuration/shelltests/sampler_jaeger.test b/functional/configuration/shelltests/sampler_jaeger.test index bd377478da..402bd28385 100644 --- a/functional/configuration/shelltests/sampler_jaeger.test +++ b/functional/configuration/shelltests/sampler_jaeger.test @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -$ otel_configuration_check --yaml shelltests/sampler_jaeger.yaml +$ example_yaml --test --yaml shelltests/sampler_jaeger.yaml > [ERROR] JaegerRemoteSamplerConfiguration: FIXME MODEL PARSED diff --git a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h index eed6f46939..4325edfc34 100644 --- a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h +++ b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h @@ -20,7 +20,6 @@ namespace metrics class OPENTELEMETRY_EXPORT PeriodicExportingMetricReaderFactory { public: - // FIXME, return type static std::unique_ptr Create(std::unique_ptr exporter, const PeriodicExportingMetricReaderOptions &options); From f26f4882f0e037d10de445417c4e6442680dd629 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 29 Jul 2025 22:39:40 +0200 Subject: [PATCH 165/166] cleanup --- examples/configuration/main.cc | 1 - functional/configuration/run_test.sh | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/configuration/main.cc b/examples/configuration/main.cc index ab1f317ae0..f6abd6c979 100644 --- a/examples/configuration/main.cc +++ b/examples/configuration/main.cc @@ -4,7 +4,6 @@ #include #include #include -#include #include #include "opentelemetry/exporters/ostream/console_log_record_builder.h" diff --git a/functional/configuration/run_test.sh b/functional/configuration/run_test.sh index 925ed5850c..bb0a75515f 100755 --- a/functional/configuration/run_test.sh +++ b/functional/configuration/run_test.sh @@ -11,8 +11,9 @@ set -e [ -z "${BUILD_DIR}" ] && export BUILD_DIR="${HOME}/build" -export EXAMPLE_BIN_DIR="${BUILD_DIR}/example/configuration/" +export EXAMPLE_BIN_DIR="${BUILD_DIR}/examples/configuration/" +# Make sure `example_yaml` is in the path export PATH=${PATH}:${EXAMPLE_BIN_DIR} shelltest ./shelltests From 21ddb9b1f68a831f5b0ca51c80fa9b01e5c8cdbc Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 4 Aug 2025 22:00:54 +0200 Subject: [PATCH 166/166] Code review comments. --- examples/configuration/custom_log_record_exporter.h | 5 ++++- examples/configuration/custom_log_record_processor.h | 4 ++-- examples/configuration/custom_pull_metric_exporter.h | 5 ++++- examples/configuration/custom_push_metric_exporter.h | 5 ++++- examples/configuration/custom_sampler.h | 5 ++++- examples/configuration/custom_span_exporter.h | 5 ++++- examples/configuration/custom_span_processor.h | 4 ++-- 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/examples/configuration/custom_log_record_exporter.h b/examples/configuration/custom_log_record_exporter.h index 362eb2855d..b3a19c5569 100644 --- a/examples/configuration/custom_log_record_exporter.h +++ b/examples/configuration/custom_log_record_exporter.h @@ -15,7 +15,7 @@ class CustomLogRecordExporter : public opentelemetry::sdk::logs::LogRecordExporter { public: - CustomLogRecordExporter(const std::string & /* comment */) {} + CustomLogRecordExporter(const std::string &comment) : comment_(comment) {} CustomLogRecordExporter(CustomLogRecordExporter &&) = delete; CustomLogRecordExporter(const CustomLogRecordExporter &) = delete; CustomLogRecordExporter &operator=(CustomLogRecordExporter &&) = delete; @@ -31,4 +31,7 @@ class CustomLogRecordExporter : public opentelemetry::sdk::logs::LogRecordExport bool ForceFlush(std::chrono::microseconds timeout) noexcept override; bool Shutdown(std::chrono::microseconds timeout) noexcept override; + +private: + std::string comment_; }; diff --git a/examples/configuration/custom_log_record_processor.h b/examples/configuration/custom_log_record_processor.h index 732ff10432..81e6125bd0 100644 --- a/examples/configuration/custom_log_record_processor.h +++ b/examples/configuration/custom_log_record_processor.h @@ -13,7 +13,7 @@ class CustomLogRecordProcessor : public opentelemetry::sdk::logs::LogRecordProcessor { public: - CustomLogRecordProcessor(const std::string &comment) : m_comment(comment) {} + CustomLogRecordProcessor(const std::string &comment) : comment_(comment) {} CustomLogRecordProcessor(CustomLogRecordProcessor &&) = delete; CustomLogRecordProcessor(const CustomLogRecordProcessor &) = delete; CustomLogRecordProcessor &operator=(CustomLogRecordProcessor &&) = delete; @@ -29,5 +29,5 @@ class CustomLogRecordProcessor : public opentelemetry::sdk::logs::LogRecordProce bool Shutdown(std::chrono::microseconds timeout) noexcept override; private: - std::string m_comment; + std::string comment_; }; diff --git a/examples/configuration/custom_pull_metric_exporter.h b/examples/configuration/custom_pull_metric_exporter.h index 2199c3acc9..debefdf4a1 100644 --- a/examples/configuration/custom_pull_metric_exporter.h +++ b/examples/configuration/custom_pull_metric_exporter.h @@ -12,7 +12,7 @@ class CustomPullMetricExporter : public opentelemetry::sdk::metrics::MetricReader { public: - CustomPullMetricExporter(const std::string & /* comment */) {} + CustomPullMetricExporter(const std::string &comment) : comment_(comment) {} CustomPullMetricExporter(CustomPullMetricExporter &&) = delete; CustomPullMetricExporter(const CustomPullMetricExporter &) = delete; CustomPullMetricExporter &operator=(CustomPullMetricExporter &&) = delete; @@ -27,4 +27,7 @@ class CustomPullMetricExporter : public opentelemetry::sdk::metrics::MetricReade bool OnShutDown(std::chrono::microseconds timeout) noexcept override; void OnInitialized() noexcept override; + +private: + std::string comment_; }; diff --git a/examples/configuration/custom_push_metric_exporter.h b/examples/configuration/custom_push_metric_exporter.h index 068542448c..f5222c343c 100644 --- a/examples/configuration/custom_push_metric_exporter.h +++ b/examples/configuration/custom_push_metric_exporter.h @@ -13,7 +13,7 @@ class CustomPushMetricExporter : public opentelemetry::sdk::metrics::PushMetricExporter { public: - CustomPushMetricExporter(const std::string & /* comment */) {} + CustomPushMetricExporter(const std::string &comment) : comment_(comment) {} CustomPushMetricExporter(CustomPushMetricExporter &&) = delete; CustomPushMetricExporter(const CustomPushMetricExporter &) = delete; CustomPushMetricExporter &operator=(CustomPushMetricExporter &&) = delete; @@ -29,4 +29,7 @@ class CustomPushMetricExporter : public opentelemetry::sdk::metrics::PushMetricE bool ForceFlush(std::chrono::microseconds timeout) noexcept override; bool Shutdown(std::chrono::microseconds timeout) noexcept override; + +private: + std::string comment_; }; diff --git a/examples/configuration/custom_sampler.h b/examples/configuration/custom_sampler.h index 3c03be0e2e..6bb4113d08 100644 --- a/examples/configuration/custom_sampler.h +++ b/examples/configuration/custom_sampler.h @@ -16,7 +16,7 @@ class CustomSampler : public opentelemetry::sdk::trace::Sampler { public: - CustomSampler(const std::string & /* comment */) {} + CustomSampler(const std::string &comment) : comment_(comment) {} CustomSampler(CustomSampler &&) = delete; CustomSampler(const CustomSampler &) = delete; CustomSampler &operator=(CustomSampler &&) = delete; @@ -32,4 +32,7 @@ class CustomSampler : public opentelemetry::sdk::trace::Sampler const opentelemetry::trace::SpanContextKeyValueIterable &links) noexcept override; opentelemetry::nostd::string_view GetDescription() const noexcept override; + +private: + std::string comment_; }; diff --git a/examples/configuration/custom_span_exporter.h b/examples/configuration/custom_span_exporter.h index d6d92599d2..cc8a93b83e 100644 --- a/examples/configuration/custom_span_exporter.h +++ b/examples/configuration/custom_span_exporter.h @@ -15,7 +15,7 @@ class CustomSpanExporter : public opentelemetry::sdk::trace::SpanExporter { public: - CustomSpanExporter(const std::string & /* comment */) {} + CustomSpanExporter(const std::string &comment) : comment_(comment) {} CustomSpanExporter(CustomSpanExporter &&) = delete; CustomSpanExporter(const CustomSpanExporter &) = delete; CustomSpanExporter &operator=(CustomSpanExporter &&) = delete; @@ -31,4 +31,7 @@ class CustomSpanExporter : public opentelemetry::sdk::trace::SpanExporter bool ForceFlush(std::chrono::microseconds timeout) noexcept override; bool Shutdown(std::chrono::microseconds timeout) noexcept override; + +private: + std::string comment_; }; diff --git a/examples/configuration/custom_span_processor.h b/examples/configuration/custom_span_processor.h index d87b2fc1af..4da2d6af8f 100644 --- a/examples/configuration/custom_span_processor.h +++ b/examples/configuration/custom_span_processor.h @@ -14,7 +14,7 @@ class CustomSpanProcessor : public opentelemetry::sdk::trace::SpanProcessor { public: - CustomSpanProcessor(const std::string &comment) : m_comment(comment) {} + CustomSpanProcessor(const std::string &comment) : comment_(comment) {} CustomSpanProcessor(CustomSpanProcessor &&) = delete; CustomSpanProcessor(const CustomSpanProcessor &) = delete; CustomSpanProcessor &operator=(CustomSpanProcessor &&) = delete; @@ -33,5 +33,5 @@ class CustomSpanProcessor : public opentelemetry::sdk::trace::SpanProcessor bool Shutdown(std::chrono::microseconds timeout) noexcept override; private: - std::string m_comment; + std::string comment_; };