Prometheus Client Library for Modern C++
Loading...
Searching...
No Matches
registry.h
1#pragma once
2
3#include <memory>
4#include <mutex>
5#include <string>
6#include <vector>
7
8#include "prometheus/collectable.h"
9#include "prometheus/detail/core_export.h"
10#include "prometheus/family.h"
11#include "prometheus/labels.h"
12#include "prometheus/metric_family.h"
13
14namespace prometheus {
15
16class Counter;
17class Gauge;
18class Histogram;
19class Info;
20class Summary;
21
22namespace detail {
23
24template <typename T>
25class Builder; // IWYU pragma: keep
26
27}
41class PROMETHEUS_CPP_CORE_EXPORT Registry : public Collectable {
42 public:
47 enum class InsertBehavior {
51 Merge,
53 Throw,
54 };
55
59 explicit Registry(InsertBehavior insert_behavior = InsertBehavior::Merge);
60
62 Registry(const Registry&) = delete;
63
65 Registry& operator=(const Registry&) = delete;
66
68 Registry(Registry&&) = delete;
69
72
74 ~Registry() override;
75
82 std::vector<MetricFamily> Collect() const override;
83
94 template <typename T>
95 bool Remove(const Family<T>& family);
96
97 private:
98 template <typename T>
99 friend class detail::Builder;
100
101 template <typename T>
102 std::vector<std::unique_ptr<Family<T>>>& GetFamilies();
103
104 template <typename T>
105 bool NameExistsInOtherType(const std::string& name) const;
106
107 template <typename T>
108 Family<T>& Add(const std::string& name, const std::string& help,
109 const Labels& labels);
110
111 const InsertBehavior insert_behavior_;
112 std::vector<std::unique_ptr<Family<Counter>>> counters_;
113 std::vector<std::unique_ptr<Family<Gauge>>> gauges_;
114 std::vector<std::unique_ptr<Family<Histogram>>> histograms_;
115 std::vector<std::unique_ptr<Family<Info>>> infos_;
116 std::vector<std::unique_ptr<Family<Summary>>> summaries_;
117 mutable std::mutex mutex_;
118};
119
120} // namespace prometheus
Interface implemented by anything that can be used by Prometheus to collect metrics.
Definition collectable.h:17
A metric of type T with a set of labeled dimensions.
Definition family.h:62
Manages the collection of a number of metrics.
Definition registry.h:41
Registry & operator=(Registry &&)=delete
Deleted move assignment.
~Registry() override
name Destroys a registry.
Registry(const Registry &)=delete
Deleted copy constructor.
Registry(Registry &&)=delete
Deleted move constructor.
Registry & operator=(const Registry &)=delete
Deleted copy assignment.
InsertBehavior
How to deal with repeatedly added family names for a type.
Definition registry.h:47