}
for (const auto& [labels, metric] : metric_family) {
if (metric && metric->is_enabled()) {
- dump_metric_value(f.get(), full_name, *metric);
+ dump_metric_value(f.get(), full_name, *metric, labels);
}
}
}
static void dump_metric_value(Formatter* f,
string_view full_name,
- const registered_metric& metric)
+ const registered_metric& metric,
+ const seastar::metrics::impl::labels_type& labels)
{
+ f->open_object_section(full_name);
+ for (const auto& [key, value] : labels) {
+ f->dump_string(key, value);
+ }
+ auto value_name = "value";
switch (auto v = metric(); v.type()) {
case data_type::GAUGE:
- f->dump_float(full_name, v.d());
+ f->dump_float(value_name, v.d());
break;
case data_type::COUNTER:
- f->dump_unsigned(full_name, v.ui());
+ f->dump_unsigned(value_name, v.ui());
break;
case data_type::DERIVE:
- f->dump_int(full_name, v.i());
+ f->dump_int(value_name, v.i());
break;
case data_type::HISTOGRAM: {
- f->open_object_section(full_name);
+ f->open_object_section(value_name);
auto&& h = v.get_histogram();
f->dump_float("sum", h.sample_sum);
f->dump_unsigned("count", h.sample_count);
f->close_section();
}
f->close_section(); // "buckets"
- f->close_section(); // full_name
+ f->close_section(); // value_name
}
break;
default:
std::abort();
break;
}
+ f->close_section(); // full_name
}
};
template std::unique_ptr<AdminSocketHook> make_asok_hook<DumpMetricsHook>();