]> git.proxmox.com Git - ceph.git/blobdiff - 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
diff --git a/ceph/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/_metrics/provider.h b/ceph/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/_metrics/provider.h
new file mode 100644 (file)
index 0000000..e079b34
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+#pragma once
+#ifdef ENABLE_METRICS_PREVIEW
+#  include <mutex>
+
+#  include "opentelemetry/_metrics/meter_provider.h"
+#  include "opentelemetry/_metrics/noop.h"
+#  include "opentelemetry/common/spin_lock_mutex.h"
+#  include "opentelemetry/nostd/shared_ptr.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace metrics
+{
+/**
+ * Stores the singleton global MeterProvider.
+ */
+class Provider
+{
+public:
+  /**
+   * Returns the singleton MeterProvider.
+   *
+   * By default, a no-op MeterProvider is returned. This will never return a
+   * nullptr MeterProvider.
+   */
+  static nostd::shared_ptr<MeterProvider> GetMeterProvider() noexcept
+  {
+    std::lock_guard<common::SpinLockMutex> guard(GetLock());
+    return nostd::shared_ptr<MeterProvider>(GetProvider());
+  }
+
+  /**
+   * Changes the singleton MeterProvider.
+   */
+  static void SetMeterProvider(nostd::shared_ptr<MeterProvider> tp) noexcept
+  {
+    std::lock_guard<common::SpinLockMutex> guard(GetLock());
+    GetProvider() = tp;
+  }
+
+private:
+  static nostd::shared_ptr<MeterProvider> &GetProvider() noexcept
+  {
+    static nostd::shared_ptr<MeterProvider> provider(new NoopMeterProvider);
+    return provider;
+  }
+
+  static common::SpinLockMutex &GetLock() noexcept
+  {
+    static common::SpinLockMutex lock;
+    return lock;
+  }
+};
+
+}  // namespace metrics
+OPENTELEMETRY_END_NAMESPACE
+#endif