}
}
-void OpHistory::dump_ops(utime_t now, Formatter *f, set<string> filters)
+void OpHistory::dump_ops(utime_t now, Formatter *f, set<string> filters, bool by_duration)
{
Mutex::Locker history_lock(ops_history_lock);
cleanup(now);
f->dump_int("duration", history_duration);
{
f->open_array_section("ops");
- for (auto i = arrived.begin();
- i != arrived.end();
- ++i) {
- if (!i->second->filter_out(filters))
- continue;
- f->open_object_section("op");
- i->second->dump(now, f);
- f->close_section();
- }
- f->close_section();
- }
- f->close_section();
-}
+ auto dump_fn = [&f, &now, &filters](auto begin_iter, auto end_iter) {
+ for (auto i=begin_iter; i!=end_iter; ++i) {
+ if (!i->second->filter_out(filters))
+ continue;
+ f->open_object_section("op");
+ i->second->dump(now, f);
+ f->close_section();
+ }
+ };
-void OpHistory::dump_ops_by_duration(utime_t now, Formatter *f, set<string> filters)
-{
- Mutex::Locker history_lock(ops_history_lock);
- cleanup(now);
- f->open_object_section("op_history");
- f->dump_int("size", history_size);
- f->dump_int("duration", history_duration);
- {
- f->open_array_section("ops");
- for (auto i = duration.rbegin(); i != duration.rend(); ++i) {
- f->open_object_section("op");
- if (!i->second->filter_out(filters))
- continue;
- i->second->dump(now, f);
- f->close_section();
+ if (by_duration) {
+ dump_fn(duration.rbegin(), duration.rend());
+ } else {
+ dump_fn(arrived.begin(), arrived.end());
}
f->close_section();
}
RWLock::RLocker l(lock);
utime_t now = ceph_clock_now();
- if (by_duration) {
- history.dump_ops_by_duration(now, f, filters);
- } else {
- history.dump_ops(now, f, filters);
- }
+ history.dump_ops(now, f, filters, by_duration);
return true;
}
}
void _insert_delayed(const utime_t& now, TrackedOpRef op);
- void dump_ops(utime_t now, Formatter *f, set<string> filters = {""});
- void dump_ops_by_duration(utime_t now, Formatter *f, set<string> filters = {""});
+ void dump_ops(utime_t now, Formatter *f, set<string> filters = {""}, bool by_duration=false);
void dump_slow_ops(utime_t now, Formatter *f, set<string> filters = {""});
void on_shutdown();
void set_size_and_duration(uint32_t new_size, uint32_t new_duration) {