From: Dan Mick Date: Wed, 10 Jul 2013 23:59:22 +0000 (-0700) Subject: mon: add formatted output for several commands: X-Git-Tag: v0.67-rc1~100 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=db71a3806328bb183d160d1e16896016770610fa;p=ceph.git mon: add formatted output for several commands: pg stat pg map osd stat osd lspools osd blacklist ls osd create osd getmaxosd mds compat show Signed-off-by: Dan Mick --- diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 80254660b49..169834ab0e3 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -547,6 +547,9 @@ bool MDSMonitor::preprocess_command(MMonCommand *m) string prefix; cmd_getval(g_ceph_context, cmdmap, "prefix", prefix); + string format; + cmd_getval(g_ceph_context, cmdmap, "format", format, string("plain")); + boost::scoped_ptr f(new_formatter(format)); MonSession *session = m->get_session(); if (!session || @@ -557,11 +560,14 @@ bool MDSMonitor::preprocess_command(MMonCommand *m) } if (prefix == "mds stat") { - ds << mdsmap; + if (f) { + dump_info(f.get()); + f->flush(ds); + } else { + ds << mdsmap; + } r = 0; } else if (prefix == "mds dump") { - string format; - cmd_getval(g_ceph_context, cmdmap, "format", format, string("plain")); string val; int64_t epocharg; epoch_t epoch; @@ -584,7 +590,6 @@ bool MDSMonitor::preprocess_command(MMonCommand *m) } if (p) { stringstream ds; - boost::scoped_ptr f(new_formatter(format)); if (f != NULL) { f->open_object_section("mdsmap"); p->dump(f.get()); @@ -662,7 +667,14 @@ bool MDSMonitor::preprocess_command(MMonCommand *m) } else ss << "specify mds number or *"; } } else if (prefix == "mds compat show") { - ds << mdsmap.compat; + if (f) { + f->open_object_section("mds_compat"); + mdsmap.compat.dump(f.get()); + f->close_section(); + f->flush(ds); + } else { + ds << mdsmap.compat; + } r = 0; } diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index cbc7656632b..824741b78b0 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1946,7 +1946,7 @@ bool OSDMonitor::preprocess_command(MMonCommand *m) boost::scoped_ptr f(new_formatter(format)); if (prefix == "osd stat") { - osdmap.print_summary(ds); + osdmap.print_summary(f.get(), ds); rdata.append(ds); } else if (prefix == "osd dump" || @@ -2029,8 +2029,16 @@ bool OSDMonitor::preprocess_command(MMonCommand *m) if (p != &osdmap) delete p; } else if (prefix == "osd getmaxosd") { - ds << "max_osd = " << osdmap.get_max_osd() << " in epoch " << osdmap.get_epoch(); - rdata.append(ds); + if (f) { + f->open_object_section("getmaxosd"); + f->dump_int("epoch", osdmap.get_epoch()); + f->dump_int("max_osd", osdmap.get_max_osd()); + f->close_section(); + f->flush(rdata); + } else { + ds << "max_osd = " << osdmap.get_max_osd() << " in epoch " << osdmap.get_epoch(); + rdata.append(ds); + } } else if (prefix == "osd find") { int64_t osd; cmd_getval(g_ceph_context, cmdmap, "id", osd); @@ -2122,24 +2130,51 @@ bool OSDMonitor::preprocess_command(MMonCommand *m) } else if (prefix == "osd lspools") { int64_t auid; cmd_getval(g_ceph_context, cmdmap, "auid", auid, int64_t(0)); + if (f) + f->open_array_section("pools"); for (map::iterator p = osdmap.pools.begin(); p != osdmap.pools.end(); ++p) { if (!auid || p->second.auid == (uint64_t)auid) { - ds << p->first << ' ' << osdmap.pool_name[p->first] << ','; + if (f) { + f->open_object_section("pool"); + f->dump_int("poolnum", p->first); + f->dump_string("poolname", osdmap.pool_name[p->first]); + f->close_section(); + } else { + ds << p->first << ' ' << osdmap.pool_name[p->first] << ','; + } } } + if (f) { + f->close_section(); + f->flush(ds); + } rdata.append(ds); } else if (prefix == "osd blacklist ls") { + if (f) + f->open_array_section("blacklist"); + for (hash_map::iterator p = osdmap.blacklist.begin(); p != osdmap.blacklist.end(); ++p) { - stringstream ss; - string s; - ss << p->first << " " << p->second; - getline(ss, s); - s += "\n"; - rdata.append(s); + if (f) { + f->open_object_section("entry"); + f->dump_stream("addr") << p->first; + f->dump_stream("until") << p->second; + f->close_section(); + } else { + stringstream ss; + string s; + ss << p->first << " " << p->second; + getline(ss, s); + s += "\n"; + rdata.append(s); + } + } + if (f) { + f->close_section(); + f->flush(rdata); } ss << "listed " << osdmap.blacklist.size() << " entries"; } else if (prefix == "osd crush rule list" || @@ -2464,6 +2499,10 @@ bool OSDMonitor::prepare_command(MMonCommand *m) return true; } + string format; + cmd_getval(g_ceph_context, cmdmap, "format", format, string("plain")); + boost::scoped_ptr f(new_formatter(format)); + MonSession *session = m->get_session(); if (!session || (!session->is_capable("osd", MON_CAP_W) && @@ -3080,8 +3119,15 @@ bool OSDMonitor::prepare_command(MMonCommand *m) if (i >= 0) { // osd already exists err = 0; - ss << i; - rdata.append(ss); + if (f) { + f->open_object_section("created_osd"); + f->dump_int("osdid", i); + f->close_section(); + f->flush(rdata); + } else { + ss << i; + rdata.append(ss); + } goto reply; } i = pending_inc.identify_osd(uuid); @@ -3113,8 +3159,15 @@ done: pending_inc.new_state[i] |= CEPH_OSD_EXISTS | CEPH_OSD_NEW; if (!uuid.is_zero()) pending_inc.new_uuid[i] = uuid; - ss << i; - rdata.append(ss); + if (f) { + f->open_object_section("created_osd"); + f->dump_int("osdid", i); + f->close_section(); + f->flush(rdata); + } else { + ss << i; + rdata.append(ss); + } wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, rdata, get_last_committed())); return true; diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 0e6e1749725..6fb0b78b03b 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -1338,7 +1338,14 @@ bool PGMonitor::preprocess_command(MMonCommand *m) boost::scoped_ptr f(new_formatter(format)); if (prefix == "pg stat") { - ds << pg_map; + if (f) { + f->open_object_section("pg_map"); + pg_map.dump(f.get()); + f->close_section(); + f->flush(ds); + } else { + ds << pg_map; + } rdata.append(ds); r = 0; } else if (prefix == "pg getmap") { @@ -1425,9 +1432,29 @@ bool PGMonitor::preprocess_command(MMonCommand *m) } pg_t mpgid = mon->osdmon()->osdmap.raw_pg_to_pg(pgid); mon->osdmon()->osdmap.pg_to_up_acting_osds(pgid, up, acting); - ds << "osdmap e" << mon->osdmon()->osdmap.get_epoch() - << " pg " << pgid << " (" << mpgid << ")" - << " -> up " << up << " acting " << acting; + if (f) { + f->open_object_section("pg_map"); + f->dump_stream("epoch") << mon->osdmon()->osdmap.get_epoch(); + f->dump_stream("pgid") << pgid; + f->dump_stream("mpgid") << mpgid; + + f->open_array_section("up"); + for (vector::iterator it = up.begin(); it != up.end(); ++it) + f->dump_int("up_osd", *it); + f->close_section(); + + f->open_array_section("acting"); + for (vector::iterator it = acting.begin(); it != acting.end(); ++it) + f->dump_int("acting_osd", *it); + f->close_section(); + + f->close_section(); + f->flush(ds); + } else { + ds << "osdmap e" << mon->osdmon()->osdmap.get_epoch() + << " pg " << pgid << " (" << mpgid << ")" + << " -> up " << up << " acting " << acting; + } r = 0; } else if (prefix == "pg scrub" || prefix == "pg repair" || diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 9eecf173e5b..330180debd8 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1723,16 +1723,29 @@ void OSDMap::print_tree(ostream *out, Formatter *f) const f->close_section(); } -void OSDMap::print_summary(ostream& out) const -{ - out << "e" << get_epoch() << ": " - << get_num_osds() << " osds: " - << get_num_up_osds() << " up, " - << get_num_in_osds() << " in"; - if (test_flag(CEPH_OSDMAP_FULL)) - out << " full"; - else if (test_flag(CEPH_OSDMAP_NEARFULL)) - out << " nearfull"; +void OSDMap::print_summary(Formatter *f, ostream& out) const +{ + if (f) { + f->open_object_section("osdmap"); + f->dump_int("epoch", get_epoch()); + f->dump_int("num_osds", get_num_osds()); + f->dump_int("num_up_osds", get_num_up_osds()); + f->dump_stream("num_in_osds") << get_num_in_osds(); + f->dump_string("full", test_flag(CEPH_OSDMAP_FULL) ? "true" : "false"); + f->dump_string("nearfull", test_flag(CEPH_OSDMAP_NEARFULL) ? + "true" : "false"); + f->close_section(); + f->flush(out); + } else { + out << "e" << get_epoch() << ": " + << get_num_osds() << " osds: " + << get_num_up_osds() << " up, " + << get_num_in_osds() << " in"; + if (test_flag(CEPH_OSDMAP_FULL)) + out << " full"; + else if (test_flag(CEPH_OSDMAP_NEARFULL)) + out << " nearfull"; + } } bool OSDMap::crush_ruleset_in_use(int ruleset) const diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 92d1c5bf8a1..0badd0abea3 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -605,7 +605,7 @@ private: void print_osd_line(int cur, ostream *out, Formatter *f) const; public: void print(ostream& out) const; - void print_summary(ostream& out) const; + void print_summary(Formatter *f, ostream& out) const; void print_tree(ostream *out, Formatter *f) const; string get_flag_string() const; @@ -621,7 +621,7 @@ WRITE_CLASS_ENCODER_FEATURES(OSDMap::Incremental) typedef std::tr1::shared_ptr OSDMapRef; inline ostream& operator<<(ostream& out, const OSDMap& m) { - m.print_summary(out); + m.print_summary(NULL, out); return out; }