From: Yingxin Cheng Date: Wed, 23 Jun 2021 07:36:27 +0000 (+0800) Subject: crimson/common: dump metric with labels X-Git-Tag: v17.1.0~1410^2~6 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6b38bf1f1be71238d45185433c066b4476c1f500;p=ceph.git crimson/common: dump metric with labels Otherwise we cannot distinguish metrics of the same name. Labels also contain useful information about the metric. Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/admin/osd_admin.cc b/src/crimson/admin/osd_admin.cc index e1c8c5b4d8ab4..5c4ffdd2a7e3c 100644 --- a/src/crimson/admin/osd_admin.cc +++ b/src/crimson/admin/osd_admin.cc @@ -218,7 +218,7 @@ public: } 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); } } } @@ -231,20 +231,26 @@ private: 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); @@ -262,13 +268,14 @@ private: 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 make_asok_hook();