]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OpTracker: give TrackedOp a default dump() function
authorGreg Farnum <greg@inktank.com>
Wed, 2 Oct 2013 22:10:36 +0000 (15:10 -0700)
committerGreg Farnum <greg@inktank.com>
Wed, 2 Oct 2013 22:10:36 +0000 (15:10 -0700)
Signed-off-by: Greg Farnum <greg@inktank.com>
src/common/TrackedOp.cc
src/common/TrackedOp.h

index 4ed9f20d1fcd79a8aa11600be5d7c20982d85a86..f2413d6fc7a8ce0bcc3977ae3c8df37275ada624 100644 (file)
@@ -247,3 +247,35 @@ void TrackedOp::mark_event(const string &event)
   }
   tracker->mark_event(this, event);
 }
+
+void TrackedOp::dump(utime_t now, Formatter *f) const
+{
+  Message *m = request;
+  stringstream name;
+  m->print(name);
+  f->dump_string("description", name.str().c_str()); // this TrackedOp
+  f->dump_stream("received_at") << get_arrived();
+  f->dump_float("age", now - get_arrived());
+  f->dump_float("duration", get_duration());
+  f->dump_string("current_state", state_string());
+  if (m->get_orig_source().is_client()) {
+    f->open_object_section("client_info");
+    stringstream client_name;
+    client_name << m->get_orig_source();
+    f->dump_string("client", client_name.str());
+    f->dump_int("tid", m->get_tid());
+    f->close_section(); // client_info
+  }
+  {
+    f->open_array_section("events");
+    for (list<pair<utime_t, string> >::const_iterator i = events.begin();
+        i != events.end();
+        ++i) {
+      f->open_object_section("event");
+      f->dump_stream("time") << i->first;
+      f->dump_string("event", i->second);
+      f->close_section();
+    }
+    f->close_section();
+  }
+}
index 9007a4d5bd2dab35481d1c51b60ddcbe203fc136..3344301c7c8cc4da1dcaf07e3c28e15db0afcbc8 100644 (file)
@@ -155,7 +155,7 @@ public:
   virtual const char *state_string() const {
     return events.rbegin()->second.c_str();
   }
-  virtual void dump(utime_t now, Formatter *f) const = 0;
+  virtual void dump(utime_t now, Formatter *f) const;
 };
 
 #endif