Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
metrics_backend.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
12#pragma once
13
16
17#include <functional>
18#include <map>
19#include <memory>
20#include <string>
21
23
58public:
62 virtual ~MetricsBackend() = default;
63
68 [[nodiscard]] virtual std::string name() const = 0;
69
75 [[nodiscard]] virtual std::string export_base(
76 const BaseSnapshot& snapshot) const = 0;
77
83 [[nodiscard]] virtual std::string export_enhanced(
84 const EnhancedSnapshot& snapshot) const = 0;
85
90 virtual void set_prefix(const std::string& prefix) {
92 }
93
98 [[nodiscard]] const std::string& prefix() const {
99 return prefix_;
100 }
101
107 virtual void add_label(const std::string& key, const std::string& value) {
108 labels_[key] = value;
109 }
110
115 [[nodiscard]] const std::map<std::string, std::string>& labels() const {
116 return labels_;
117 }
118
119protected:
123 MetricsBackend() = default;
124
128 std::string prefix_{"thread_pool"};
129
133 std::map<std::string, std::string> labels_;
134};
135
150public:
154 PrometheusBackend() = default;
155
159 ~PrometheusBackend() override = default;
160
161 [[nodiscard]] std::string name() const override {
162 return "prometheus";
163 }
164
165 [[nodiscard]] std::string export_base(
166 const BaseSnapshot& snapshot) const override;
167
168 [[nodiscard]] std::string export_enhanced(
169 const EnhancedSnapshot& snapshot) const override;
170
171private:
176 [[nodiscard]] std::string format_labels() const;
177};
178
197public:
201 JsonBackend() = default;
202
206 ~JsonBackend() override = default;
207
208 [[nodiscard]] std::string name() const override {
209 return "json";
210 }
211
212 [[nodiscard]] std::string export_base(
213 const BaseSnapshot& snapshot) const override;
214
215 [[nodiscard]] std::string export_enhanced(
216 const EnhancedSnapshot& snapshot) const override;
217
222 void set_pretty(bool pretty) {
223 pretty_ = pretty;
224 }
225
226private:
227 bool pretty_{true};
228};
229
237public:
241 LoggingBackend() = default;
242
246 ~LoggingBackend() override = default;
247
248 [[nodiscard]] std::string name() const override {
249 return "logging";
250 }
251
252 [[nodiscard]] std::string export_base(
253 const BaseSnapshot& snapshot) const override;
254
255 [[nodiscard]] std::string export_enhanced(
256 const EnhancedSnapshot& snapshot) const override;
257};
258
265public:
271 static BackendRegistry registry;
272 return registry;
273 }
274
279 void register_backend(std::shared_ptr<MetricsBackend> backend) {
280 if (backend) {
281 backends_[backend->name()] = std::move(backend);
282 }
283 }
284
290 [[nodiscard]] std::shared_ptr<MetricsBackend> get(
291 const std::string& name) const {
292 auto it = backends_.find(name);
293 return (it != backends_.end()) ? it->second : nullptr;
294 }
295
301 [[nodiscard]] bool has(const std::string& name) const {
302 return backends_.find(name) != backends_.end();
303 }
304
305private:
307 // Register default backends
308 register_backend(std::make_shared<PrometheusBackend>());
309 register_backend(std::make_shared<JsonBackend>());
310 register_backend(std::make_shared<LoggingBackend>());
311 }
312
313 std::map<std::string, std::shared_ptr<MetricsBackend>> backends_;
314};
315
316} // namespace kcenon::thread::metrics
Backend registry for managing multiple export formats.
static BackendRegistry & instance()
Get the singleton instance.
std::map< std::string, std::shared_ptr< MetricsBackend > > backends_
std::shared_ptr< MetricsBackend > get(const std::string &name) const
Get a backend by name.
bool has(const std::string &name) const
Check if a backend is registered.
void register_backend(std::shared_ptr< MetricsBackend > backend)
Register a backend.
~JsonBackend() override=default
Destructor.
std::string export_base(const BaseSnapshot &snapshot) const override
Export base metrics snapshot.
std::string export_enhanced(const EnhancedSnapshot &snapshot) const override
Export enhanced metrics snapshot.
JsonBackend()=default
Default constructor.
void set_pretty(bool pretty)
Enable or disable pretty printing.
std::string name() const override
Get the backend name.
Logging backend for debugging and diagnostics.
std::string export_enhanced(const EnhancedSnapshot &snapshot) const override
Export enhanced metrics snapshot.
~LoggingBackend() override=default
Destructor.
LoggingBackend()=default
Default constructor.
std::string name() const override
Get the backend name.
std::string export_base(const BaseSnapshot &snapshot) const override
Export base metrics snapshot.
Abstract interface for metrics export backends.
virtual std::string export_base(const BaseSnapshot &snapshot) const =0
Export base metrics snapshot.
const std::string & prefix() const
Get current metric name prefix.
virtual ~MetricsBackend()=default
Virtual destructor for proper cleanup.
const std::map< std::string, std::string > & labels() const
Get all configured labels.
virtual void set_prefix(const std::string &prefix)
Set metric name prefix.
std::string prefix_
Metric name prefix.
virtual std::string name() const =0
Get the backend name.
virtual std::string export_enhanced(const EnhancedSnapshot &snapshot) const =0
Export enhanced metrics snapshot.
virtual void add_label(const std::string &key, const std::string &value)
Add a label to all exported metrics.
MetricsBackend()=default
Default constructor.
std::map< std::string, std::string > labels_
Labels to attach to all metrics.
Prometheus/OpenMetrics format backend.
PrometheusBackend()=default
Default constructor.
std::string export_base(const BaseSnapshot &snapshot) const override
Export base metrics snapshot.
std::string name() const override
Get the backend name.
std::string format_labels() const
Format labels for Prometheus output.
~PrometheusBackend() override=default
Destructor.
std::string export_enhanced(const EnhancedSnapshot &snapshot) const override
Export enhanced metrics snapshot.
Enhanced metrics snapshot with latency percentiles and throughput.
Thread pool metrics collection, histograms, and observability.
Base snapshot structure containing common metric values.
Enhanced snapshot with latency percentiles and throughput.