25 #include <unordered_map>
26 #include <seastar/core/sharded.hh>
27 #include <boost/functional/hash.hpp>
39 using labels_type = std::map<sstring, sstring>;
47 struct hash<
seastar::metrics::impl::labels_type> {
48 using argument_type = seastar::metrics::impl::labels_type;
49 using result_type = ::std::size_t;
50 result_type operator()(argument_type
const& s)
const {
53 boost::hash_combine(h, std::hash<seastar::sstring>{}(i.second));
82 labels_type labels = {})
83 : _group(std::move(group)), _name(
84 std::move(name)), _labels(labels) {
99 return _labels.at(shard_label.
name());
104 const labels_type& labels()
const {
107 sstring full_name()
const;
112 auto as_tuple()
const {
113 return std::tie(group_name(), instance_id(), name(), labels());
126 struct hash<
seastar::metrics::impl::metric_id>
129 typedef ::std::size_t result_type;
132 result_type
const h1 ( std::hash<seastar::sstring>{}(s.group_name()) );
133 result_type
const h2 ( std::hash<seastar::sstring>{}(s.instance_id()) );
134 return h1 ^ (h2 << 1);
167 using metrics_registration = std::vector<metric_id>;
170 metrics_registration _registration;
194 bool is_enabled()
const {
195 return _info.enabled;
198 void set_enabled(
bool b) {
209 metric_function& get_function() {
215 using metric_instances = std::map<labels_type, register_ref>;
218 metric_instances _instances;
221 using iterator = metric_instances::iterator;
222 using const_iterator = metric_instances::const_iterator;
226 metric_family(
const metric_instances& instances) : _instances(instances) {
232 metric_family(metric_instances&& instances) : _instances(std::move(instances)) {
236 return _instances[l];
240 return _instances.at(l);
251 iterator find(
const labels_type& l) {
252 return _instances.find(l);
255 const_iterator find(
const labels_type& l)
const {
256 return _instances.find(l);
260 return _instances.begin();
263 const_iterator begin()
const {
264 return _instances.cbegin();
268 return _instances.end();
272 return _instances.empty();
275 iterator erase(const_iterator position) {
276 return _instances.erase(position);
279 const_iterator end()
const {
280 return _instances.cend();
283 uint32_t size()
const {
284 return _instances.size();
289 using value_map = std::map<sstring, metric_family>;
291 using metric_metadata_vector = std::vector<metric_info>;
302 metric_metadata_vector metrics;
305 using value_vector = std::vector<metric_value>;
306 using metric_metadata = std::vector<metric_family_metadata>;
307 using metric_values = std::vector<value_vector>;
311 metric_values values;
319 value_map _value_map;
323 std::vector<std::vector<metric_function>> _current_metrics;
325 value_map& get_value_map() {
329 const value_map& get_value_map()
const {
334 void remove_registration(
const metric_id&
id);
336 return make_ready_future<>();
338 const config& get_config()
const {
341 void set_config(
const config& c) {
347 std::vector<std::vector<metric_function>>& functions();
349 void update_metrics_if_needed();
356 const value_map& get_value_map();
363 void unregister_metric(
const metric_id &
id);