24#include <logman/logman.hpp>
28#include <initializer_list>
55 : logger_(logman::get(
"prom.composite")) {
59 adapters_.push_back(std::move(a));
63 logger_->debug(
"composite backend created with {} adapter(s)", adapters_.size());
72 [[nodiscard]] std::span<const AdapterPtr>
adapters() const noexcept {
76 [[nodiscard]] std::string_view
backend_name() const noexcept
override {
81 auto state = std::make_shared<CompositeState>();
82 state->handles.reserve(adapters_.size());
83 for (
const auto& a : adapters_) {
84 state->handles.push_back(a->register_metric(meta));
90 const Labels& dynamic)
noexcept override {
92 if (parent ==
nullptr || parent->handles.size() != adapters_.size()) {
95 auto state = std::make_shared<CompositeState>();
96 state->handles.reserve(adapters_.size());
97 for (std::size_t i = 0; i < adapters_.size(); ++i) {
98 state->handles.push_back(adapters_[i]->
resolve(parent->handles[i], dynamic));
120 const std::span<const Label> labels)
noexcept override {
125 const std::string_view state,
126 const bool active)
noexcept override {
139 void fan_out(
const MetricHandle& handle, Fn&& fn)
noexcept {
141 if (state ==
nullptr) {
144 const std::size_t n = std::min(adapters_.size(), state->handles.size());
145 for (std::size_t i = 0; i < n; ++i) {
146 fn(*adapters_[i], state->handles[i]);
150 std::shared_ptr<spdlog::logger> logger_;
151 std::vector<AdapterPtr> adapters_;
The pluggable backend.
Definition adapter.hpp:62
virtual void set_unit(const MetricHandle &, const Unit &) noexcept
Late unit inference hook.
Definition adapter.hpp:102
virtual void observe(const MetricHandle &handle, double value) noexcept=0
Record an observation against handle (histogram/summary).
virtual void set_info(const MetricHandle &handle, std::span< const Label > labels) noexcept=0
Replace the label set carried by an info metric.
virtual void dec(const MetricHandle &handle, double amount) noexcept=0
Decrease the series behind handle by amount (gauge).
virtual void set_state(const MetricHandle &handle, std::string_view state, bool active) noexcept=0
Set the boolean value of one member of a state set.
virtual void inc(const MetricHandle &handle, double amount) noexcept=0
Increase the series behind handle by amount (counter/gauge).
virtual void set(const MetricHandle &handle, double value) noexcept=0
Set the series behind handle to value (gauge/untyped).
A backend that forwards every call to a fixed set of child adapters.
Definition composite_adapter.hpp:51
void set_state(const MetricHandle &handle, const std::string_view state, const bool active) noexcept override
Set the boolean value of one member of a state set.
Definition composite_adapter.hpp:124
CompositeAdapter(std::vector< AdapterPtr > adapters)
Construct from an explicit list of adapters. Null entries are ignored.
Definition composite_adapter.hpp:54
void set(const MetricHandle &handle, const double value) noexcept override
Set the series behind handle to value (gauge/untyped).
Definition composite_adapter.hpp:111
void observe(const MetricHandle &handle, const double value) noexcept override
Record an observation against handle (histogram/summary).
Definition composite_adapter.hpp:115
void dec(const MetricHandle &handle, const double amount) noexcept override
Decrease the series behind handle by amount (gauge).
Definition composite_adapter.hpp:107
void set_info(const MetricHandle &handle, const std::span< const Label > labels) noexcept override
Replace the label set carried by an info metric.
Definition composite_adapter.hpp:119
CompositeAdapter(const std::initializer_list< AdapterPtr > adapters)
Convenience constructor: CompositeAdapter{a, b, c}.
Definition composite_adapter.hpp:68
void inc(const MetricHandle &handle, const double amount) noexcept override
Increase the series behind handle by amount (counter/gauge).
Definition composite_adapter.hpp:103
std::string_view backend_name() const noexcept override
Stable identifier of the backend (e.g. "null", "prometheus-cpp").
Definition composite_adapter.hpp:76
std::span< const AdapterPtr > adapters() const noexcept
The wrapped adapters, in dispatch order (nulls already removed).
Definition composite_adapter.hpp:72
void set_unit(const MetricHandle &handle, const Unit &unit) noexcept override
Late unit inference hook.
Definition composite_adapter.hpp:130
MetricHandle resolve(const MetricHandle &family, const Labels &dynamic) noexcept override
Resolve the labeled child of family for the given dynamic labels, creating it on first request.
Definition composite_adapter.hpp:89
MetricHandle register_metric(const MetricMeta &meta) noexcept override
Register a metric family.
Definition composite_adapter.hpp:80
Backend state for a composite family or child: the index-aligned bundle of the handles each wrapped a...
Definition composite_adapter.hpp:40
std::vector< MetricHandle > handles
Per-child handles, child-index aligned.
Definition composite_adapter.hpp:42
An immutable-by-convention set of labels, kept sorted by name with duplicates collapsed last-wins.
Definition labels.hpp:55
Opaque backend state for a registered family or a labeled child.
Definition adapter.hpp:46
Forward declarations and shared_ptr aliases for the prom public API.
The backend boundary: MetricMeta, MetricState/MetricHandle, and the pure-virtual Adapter interface.
Label vocabulary: Label, the sorted/deduped Labels set, name validation, and an std::hash<Labels> spe...
Definition adapter.hpp:24
std::shared_ptr< Adapter > AdapterPtr
Shared ownership of an Adapter.
Definition fwd.hpp:38
std::shared_ptr< MetricState > MetricHandle
Opaque, backend-owned handle to a registered metric family or a labeled child series.
Definition fwd.hpp:34
OpenMetrics unit suffix plus optional dimensional metadata.
Definition unit.hpp:53
Metric kinds (MetricType) and the OpenMetrics Unit descriptor.