From 85b0adaa0870a5e842bea3fbc6567452d038190d Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sat, 28 Jun 2025 23:48:08 +0200 Subject: [PATCH 1/2] [CONFIGURATION] File configuration - log model (#3473) --- ...batch_log_record_processor_configuration.h | 38 ++++++++++++++++ ...onsole_log_record_exporter_configuration.h | 29 ++++++++++++ .../log_record_exporter_configuration.h | 32 ++++++++++++++ ...og_record_exporter_configuration_visitor.h | 41 +++++++++++++++++ .../log_record_limits_configuration.h | 25 +++++++++++ .../log_record_processor_configuration.h | 33 ++++++++++++++ ...g_record_processor_configuration_visitor.h | 37 ++++++++++++++++ .../logger_provider_configuration.h | 31 +++++++++++++ ...p_file_log_record_exporter_configuration.h | 33 ++++++++++++++ ...p_grpc_log_record_exporter_configuration.h | 43 ++++++++++++++++++ ...p_http_log_record_exporter_configuration.h | 44 +++++++++++++++++++ ...imple_log_record_processor_configuration.h | 34 ++++++++++++++ 12 files changed, 420 insertions(+) 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/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/logger_provider_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/otlp_http_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..17570f0552 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/batch_log_record_processor_configuration.h @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: BatchLogRecordProcessor +class BatchLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration +{ +public: + void Accept(LogRecordProcessorConfigurationVisitor *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/console_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h new file mode 100644 index 0000000000..89bd2b0893 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h @@ -0,0 +1,29 @@ +// 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 +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Console +class ConsoleLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + void Accept(LogRecordExporterConfigurationVisitor *visitor) const override + { + visitor->VisitConsole(this); + } +}; + +} // 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..9eed3ee62f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_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 LogRecordExporterConfigurationVisitor; + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LogRecordExporter +class LogRecordExporterConfiguration +{ +public: + 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; +}; + +} // 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..a8a2878ca5 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_exporter_configuration_visitor.h @@ -0,0 +1,41 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpHttpLogRecordExporterConfiguration; +class OtlpGrpcLogRecordExporterConfiguration; +class OtlpFileLogRecordExporterConfiguration; +class ConsoleLogRecordExporterConfiguration; +class ExtensionLogRecordExporterConfiguration; + +class LogRecordExporterConfigurationVisitor +{ +public: + 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; + virtual void VisitOtlpFile(const OtlpFileLogRecordExporterConfiguration *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..81ab1383be --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_limits_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 +{ + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LogRecordLimits +class LogRecordLimitsConfiguration +{ +public: + std::size_t attribute_value_length_limit; + std::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..916995367a --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration.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 LogRecordProcessorConfigurationVisitor; + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LogRecordProcessor +class LogRecordProcessorConfiguration +{ +public: + 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; +}; + +} // 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..ac4dd52d23 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/log_record_processor_configuration_visitor.h @@ -0,0 +1,37 @@ +// 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; + 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; + 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 new file mode 100644 index 0000000000..8debcaac49 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/logger_provider_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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 +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: LoggerProvider +class LoggerProviderConfiguration +{ +public: + std::vector> processors; + std::unique_ptr limits; + // FIXME: logger_configurator +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..ca836a1079 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: ExperimentalOtlpFileExporter +class OtlpFileLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + 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_grpc_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_exporter_configuration.h new file mode 100644 index 0000000000..c8078cbcaf --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_log_record_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/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 OtlpGrpcLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + void Accept(LogRecordExporterConfigurationVisitor *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_log_record_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_http_log_record_exporter_configuration.h new file mode 100644 index 0000000000..0ff65ec077 --- /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 +#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" +#include "opentelemetry/sdk/configuration/otlp_http_encoding.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: OtlpHttpExporter +class OtlpHttpLogRecordExporterConfiguration : public LogRecordExporterConfiguration +{ +public: + void Accept(LogRecordExporterConfigurationVisitor *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_log_record_processor_configuration.h b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h new file mode 100644 index 0000000000..67acd8a813 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/simple_log_record_processor_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/logger_provider.json +// YAML-NODE: SimpleLogRecordProcessor +class SimpleLogRecordProcessorConfiguration : public LogRecordProcessorConfiguration +{ +public: + void Accept(LogRecordProcessorConfigurationVisitor *visitor) const override + { + visitor->VisitSimple(this); + } + + std::unique_ptr exporter; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From f16ea3b7f26831b5ba8746c59dbc90b27863b528 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 29 Jun 2025 01:09:10 +0200 Subject: [PATCH 2/2] [CONFIGURATION] File configuration - metric model (#3474) --- ...nsole_push_metric_exporter_configuration.h | 30 ++++++++++++ .../metric_producer_configuration.h | 32 +++++++++++++ .../metric_reader_configuration.h | 32 +++++++++++++ .../metric_reader_configuration_visitor.h | 34 +++++++++++++ ..._file_push_metric_exporter_configuration.h | 38 +++++++++++++++ ..._grpc_push_metric_exporter_configuration.h | 47 ++++++++++++++++++ ..._http_push_metric_exporter_configuration.h | 48 +++++++++++++++++++ .../periodic_metric_reader_configuration.h | 39 +++++++++++++++ ...theus_pull_metric_exporter_configuration.h | 39 +++++++++++++++ .../pull_metric_exporter_configuration.h | 31 ++++++++++++ ...ll_metric_exporter_configuration_visitor.h | 35 ++++++++++++++ .../pull_metric_reader_configuration.h | 38 +++++++++++++++ .../push_metric_exporter_configuration.h | 33 +++++++++++++ ...sh_metric_exporter_configuration_visitor.h | 41 ++++++++++++++++ .../configuration/temporality_preference.h | 25 ++++++++++ 15 files changed, 542 insertions(+) create mode 100644 sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_producer_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/metric_reader_configuration_visitor.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_grpc_push_metric_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/periodic_metric_reader_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h create mode 100644 sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.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/configuration/temporality_preference.h 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..e36e3a961f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h @@ -0,0 +1,30 @@ +// 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 +{ + +// YAML-SCHEMA: schema/common.json +// YAML-NODE: Console +class ConsolePushMetricExporterConfiguration : public PushMetricExporterConfiguration +{ +public: + void Accept(PushMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitConsole(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..bdfaab1388 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_producer_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 MetricProducerConfigurationVisitor; + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: MetricProducer +class MetricProducerConfiguration +{ +public: + 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; +}; + +} // 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..d038a9f760 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_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 MetricReaderConfigurationVisitor; + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: MetricReader +class MetricReaderConfiguration +{ +public: + 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; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..412935be43 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/metric_reader_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 PeriodicMetricReaderConfiguration; +class PullMetricReaderConfiguration; + +class MetricReaderConfigurationVisitor +{ +public: + 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; + virtual void VisitPull(const PullMetricReaderConfiguration *model) = 0; +}; + +} // 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..48f27434b5 --- /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 + +#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" +#include "opentelemetry/sdk/configuration/temporality_preference.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: + void Accept(PushMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitOtlpFile(this); + } + + std::string output_stream; + enum_temporality_preference temporality_preference{cumulative}; + 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_grpc_push_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h new file mode 100644 index 0000000000..8a3ec69de2 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_grpc_push_metric_exporter_configuration.h @@ -0,0 +1,47 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#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" +#include "opentelemetry/sdk/configuration/temporality_preference.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: OtlpGrpcMetricExporter +class OtlpGrpcPushMetricExporterConfiguration : public PushMetricExporterConfiguration +{ +public: + void Accept(PushMetricExporterConfigurationVisitor *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}; + enum_temporality_preference temporality_preference{cumulative}; + 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_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..bfac17be4e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_configuration.h @@ -0,0 +1,48 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#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" +#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h" +#include "opentelemetry/sdk/configuration/temporality_preference.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: + void Accept(PushMetricExporterConfigurationVisitor *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}; + enum_temporality_preference temporality_preference{cumulative}; + 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/periodic_metric_reader_configuration.h b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h new file mode 100644 index 0000000000..ac38cb6206 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h @@ -0,0 +1,39 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PeriodicMetricReader +class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration +{ +public: + void Accept(MetricReaderConfigurationVisitor *visitor) const override + { + visitor->VisitPeriodic(this); + } + + std::size_t interval{0}; + std::size_t timeout{0}; + std::unique_ptr exporter; + std::vector> producers; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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 new file mode 100644 index 0000000000..99b4fbcc85 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h @@ -0,0 +1,39 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: Prometheus +class PrometheusPullMetricExporterConfiguration : public PullMetricExporterConfiguration +{ +public: + void Accept(PullMetricExporterConfigurationVisitor *visitor) const override + { + visitor->VisitPrometheus(this); + } + + std::string host; + std::size_t port{0}; + bool without_units{false}; + bool without_type_suffix{false}; + bool without_scope_info{false}; + // FIXME: with_resource_constant_labels; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.h new file mode 100644 index 0000000000..8351d81c18 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration.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 PullMetricExporterConfigurationVisitor; + +class PullMetricExporterConfiguration +{ +public: + 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; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..bbc40ab058 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_exporter_configuration_visitor.h @@ -0,0 +1,35 @@ +// 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; + 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; +}; + +} // 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..de317689ce --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/pull_metric_reader_configuration.h @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#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" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PullMetricReader +class PullMetricReaderConfiguration : public MetricReaderConfiguration +{ +public: + void Accept(MetricReaderConfigurationVisitor *visitor) const override + { + visitor->VisitPull(this); + } + + std::unique_ptr exporter; + std::vector> producers; + // FIXME: cardinality_limits +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..4776a96027 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration.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 PushMetricExporterConfigurationVisitor; + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: PushMetricExporter +class PushMetricExporterConfiguration +{ +public: + 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; +}; + +} // 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..b43b2baf8e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h @@ -0,0 +1,41 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class OtlpHttpPushMetricExporterConfiguration; +class OtlpGrpcPushMetricExporterConfiguration; +class OtlpFilePushMetricExporterConfiguration; +class ConsolePushMetricExporterConfiguration; +class ExtensionPushMetricExporterConfiguration; + +class PushMetricExporterConfigurationVisitor +{ +public: + 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; + virtual void VisitOtlpFile(const OtlpFilePushMetricExporterConfiguration *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/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