33
44#pragma once
55
6+ #include < cstdint>
67#include < memory>
78#include < mutex>
89#include < vector>
910
1011#include " opentelemetry/version.h"
1112#include " opentelemetry/common/timestamp.h"
1213#include " opentelemetry/metrics/async_instruments.h"
14+ #include " opentelemetry/metrics/meter.h"
15+ #include " opentelemetry/sdk/metrics/multi_observer_result.h"
16+ #include " opentelemetry/version.h"
17+
18+ #if OPENTELEMETRY_ABI_VERSION_NO >= 2
19+ # include < unordered_map>
20+ # include " opentelemetry/nostd/span.h"
21+ #endif
1322
1423OPENTELEMETRY_BEGIN_NAMESPACE
1524namespace sdk
1625{
1726namespace metrics
1827{
1928
20- struct ObservableCallbackRecord
21- {
22- opentelemetry::metrics::ObservableCallbackPtr callback;
23- void *state;
24- opentelemetry::metrics::ObservableInstrument *instrument;
25- };
29+ struct ObservableCallbackRecord ;
2630
2731class OPENTELEMETRY_EXPORT_TYPE ObservableRegistry
2832{
2933public:
34+ // Constructor & destructor need to be defined in the observable_registry.cc TU, rather
35+ // than implicitly defaulted here, so that we can have a unique_ptr to an incomplete
36+ // class as a member.
37+ ObservableRegistry ();
38+ ~ObservableRegistry ();
39+
40+ // Add a callback of the single-instrument form
3041 void AddCallback (opentelemetry::metrics::ObservableCallbackPtr callback,
3142 void *state,
3243 opentelemetry::metrics::ObservableInstrument *instrument);
33-
44+ // Add a callback with the multi-instrument signature
45+ uintptr_t AddCallback (opentelemetry::metrics::MultiObservableCallbackPtr callback,
46+ void *state,
47+ nostd::span<opentelemetry::metrics::ObservableInstrument *> instruments);
48+ // Callbacks added with Meter::RegisterCallback have can be removed by passing back the handle
49+ // returned
50+ void RemoveCallback (uintptr_t id);
51+ // Callbacks added with ObservableInstrument::AddCallback can be removed by passing back the
52+ // original (callback function, state, instrument).
3453 void RemoveCallback (opentelemetry::metrics::ObservableCallbackPtr callback,
3554 void *state,
3655 opentelemetry::metrics::ObservableInstrument *instrument);
@@ -40,7 +59,7 @@ class OPENTELEMETRY_EXPORT_TYPE ObservableRegistry
4059 void Observe (opentelemetry::common::SystemTimestamp collection_ts);
4160
4261private:
43- std::vector< std::unique_ptr<ObservableCallbackRecord>> callbacks_;
62+ std::unordered_map< uintptr_t , std::unique_ptr<ObservableCallbackRecord>> callbacks_;
4463 std::mutex callbacks_m_;
4564};
4665
0 commit comments