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..8be26c3e51 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/aggregation_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 AggregationConfigurationVisitor; + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: aggregation +class AggregationConfiguration +{ +public: + 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 +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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/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..86d87f8393 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: base2_exponential_bucket_histogram +class Base2ExponentialBucketHistogramAggregationConfiguration : public AggregationConfiguration +{ +public: + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitBase2ExponentialBucketHistogram(this); + } + + std::size_t max_scale{0}; + std::size_t max_size{0}; + bool record_min_max{false}; +}; + +} // 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..357578a211 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/default_aggregation_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: default +class DefaultAggregationConfiguration : public AggregationConfiguration +{ +public: + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitDefault(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h b/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.h new file mode 100644 index 0000000000..420f2daba9 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/default_histogram_aggregation.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 configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ExporterDefaultHistogramAggregation +enum class DefaultHistogramAggregation : std::uint8_t +{ + explicit_bucket_histogram, + base2_exponential_bucket_histogram +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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..ea752dc99f --- /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 "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: drop +class DropAggregationConfiguration : public AggregationConfiguration +{ +public: + void Accept(AggregationConfigurationVisitor *visitor) const override { visitor->VisitDrop(this); } +}; + +} // 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..122e84d034 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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 +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: explicit_bucket_histogram +class ExplicitBucketHistogramAggregationConfiguration : public AggregationConfiguration +{ +public: + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitExplicitBucketHistogram(this); + } + + std::vector boundaries; + bool record_min_max{false}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE 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/last_value_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h new file mode 100644 index 0000000000..e528ee4b85 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/last_value_aggregation_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: last_value +class LastValueAggregationConfiguration : public AggregationConfiguration +{ +public: + void Accept(AggregationConfigurationVisitor *visitor) const override + { + visitor->VisitLastValue(this); + } +}; + +} // 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..6f57de4150 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/meter_provider_configuration.h @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#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 +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: MeterProvider +class MeterProviderConfiguration +{ +public: + std::vector> readers; + std::vector> views; + // FIXME: exemplar_filter + // FIXME: meter_configurator +}; + +} // 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_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/sum_aggregation_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sum_aggregation_configuration.h new file mode 100644 index 0000000000..b6907db69c --- /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 "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/aggregation_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: sum +class SumAggregationConfiguration : public AggregationConfiguration +{ +public: + void Accept(AggregationConfigurationVisitor *visitor) const override { visitor->VisitSum(this); } +}; + +} // 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 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_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h new file mode 100644 index 0000000000..7fa632c663 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/view_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/view_selector_configuration.h" +#include "opentelemetry/sdk/configuration/view_stream_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: View +class ViewConfiguration +{ +public: + std::unique_ptr selector; + std::unique_ptr stream; +}; + +} // 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 new file mode 100644 index 0000000000..7c47bdd1d3 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/view_selector_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/sdk/configuration/instrument_type.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ViewSelector +class ViewSelectorConfiguration +{ +public: + std::string instrument_name; + InstrumentType instrument_type{InstrumentType::counter}; + 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/view_stream_configuration.h b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h new file mode 100644 index 0000000000..006c83d460 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/view_stream_configuration.h @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/sdk/configuration/aggregation_configuration.h" +#include "opentelemetry/sdk/configuration/include_exclude_configuration.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/meter_provider.json +// YAML-NODE: ViewStream +class ViewStreamConfiguration +{ +public: + std::string name; + std::string description; + std::unique_ptr aggregation; + std::size_t aggregation_cardinality_limit; + std::unique_ptr attribute_keys; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE