]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/_metrics/provider.h
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / api / include / opentelemetry / _metrics / provider.h
CommitLineData
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
13OPENTELEMETRY_BEGIN_NAMESPACE
14namespace metrics
15{
16/**
17 * Stores the singleton global MeterProvider.
18 */
19class Provider
20{
21public:
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
43private:
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
58OPENTELEMETRY_END_NAMESPACE
59#endif