From ab9a661eaacd7d2cce17def1c28523817e564fa6 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 26 Jun 2017 13:22:30 -0400 Subject: [PATCH] mgr: implement 'service dump' and 'service status' Signed-off-by: Sage Weil --- src/mgr/DaemonServer.cc | 45 +++++++++++++++++++++++++++++++++++++++++ src/mgr/MgrCommands.h | 5 +++++ 2 files changed, 50 insertions(+) diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index 0362e84addd..53dce6db955 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -621,6 +621,51 @@ bool DaemonServer::handle_command(MCommand *m) << "entity='" << session->entity_name << "' " << "cmd=" << m->cmd << ": dispatch"; + // ---------------- + // service map commands + if (prefix == "service dump") { + if (!f) + f.reset(Formatter::create("json-pretty")); + cluster_state.with_servicemap([&](const ServiceMap &service_map) { + f->dump_object("service_map", service_map); + }); + f->flush(cmdctx->odata); + cmdctx->reply(0, ss); + return true; + } + if (prefix == "service status") { + if (!f) + f.reset(Formatter::create("json-pretty")); + // only include state from services that are in the persisted service map + f->open_object_section("service_status"); + ServiceMap s; + cluster_state.with_servicemap([&](const ServiceMap& service_map) { + s = service_map; + }); + for (auto& p : s.services) { + f->open_object_section(p.first.c_str()); + for (auto& q : p.second.daemons) { + f->open_object_section(q.first.c_str()); + DaemonKey key(p.first, q.first); + assert(daemon_state.exists(key)); + auto daemon = daemon_state.get(key); + f->dump_stream("status_stamp") << daemon->service_status_stamp; + f->dump_stream("last_beacon") << daemon->last_service_beacon; + f->open_object_section("status"); + for (auto& r : daemon->service_status) { + f->dump_string(r.first.c_str(), r.second); + } + f->close_section(); + f->close_section(); + } + f->close_section(); + } + f->close_section(); + f->flush(cmdctx->odata); + cmdctx->reply(0, ss); + return true; + } + // ----------- // PG commands diff --git a/src/mgr/MgrCommands.h b/src/mgr/MgrCommands.h index 91886a2d2fe..62d3df508af 100644 --- a/src/mgr/MgrCommands.h +++ b/src/mgr/MgrCommands.h @@ -110,3 +110,8 @@ COMMAND("osd repair " \ "name=who,type=CephString", \ "initiate repair on osd , or use to repair all", \ "osd", "rw", "cli,rest") + +COMMAND("service dump", + "dump service map", "service", "r", "cli,rest") +COMMAND("service status", + "dump service state", "service", "r", "cli,rest") -- 2.39.5