]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | // Copyright The OpenTelemetry Authors |
2 | // SPDX-License-Identifier: Apache-2.0 | |
3 | ||
4 | #pragma once | |
5 | #ifdef ENABLE_METRICS_PREVIEW | |
6 | # include <mutex> | |
7 | ||
8 | # include "opentelemetry/_metrics/meter_provider.h" | |
9 | # include "opentelemetry/_metrics/noop.h" | |
10 | # include "opentelemetry/common/spin_lock_mutex.h" | |
11 | # include "opentelemetry/nostd/shared_ptr.h" | |
12 | ||
13 | OPENTELEMETRY_BEGIN_NAMESPACE | |
14 | namespace metrics | |
15 | { | |
16 | /** | |
17 | * Stores the singleton global MeterProvider. | |
18 | */ | |
19 | class Provider | |
20 | { | |
21 | public: | |
22 | /** | |
23 | * Returns the singleton MeterProvider. | |
24 | * | |
25 | * By default, a no-op MeterProvider is returned. This will never return a | |
26 | * nullptr MeterProvider. | |
27 | */ | |
28 | static nostd::shared_ptr<MeterProvider> GetMeterProvider() noexcept | |
29 | { | |
30 | std::lock_guard<common::SpinLockMutex> guard(GetLock()); | |
31 | return nostd::shared_ptr<MeterProvider>(GetProvider()); | |
32 | } | |
33 | ||
34 | /** | |
35 | * Changes the singleton MeterProvider. | |
36 | */ | |
37 | static void SetMeterProvider(nostd::shared_ptr<MeterProvider> tp) noexcept | |
38 | { | |
39 | std::lock_guard<common::SpinLockMutex> guard(GetLock()); | |
40 | GetProvider() = tp; | |
41 | } | |
42 | ||
43 | private: | |
44 | static nostd::shared_ptr<MeterProvider> &GetProvider() noexcept | |
45 | { | |
46 | static nostd::shared_ptr<MeterProvider> provider(new NoopMeterProvider); | |
47 | return provider; | |
48 | } | |
49 | ||
50 | static common::SpinLockMutex &GetLock() noexcept | |
51 | { | |
52 | static common::SpinLockMutex lock; | |
53 | return lock; | |
54 | } | |
55 | }; | |
56 | ||
57 | } // namespace metrics | |
58 | OPENTELEMETRY_END_NAMESPACE | |
59 | #endif |