From fa52139fc01922ab1e81d4d186c4fe5a46f944a7 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Sun, 13 Mar 2022 20:15:35 +0000 Subject: [PATCH 1/9] metrics examplar --- .github/workflows/ci.yml | 4 +- api/include/opentelemetry/metrics/noop.h | 21 ++++-- .../opentelemetry/metrics/sync_instruments.h | 64 +++++++++++-------- api/test/metrics/noop_sync_instrument_test.cc | 19 +++--- .../metrics/examplar/always_sample_filter.h | 42 ++++++++++++ .../opentelemetry/sdk/metrics/examplar/data.h | 44 +++++++++++++ .../sdk/metrics/examplar/filter.h | 39 +++++++++++ .../metrics/examplar/never_sample_filter.h | 42 ++++++++++++ .../metrics/examplar/no_examplar_reservoir.h | 53 +++++++++++++++ .../sdk/metrics/examplar/reservoir.h | 51 +++++++++++++++ .../sdk/metrics/measurement_processor.h | 37 ++++++----- .../sdk/metrics/state/metric_storage.h | 23 ++++--- .../sdk/metrics/state/multi_metric_storage.h | 26 ++++---- .../sdk/metrics/state/sync_metric_storage.h | 10 +-- .../sdk/metrics/sync_instruments.h | 32 ++++++---- .../sdk/metrics/view/attributes_processor.h | 2 - sdk/src/metrics/sync_instruments.cc | 54 +++++++++------- sdk/test/metrics/CMakeLists.txt | 2 + sdk/test/metrics/examplar/BUILD | 47 ++++++++++++++ sdk/test/metrics/examplar/CMakeLists.txt | 10 +++ .../examplar/always_sample_filter_test.cc | 19 ++++++ .../examplar/never_sample_filter_test.cc | 20 ++++++ .../examplar/no_examplar_reservoir_test.cc | 21 ++++++ sdk/test/metrics/multi_metric_storage_test.cc | 24 ++++--- sdk/test/metrics/sync_instruments_test.cc | 63 ++++++++++-------- sdk/test/metrics/sync_metric_storage_test.cc | 10 +-- 26 files changed, 622 insertions(+), 157 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h create mode 100644 sdk/include/opentelemetry/sdk/metrics/examplar/data.h create mode 100644 sdk/include/opentelemetry/sdk/metrics/examplar/filter.h create mode 100644 sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h create mode 100644 sdk/include/opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h create mode 100644 sdk/include/opentelemetry/sdk/metrics/examplar/reservoir.h create mode 100644 sdk/test/metrics/examplar/BUILD create mode 100644 sdk/test/metrics/examplar/CMakeLists.txt create mode 100644 sdk/test/metrics/examplar/always_sample_filter_test.cc create mode 100644 sdk/test/metrics/examplar/never_sample_filter_test.cc create mode 100644 sdk/test/metrics/examplar/no_examplar_reservoir_test.cc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0fd8f80838..71cd9af007 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [ main ] + branches: [ examplar ] pull_request: - branches: [ main ] + branches: [ examplar ] jobs: cmake_test: diff --git a/api/include/opentelemetry/metrics/noop.h b/api/include/opentelemetry/metrics/noop.h index 19b9443a7d..4bb1b32ec7 100644 --- a/api/include/opentelemetry/metrics/noop.h +++ b/api/include/opentelemetry/metrics/noop.h @@ -23,8 +23,11 @@ class NoopCounter : public Counter nostd::string_view description, nostd::string_view unit) noexcept {} - void Add(T value) noexcept override {} - void Add(T value, const common::KeyValueIterable &attributes) noexcept override {} + void Add(T value, const opentelemetry::context::Context &context) noexcept override {} + void Add(T value, + const common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override + {} }; template @@ -35,8 +38,11 @@ class NoopHistogram : public Histogram nostd::string_view description, nostd::string_view unit) noexcept {} - void Record(T value) noexcept override {} - void Record(T value, const common::KeyValueIterable &attributes) noexcept override {} + void Record(T value, const opentelemetry::context::Context &context) noexcept override {} + void Record(T value, + const common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override + {} }; template @@ -47,8 +53,11 @@ class NoopUpDownCounter : public UpDownCounter nostd::string_view description, nostd::string_view unit) noexcept {} - void Add(T value) noexcept override {} - void Add(T value, const common::KeyValueIterable &attributes) noexcept override {} + void Add(T value, const opentelemetry::context::Context &context) noexcept override {} + void Add(T value, + const common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override + {} }; template diff --git a/api/include/opentelemetry/metrics/sync_instruments.h b/api/include/opentelemetry/metrics/sync_instruments.h index 35cb8621ab..75e7b9b018 100644 --- a/api/include/opentelemetry/metrics/sync_instruments.h +++ b/api/include/opentelemetry/metrics/sync_instruments.h @@ -6,6 +6,7 @@ # include "opentelemetry/common/attribute_value.h" # include "opentelemetry/common/key_value_iterable_view.h" +# include "opentelemetry/context/context.h" # include "opentelemetry/nostd/span.h" # include "opentelemetry/nostd/string_view.h" # include "opentelemetry/nostd/type_traits.h" @@ -27,7 +28,7 @@ class Counter : public SynchronousInstrument * * @param value The increment amount. MUST be non-negative. */ - virtual void Add(T value) noexcept = 0; + virtual void Add(T value, const opentelemetry::context::Context &context) noexcept = 0; /** * Add adds the value to the counter's sum. The attributes should contain @@ -38,21 +39,25 @@ class Counter : public SynchronousInstrument * @param attributes the set of attributes, as key-value pairs */ - virtual void Add(T value, const common::KeyValueIterable &attributes) noexcept = 0; + virtual void Add(T value, + const common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept = 0; template ::value> * = nullptr> - void Add(T value, const U &attributes) noexcept + void Add(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept { - this->Add(value, common::KeyValueIterableView{attributes}); + this->Add(value, common::KeyValueIterableView{attributes}, context); } void Add(T value, - std::initializer_list> - attributes) noexcept + std::initializer_list> attributes, + const opentelemetry::context::Context &context) noexcept { - this->Add(value, nostd::span>{ - attributes.begin(), attributes.end()}); + this->Add(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); } }; @@ -67,7 +72,7 @@ class Histogram : public SynchronousInstrument * * @param value The increment amount. May be positive, negative or zero. */ - virtual void Record(T value) noexcept = 0; + virtual void Record(T value, const opentelemetry::context::Context &context) noexcept = 0; /** * Records a value with a set of attributes. @@ -75,21 +80,26 @@ class Histogram : public SynchronousInstrument * @param value The increment amount. May be positive, negative or zero. * @param attributes A set of attributes to associate with the count. */ - virtual void Record(T value, const common::KeyValueIterable &attributes) noexcept = 0; + virtual void Record(T value, + const common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept = 0; template ::value> * = nullptr> - void Record(T value, const U &attributes) noexcept + void Record(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept { - this->Record(value, common::KeyValueIterableView{attributes}); + this->Record(value, common::KeyValueIterableView{attributes}, context); } - void Record(T value, - std::initializer_list> - attributes) noexcept + void Record( + T value, + std::initializer_list> attributes, + const opentelemetry::context::Context &context) noexcept { - this->Record(value, nostd::span>{ - attributes.begin(), attributes.end()}); + this->Record(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); } }; @@ -104,7 +114,7 @@ class UpDownCounter : public SynchronousInstrument * * @param value The amount of the measurement. */ - virtual void Add(T value) noexcept = 0; + virtual void Add(T value, const opentelemetry::context::Context &context) noexcept = 0; /** * Add a value with a set of attributes. @@ -112,21 +122,25 @@ class UpDownCounter : public SynchronousInstrument * @param value The increment amount. May be positive, negative or zero. * @param attributes A set of attributes to associate with the count. */ - virtual void Add(T value, const common::KeyValueIterable &attributes) noexcept = 0; + virtual void Add(T value, + const common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept = 0; template ::value> * = nullptr> - void Add(T value, const U &attributes) noexcept + void Add(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept { - this->Add(value, common::KeyValueIterableView{attributes}); + this->Add(value, common::KeyValueIterableView{attributes}, context); } void Add(T value, - std::initializer_list> - attributes) noexcept + std::initializer_list> attributes, + const opentelemetry::context::Context &context) noexcept { - this->Add(value, nostd::span>{ - attributes.begin(), attributes.end()}); + this->Add(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); } }; diff --git a/api/test/metrics/noop_sync_instrument_test.cc b/api/test/metrics/noop_sync_instrument_test.cc index 4597e79e8b..b911da8702 100644 --- a/api/test/metrics/noop_sync_instrument_test.cc +++ b/api/test/metrics/noop_sync_instrument_test.cc @@ -13,9 +13,9 @@ TEST(Counter, Add) new opentelemetry::metrics::NoopCounter("test", "none", "unitless")}; std::map labels = {{"k1", "v1"}}; - EXPECT_NO_THROW(counter->Add(10l, labels)); - EXPECT_NO_THROW(counter->Add(2l)); - EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}})); + EXPECT_NO_THROW(counter->Add(10l, labels, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(2l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}}, opentelemetry::context::Context{})); } TEST(histogram, Record) @@ -24,9 +24,10 @@ TEST(histogram, Record) new opentelemetry::metrics::NoopHistogram("test", "none", "unitless")}; std::map labels = {{"k1", "v1"}}; - EXPECT_NO_THROW(counter->Record(10l, labels)); - EXPECT_NO_THROW(counter->Record(2l)); - EXPECT_NO_THROW(counter->Record(10l, {{"k1", "1"}, {"k2", 2}})); + EXPECT_NO_THROW(counter->Record(10l, labels, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Record(2l, opentelemetry::context::Context{})); + EXPECT_NO_THROW( + counter->Record(10l, {{"k1", "1"}, {"k2", 2}}, opentelemetry::context::Context{})); } TEST(UpDownCountr, Record) @@ -35,9 +36,9 @@ TEST(UpDownCountr, Record) new opentelemetry::metrics::NoopUpDownCounter("test", "none", "unitless")}; std::map labels = {{"k1", "v1"}}; - EXPECT_NO_THROW(counter->Add(10l, labels)); - EXPECT_NO_THROW(counter->Add(2l)); - EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}})); + EXPECT_NO_THROW(counter->Add(10l, labels, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(2l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}}, opentelemetry::context::Context{})); } #endif \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h new file mode 100644 index 0000000000..ad1e54b56f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h @@ -0,0 +1,42 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once +#ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/sdk/metrics/examplar/filter.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ + +class AlwaysSampleFilter final : public ExemplarFilter +{ +public: + static nostd::shared_ptr GetAlwaysSampleFilter() + { + return nostd::shared_ptr{new AlwaysSampleFilter{}}; + } + + bool shouldSampleMeasurement(long value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept override + { + return true; + } + + bool shouldSampleMeasurement(double value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept override + { + return true; + } + +private: + explicit AlwaysSampleFilter() = default; +}; +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE +#endif diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/data.h b/sdk/include/opentelemetry/sdk/metrics/examplar/data.h new file mode 100644 index 0000000000..353f19f8f3 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/data.h @@ -0,0 +1,44 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once +#ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/context/context.h" +# include "opentelemetry/sdk/common/attribute_utils.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ +using MetricAttributes = opentelemetry::sdk::common::OrderedAttributeMap; +/** + * A sample input measurement. + * + * Exemplars also hold information about the environment when the measurement was recorded, for + * example the span and trace ID of the active span when the exemplar was recorded. + */ +class ExemplarData +{ +public: + /** + * The set of key/value pairs that were filtered out by the aggregator, but recorded alongside the + * original measurement. Only key/value pairs that were filtered out by the aggregator should be + * included + */ + MetricAttributes GetFilteredAttributes(); + + /** Returns the timestamp in nanos when measurement was collected. */ + long GetEpochNanos(); + + /** + * Returns the SpanContext associated with this exemplar. If the exemplar was not recorded + * inside a sampled trace, the Context will be invalid. + */ + opentelemetry::context::Context GetSpanContext(); +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE +#endif diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h b/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h new file mode 100644 index 0000000000..94ec021423 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h @@ -0,0 +1,39 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once +#ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/context/context.h" +# include "opentelemetry/sdk/common/attribute_utils.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ +using MetricAttributes = opentelemetry::sdk::common::OrderedAttributeMap; + +/** + * Exemplar filters are used to pre-filter measurements before attempting to store them in a + * reservoir. + */ +class ExemplarFilter +{ +public: + // Returns whether or not a reservoir should attempt to filter a measurement. + virtual bool shouldSampleMeasurement(long value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept = 0; + + // Returns whether or not a reservoir should attempt to filter a measurement. + virtual bool shouldSampleMeasurement(double value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept = 0; + + virtual ~ExemplarFilter() = default; +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE +#endif diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h new file mode 100644 index 0000000000..1463744137 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h @@ -0,0 +1,42 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once +#ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/sdk/metrics/examplar/filter.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ + +class NeverSampleFilter final : public ExemplarFilter +{ +public: + static nostd::shared_ptr GetNeverSampleFilter() + { + return nostd::shared_ptr{new NeverSampleFilter{}}; + } + + bool shouldSampleMeasurement(long value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept override + { + return false; + } + + bool shouldSampleMeasurement(double value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept override + { + return false; + } + +private: + explicit NeverSampleFilter() = default; +}; +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE +#endif diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h new file mode 100644 index 0000000000..03226a3359 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h @@ -0,0 +1,53 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once +#ifndef ENABLE_METRICS_PREVIEW +# include +# include "opentelemetry/context/context.h" +# include "opentelemetry/nostd/shared_ptr.h" +# include "opentelemetry/sdk/common/attribute_utils.h" +# include "opentelemetry/sdk/metrics/examplar/reservoir.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ +class NoExemplarReservoir final : public ExemplarReservoir +{ + +public: + static nostd::shared_ptr GetNoExemplarReservoir() + { + return nostd::shared_ptr{new NoExemplarReservoir{}}; + } + + void OfferMeasurement(long value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept override + { + // Stores nothing + } + + void OfferMeasurement(double value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept override + { + // Stores nothing. + } + + std::vector CollectAndReset( + const MetricAttributes &pointAttributes) noexcept override + { + return std::vector{}; + } + +private: + explicit NoExemplarReservoir() = default; +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE +#endif diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/examplar/reservoir.h new file mode 100644 index 0000000000..24c916a5e8 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/reservoir.h @@ -0,0 +1,51 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once +#ifndef ENABLE_METRICS_PREVIEW +# include +# include "opentelemetry/sdk/metrics/examplar/data.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ +/** + * An interface for an exemplar reservoir of samples. + * + *

