From c148a3cde5c256576d0a67a40321e543fdf891bf Mon Sep 17 00:00:00 2001 From: Joao Eduardo Luis Date: Mon, 12 Oct 2020 11:29:16 +0000 Subject: [PATCH] mon: have 'mon stat' output json as well Fixes: https://tracker.ceph.com/issues/46816 Signed-off-by: Joao Eduardo Luis --- src/mon/MonmapMonitor.cc | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index 7f47516335557..1e13c29447a8a 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -313,10 +313,29 @@ bool MonmapMonitor::preprocess_command(MonOpRequestRef op) boost::scoped_ptr f(Formatter::create(format)); if (prefix == "mon stat") { - mon->monmap->print_summary(ss); - ss << ", election epoch " << mon->get_epoch() << ", leader " - << mon->get_leader() << " " << mon->get_leader_name() - << ", quorum " << mon->get_quorum() << " " << mon->get_quorum_names(); + if (f) { + f->open_object_section("monmap"); + mon->monmap->dump_summary(f.get()); + f->dump_string("leader", mon->get_leader_name()); + f->open_array_section("quorum"); + for (auto rank: mon->get_quorum()) { + std::string name = mon->monmap->get_name(rank); + f->open_object_section("mon"); + f->dump_int("rank", rank); + f->dump_string("name", name); + f->close_section(); // mon + } + f->close_section(); // quorum + f->close_section(); // monmap + f->flush(ss); + } else { + mon->monmap->print_summary(ss); + ss << ", election epoch " << mon->get_epoch() << ", leader " + << mon->get_leader() << " " << mon->get_leader_name() + << ", quorum " << mon->get_quorum() + << " " << mon->get_quorum_names(); + } + rdata.append(ss); ss.str(""); r = 0; -- 2.39.5