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..1230f616a2 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/batch_span_processor_configuration.h @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: BatchSpanProcessor +class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration +{ +public: + void Accept(SpanProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitBatch(this); + } + + 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; +}; + +} // 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..d24cffe8bf --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/configuration.h @@ -0,0 +1,75 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#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" +#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" + +/* + * 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 +{ + +// YAML-SCHEMA: schema/opentelemetry_configuration.json +// YAML-NODE: OpenTelemetryConfiguration +class Configuration +{ +public: + Configuration(std::unique_ptr doc) : doc_(std::move(doc)) {} + 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}; + std::string log_level; + + 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; + // Ignored: instrumentation + +private: + std::unique_ptr doc_; +}; + +} // namespace configuration +} // namespace sdk +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..a1750d0f2c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/console_span_exporter_configuration.h @@ -0,0 +1,29 @@ +// 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 +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Console +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/otlp_file_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h new file mode 100644 index 0000000000..4742d8124c --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#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: ExperimentalOtlpFileExporter +class OtlpFileSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + 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_span_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h new file mode 100644 index 0000000000..efbf6011b2 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_span_exporter_configuration.h @@ -0,0 +1,43 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: OtlpGrpcExporter +class OtlpGrpcSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpGrpc(this); + } + + std::string endpoint; + 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; + std::size_t timeout{0}; + 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..394a6e75dd --- /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 +#include + +#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" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: OtlpHttpExporter +class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpHttp(this); + } + + std::string endpoint; + 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; + std::size_t timeout{0}; + enum_otlp_http_encoding encoding{protobuf}; +}; + +} // 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..48eabe20da --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/simple_span_processor_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SimpleSpanProcessor +class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration +{ +public: + void Accept(SpanProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitSimple(this); + } + + std::unique_ptr exporter; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..30f75dba9f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class SpanExporterConfigurationVisitor; + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SpanExporter +class SpanExporterConfiguration +{ +public: + 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; +}; + +} // 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 new file mode 100644 index 0000000000..685584220a --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h @@ -0,0 +1,42 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpHttpSpanExporterConfiguration; +class OtlpGrpcSpanExporterConfiguration; +class OtlpFileSpanExporterConfiguration; +class ConsoleSpanExporterConfiguration; +class ZipkinSpanExporterConfiguration; +class ExtensionSpanExporterConfiguration; + +class SpanExporterConfigurationVisitor +{ +public: + 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; + 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; +}; + +} // 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..a4624bb1a5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_limits_configuration.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 +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SpanLimits +class SpanLimitsConfiguration +{ +public: + 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 +} // 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..78d927907e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ +class SpanProcessorConfigurationVisitor; + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: SpanProcessor +class SpanProcessorConfiguration +{ +public: + 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; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..c85312f597 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/span_processor_configuration_visitor.h @@ -0,0 +1,36 @@ +// 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: + 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; + 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/tracer_provider_configuration.h b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h new file mode 100644 index 0000000000..9ef3d75b67 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/tracer_provider_configuration.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#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/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: TracerProvider +class TracerProviderConfiguration +{ +public: + std::vector> processors; + std::unique_ptr limits; + std::unique_ptr sampler; + // FIXME: tracer_configurator +}; + +} // 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 new file mode 100644 index 0000000000..fc64f30841 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/zipkin_span_exporter_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#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/tracer_provider.json +// YAML-NODE: Zipkin +class ZipkinSpanExporterConfiguration : public SpanExporterConfiguration +{ +public: + void Accept(SpanExporterConfigurationVisitor *visitor) const override + { + visitor->VisitZipkin(this); + } + + std::string endpoint; + std::size_t timeout{0}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE