]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: implement 'service dump' and 'service status'
authorSage Weil <sage@redhat.com>
Mon, 26 Jun 2017 17:22:30 +0000 (13:22 -0400)
committerSage Weil <sage@redhat.com>
Sun, 9 Jul 2017 02:31:01 +0000 (22:31 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mgr/DaemonServer.cc
src/mgr/MgrCommands.h

index 0362e84addd8c8445d926ef03b6e71074bdddaf0..53dce6db95533c917c7d05d5cc205a5e1dd27e7d 100644 (file)
@@ -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
 
index 91886a2d2fe6df2fc532c0b697b4bf281ec46e9d..62d3df508af2253df40babfad2706733e58ff7dd 100644 (file)
@@ -110,3 +110,8 @@ COMMAND("osd repair " \
        "name=who,type=CephString", \
        "initiate repair on osd <who>, or use <all|any|*> 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")