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<Formatter> f(new_formatter(format));
MonSession *session = m->get_session();
if (!session ||
}
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;
}
if (p) {
stringstream ds;
- boost::scoped_ptr<Formatter> f(new_formatter(format));
if (f != NULL) {
f->open_object_section("mdsmap");
p->dump(f.get());
} 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;
}
boost::scoped_ptr<Formatter> 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" ||
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);
} 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<int64_t, pg_pool_t>::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<entity_addr_t,utime_t>::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" ||
return true;
}
+ string format;
+ cmd_getval(g_ceph_context, cmdmap, "format", format, string("plain"));
+ boost::scoped_ptr<Formatter> f(new_formatter(format));
+
MonSession *session = m->get_session();
if (!session ||
(!session->is_capable("osd", MON_CAP_W) &&
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);
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;
boost::scoped_ptr<Formatter> 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") {
}
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<int>::iterator it = up.begin(); it != up.end(); ++it)
+ f->dump_int("up_osd", *it);
+ f->close_section();
+
+ f->open_array_section("acting");
+ for (vector<int>::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" ||
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
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;
typedef std::tr1::shared_ptr<const OSDMap> OSDMapRef;
inline ostream& operator<<(ostream& out, const OSDMap& m) {
- m.print_summary(out);
+ m.print_summary(NULL, out);
return out;
}