Skip to content

Commit 0ca7490

Browse files
authored
Merge pull request #8 from open-telemetry/main
Fix observable attributes drop (open-telemetry#2557)
2 parents f212b82 + 32196a5 commit 0ca7490

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

examples/common/metrics_foo_library/foo_library.cc

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ class MeasurementFetcher
4040
{
4141
double random_incr = (rand() % 5) + 1.1;
4242
value_ += random_incr;
43+
std::map<std::string, std::string> labels = get_random_attr();
4344
nostd::get<nostd::shared_ptr<opentelemetry::metrics::ObserverResultT<double>>>(
4445
observer_result)
45-
->Observe(value_ /*, labelkv */);
46+
->Observe(value_, labels);
4647
}
4748
}
4849
static double value_;

sdk/include/opentelemetry/sdk/metrics/observer_result.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,15 @@ class ObserverResultT final : public opentelemetry::metrics::ObserverResultT<T>
2626

2727
~ObserverResultT() override = default;
2828

29-
void Observe(T value) noexcept override { data_.insert({{}, value}); }
29+
void Observe(T value) noexcept override
30+
{
31+
data_[MetricAttributes{{}, attributes_processor_}] = value;
32+
}
3033

3134
void Observe(T value, const opentelemetry::common::KeyValueIterable &attributes) noexcept override
3235
{
33-
data_.insert({MetricAttributes{attributes, attributes_processor_}, value});
36+
data_[MetricAttributes{attributes, attributes_processor_}] =
37+
value; // overwrites the previous value if present
3438
}
3539

3640
const std::unordered_map<MetricAttributes, T, AttributeHashGenerator> &GetMeasurements()

sdk/src/metrics/state/observable_registry.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ void ObservableRegistry::CleanupCallback(opentelemetry::metrics::ObservableInstr
5050

5151
void ObservableRegistry::Observe(opentelemetry::common::SystemTimestamp collection_ts)
5252
{
53+
static DefaultAttributesProcessor default_attribute_processor;
5354
std::lock_guard<std::mutex> lock_guard{callbacks_m_};
5455
for (auto &callback_wrap : callbacks_)
5556
{
@@ -69,7 +70,7 @@ void ObservableRegistry::Observe(opentelemetry::common::SystemTimestamp collecti
6970
if (value_type == InstrumentValueType::kDouble)
7071
{
7172
nostd::shared_ptr<opentelemetry::metrics::ObserverResultT<double>> ob_res(
72-
new opentelemetry::sdk::metrics::ObserverResultT<double>());
73+
new opentelemetry::sdk::metrics::ObserverResultT<double>(&default_attribute_processor));
7374
callback_wrap->callback(ob_res, callback_wrap->state);
7475
storage->RecordDouble(
7576
static_cast<opentelemetry::sdk::metrics::ObserverResultT<double> *>(ob_res.get())
@@ -79,7 +80,7 @@ void ObservableRegistry::Observe(opentelemetry::common::SystemTimestamp collecti
7980
else
8081
{
8182
nostd::shared_ptr<opentelemetry::metrics::ObserverResultT<int64_t>> ob_res(
82-
new opentelemetry::sdk::metrics::ObserverResultT<int64_t>());
83+
new opentelemetry::sdk::metrics::ObserverResultT<int64_t>(&default_attribute_processor));
8384
callback_wrap->callback(ob_res, callback_wrap->state);
8485
storage->RecordLong(
8586
static_cast<opentelemetry::sdk::metrics::ObserverResultT<int64_t> *>(ob_res.get())

0 commit comments

Comments
 (0)