Prometheus Client Library for Modern C++
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 
14 namespace prometheus {
15 
16 class Counter;
17 class Gauge;
18 class Histogram;
19 class Summary;
20 
21 namespace detail {
22 
23 template <typename T>
24 class Builder; // IWYU pragma: keep
25 
26 }
40 class PROMETHEUS_CPP_CORE_EXPORT Registry : public Collectable {
41  public:
46  enum class InsertBehavior {
50  Merge,
52  Throw,
53  };
54 
58  explicit Registry(InsertBehavior insert_behavior = InsertBehavior::Merge);
59 
61  Registry(const Registry&) = delete;
62 
64  Registry& operator=(const Registry&) = delete;
65 
67  Registry(Registry&&) = delete;
68 
70  Registry& operator=(Registry&&) = delete;
71 
73  ~Registry() override;
74 
81  std::vector<MetricFamily> Collect() const override;
82 
93  template <typename T>
94  bool Remove(const Family<T>& family);
95 
96  private:
97  template <typename T>
98  friend class detail::Builder;
99 
100  template <typename T>
101  std::vector<std::unique_ptr<Family<T>>>& GetFamilies();
102 
103  template <typename T>
104  bool NameExistsInOtherType(const std::string& name) const;
105 
106  template <typename T>
107  Family<T>& Add(const std::string& name, const std::string& help,
108  const Labels& labels);
109 
110  const InsertBehavior insert_behavior_;
111  std::vector<std::unique_ptr<Family<Counter>>> counters_;
112  std::vector<std::unique_ptr<Family<Gauge>>> gauges_;
113  std::vector<std::unique_ptr<Family<Histogram>>> histograms_;
114  std::vector<std::unique_ptr<Family<Summary>>> summaries_;
115  mutable std::mutex mutex_;
116 };
117 
118 } // 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:61
Manages the collection of a number of metrics.
Definition: registry.h:40
~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:46
Registry & operator=(Registry &&)=delete
Deleted move assignment.