This represents a reservoir for a specific "point" of metric data. + */ +class ExemplarReservoir +{ +public: + virtual ~ExemplarReservoir() = default; + + /** Offers a long measurement to be sampled. */ + virtual void OfferMeasurement(long value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept = 0; + + /** Offers a double measurement to be sampled. */ + virtual void OfferMeasurement(double value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) noexcept = 0; + + /** + * Builds vector of Exemplars for exporting from the current reservoir. + * + *

Additionally, clears the reservoir for the next sampling period. + * + * @param pointAttributes the Attributes associated with the metric point. + * ExemplarDatas should filter these out of their final data state. + * @return A vector of sampled exemplars for this point. Implementers are expected to + * filter out pointAttributes from the original recorded attributes. + */ + virtual std::vector CollectAndReset( + const MetricAttributes &pointAttributes) noexcept = 0; +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE +#endif diff --git a/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h b/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h index ffd47c5c92..0b8c35714c 100644 --- a/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h +++ b/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h @@ -25,15 +25,18 @@ static std::size_t MakeKey(const MetricReader &metric_reader) class MeasurementProcessor { public: - virtual void RecordLong(long value) noexcept = 0; + virtual void RecordLong(long value, const opentelemetry::context::Context &context) noexcept = 0; virtual void RecordLong(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept = 0; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept = 0; - virtual void RecordDouble(double value) noexcept = 0; + virtual void RecordDouble(double value, + const opentelemetry::context::Context &context) noexcept = 0; virtual void RecordDouble(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept = 0; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept = 0; virtual bool Collect(MetricReader &reader, AggregationTemporarily aggregation_temporarily, @@ -54,39 +57,41 @@ class DefaultMeasurementProcessor : public MeasurementProcessor return true; } - virtual void RecordLong(long value) noexcept override + virtual void RecordLong(long value, + const opentelemetry::context::Context &context) noexcept override { for (const auto &kv : metric_storages_) { - kv.second->RecordLong(value); + kv.second->RecordLong(value, context); } } - virtual void RecordLong( - long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + virtual void RecordLong(long value, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { for (const auto &kv : metric_storages_) { - kv.second->RecordLong(value, attributes); + kv.second->RecordLong(value, attributes, context); } } - virtual void RecordDouble(double value) noexcept override + virtual void RecordDouble(double value, + const opentelemetry::context::Context &context) noexcept override { for (const auto &kv : metric_storages_) { - kv.second->RecordDouble(value); + kv.second->RecordDouble(value, context); } } - virtual void RecordDouble( - double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + virtual void RecordDouble(double value, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { for (const auto &kv : metric_storages_) { - kv.second->RecordDouble(value, attributes); + kv.second->RecordDouble(value, attributes, context); } } diff --git a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h index fbff04c47f..63862b8834 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h @@ -4,6 +4,7 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/common/key_value_iterable_view.h" +# include "opentelemetry/context/context.h" # include "opentelemetry/sdk/metrics/data/metric_data.h" # include "opentelemetry/sdk/metrics/instruments.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -29,15 +30,18 @@ class MetricStorage class WritableMetricStorage { public: - virtual void RecordLong(long value) noexcept = 0; + virtual void RecordLong(long value, const opentelemetry::context::Context &context) noexcept = 0; virtual void RecordLong(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept = 0; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept = 0; - virtual void RecordDouble(double value) noexcept = 0; + virtual void RecordDouble(double value, + const opentelemetry::context::Context &context) noexcept = 0; virtual void RecordDouble(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept = 0; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept = 0; }; class NoopMetricStorage : public MetricStorage @@ -62,16 +66,19 @@ class NoopMetricStorage : public MetricStorage class NoopWritableMetricStorage : public WritableMetricStorage { public: - void RecordLong(long value) noexcept = 0; + void RecordLong(long value, const opentelemetry::context::Context &context) noexcept = 0; void RecordLong(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override {} - void RecordDouble(double value) noexcept override {} + void RecordDouble(double value, const opentelemetry::context::Context &context) noexcept override + {} void RecordDouble(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override {} }; diff --git a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h index d9a66f732a..ceeafa0406 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h @@ -20,39 +20,41 @@ class MultiMetricStorage : public WritableMetricStorage public: void AddStorage(std::shared_ptr storage) { storages_.push_back(storage); } - virtual void RecordLong(long value) noexcept override + virtual void RecordLong(long value, + const opentelemetry::context::Context &context) noexcept override { for (auto &s : storages_) { - s->RecordLong(value); + s->RecordLong(value, context); } } - virtual void RecordLong( - long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + virtual void RecordLong(long value, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { for (auto &s : storages_) { - s->RecordLong(value, attributes); + s->RecordLong(value, attributes, context); } } - virtual void RecordDouble(double value) noexcept override + virtual void RecordDouble(double value, + const opentelemetry::context::Context &context) noexcept override { for (auto &s : storages_) { - s->RecordDouble(value); + s->RecordDouble(value, context); } } - virtual void RecordDouble( - double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + virtual void RecordDouble(double value, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { for (auto &s : storages_) { - s->RecordDouble(value, attributes); + s->RecordDouble(value, attributes, context); } } diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index e3ee673339..15c9977038 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -39,7 +39,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage }; } - void RecordLong(long value) noexcept override + void RecordLong(long value, const opentelemetry::context::Context &context) noexcept override { if (instrument_descriptor_.value_type_ != InstrumentValueType::kLong) { @@ -49,7 +49,8 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage } void RecordLong(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { if (instrument_descriptor_.value_type_ != InstrumentValueType::kLong) { @@ -60,7 +61,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage attributes_hashmap_->GetOrSetDefault(attr, create_default_aggregation_)->Aggregate(value); } - void RecordDouble(double value) noexcept override + void RecordDouble(double value, const opentelemetry::context::Context &context) noexcept override { if (instrument_descriptor_.value_type_ != InstrumentValueType::kDouble) { @@ -71,7 +72,8 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage } void RecordDouble(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { if (instrument_descriptor_.value_type_ != InstrumentValueType::kDouble) { diff --git a/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h b/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h index aa0348f0b0..c4c2d1b6f8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h +++ b/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h @@ -35,9 +35,11 @@ class LongCounter : public Synchronous, public opentelemetry::metrics::Counter storage); - void Add(long value, const opentelemetry::common::KeyValueIterable &attributes) noexcept override; + void Add(long value, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override; - void Add(long value) noexcept override; + void Add(long value, const opentelemetry::context::Context &context) noexcept override; }; class DoubleCounter : public Synchronous, public opentelemetry::metrics::Counter @@ -48,9 +50,10 @@ class DoubleCounter : public Synchronous, public opentelemetry::metrics::Counter std::unique_ptr storage); void Add(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override; - void Add(double value) noexcept override; + void Add(double value, const opentelemetry::context::Context &context) noexcept override; }; class LongUpDownCounter : public Synchronous, public opentelemetry::metrics::UpDownCounter @@ -59,9 +62,11 @@ class LongUpDownCounter : public Synchronous, public opentelemetry::metrics::UpD LongUpDownCounter(InstrumentDescriptor instrument_descriptor, std::unique_ptr storage); - void Add(long value, const opentelemetry::common::KeyValueIterable &attributes) noexcept override; + void Add(long value, + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override; - void Add(long value) noexcept override; + void Add(long value, const opentelemetry::context::Context &context) noexcept override; }; class DoubleUpDownCounter : public Synchronous, public opentelemetry::metrics::UpDownCounter @@ -71,9 +76,10 @@ class DoubleUpDownCounter : public Synchronous, public opentelemetry::metrics::U std::unique_ptr storage); void Add(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override; - void Add(double value) noexcept override; + void Add(double value, const opentelemetry::context::Context &context) noexcept override; }; class LongHistogram : public Synchronous, public opentelemetry::metrics::Histogram @@ -83,9 +89,10 @@ class LongHistogram : public Synchronous, public opentelemetry::metrics::Histogr std::unique_ptr storage); void Record(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override; - void Record(long value) noexcept override; + void Record(long value, const opentelemetry::context::Context &context) noexcept override; }; class DoubleHistogram : public Synchronous, public opentelemetry::metrics::Histogram @@ -95,9 +102,10 @@ class DoubleHistogram : public Synchronous, public opentelemetry::metrics::Histo std::unique_ptr storage); void Record(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override; + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override; - void Record(double value) noexcept override; + void Record(double value, const opentelemetry::context::Context &context) noexcept override; }; } // namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h b/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h index d82607357f..fdc4e35c53 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h @@ -23,8 +23,6 @@ class AttributesProcessor // @returns The processed attributes virtual MetricAttributes process( const opentelemetry::common::KeyValueIterable &attributes) const noexcept = 0; - - virtual ~AttributesProcessor() = default; }; /** diff --git a/sdk/src/metrics/sync_instruments.cc b/sdk/src/metrics/sync_instruments.cc index 85e770a715..e43dcebf74 100644 --- a/sdk/src/metrics/sync_instruments.cc +++ b/sdk/src/metrics/sync_instruments.cc @@ -15,14 +15,15 @@ LongCounter::LongCounter(InstrumentDescriptor instrument_descriptor, {} void LongCounter::Add(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept { - return storage_->RecordLong(value, attributes); + return storage_->RecordLong(value, attributes, context); } -void LongCounter::Add(long value) noexcept +void LongCounter::Add(long value, const opentelemetry::context::Context &context) noexcept { - return storage_->RecordLong(value); + return storage_->RecordLong(value, context); } DoubleCounter::DoubleCounter(InstrumentDescriptor instrument_descriptor, @@ -31,14 +32,15 @@ DoubleCounter::DoubleCounter(InstrumentDescriptor instrument_descriptor, {} void DoubleCounter::Add(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept { - return storage_->RecordDouble(value, attributes); + return storage_->RecordDouble(value, attributes, context); } -void DoubleCounter::Add(double value) noexcept +void DoubleCounter::Add(double value, const opentelemetry::context::Context &context) noexcept { - return storage_->RecordDouble(value); + return storage_->RecordDouble(value, context); } LongUpDownCounter::LongUpDownCounter(InstrumentDescriptor instrument_descriptor, @@ -47,14 +49,15 @@ LongUpDownCounter::LongUpDownCounter(InstrumentDescriptor instrument_descriptor, {} void LongUpDownCounter::Add(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept { - return storage_->RecordLong(value, attributes); + return storage_->RecordLong(value, attributes, context); } -void LongUpDownCounter::Add(long value) noexcept +void LongUpDownCounter::Add(long value, const opentelemetry::context::Context &context) noexcept { - return storage_->RecordLong(value); + return storage_->RecordLong(value, context); } DoubleUpDownCounter::DoubleUpDownCounter(InstrumentDescriptor instrument_descriptor, @@ -63,14 +66,15 @@ DoubleUpDownCounter::DoubleUpDownCounter(InstrumentDescriptor instrument_descrip {} void DoubleUpDownCounter::Add(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept { - return storage_->RecordDouble(value, attributes); + return storage_->RecordDouble(value, attributes, context); } -void DoubleUpDownCounter::Add(double value) noexcept +void DoubleUpDownCounter::Add(double value, const opentelemetry::context::Context &context) noexcept { - return storage_->RecordDouble(value); + return storage_->RecordDouble(value, context); } LongHistogram::LongHistogram(InstrumentDescriptor instrument_descriptor, @@ -79,14 +83,15 @@ LongHistogram::LongHistogram(InstrumentDescriptor instrument_descriptor, {} void LongHistogram::Record(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept { - return storage_->RecordLong(value, attributes); + return storage_->RecordLong(value, attributes, context); } -void LongHistogram::Record(long value) noexcept +void LongHistogram::Record(long value, const opentelemetry::context::Context &context) noexcept { - return storage_->RecordLong(value); + return storage_->RecordLong(value, context); } DoubleHistogram::DoubleHistogram(InstrumentDescriptor instrument_descriptor, @@ -95,14 +100,15 @@ DoubleHistogram::DoubleHistogram(InstrumentDescriptor instrument_descriptor, {} void DoubleHistogram::Record(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept { - return storage_->RecordDouble(value, attributes); + return storage_->RecordDouble(value, attributes, context); } -void DoubleHistogram::Record(double value) noexcept +void DoubleHistogram::Record(double value, const opentelemetry::context::Context &context) noexcept { - return storage_->RecordDouble(value); + return storage_->RecordDouble(value, context); } } // namespace metrics diff --git a/sdk/test/metrics/CMakeLists.txt b/sdk/test/metrics/CMakeLists.txt index a2080b6e46..308b06596c 100644 --- a/sdk/test/metrics/CMakeLists.txt +++ b/sdk/test/metrics/CMakeLists.txt @@ -28,3 +28,5 @@ target_link_libraries(attributes_processor_benchmark benchmark::benchmark add_executable(attributes_hashmap_benchmark attributes_hashmap_benchmark.cc) target_link_libraries(attributes_hashmap_benchmark benchmark::benchmark ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common) + +add_subdirectory(examplar) diff --git a/sdk/test/metrics/examplar/BUILD b/sdk/test/metrics/examplar/BUILD new file mode 100644 index 0000000000..d2a43a209f --- /dev/null +++ b/sdk/test/metrics/examplar/BUILD @@ -0,0 +1,47 @@ +cc_test( + name = "no_examplar_reservoir_test", + srcs = [ + "no_examplar_reservoir_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "//api", + "//sdk:headers", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "never_sample_filter_test", + srcs = [ + "never_sample_filter_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "//api", + "//sdk:headers", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "always_sample_filter_test", + srcs = [ + "always_sample_filter_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "//api", + "//sdk:headers", + "@com_google_googletest//:gtest_main", + ], +) diff --git a/sdk/test/metrics/examplar/CMakeLists.txt b/sdk/test/metrics/examplar/CMakeLists.txt new file mode 100644 index 0000000000..877015f06d --- /dev/null +++ b/sdk/test/metrics/examplar/CMakeLists.txt @@ -0,0 +1,10 @@ +foreach(testname no_examplar_reservoir_test never_sample_filter_test + always_sample_filter_test) + add_executable(${testname} "${testname}.cc") + target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} opentelemetry_metrics) + gtest_add_tests( + TARGET ${testname} + TEST_PREFIX metrics. + TEST_LIST ${testname}) +endforeach() diff --git a/sdk/test/metrics/examplar/always_sample_filter_test.cc b/sdk/test/metrics/examplar/always_sample_filter_test.cc new file mode 100644 index 0000000000..4407b9f37b --- /dev/null +++ b/sdk/test/metrics/examplar/always_sample_filter_test.cc @@ -0,0 +1,19 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/sdk/metrics/examplar/always_sample_filter.h" +# include + +using namespace opentelemetry::sdk::metrics; + +TEST(AlwaysSampleFilter, SampleMeasurement) +{ + auto filter = opentelemetry::sdk::metrics::AlwaysSampleFilter::GetAlwaysSampleFilter(); + ASSERT_TRUE( + filter->shouldSampleMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); + ASSERT_TRUE( + filter->shouldSampleMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); +} + +#endif diff --git a/sdk/test/metrics/examplar/never_sample_filter_test.cc b/sdk/test/metrics/examplar/never_sample_filter_test.cc new file mode 100644 index 0000000000..4ed6e46423 --- /dev/null +++ b/sdk/test/metrics/examplar/never_sample_filter_test.cc @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/context/context.h" +#ifndef ENABLE_METRICS_PREVIEW +# include +# include "opentelemetry/sdk/metrics/examplar/never_sample_filter.h" + +using namespace opentelemetry::sdk::metrics; + +TEST(NeverSampleFilter, SampleMeasurement) +{ + auto filter = opentelemetry::sdk::metrics::NeverSampleFilter::GetNeverSampleFilter(); + ASSERT_FALSE( + filter->shouldSampleMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); + ASSERT_FALSE( + filter->shouldSampleMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); +} + +#endif diff --git a/sdk/test/metrics/examplar/no_examplar_reservoir_test.cc b/sdk/test/metrics/examplar/no_examplar_reservoir_test.cc new file mode 100644 index 0000000000..5295cdb69f --- /dev/null +++ b/sdk/test/metrics/examplar/no_examplar_reservoir_test.cc @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" +# include + +using namespace opentelemetry::sdk::metrics; + +TEST(NoExemplarReservoir, OfferMeasurement) +{ + auto reservoir = opentelemetry::sdk::metrics::NoExemplarReservoir::GetNoExemplarReservoir(); + EXPECT_NO_THROW( + reservoir->OfferMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); + EXPECT_NO_THROW( + reservoir->OfferMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); + auto examplar_data = reservoir->CollectAndReset(MetricAttributes{}); + ASSERT_TRUE(examplar_data.empty()); +} + +#endif diff --git a/sdk/test/metrics/multi_metric_storage_test.cc b/sdk/test/metrics/multi_metric_storage_test.cc index 6696c7bb0a..7e93d61121 100644 --- a/sdk/test/metrics/multi_metric_storage_test.cc +++ b/sdk/test/metrics/multi_metric_storage_test.cc @@ -15,18 +15,26 @@ using namespace opentelemetry::sdk::metrics; class TestMetricStorage : public WritableMetricStorage { public: - void RecordLong(long value) noexcept override { num_calls_long++; } + void RecordLong(long value, const opentelemetry::context::Context &context) noexcept override + { + num_calls_long++; + } void RecordLong(long value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { num_calls_long++; } - void RecordDouble(double value) noexcept override { num_calls_double++; } + void RecordDouble(double value, const opentelemetry::context::Context &context) noexcept override + { + num_calls_double++; + } void RecordDouble(double value, - const opentelemetry::common::KeyValueIterable &attributes) noexcept override + const opentelemetry::common::KeyValueIterable &attributes, + const opentelemetry::context::Context &context) noexcept override { num_calls_double++; } @@ -41,11 +49,11 @@ TEST(MultiMetricStorageTest, BasicTests) new TestMetricStorage()); MultiMetricStorage storages; storages.AddStorage(storage); - EXPECT_NO_THROW(storages.RecordLong(10l)); - EXPECT_NO_THROW(storages.RecordLong(20l)); + EXPECT_NO_THROW(storages.RecordLong(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(storages.RecordLong(20l, opentelemetry::context::Context{})); - EXPECT_NO_THROW(storages.RecordDouble(10.0)); - EXPECT_NO_THROW(storages.RecordLong(30l)); + EXPECT_NO_THROW(storages.RecordDouble(10.0, opentelemetry::context::Context{})); + EXPECT_NO_THROW(storages.RecordLong(30l, opentelemetry::context::Context{})); EXPECT_EQ(static_cast(storage.get())->num_calls_long, 3); EXPECT_EQ(static_cast(storage.get())->num_calls_double, 1); diff --git a/sdk/test/metrics/sync_instruments_test.cc b/sdk/test/metrics/sync_instruments_test.cc index 27af8711d1..472bfcb47d 100644 --- a/sdk/test/metrics/sync_instruments_test.cc +++ b/sdk/test/metrics/sync_instruments_test.cc @@ -1,10 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include "opentelemetry/context/context.h" #ifndef ENABLE_METRICS_PREVIEW -# include "opentelemetry/sdk/metrics/sync_instruments.h" # include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" +# include "opentelemetry/sdk/metrics/sync_instruments.h" # include @@ -22,12 +23,14 @@ TEST(SyncInstruments, LongCounter) "long_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kLong}; std::unique_ptr metric_storage(new MultiMetricStorage()); LongCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10l)); - EXPECT_NO_THROW(counter.Add(10l)); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add( - 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); - EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}))); + 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), + opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}), + opentelemetry::context::Context{})); } TEST(SyncInstruments, DoubleCounter) @@ -36,12 +39,14 @@ TEST(SyncInstruments, DoubleCounter) "double_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kDouble}; std::unique_ptr metric_storage(new MultiMetricStorage()); DoubleCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10.10)); - EXPECT_NO_THROW(counter.Add(10.10)); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add( - 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); - EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}))); + 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), + opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}), + opentelemetry::context::Context{})); } TEST(SyncInstruments, LongUpDownCounter) @@ -51,12 +56,14 @@ TEST(SyncInstruments, LongUpDownCounter) InstrumentValueType::kLong}; std::unique_ptr metric_storage(new MultiMetricStorage()); LongUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10l)); - EXPECT_NO_THROW(counter.Add(10l)); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add( - 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); - EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}))); + 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), + opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}), + opentelemetry::context::Context{})); } TEST(SyncInstruments, DoubleUpDownCounter) @@ -66,12 +73,14 @@ TEST(SyncInstruments, DoubleUpDownCounter) InstrumentValueType::kDouble}; std::unique_ptr metric_storage(new MultiMetricStorage()); DoubleUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10.10)); - EXPECT_NO_THROW(counter.Add(10.10)); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add( - 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); - EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}))); + 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), + opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}), + opentelemetry::context::Context{})); } TEST(SyncInstruments, LongHistogram) @@ -80,12 +89,14 @@ TEST(SyncInstruments, LongHistogram) "long_histogram", "description", "1", InstrumentType::kHistogram, InstrumentValueType::kLong}; std::unique_ptr metric_storage(new MultiMetricStorage()); LongHistogram counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Record(10l)); - EXPECT_NO_THROW(counter.Record(10l)); + EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record( - 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); - EXPECT_NO_THROW(counter.Record(10l, opentelemetry::common::KeyValueIterableView({}))); + 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), + opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Record(10l, opentelemetry::common::KeyValueIterableView({}), + opentelemetry::context::Context{})); } TEST(SyncInstruments, DoubleHistogram) @@ -95,12 +106,14 @@ TEST(SyncInstruments, DoubleHistogram) InstrumentValueType::kDouble}; std::unique_ptr metric_storage(new MultiMetricStorage()); DoubleHistogram counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Record(10.10)); - EXPECT_NO_THROW(counter.Record(10.10)); + EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record( - 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); - EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::common::KeyValueIterableView({}))); + 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), + opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::common::KeyValueIterableView({}), + opentelemetry::context::Context{})); } #endif \ No newline at end of file diff --git a/sdk/test/metrics/sync_metric_storage_test.cc b/sdk/test/metrics/sync_metric_storage_test.cc index 23ef20b11d..e1cdff76f7 100644 --- a/sdk/test/metrics/sync_metric_storage_test.cc +++ b/sdk/test/metrics/sync_metric_storage_test.cc @@ -20,11 +20,13 @@ TEST(WritableMetricStorageTest, BasicTests) opentelemetry::sdk::metrics::SyncMetricStorage storage(instr_desc, AggregationType::kSum, new DefaultAttributesProcessor()); - EXPECT_NO_THROW(storage.RecordLong(10l)); - EXPECT_NO_THROW(storage.RecordDouble(10.10)); + EXPECT_NO_THROW(storage.RecordLong(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(storage.RecordDouble(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(storage.RecordLong( - 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); + 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), + opentelemetry::context::Context{})); - EXPECT_NO_THROW(storage.RecordDouble(10.10, opentelemetry::common::KeyValueIterableView({}))); + EXPECT_NO_THROW(storage.RecordDouble(10.10, opentelemetry::common::KeyValueIterableView({}), + opentelemetry::context::Context{})); } #endif From f8b4b2cedb150f5b124dae85c4ca05dfa74172a5 Mon Sep 17 00:00:00 2001 From: Ehsan Saei <71217171+esigo@users.noreply.github.com> Date: Sun, 13 Mar 2022 21:18:28 +0100 Subject: [PATCH 2/9] CI branch --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 71cd9af007..0fd8f80838 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [ examplar ] + branches: [ main ] pull_request: - branches: [ examplar ] + branches: [ main ] jobs: cmake_test: From d41d5bd6faec3964ddba1145aa19e1a4afd13ae4 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Fri, 18 Mar 2022 18:52:19 +0000 Subject: [PATCH 3/9] format --- .../sdk/metrics/measurement_processor.h | 5 ++++- .../sdk/metrics/state/metric_storage.h | 2 +- .../sdk/metrics/state/multi_metric_storage.h | 10 ++++++++++ .../sdk/metrics/state/sync_metric_storage.h | 13 +++++++++++-- sdk/src/metrics/meter.cc | 7 +++++-- sdk/test/metrics/multi_metric_storage_test.cc | 3 ++- sdk/test/metrics/sync_metric_storage_test.cc | 6 ++++-- 7 files changed, 37 insertions(+), 9 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h b/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h index 0b8c35714c..fd9dea6bff 100644 --- a/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h +++ b/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h @@ -2,10 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 #pragma once +#include #ifndef ENABLE_METRICS_PREVIEW # include # include "opentelemetry/common/key_value_iterable_view.h" +# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include "opentelemetry/sdk/metrics/metric_reader.h" # include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -53,7 +55,8 @@ class DefaultMeasurementProcessor : public MeasurementProcessor InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, InstrumentValueType::kLong}; metric_storages_[MakeKey(reader)] = std::unique_ptr( - new SyncMetricStorage(instr_desc, AggregationType::kSum, new DefaultAttributesProcessor())); + new SyncMetricStorage(instr_desc, AggregationType::kSum, new DefaultAttributesProcessor(), + NoExemplarReservoir::GetNoExemplarReservoir())); return true; } diff --git a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h index 87ea223ff4..20f7d56140 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h @@ -4,8 +4,8 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/common/key_value_iterable_view.h" -# include "opentelemetry/context/context.h" # include "opentelemetry/common/timestamp.h" +# include "opentelemetry/context/context.h" # include "opentelemetry/sdk/metrics/data/metric_data.h" # include "opentelemetry/sdk/metrics/instruments.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h index ceeafa0406..9dc7998511 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h @@ -4,6 +4,7 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/common/key_value_iterable_view.h" +# include "opentelemetry/sdk/metrics/examplar/reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include "opentelemetry/sdk/metrics/state/metric_storage.h" @@ -18,11 +19,16 @@ namespace metrics class MultiMetricStorage : public WritableMetricStorage { public: + MultiMetricStorage(nostd::shared_ptr exemplar_reservoir) + : exemplar_reservoir_(exemplar_reservoir) + {} + void AddStorage(std::shared_ptr storage) { storages_.push_back(storage); } virtual void RecordLong(long value, const opentelemetry::context::Context &context) noexcept override { + exemplar_reservoir_->OfferMeasurement(value, {}, context); for (auto &s : storages_) { s->RecordLong(value, context); @@ -33,6 +39,7 @@ class MultiMetricStorage : public WritableMetricStorage const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override { + exemplar_reservoir_->OfferMeasurement(value, attributes, context); for (auto &s : storages_) { s->RecordLong(value, attributes, context); @@ -42,6 +49,7 @@ class MultiMetricStorage : public WritableMetricStorage virtual void RecordDouble(double value, const opentelemetry::context::Context &context) noexcept override { + exemplar_reservoir_->OfferMeasurement(value, {}, context); for (auto &s : storages_) { s->RecordDouble(value, context); @@ -52,6 +60,7 @@ class MultiMetricStorage : public WritableMetricStorage const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override { + exemplar_reservoir_->OfferMeasurement(value, attributes, context); for (auto &s : storages_) { s->RecordDouble(value, attributes, context); @@ -60,6 +69,7 @@ class MultiMetricStorage : public WritableMetricStorage private: std::vector> storages_; + nostd::shared_ptr exemplar_reservoir_; }; } // namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index 4a507d6a58..6bf5dbb32b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -7,6 +7,7 @@ # include "opentelemetry/sdk/common/attributemap_hash.h" # include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" # include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" +# include "opentelemetry/sdk/metrics/examplar/reservoir.h" # include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" # include "opentelemetry/sdk/metrics/state/metric_storage.h" # include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -27,11 +28,13 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage public: SyncMetricStorage(InstrumentDescriptor instrument_descriptor, const AggregationType aggregation_type, - const AttributesProcessor *attributes_processor) + const AttributesProcessor *attributes_processor, + nostd::shared_ptr &&exemplar_reservoir) : instrument_descriptor_(instrument_descriptor), aggregation_type_{aggregation_type}, attributes_hashmap_(new AttributesHashMap()), - attributes_processor_{attributes_processor} + attributes_processor_{attributes_processor}, + exemplar_reservoir_(exemplar_reservoir) { create_default_aggregation_ = [&]() -> std::unique_ptr { return std::move( @@ -45,6 +48,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage { return; } + exemplar_reservoir_->OfferMeasurement(value, {}, context); attributes_hashmap_->GetOrSetDefault({}, create_default_aggregation_)->Aggregate(value); } @@ -57,6 +61,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage return; } + exemplar_reservoir_->OfferMeasurement(value, attributes, context); auto attr = attributes_processor_->process(attributes); attributes_hashmap_->GetOrSetDefault(attr, create_default_aggregation_)->Aggregate(value); } @@ -68,6 +73,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage return; } + exemplar_reservoir_->OfferMeasurement(value, {}, context); attributes_hashmap_->GetOrSetDefault({}, create_default_aggregation_)->Aggregate(value); } @@ -75,11 +81,13 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override { + exemplar_reservoir_->OfferMeasurement(value, attributes, context); if (instrument_descriptor_.value_type_ != InstrumentValueType::kDouble) { return; } + exemplar_reservoir_->OfferMeasurement(value, attributes, context); auto attr = attributes_processor_->process(attributes); attributes_hashmap_->GetOrSetDefault(attr, create_default_aggregation_)->Aggregate(value); } @@ -104,6 +112,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage std::unique_ptr attributes_hashmap_; const AttributesProcessor *attributes_processor_; std::function()> create_default_aggregation_; + nostd::shared_ptr exemplar_reservoir_; }; } // namespace metrics diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 360630e786..4daf55642a 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -6,6 +6,7 @@ # include "opentelemetry/metrics/noop.h" # include "opentelemetry/nostd/shared_ptr.h" # include "opentelemetry/sdk/metrics/async_instruments.h" +# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" # include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" # include "opentelemetry/sdk/metrics/sync_instruments.h" @@ -183,7 +184,8 @@ std::unique_ptr Meter::RegisterMetricStorage( InstrumentDescriptor &instrument_descriptor) { auto view_registry = meter_context_->GetViewRegistry(); - std::unique_ptr storages(new MultiMetricStorage()); + std::unique_ptr storages( + new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); auto success = view_registry->FindViews( instrument_descriptor, *instrumentation_library_, @@ -192,7 +194,8 @@ std::unique_ptr Meter::RegisterMetricStorage( view_instr_desc.name_ = view.GetName(); view_instr_desc.description_ = view.GetDescription(); auto storage = std::shared_ptr(new SyncMetricStorage( - view_instr_desc, view.GetAggregationType(), &view.GetAttributesProcessor())); + view_instr_desc, view.GetAggregationType(), &view.GetAttributesProcessor(), + NoExemplarReservoir::GetNoExemplarReservoir())); storage_registry_[instrument_descriptor.name_] = storage; auto multi_storage = static_cast(storages.get()); multi_storage->AddStorage(storage); diff --git a/sdk/test/metrics/multi_metric_storage_test.cc b/sdk/test/metrics/multi_metric_storage_test.cc index 7e93d61121..c0b2421292 100644 --- a/sdk/test/metrics/multi_metric_storage_test.cc +++ b/sdk/test/metrics/multi_metric_storage_test.cc @@ -4,6 +4,7 @@ #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" # include "opentelemetry/common/key_value_iterable_view.h" +# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include @@ -47,7 +48,7 @@ TEST(MultiMetricStorageTest, BasicTests) { std::shared_ptr storage( new TestMetricStorage()); - MultiMetricStorage storages; + MultiMetricStorage storages{NoExemplarReservoir::GetNoExemplarReservoir()}; storages.AddStorage(storage); EXPECT_NO_THROW(storages.RecordLong(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(storages.RecordLong(20l, opentelemetry::context::Context{})); diff --git a/sdk/test/metrics/sync_metric_storage_test.cc b/sdk/test/metrics/sync_metric_storage_test.cc index e1cdff76f7..4b447b6c87 100644 --- a/sdk/test/metrics/sync_metric_storage_test.cc +++ b/sdk/test/metrics/sync_metric_storage_test.cc @@ -4,6 +4,7 @@ #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" # include "opentelemetry/common/key_value_iterable_view.h" +# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -18,8 +19,9 @@ TEST(WritableMetricStorageTest, BasicTests) InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, InstrumentValueType::kLong}; - opentelemetry::sdk::metrics::SyncMetricStorage storage(instr_desc, AggregationType::kSum, - new DefaultAttributesProcessor()); + opentelemetry::sdk::metrics::SyncMetricStorage storage( + instr_desc, AggregationType::kSum, new DefaultAttributesProcessor(), + NoExemplarReservoir::GetNoExemplarReservoir()); EXPECT_NO_THROW(storage.RecordLong(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(storage.RecordDouble(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(storage.RecordLong( From 4dbf6e1dbb8fee6cb0f2b5aca844d1e81bb06a35 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Fri, 18 Mar 2022 19:05:05 +0000 Subject: [PATCH 4/9] fix CI --- sdk/test/metrics/sync_instruments_test.cc | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/sdk/test/metrics/sync_instruments_test.cc b/sdk/test/metrics/sync_instruments_test.cc index 472bfcb47d..69d1759607 100644 --- a/sdk/test/metrics/sync_instruments_test.cc +++ b/sdk/test/metrics/sync_instruments_test.cc @@ -4,6 +4,7 @@ #include "opentelemetry/context/context.h" #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" +# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" # include "opentelemetry/sdk/metrics/sync_instruments.h" @@ -21,7 +22,8 @@ TEST(SyncInstruments, LongCounter) { InstrumentDescriptor instrument_descriptor = { "long_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kLong}; - std::unique_ptr metric_storage(new MultiMetricStorage()); + std::unique_ptr metric_storage( + NoExemplarReservoir::GetNoExemplarReservoir()); LongCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); @@ -37,7 +39,8 @@ TEST(SyncInstruments, DoubleCounter) { InstrumentDescriptor instrument_descriptor = { "double_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kDouble}; - std::unique_ptr metric_storage(new MultiMetricStorage()); + std::unique_ptr metric_storage( + NoExemplarReservoir::GetNoExemplarReservoir()); DoubleCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); @@ -54,7 +57,8 @@ TEST(SyncInstruments, LongUpDownCounter) InstrumentDescriptor instrument_descriptor = {"long_updowncounter", "description", "1", InstrumentType::kUpDownCounter, InstrumentValueType::kLong}; - std::unique_ptr metric_storage(new MultiMetricStorage()); + std::unique_ptr metric_storage( + NoExemplarReservoir::GetNoExemplarReservoir()); LongUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); @@ -71,7 +75,8 @@ TEST(SyncInstruments, DoubleUpDownCounter) InstrumentDescriptor instrument_descriptor = {"double_updowncounter", "description", "1", InstrumentType::kUpDownCounter, InstrumentValueType::kDouble}; - std::unique_ptr metric_storage(new MultiMetricStorage()); + std::unique_ptr metric_storage( + NoExemplarReservoir::GetNoExemplarReservoir()); DoubleUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); @@ -87,7 +92,8 @@ TEST(SyncInstruments, LongHistogram) { InstrumentDescriptor instrument_descriptor = { "long_histogram", "description", "1", InstrumentType::kHistogram, InstrumentValueType::kLong}; - std::unique_ptr metric_storage(new MultiMetricStorage()); + std::unique_ptr metric_storage( + NoExemplarReservoir::GetNoExemplarReservoir()); LongHistogram counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); @@ -104,7 +110,8 @@ TEST(SyncInstruments, DoubleHistogram) InstrumentDescriptor instrument_descriptor = {"double_histogram", "description", "1", InstrumentType::kHistogram, InstrumentValueType::kDouble}; - std::unique_ptr metric_storage(new MultiMetricStorage()); + std::unique_ptr metric_storage( + NoExemplarReservoir::GetNoExemplarReservoir()); DoubleHistogram counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); From c515b577a999891e3f450eb9991878c6c42a1f32 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Fri, 18 Mar 2022 19:25:22 +0000 Subject: [PATCH 5/9] fix CI --- sdk/test/metrics/sync_instruments_test.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/test/metrics/sync_instruments_test.cc b/sdk/test/metrics/sync_instruments_test.cc index 69d1759607..3d66ef6b71 100644 --- a/sdk/test/metrics/sync_instruments_test.cc +++ b/sdk/test/metrics/sync_instruments_test.cc @@ -23,7 +23,7 @@ TEST(SyncInstruments, LongCounter) InstrumentDescriptor instrument_descriptor = { "long_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kLong}; std::unique_ptr metric_storage( - NoExemplarReservoir::GetNoExemplarReservoir()); + new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); LongCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); @@ -40,7 +40,7 @@ TEST(SyncInstruments, DoubleCounter) InstrumentDescriptor instrument_descriptor = { "double_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kDouble}; std::unique_ptr metric_storage( - NoExemplarReservoir::GetNoExemplarReservoir()); + new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); DoubleCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); @@ -58,7 +58,7 @@ TEST(SyncInstruments, LongUpDownCounter) InstrumentType::kUpDownCounter, InstrumentValueType::kLong}; std::unique_ptr metric_storage( - NoExemplarReservoir::GetNoExemplarReservoir()); + new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); LongUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); @@ -76,7 +76,7 @@ TEST(SyncInstruments, DoubleUpDownCounter) InstrumentType::kUpDownCounter, InstrumentValueType::kDouble}; std::unique_ptr metric_storage( - NoExemplarReservoir::GetNoExemplarReservoir()); + new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); DoubleUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); @@ -93,7 +93,7 @@ TEST(SyncInstruments, LongHistogram) InstrumentDescriptor instrument_descriptor = { "long_histogram", "description", "1", InstrumentType::kHistogram, InstrumentValueType::kLong}; std::unique_ptr metric_storage( - NoExemplarReservoir::GetNoExemplarReservoir()); + new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); LongHistogram counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); @@ -111,7 +111,7 @@ TEST(SyncInstruments, DoubleHistogram) InstrumentType::kHistogram, InstrumentValueType::kDouble}; std::unique_ptr metric_storage( - NoExemplarReservoir::GetNoExemplarReservoir()); + new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); DoubleHistogram counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); From bda900d2ac0315c69c511c4171e64527f45c6172 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Mon, 21 Mar 2022 18:45:54 +0000 Subject: [PATCH 6/9] comments --- api/include/opentelemetry/metrics/noop.h | 4 ++ .../opentelemetry/metrics/sync_instruments.h | 46 ++++++++++++++++ .../metrics/examplar/always_sample_filter.h | 7 +-- .../sdk/metrics/examplar/filter.h | 4 +- .../metrics/examplar/never_sample_filter.h | 7 +-- .../sdk/metrics/sync_instruments.h | 10 ++++ sdk/src/metrics/sync_instruments.cc | 52 +++++++++++++++++++ .../examplar/always_sample_filter_test.cc | 4 +- .../examplar/never_sample_filter_test.cc | 4 +- 9 files changed, 126 insertions(+), 12 deletions(-) diff --git a/api/include/opentelemetry/metrics/noop.h b/api/include/opentelemetry/metrics/noop.h index 4bb1b32ec7..3332384ee2 100644 --- a/api/include/opentelemetry/metrics/noop.h +++ b/api/include/opentelemetry/metrics/noop.h @@ -23,7 +23,9 @@ class NoopCounter : public Counter nostd::string_view description, nostd::string_view unit) noexcept {} + void Add(T value) noexcept override {} void Add(T value, const opentelemetry::context::Context &context) noexcept override {} + void Add(T value, const common::KeyValueIterable &attributes) noexcept override {} void Add(T value, const common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override @@ -53,7 +55,9 @@ class NoopUpDownCounter : public UpDownCounter nostd::string_view description, nostd::string_view unit) noexcept {} + void Add(T value) noexcept override {} void Add(T value, const opentelemetry::context::Context &context) noexcept override {} + void Add(T value, const common::KeyValueIterable &attributes) noexcept override {} void Add(T value, const common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override diff --git a/api/include/opentelemetry/metrics/sync_instruments.h b/api/include/opentelemetry/metrics/sync_instruments.h index 75e7b9b018..e8239743a1 100644 --- a/api/include/opentelemetry/metrics/sync_instruments.h +++ b/api/include/opentelemetry/metrics/sync_instruments.h @@ -28,6 +28,8 @@ class Counter : public SynchronousInstrument * * @param value The increment amount. MUST be non-negative. */ + virtual void Add(T value) noexcept = 0; + virtual void Add(T value, const opentelemetry::context::Context &context) noexcept = 0; /** @@ -39,10 +41,20 @@ class Counter : public SynchronousInstrument * @param attributes the set of attributes, as key-value pairs */ + virtual void Add(T value, const common::KeyValueIterable &attributes) noexcept = 0; + virtual void Add(T value, const common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept = 0; + template ::value> * = nullptr> + void Add(T value, const U &attributes) noexcept + { + auto context = opentelemetry::context::Context{}; + this->Add(value, common::KeyValueIterableView{attributes}, context); + } + template ::value> * = nullptr> void Add(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept @@ -50,6 +62,17 @@ class Counter : public SynchronousInstrument this->Add(value, common::KeyValueIterableView{attributes}, context); } + void Add(T value, + std::initializer_list> + attributes) noexcept + { + auto context = opentelemetry::context::Context{}; + this->Add(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); + } + void Add(T value, std::initializer_list> attributes, const opentelemetry::context::Context &context) noexcept @@ -114,6 +137,8 @@ class UpDownCounter : public SynchronousInstrument * * @param value The amount of the measurement. */ + virtual void Add(T value) noexcept = 0; + virtual void Add(T value, const opentelemetry::context::Context &context) noexcept = 0; /** @@ -122,10 +147,20 @@ class UpDownCounter : public SynchronousInstrument * @param value The increment amount. May be positive, negative or zero. * @param attributes A set of attributes to associate with the count. */ + virtual void Add(T value, const common::KeyValueIterable &attributes) noexcept = 0; + virtual void Add(T value, const common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept = 0; + template ::value> * = nullptr> + void Add(T value, const U &attributes) noexcept + { + auto context = opentelemetry::context::Context{}; + this->Add(value, common::KeyValueIterableView{attributes}, context); + } + template ::value> * = nullptr> void Add(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept @@ -133,6 +168,17 @@ class UpDownCounter : public SynchronousInstrument this->Add(value, common::KeyValueIterableView{attributes}, context); } + void Add(T value, + std::initializer_list> + attributes) noexcept + { + auto context = opentelemetry::context::Context{}; + this->Add(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); + } + void Add(T value, std::initializer_list> attributes, const opentelemetry::context::Context &context) noexcept diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h index ad1e54b56f..4be24f3aff 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h @@ -16,17 +16,18 @@ class AlwaysSampleFilter final : public ExemplarFilter public: static nostd::shared_ptr GetAlwaysSampleFilter() { - return nostd::shared_ptr{new AlwaysSampleFilter{}}; + static nostd::shared_ptr alwaysSampleFilter{new AlwaysSampleFilter{}}; + return alwaysSampleFilter; } - bool shouldSampleMeasurement(long value, + bool ShouldSampleMeasurement(long value, const MetricAttributes &attributes, const opentelemetry::context::Context &context) noexcept override { return true; } - bool shouldSampleMeasurement(double value, + bool ShouldSampleMeasurement(double value, const MetricAttributes &attributes, const opentelemetry::context::Context &context) noexcept override { diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h b/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h index 94ec021423..4b512e1317 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h @@ -21,12 +21,12 @@ class ExemplarFilter { public: // Returns whether or not a reservoir should attempt to filter a measurement. - virtual bool shouldSampleMeasurement(long value, + virtual bool ShouldSampleMeasurement(long value, const MetricAttributes &attributes, const opentelemetry::context::Context &context) noexcept = 0; // Returns whether or not a reservoir should attempt to filter a measurement. - virtual bool shouldSampleMeasurement(double value, + virtual bool ShouldSampleMeasurement(double value, const MetricAttributes &attributes, const opentelemetry::context::Context &context) noexcept = 0; diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h index 1463744137..c1de7f4088 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h @@ -16,17 +16,18 @@ class NeverSampleFilter final : public ExemplarFilter public: static nostd::shared_ptr GetNeverSampleFilter() { - return nostd::shared_ptr{new NeverSampleFilter{}}; + nostd::shared_ptr neverSampleFilter{new NeverSampleFilter{}}; + return neverSampleFilter; } - bool shouldSampleMeasurement(long value, + bool ShouldSampleMeasurement(long value, const MetricAttributes &attributes, const opentelemetry::context::Context &context) noexcept override { return false; } - bool shouldSampleMeasurement(double value, + bool ShouldSampleMeasurement(double value, const MetricAttributes &attributes, const opentelemetry::context::Context &context) noexcept override { diff --git a/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h b/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h index 214b40f5af..f4c9bae323 100644 --- a/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h +++ b/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h @@ -38,10 +38,12 @@ class LongCounter : public Synchronous, public opentelemetry::metrics::Counter storage); + void Add(long value, const opentelemetry::common::KeyValueIterable &attributes) noexcept override; void Add(long value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override; + void Add(long value) noexcept override; void Add(long value, const opentelemetry::context::Context &context) noexcept override; }; @@ -52,10 +54,13 @@ class DoubleCounter : public Synchronous, public opentelemetry::metrics::Counter DoubleCounter(InstrumentDescriptor instrument_descriptor, std::unique_ptr storage); + void Add(double value, + const opentelemetry::common::KeyValueIterable &attributes) noexcept override; void Add(double value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override; + void Add(double value) noexcept override; void Add(double value, const opentelemetry::context::Context &context) noexcept override; }; @@ -65,10 +70,12 @@ class LongUpDownCounter : public Synchronous, public opentelemetry::metrics::UpD LongUpDownCounter(InstrumentDescriptor instrument_descriptor, std::unique_ptr storage); + void Add(long value, const opentelemetry::common::KeyValueIterable &attributes) noexcept override; void Add(long value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override; + void Add(long value) noexcept override; void Add(long value, const opentelemetry::context::Context &context) noexcept override; }; @@ -78,10 +85,13 @@ class DoubleUpDownCounter : public Synchronous, public opentelemetry::metrics::U DoubleUpDownCounter(InstrumentDescriptor instrument_descriptor, std::unique_ptr storage); + void Add(double value, + const opentelemetry::common::KeyValueIterable &attributes) noexcept override; void Add(double value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override; + void Add(double value) noexcept override; void Add(double value, const opentelemetry::context::Context &context) noexcept override; }; diff --git a/sdk/src/metrics/sync_instruments.cc b/sdk/src/metrics/sync_instruments.cc index 6cc60ac95a..5c94ae6f24 100644 --- a/sdk/src/metrics/sync_instruments.cc +++ b/sdk/src/metrics/sync_instruments.cc @@ -15,6 +15,13 @@ LongCounter::LongCounter(InstrumentDescriptor instrument_descriptor, : Synchronous(instrument_descriptor, std::move(storage)) {} +void LongCounter::Add(long value, + const opentelemetry::common::KeyValueIterable &attributes) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordLong(value, attributes, context); +} + void LongCounter::Add(long value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept @@ -22,6 +29,12 @@ void LongCounter::Add(long value, return storage_->RecordLong(value, attributes, context); } +void LongCounter::Add(long value) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordLong(value, context); +} + void LongCounter::Add(long value, const opentelemetry::context::Context &context) noexcept { return storage_->RecordLong(value, context); @@ -32,6 +45,13 @@ DoubleCounter::DoubleCounter(InstrumentDescriptor instrument_descriptor, : Synchronous(instrument_descriptor, std::move(storage)) {} +void DoubleCounter::Add(double value, + const opentelemetry::common::KeyValueIterable &attributes) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordDouble(value, attributes, context); +} + void DoubleCounter::Add(double value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept @@ -39,6 +59,12 @@ void DoubleCounter::Add(double value, return storage_->RecordDouble(value, attributes, context); } +void DoubleCounter::Add(double value) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordDouble(value, context); +} + void DoubleCounter::Add(double value, const opentelemetry::context::Context &context) noexcept { return storage_->RecordDouble(value, context); @@ -49,6 +75,13 @@ LongUpDownCounter::LongUpDownCounter(InstrumentDescriptor instrument_descriptor, : Synchronous(instrument_descriptor, std::move(storage)) {} +void LongUpDownCounter::Add(long value, + const opentelemetry::common::KeyValueIterable &attributes) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordLong(value, attributes, context); +} + void LongUpDownCounter::Add(long value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept @@ -56,6 +89,12 @@ void LongUpDownCounter::Add(long value, return storage_->RecordLong(value, attributes, context); } +void LongUpDownCounter::Add(long value) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordLong(value, context); +} + void LongUpDownCounter::Add(long value, const opentelemetry::context::Context &context) noexcept { return storage_->RecordLong(value, context); @@ -66,6 +105,13 @@ DoubleUpDownCounter::DoubleUpDownCounter(InstrumentDescriptor instrument_descrip : Synchronous(instrument_descriptor, std::move(storage)) {} +void DoubleUpDownCounter::Add(double value, + const opentelemetry::common::KeyValueIterable &attributes) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordDouble(value, attributes, context); +} + void DoubleUpDownCounter::Add(double value, const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept @@ -73,6 +119,12 @@ void DoubleUpDownCounter::Add(double value, return storage_->RecordDouble(value, attributes, context); } +void DoubleUpDownCounter::Add(double value) noexcept +{ + auto context = opentelemetry::context::Context{}; + return storage_->RecordDouble(value, context); +} + void DoubleUpDownCounter::Add(double value, const opentelemetry::context::Context &context) noexcept { return storage_->RecordDouble(value, context); diff --git a/sdk/test/metrics/examplar/always_sample_filter_test.cc b/sdk/test/metrics/examplar/always_sample_filter_test.cc index 4407b9f37b..3c2cff586f 100644 --- a/sdk/test/metrics/examplar/always_sample_filter_test.cc +++ b/sdk/test/metrics/examplar/always_sample_filter_test.cc @@ -11,9 +11,9 @@ TEST(AlwaysSampleFilter, SampleMeasurement) { auto filter = opentelemetry::sdk::metrics::AlwaysSampleFilter::GetAlwaysSampleFilter(); ASSERT_TRUE( - filter->shouldSampleMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); + filter->ShouldSampleMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); ASSERT_TRUE( - filter->shouldSampleMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); + filter->ShouldSampleMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); } #endif diff --git a/sdk/test/metrics/examplar/never_sample_filter_test.cc b/sdk/test/metrics/examplar/never_sample_filter_test.cc index 4ed6e46423..68a1ed94d1 100644 --- a/sdk/test/metrics/examplar/never_sample_filter_test.cc +++ b/sdk/test/metrics/examplar/never_sample_filter_test.cc @@ -12,9 +12,9 @@ TEST(NeverSampleFilter, SampleMeasurement) { auto filter = opentelemetry::sdk::metrics::NeverSampleFilter::GetNeverSampleFilter(); ASSERT_FALSE( - filter->shouldSampleMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); + filter->ShouldSampleMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); ASSERT_FALSE( - filter->shouldSampleMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); + filter->ShouldSampleMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); } #endif From e3349c849e406187476d6962f329f81943fdc19b Mon Sep 17 00:00:00 2001 From: Oblivion Date: Mon, 21 Mar 2022 19:19:46 +0000 Subject: [PATCH 7/9] sync_instrument bazel --- api/test/metrics/BUILD | 31 +++++++++++++++++++ api/test/metrics/noop_sync_instrument_test.cc | 6 ++++ sdk/test/metrics/BUILD | 16 ++++++++++ sdk/test/metrics/sync_instruments_test.cc | 24 ++++++++++---- 4 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 api/test/metrics/BUILD diff --git a/api/test/metrics/BUILD b/api/test/metrics/BUILD new file mode 100644 index 0000000000..d15d7511f4 --- /dev/null +++ b/api/test/metrics/BUILD @@ -0,0 +1,31 @@ +load("//bazel:otel_cc_benchmark.bzl", "otel_cc_benchmark") + +cc_test( + name = "noop_sync_instrument_test", + srcs = [ + "noop_sync_instrument_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "meter_provider_test", + srcs = [ + "meter_provider_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) diff --git a/api/test/metrics/noop_sync_instrument_test.cc b/api/test/metrics/noop_sync_instrument_test.cc index b911da8702..62be4f34ab 100644 --- a/api/test/metrics/noop_sync_instrument_test.cc +++ b/api/test/metrics/noop_sync_instrument_test.cc @@ -13,8 +13,11 @@ TEST(Counter, Add) new opentelemetry::metrics::NoopCounter("test", "none", "unitless")}; std::map labels = {{"k1", "v1"}}; + EXPECT_NO_THROW(counter->Add(10l, labels)); EXPECT_NO_THROW(counter->Add(10l, labels, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(2l)); EXPECT_NO_THROW(counter->Add(2l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}})); EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}}, opentelemetry::context::Context{})); } @@ -36,8 +39,11 @@ TEST(UpDownCountr, Record) new opentelemetry::metrics::NoopUpDownCounter("test", "none", "unitless")}; std::map labels = {{"k1", "v1"}}; + EXPECT_NO_THROW(counter->Add(10l, labels)); EXPECT_NO_THROW(counter->Add(10l, labels, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(2l)); EXPECT_NO_THROW(counter->Add(2l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}})); EXPECT_NO_THROW(counter->Add(10l, {{"k1", "1"}, {"k2", 2}}, opentelemetry::context::Context{})); } diff --git a/sdk/test/metrics/BUILD b/sdk/test/metrics/BUILD index 9ca191574f..819a8d225f 100644 --- a/sdk/test/metrics/BUILD +++ b/sdk/test/metrics/BUILD @@ -80,6 +80,22 @@ cc_test( ], ) +cc_test( + name = "sync_instruments_test", + srcs = [ + "sync_instruments_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "//sdk/src/metrics", + "//sdk/src/resource", + "@com_google_googletest//:gtest_main", + ], +) + cc_test( name = "async_metric_storage_test", srcs = [ diff --git a/sdk/test/metrics/sync_instruments_test.cc b/sdk/test/metrics/sync_instruments_test.cc index 3d66ef6b71..07a166d151 100644 --- a/sdk/test/metrics/sync_instruments_test.cc +++ b/sdk/test/metrics/sync_instruments_test.cc @@ -1,12 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/context/context.h" #ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/sdk/metrics/sync_instruments.h" +# include "opentelemetry/context/context.h" # include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" # include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" -# include "opentelemetry/sdk/metrics/sync_instruments.h" # include @@ -25,12 +25,15 @@ TEST(SyncInstruments, LongCounter) std::unique_ptr metric_storage( new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); LongCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add( + 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); EXPECT_NO_THROW(counter.Add( 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}))); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}), opentelemetry::context::Context{})); } @@ -42,12 +45,15 @@ TEST(SyncInstruments, DoubleCounter) std::unique_ptr metric_storage( new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); DoubleCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add( + 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); EXPECT_NO_THROW(counter.Add( 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}))); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}), opentelemetry::context::Context{})); } @@ -60,12 +66,15 @@ TEST(SyncInstruments, LongUpDownCounter) std::unique_ptr metric_storage( new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); LongUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add( + 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); EXPECT_NO_THROW(counter.Add( 10l, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}))); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::common::KeyValueIterableView({}), opentelemetry::context::Context{})); } @@ -78,14 +87,17 @@ TEST(SyncInstruments, DoubleUpDownCounter) std::unique_ptr metric_storage( new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); DoubleUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); - EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Add( 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}), opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add( + 10.10, opentelemetry::common::KeyValueIterableView({{"abc", "123"}, {"xyz", "456"}}))); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}), opentelemetry::context::Context{})); + EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::common::KeyValueIterableView({}))); } TEST(SyncInstruments, LongHistogram) From 1e5a47d077b320e93638eb4fb3624f727892aa84 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Tue, 22 Mar 2022 19:36:46 +0000 Subject: [PATCH 8/9] comments --- .../always_sample_filter.h | 2 +- .../sdk/metrics/{examplar => exemplar}/data.h | 3 ++- .../metrics/{examplar => exemplar}/filter.h | 0 .../never_sample_filter.h | 2 +- .../no_exemplar_reservoir.h} | 8 ++++--- .../{examplar => exemplar}/reservoir.h | 18 +++++++++------ .../sdk/metrics/measurement_processor.h | 2 +- .../sdk/metrics/state/multi_metric_storage.h | 10 --------- .../sdk/metrics/state/sync_metric_storage.h | 15 ++++++++----- sdk/src/metrics/meter.cc | 5 ++--- sdk/test/metrics/CMakeLists.txt | 2 +- sdk/test/metrics/examplar/BUILD | 4 ++-- sdk/test/metrics/examplar/CMakeLists.txt | 2 +- .../examplar/always_sample_filter_test.cc | 2 +- .../examplar/never_sample_filter_test.cc | 2 +- .../examplar/no_examplar_reservoir_test.cc | 21 ------------------ .../examplar/no_exemplar_reservoir_test.cc | 22 +++++++++++++++++++ sdk/test/metrics/multi_metric_storage_test.cc | 4 ++-- sdk/test/metrics/sync_instruments_test.cc | 20 ++++++----------- sdk/test/metrics/sync_metric_storage_test.cc | 2 +- 20 files changed, 70 insertions(+), 76 deletions(-) rename sdk/include/opentelemetry/sdk/metrics/{examplar => exemplar}/always_sample_filter.h (94%) rename sdk/include/opentelemetry/sdk/metrics/{examplar => exemplar}/data.h (92%) rename sdk/include/opentelemetry/sdk/metrics/{examplar => exemplar}/filter.h (100%) rename sdk/include/opentelemetry/sdk/metrics/{examplar => exemplar}/never_sample_filter.h (94%) rename sdk/include/opentelemetry/sdk/metrics/{examplar/no_examplar_reservoir.h => exemplar/no_exemplar_reservoir.h} (82%) rename sdk/include/opentelemetry/sdk/metrics/{examplar => exemplar}/reservoir.h (70%) delete mode 100644 sdk/test/metrics/examplar/no_examplar_reservoir_test.cc create mode 100644 sdk/test/metrics/examplar/no_exemplar_reservoir_test.cc diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h similarity index 94% rename from sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h rename to sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h index 4be24f3aff..5e7f0436eb 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/always_sample_filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h @@ -3,7 +3,7 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW -# include "opentelemetry/sdk/metrics/examplar/filter.h" +# include "opentelemetry/sdk/metrics/exemplar/filter.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/data.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/data.h similarity index 92% rename from sdk/include/opentelemetry/sdk/metrics/examplar/data.h rename to sdk/include/opentelemetry/sdk/metrics/exemplar/data.h index 353f19f8f3..14eac62499 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/data.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/data.h @@ -3,6 +3,7 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/common/timestamp.h" # include "opentelemetry/context/context.h" # include "opentelemetry/sdk/common/attribute_utils.h" @@ -29,7 +30,7 @@ class ExemplarData MetricAttributes GetFilteredAttributes(); /** Returns the timestamp in nanos when measurement was collected. */ - long GetEpochNanos(); + opentelemetry::common::SystemTimestamp GetEpochNanos(); /** * Returns the SpanContext associated with this exemplar. If the exemplar was not recorded diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h similarity index 100% rename from sdk/include/opentelemetry/sdk/metrics/examplar/filter.h rename to sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h similarity index 94% rename from sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h rename to sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h index c1de7f4088..38f51778ce 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/never_sample_filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h @@ -3,7 +3,7 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW -# include "opentelemetry/sdk/metrics/examplar/filter.h" +# include "opentelemetry/sdk/metrics/exemplar/filter.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h similarity index 82% rename from sdk/include/opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h rename to sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h index 03226a3359..1fe0586d28 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h @@ -7,7 +7,7 @@ # include "opentelemetry/context/context.h" # include "opentelemetry/nostd/shared_ptr.h" # include "opentelemetry/sdk/common/attribute_utils.h" -# include "opentelemetry/sdk/metrics/examplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -25,14 +25,16 @@ class NoExemplarReservoir final : public ExemplarReservoir void OfferMeasurement(long value, const MetricAttributes &attributes, - const opentelemetry::context::Context &context) noexcept override + const opentelemetry::context::Context &context, + const opentelemetry::common::SystemTimestamp ×tamp) noexcept override { // Stores nothing } void OfferMeasurement(double value, const MetricAttributes &attributes, - const opentelemetry::context::Context &context) noexcept override + const opentelemetry::context::Context &context, + const opentelemetry::common::SystemTimestamp ×tamp) noexcept override { // Stores nothing. } diff --git a/sdk/include/opentelemetry/sdk/metrics/examplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h similarity index 70% rename from sdk/include/opentelemetry/sdk/metrics/examplar/reservoir.h rename to sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h index 24c916a5e8..25e8421d6b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/examplar/reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h @@ -4,7 +4,7 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW # include -# include "opentelemetry/sdk/metrics/examplar/data.h" +# include "opentelemetry/sdk/metrics/exemplar/data.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -22,14 +22,18 @@ class ExemplarReservoir virtual ~ExemplarReservoir() = default; /** Offers a long measurement to be sampled. */ - virtual void OfferMeasurement(long value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context) noexcept = 0; + virtual void OfferMeasurement( + long value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context, + const opentelemetry::common::SystemTimestamp ×tamp) noexcept = 0; /** Offers a double measurement to be sampled. */ - virtual void OfferMeasurement(double value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context) noexcept = 0; + virtual void OfferMeasurement( + double value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context, + const opentelemetry::common::SystemTimestamp ×tamp) noexcept = 0; /** * Builds vector of Exemplars for exporting from the current reservoir. diff --git a/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h b/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h index fd9dea6bff..f3b998451b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h +++ b/sdk/include/opentelemetry/sdk/metrics/measurement_processor.h @@ -7,7 +7,7 @@ # include # include "opentelemetry/common/key_value_iterable_view.h" -# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include "opentelemetry/sdk/metrics/metric_reader.h" # include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h index 9dc7998511..ceeafa0406 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h @@ -4,7 +4,6 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/common/key_value_iterable_view.h" -# include "opentelemetry/sdk/metrics/examplar/reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include "opentelemetry/sdk/metrics/state/metric_storage.h" @@ -19,16 +18,11 @@ namespace metrics class MultiMetricStorage : public WritableMetricStorage { public: - MultiMetricStorage(nostd::shared_ptr exemplar_reservoir) - : exemplar_reservoir_(exemplar_reservoir) - {} - void AddStorage(std::shared_ptr storage) { storages_.push_back(storage); } virtual void RecordLong(long value, const opentelemetry::context::Context &context) noexcept override { - exemplar_reservoir_->OfferMeasurement(value, {}, context); for (auto &s : storages_) { s->RecordLong(value, context); @@ -39,7 +33,6 @@ class MultiMetricStorage : public WritableMetricStorage const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override { - exemplar_reservoir_->OfferMeasurement(value, attributes, context); for (auto &s : storages_) { s->RecordLong(value, attributes, context); @@ -49,7 +42,6 @@ class MultiMetricStorage : public WritableMetricStorage virtual void RecordDouble(double value, const opentelemetry::context::Context &context) noexcept override { - exemplar_reservoir_->OfferMeasurement(value, {}, context); for (auto &s : storages_) { s->RecordDouble(value, context); @@ -60,7 +52,6 @@ class MultiMetricStorage : public WritableMetricStorage const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override { - exemplar_reservoir_->OfferMeasurement(value, attributes, context); for (auto &s : storages_) { s->RecordDouble(value, attributes, context); @@ -69,7 +60,6 @@ class MultiMetricStorage : public WritableMetricStorage private: std::vector> storages_; - nostd::shared_ptr exemplar_reservoir_; }; } // namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index 6bf5dbb32b..bfe50b152d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -7,7 +7,7 @@ # include "opentelemetry/sdk/common/attributemap_hash.h" # include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" # include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" -# include "opentelemetry/sdk/metrics/examplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" # include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" # include "opentelemetry/sdk/metrics/state/metric_storage.h" # include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -48,7 +48,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage { return; } - exemplar_reservoir_->OfferMeasurement(value, {}, context); + exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); attributes_hashmap_->GetOrSetDefault({}, create_default_aggregation_)->Aggregate(value); } @@ -61,7 +61,8 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage return; } - exemplar_reservoir_->OfferMeasurement(value, attributes, context); + exemplar_reservoir_->OfferMeasurement(value, attributes, context, + std::chrono::system_clock::now()); auto attr = attributes_processor_->process(attributes); attributes_hashmap_->GetOrSetDefault(attr, create_default_aggregation_)->Aggregate(value); } @@ -73,7 +74,7 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage return; } - exemplar_reservoir_->OfferMeasurement(value, {}, context); + exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); attributes_hashmap_->GetOrSetDefault({}, create_default_aggregation_)->Aggregate(value); } @@ -81,13 +82,15 @@ class SyncMetricStorage : public MetricStorage, public WritableMetricStorage const opentelemetry::common::KeyValueIterable &attributes, const opentelemetry::context::Context &context) noexcept override { - exemplar_reservoir_->OfferMeasurement(value, attributes, context); + exemplar_reservoir_->OfferMeasurement(value, attributes, context, + std::chrono::system_clock::now()); if (instrument_descriptor_.value_type_ != InstrumentValueType::kDouble) { return; } - exemplar_reservoir_->OfferMeasurement(value, attributes, context); + exemplar_reservoir_->OfferMeasurement(value, attributes, context, + std::chrono::system_clock::now()); auto attr = attributes_processor_->process(attributes); attributes_hashmap_->GetOrSetDefault(attr, create_default_aggregation_)->Aggregate(value); } diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 4daf55642a..20e3b02768 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -6,7 +6,7 @@ # include "opentelemetry/metrics/noop.h" # include "opentelemetry/nostd/shared_ptr.h" # include "opentelemetry/sdk/metrics/async_instruments.h" -# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" # include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" # include "opentelemetry/sdk/metrics/sync_instruments.h" @@ -184,8 +184,7 @@ std::unique_ptr Meter::RegisterMetricStorage( InstrumentDescriptor &instrument_descriptor) { auto view_registry = meter_context_->GetViewRegistry(); - std::unique_ptr storages( - new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); + std::unique_ptr storages(new MultiMetricStorage()); auto success = view_registry->FindViews( instrument_descriptor, *instrumentation_library_, diff --git a/sdk/test/metrics/CMakeLists.txt b/sdk/test/metrics/CMakeLists.txt index 50f24277ec..fa1f22c73a 100644 --- a/sdk/test/metrics/CMakeLists.txt +++ b/sdk/test/metrics/CMakeLists.txt @@ -30,4 +30,4 @@ add_executable(attributes_hashmap_benchmark attributes_hashmap_benchmark.cc) target_link_libraries(attributes_hashmap_benchmark benchmark::benchmark ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common) -add_subdirectory(examplar) +add_subdirectory(exemplar) diff --git a/sdk/test/metrics/examplar/BUILD b/sdk/test/metrics/examplar/BUILD index d2a43a209f..6481f679d2 100644 --- a/sdk/test/metrics/examplar/BUILD +++ b/sdk/test/metrics/examplar/BUILD @@ -1,7 +1,7 @@ cc_test( - name = "no_examplar_reservoir_test", + name = "no_exemplar_reservoir_test", srcs = [ - "no_examplar_reservoir_test.cc", + "no_exemplar_reservoir_test.cc", ], tags = [ "metrics", diff --git a/sdk/test/metrics/examplar/CMakeLists.txt b/sdk/test/metrics/examplar/CMakeLists.txt index 877015f06d..303294761a 100644 --- a/sdk/test/metrics/examplar/CMakeLists.txt +++ b/sdk/test/metrics/examplar/CMakeLists.txt @@ -1,4 +1,4 @@ -foreach(testname no_examplar_reservoir_test never_sample_filter_test +foreach(testname no_exemplar_reservoir_test never_sample_filter_test always_sample_filter_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} diff --git a/sdk/test/metrics/examplar/always_sample_filter_test.cc b/sdk/test/metrics/examplar/always_sample_filter_test.cc index 3c2cff586f..cf4e449957 100644 --- a/sdk/test/metrics/examplar/always_sample_filter_test.cc +++ b/sdk/test/metrics/examplar/always_sample_filter_test.cc @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #ifndef ENABLE_METRICS_PREVIEW -# include "opentelemetry/sdk/metrics/examplar/always_sample_filter.h" +# include "opentelemetry/sdk/metrics/exemplar/always_sample_filter.h" # include using namespace opentelemetry::sdk::metrics; diff --git a/sdk/test/metrics/examplar/never_sample_filter_test.cc b/sdk/test/metrics/examplar/never_sample_filter_test.cc index 68a1ed94d1..930c572205 100644 --- a/sdk/test/metrics/examplar/never_sample_filter_test.cc +++ b/sdk/test/metrics/examplar/never_sample_filter_test.cc @@ -4,7 +4,7 @@ #include "opentelemetry/context/context.h" #ifndef ENABLE_METRICS_PREVIEW # include -# include "opentelemetry/sdk/metrics/examplar/never_sample_filter.h" +# include "opentelemetry/sdk/metrics/exemplar/never_sample_filter.h" using namespace opentelemetry::sdk::metrics; diff --git a/sdk/test/metrics/examplar/no_examplar_reservoir_test.cc b/sdk/test/metrics/examplar/no_examplar_reservoir_test.cc deleted file mode 100644 index 5295cdb69f..0000000000 --- a/sdk/test/metrics/examplar/no_examplar_reservoir_test.cc +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#ifndef ENABLE_METRICS_PREVIEW -# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" -# include - -using namespace opentelemetry::sdk::metrics; - -TEST(NoExemplarReservoir, OfferMeasurement) -{ - auto reservoir = opentelemetry::sdk::metrics::NoExemplarReservoir::GetNoExemplarReservoir(); - EXPECT_NO_THROW( - reservoir->OfferMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); - EXPECT_NO_THROW( - reservoir->OfferMeasurement(1l, MetricAttributes{}, opentelemetry::context::Context{})); - auto examplar_data = reservoir->CollectAndReset(MetricAttributes{}); - ASSERT_TRUE(examplar_data.empty()); -} - -#endif diff --git a/sdk/test/metrics/examplar/no_exemplar_reservoir_test.cc b/sdk/test/metrics/examplar/no_exemplar_reservoir_test.cc new file mode 100644 index 0000000000..3e16940ff4 --- /dev/null +++ b/sdk/test/metrics/examplar/no_exemplar_reservoir_test.cc @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#ifndef ENABLE_METRICS_PREVIEW +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" +# include + +using namespace opentelemetry::sdk::metrics; + +TEST(NoExemplarReservoir, OfferMeasurement) +{ + auto reservoir = opentelemetry::sdk::metrics::NoExemplarReservoir::GetNoExemplarReservoir(); + EXPECT_NO_THROW(reservoir->OfferMeasurement(1.0, MetricAttributes{}, + opentelemetry::context::Context{}, + std::chrono::system_clock::now())); + EXPECT_NO_THROW(reservoir->OfferMeasurement( + 1l, MetricAttributes{}, opentelemetry::context::Context{}, std::chrono::system_clock::now())); + auto exemplar_data = reservoir->CollectAndReset(MetricAttributes{}); + ASSERT_TRUE(exemplar_data.empty()); +} + +#endif diff --git a/sdk/test/metrics/multi_metric_storage_test.cc b/sdk/test/metrics/multi_metric_storage_test.cc index c0b2421292..d88946485c 100644 --- a/sdk/test/metrics/multi_metric_storage_test.cc +++ b/sdk/test/metrics/multi_metric_storage_test.cc @@ -4,7 +4,7 @@ #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" # include "opentelemetry/common/key_value_iterable_view.h" -# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include @@ -48,7 +48,7 @@ TEST(MultiMetricStorageTest, BasicTests) { std::shared_ptr storage( new TestMetricStorage()); - MultiMetricStorage storages{NoExemplarReservoir::GetNoExemplarReservoir()}; + MultiMetricStorage storages{}; storages.AddStorage(storage); EXPECT_NO_THROW(storages.RecordLong(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(storages.RecordLong(20l, opentelemetry::context::Context{})); diff --git a/sdk/test/metrics/sync_instruments_test.cc b/sdk/test/metrics/sync_instruments_test.cc index 07a166d151..e029821d41 100644 --- a/sdk/test/metrics/sync_instruments_test.cc +++ b/sdk/test/metrics/sync_instruments_test.cc @@ -5,7 +5,7 @@ # include "opentelemetry/sdk/metrics/sync_instruments.h" # include "opentelemetry/context/context.h" # include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" -# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" # include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" # include @@ -22,8 +22,7 @@ TEST(SyncInstruments, LongCounter) { InstrumentDescriptor instrument_descriptor = { "long_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kLong}; - std::unique_ptr metric_storage( - new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); + std::unique_ptr metric_storage(new MultiMetricStorage()); LongCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10l)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); @@ -42,8 +41,7 @@ TEST(SyncInstruments, DoubleCounter) { InstrumentDescriptor instrument_descriptor = { "double_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kDouble}; - std::unique_ptr metric_storage( - new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); + std::unique_ptr metric_storage(new MultiMetricStorage()); DoubleCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10.10)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); @@ -63,8 +61,7 @@ TEST(SyncInstruments, LongUpDownCounter) InstrumentDescriptor instrument_descriptor = {"long_updowncounter", "description", "1", InstrumentType::kUpDownCounter, InstrumentValueType::kLong}; - std::unique_ptr metric_storage( - new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); + std::unique_ptr metric_storage(new MultiMetricStorage()); LongUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10l)); EXPECT_NO_THROW(counter.Add(10l, opentelemetry::context::Context{})); @@ -84,8 +81,7 @@ TEST(SyncInstruments, DoubleUpDownCounter) InstrumentDescriptor instrument_descriptor = {"double_updowncounter", "description", "1", InstrumentType::kUpDownCounter, InstrumentValueType::kDouble}; - std::unique_ptr metric_storage( - new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); + std::unique_ptr metric_storage(new MultiMetricStorage()); DoubleUpDownCounter counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Add(10.10)); EXPECT_NO_THROW(counter.Add(10.10, opentelemetry::context::Context{})); @@ -104,8 +100,7 @@ TEST(SyncInstruments, LongHistogram) { InstrumentDescriptor instrument_descriptor = { "long_histogram", "description", "1", InstrumentType::kHistogram, InstrumentValueType::kLong}; - std::unique_ptr metric_storage( - new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); + std::unique_ptr metric_storage(new MultiMetricStorage()); LongHistogram counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record(10l, opentelemetry::context::Context{})); @@ -122,8 +117,7 @@ TEST(SyncInstruments, DoubleHistogram) InstrumentDescriptor instrument_descriptor = {"double_histogram", "description", "1", InstrumentType::kHistogram, InstrumentValueType::kDouble}; - std::unique_ptr metric_storage( - new MultiMetricStorage(NoExemplarReservoir::GetNoExemplarReservoir())); + std::unique_ptr metric_storage(new MultiMetricStorage()); DoubleHistogram counter(instrument_descriptor, std::move(metric_storage)); EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); EXPECT_NO_THROW(counter.Record(10.10, opentelemetry::context::Context{})); diff --git a/sdk/test/metrics/sync_metric_storage_test.cc b/sdk/test/metrics/sync_metric_storage_test.cc index 4b447b6c87..c4bd154460 100644 --- a/sdk/test/metrics/sync_metric_storage_test.cc +++ b/sdk/test/metrics/sync_metric_storage_test.cc @@ -4,7 +4,7 @@ #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" # include "opentelemetry/common/key_value_iterable_view.h" -# include "opentelemetry/sdk/metrics/examplar/no_examplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" # include "opentelemetry/sdk/metrics/instruments.h" # include "opentelemetry/sdk/metrics/view/attributes_processor.h" From 5ba7f15c72bd9e061e214bbf36633f28d8d5ea48 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Tue, 22 Mar 2022 19:45:01 +0000 Subject: [PATCH 9/9] fix CI --- sdk/test/metrics/{examplar => exemplar}/BUILD | 0 sdk/test/metrics/{examplar => exemplar}/CMakeLists.txt | 0 .../metrics/{examplar => exemplar}/always_sample_filter_test.cc | 0 .../metrics/{examplar => exemplar}/never_sample_filter_test.cc | 0 .../metrics/{examplar => exemplar}/no_exemplar_reservoir_test.cc | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename sdk/test/metrics/{examplar => exemplar}/BUILD (100%) rename sdk/test/metrics/{examplar => exemplar}/CMakeLists.txt (100%) rename sdk/test/metrics/{examplar => exemplar}/always_sample_filter_test.cc (100%) rename sdk/test/metrics/{examplar => exemplar}/never_sample_filter_test.cc (100%) rename sdk/test/metrics/{examplar => exemplar}/no_exemplar_reservoir_test.cc (100%) diff --git a/sdk/test/metrics/examplar/BUILD b/sdk/test/metrics/exemplar/BUILD similarity index 100% rename from sdk/test/metrics/examplar/BUILD rename to sdk/test/metrics/exemplar/BUILD diff --git a/sdk/test/metrics/examplar/CMakeLists.txt b/sdk/test/metrics/exemplar/CMakeLists.txt similarity index 100% rename from sdk/test/metrics/examplar/CMakeLists.txt rename to sdk/test/metrics/exemplar/CMakeLists.txt diff --git a/sdk/test/metrics/examplar/always_sample_filter_test.cc b/sdk/test/metrics/exemplar/always_sample_filter_test.cc similarity index 100% rename from sdk/test/metrics/examplar/always_sample_filter_test.cc rename to sdk/test/metrics/exemplar/always_sample_filter_test.cc diff --git a/sdk/test/metrics/examplar/never_sample_filter_test.cc b/sdk/test/metrics/exemplar/never_sample_filter_test.cc similarity index 100% rename from sdk/test/metrics/examplar/never_sample_filter_test.cc rename to sdk/test/metrics/exemplar/never_sample_filter_test.cc diff --git a/sdk/test/metrics/examplar/no_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc similarity index 100% rename from sdk/test/metrics/examplar/no_exemplar_reservoir_test.cc rename to sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc