From: Amnon Hanuhov Date: Mon, 10 Aug 2020 12:31:08 +0000 (+0300) Subject: crimson/admin: Add Seastar metrics hook X-Git-Tag: v16.1.0~1239^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b17e184e83adc88e9f433157780282d77fdb41ee;p=ceph.git crimson/admin: Add Seastar metrics hook Signed-off-by: Amnon Hanuhov --- diff --git a/src/crimson/admin/osd_admin.cc b/src/crimson/admin/osd_admin.cc index 4848897f290e..cdb01f9ba43a 100644 --- a/src/crimson/admin/osd_admin.cc +++ b/src/crimson/admin/osd_admin.cc @@ -9,6 +9,7 @@ #include #include #include +#include #include "common/config.h" #include "crimson/admin/admin_socket.h" @@ -157,4 +158,34 @@ public: }; template std::unique_ptr make_asok_hook(); +/** +* A Seastar admin hook: fetching the values of configured metrics +*/ +class SeastarMetricsHook : public AdminSocketHook { +public: + SeastarMetricsHook() : + AdminSocketHook("perf dump_seastar", + "", + "dump current configured seastar metrics and their values") + {} + seastar::future call(const cmdmap_t& cmdmap, + std::string_view format, + ceph::bufferlist&& input) const final + { + std::unique_ptr f{Formatter::create(format, "json-pretty", "json-pretty")}; + f->open_object_section("perf_dump_seastar"); + for (const auto& mf : seastar::scollectd::get_value_map()) { + for (const auto& m : mf.second) { + if (m.second && m.second->is_enabled()) { + auto& metric_function = m.second->get_function(); + f->dump_float(m.second->get_id().full_name(), metric_function().d()); + } + } + } + f->close_section(); + return seastar::make_ready_future(f.get()); + } +}; +template std::unique_ptr make_asok_hook(); + } // namespace crimson::admin diff --git a/src/crimson/admin/osd_admin.h b/src/crimson/admin/osd_admin.h index cf3c393b11b5..395042ea8cfa 100644 --- a/src/crimson/admin/osd_admin.h +++ b/src/crimson/admin/osd_admin.h @@ -13,6 +13,8 @@ class FlushPgStatsHook; class OsdStatusHook; class SendBeaconHook; class DumpPGStateHistory; +class SeastarMetricsHook; + template std::unique_ptr make_asok_hook(Args&&... args);