]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: add formatted output for several commands:
authorDan Mick <dan.mick@inktank.com>
Wed, 10 Jul 2013 23:59:22 +0000 (16:59 -0700)
committerDan Mick <dan.mick@inktank.com>
Thu, 11 Jul 2013 02:02:31 +0000 (19:02 -0700)
    pg stat
    pg map
    osd stat
    osd lspools
    osd blacklist ls
    osd create
    osd getmaxosd
    mds compat show

Signed-off-by: Dan Mick <dan.mick@inktank.com>
src/mon/MDSMonitor.cc
src/mon/OSDMonitor.cc
src/mon/PGMonitor.cc
src/osd/OSDMap.cc
src/osd/OSDMap.h

index 80254660b49c035066b3419be1a51f4d3f830435..169834ab0e3117506cd1137c52f780b20145199b 100644 (file)
@@ -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<Formatter> 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<Formatter> 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;
   }
 
index cbc7656632b186ec5068c93596087781ab6f4078..824741b78b0d9474add752e202198385de54b3d4 100644 (file)
@@ -1946,7 +1946,7 @@ bool OSDMonitor::preprocess_command(MMonCommand *m)
   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" ||
@@ -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<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" ||
@@ -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<Formatter> 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;
 
index 0e6e1749725e3b65db82ad7c46afbebd1a2c6201..6fb0b78b03b59cabe7aa9af216de7c8728646a92 100644 (file)
@@ -1338,7 +1338,14 @@ bool PGMonitor::preprocess_command(MMonCommand *m)
   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") {
@@ -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<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" || 
index 9eecf173e5baf0eed12b8f858a12ecd18342234a..330180debd846e5f54dcf338e8e934b96473fcb8 100644 (file)
@@ -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
index 92d1c5bf8a1abd46f978e8ef05349b91e1d7c0f6..0badd0abea3412a44714a48acbf7e344916b366e 100644 (file)
@@ -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<const OSDMap> OSDMapRef;
 
 inline ostream& operator<<(ostream& out, const OSDMap& m) {
-  m.print_summary(out);
+  m.print_summary(NULL, out);
   return out;
 }