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