if (!i->second->filter_out(filters))
continue;
f->open_object_section("op");
- i->second->dump(now, f);
+ i->second->dump(now, f, OpTracker::default_dumper);
f->close_section();
}
};
if (!i->second->filter_out(filters))
continue;
f->open_object_section("Op");
- i->second->dump(now, f);
+ i->second->dump(now, f, OpTracker::default_dumper);
f->close_section();
}
f->close_section();
return true;
}
-bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked, set<string> filters, bool count_only)
+bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked, set<string> filters, bool count_only, dumper lambda)
{
if (!tracking_enabled)
return false;
if (!count_only) {
f->open_object_section("op");
- op.dump(now, f);
+ op.dump(now, f, lambda);
f->close_section(); // this TrackedOp
}
_event_marked();
}
-void TrackedOp::dump(utime_t now, Formatter *f) const
+void TrackedOp::dump(utime_t now, Formatter *f, OpTracker::dumper lambda) const
{
// Ignore if still in the constructor
if (!state)
f->dump_float("duration", get_duration());
{
f->open_object_section("type_data");
- _dump(f);
+ lambda(*this, f);
f->close_section();
}
}
ceph::shared_mutex lock = ceph::make_shared_mutex("OpTracker::lock");
public:
+ using dumper = std::function<void(const TrackedOp&, Formatter*)>;
+
CephContext *cct;
OpTracker(CephContext *cct_, bool tracking, uint32_t num_shards);
void set_tracking(bool enable) {
tracking_enabled = enable;
}
- bool dump_ops_in_flight(ceph::Formatter *f, bool print_only_blocked = false, std::set<std::string> filters = {""}, bool count_only = false);
+ static void default_dumper(const TrackedOp& op, Formatter* f);
+ bool dump_ops_in_flight(ceph::Formatter *f, bool print_only_blocked = false, std::set<std::string> filters = {""}, bool count_only = false, dumper lambda = default_dumper);
bool dump_historic_ops(ceph::Formatter *f, bool by_duration = false, std::set<std::string> filters = {""});
bool dump_historic_slow_ops(ceph::Formatter *f, std::set<std::string> filters = {""});
bool register_inflight_op(TrackedOp *i);
want_new_desc = true;
}
+ void dump_type(Formatter* f) const {
+ return _dump(f);
+ }
+
const utime_t& get_initiated() const {
return initiated_at;
}
return _get_state_string();
}
- void dump(utime_t now, ceph::Formatter *f) const;
+ void dump(utime_t now, ceph::Formatter *f, OpTracker::dumper lambda) const;
void tracking_start() {
if (tracker->register_inflight_op(this)) {
}
};
+inline void OpTracker::default_dumper(const TrackedOp& op, Formatter* f) {
+ op._dump(f);
+}
#endif