prom 0.1.0
Client-independent C++23 Prometheus/OpenMetrics metric abstraction
Loading...
Searching...
No Matches
global.hpp
Go to the documentation of this file.
1#pragma once
2
18
19#include <prom/adapter.hpp>
20#include <prom/null_adapter.hpp>
21
22#include <atomic>
23#include <cstdint>
24#include <memory>
25#include <mutex>
26#include <utility>
27
28namespace prom {
29
34class AdapterCell final : public AdapterSource {
35public:
36 AdapterCell() : adapter_(std::make_shared<NullAdapter>()) {}
37
40 : adapter_(adapter ? std::move(adapter) : std::make_shared<NullAdapter>()) {}
41
42 [[nodiscard]] std::uint64_t version() const noexcept override {
43 return version_.load(std::memory_order_acquire);
44 }
45
46 [[nodiscard]] AdapterPtr adapter() const override {
47 const std::scoped_lock lock(mutex_);
48 return adapter_;
49 }
50
54 {
55 const std::scoped_lock lock(mutex_);
56 adapter_ = adapter ? std::move(adapter) : std::make_shared<NullAdapter>();
57 }
58 version_.fetch_add(1, std::memory_order_release);
59 }
60
61private:
62 mutable std::mutex mutex_;
63 AdapterPtr adapter_;
64 std::atomic<std::uint64_t> version_{0};
65};
66
67namespace detail {
68
72[[nodiscard]] inline std::shared_ptr<AdapterCell> global_adapter_cell() {
73 static auto cell = std::make_shared<AdapterCell>();
74 return cell;
75}
76
77} // namespace detail
78
79} // namespace prom
A swappable adapter slot shared by every metric that reads from it.
Definition global.hpp:34
AdapterCell()
Definition global.hpp:36
std::uint64_t version() const noexcept override
Monotonic counter, bumped on every adapter swap.
Definition global.hpp:42
void set_adapter(AdapterPtr adapter)
Install adapter as the new backend (or reset to a fresh NullAdapter when null) and bump the version s...
Definition global.hpp:53
AdapterPtr adapter() const override
The current adapter, never null.
Definition global.hpp:46
AdapterCell(AdapterPtr adapter)
Construct with adapter (or a fresh NullAdapter when null).
Definition global.hpp:39
The source a metric reads its current adapter from, decoupled from Registry so that metric_base can r...
Definition adapter.hpp:114
A backend that records nothing.
Definition null_adapter.hpp:24
The backend boundary: MetricMeta, MetricState/MetricHandle, and the pure-virtual Adapter interface.
Definition adapter.hpp:24
std::shared_ptr< Adapter > AdapterPtr
Shared ownership of an Adapter.
Definition fwd.hpp:38
NullAdapter — the always-available no-op backend.