9 #include <unordered_map>
12 #include "opentelemetry/common/macros.h"
13 #include "opentelemetry/metrics/meter.h"
14 #include "opentelemetry/metrics/noop.h"
15 #include "opentelemetry/nostd/shared_ptr.h"
16 #include "opentelemetry/nostd/string_view.h"
17 #include "opentelemetry/nostd/unique_ptr.h"
18 #include "opentelemetry/sdk/common/attributemap_hash.h"
19 #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
20 #include "opentelemetry/sdk/metrics/instrument_metadata_validator.h"
21 #include "opentelemetry/sdk/metrics/instruments.h"
22 #include "opentelemetry/sdk/metrics/meter_config.h"
23 #include "opentelemetry/sdk/metrics/meter_context.h"
24 #include "opentelemetry/sdk/metrics/state/async_metric_storage.h"
25 #include "opentelemetry/sdk/resource/resource.h"
26 #include "opentelemetry/sdk_config.h"
27 #include "opentelemetry/version.h"
36 class SyncWritableMetricStorage;
37 class AsyncWritableMetricsStorge;
38 class ObservableRegistry;
40 class Meter final :
public opentelemetry::metrics::Meter
45 std::weak_ptr<sdk::metrics::MeterContext> meter_context,
46 std::unique_ptr<opentelemetry::sdk::instrumentationscope::InstrumentationScope> scope =
47 opentelemetry::sdk::instrumentationscope::InstrumentationScope::Create(
"")) noexcept;
79 #if OPENTELEMETRY_ABI_VERSION_NO >= 2
132 opentelemetry::common::SystemTimestamp collect_ts) noexcept;
137 std::unique_ptr<sdk::instrumentationscope::InstrumentationScope> scope_;
138 std::weak_ptr<sdk::metrics::MeterContext> meter_context_;
141 std::shared_ptr<MetricStorage>,
144 MetricStorageMap storage_registry_;
145 std::shared_ptr<ObservableRegistry> observable_registry_;
147 std::unique_ptr<SyncWritableMetricStorage> RegisterSyncMetricStorage(
149 std::unique_ptr<AsyncWritableMetricStorage> RegisterAsyncMetricStorage(
151 opentelemetry::common::SpinLockMutex storage_lock_;
153 static opentelemetry::metrics::NoopMeter kNoopMeter;
156 GetNoopObservableInsrument()
159 new opentelemetry::metrics::NoopObservableInstrument(
"",
"",
""));
160 return noop_instrument;
167 const static InstrumentMetaDataValidator instrument_validator;
168 return instrument_validator.ValidateName(name) && instrument_validator.ValidateUnit(unit) &&
169 instrument_validator.ValidateDescription(description);
174 static void WarnOnDuplicateInstrument(
176 const MetricStorageMap &storage_registry,
177 const InstrumentDescriptor &new_instrument);
182 const InstrumentDescriptor &existing_instrument,
183 const InstrumentDescriptor &new_instrument);