if (!daemon_state.with_device(devid,
[&f, &rs] (const DeviceState& dev) {
if (f) {
- f->open_object_section("device");
- f->dump_string("devid", dev.devid);
- f->dump_string("host", dev.server);
- f->open_array_section("daemons");
- for (auto& i : dev.daemons) {
- f->dump_string("daemon", to_string(i));
- }
- f->close_section();
- if (dev.expected_failure != utime_t()) {
- f->dump_stream("expected_failure") << dev.expected_failure;
- f->dump_stream("expected_failure_stamp")
- << dev.expected_failure_stamp;
- }
- f->close_section();
+ f->dump_object("device", dev);
} else {
- rs << "device " << dev.devid << "\n";
- rs << "host " << dev.server << "\n";
- set<string> d;
- for (auto& j : dev.daemons) {
- d.insert(to_string(j));
- }
- rs << "daemons " << d << "\n";
- if (dev.expected_failure != utime_t()) {
- rs << "expected_failure " << dev.expected_failure
- << " (as of " << dev.expected_failure_stamp << ")\n";
- }
+ dev.print(rs);
}
})) {
ss << "device " << devid << " not found";
#include "MgrSession.h"
#include "include/stringify.h"
+#include "common/Formatter.h"
#define dout_context g_ceph_context
#define dout_subsys ceph_subsys_mgr
metadata.erase("expected_failure_stamp");
}
+void DeviceState::dump(Formatter *f) const
+{
+ f->dump_string("devid", devid);
+ f->dump_string("host", server);
+ f->open_array_section("daemons");
+ for (auto& i : daemons) {
+ f->dump_string("daemon", to_string(i));
+ }
+ f->close_section();
+ if (expected_failure != utime_t()) {
+ f->dump_stream("expected_failure") << expected_failure;
+ f->dump_stream("expected_failure_stamp")
+ << expected_failure_stamp;
+ }
+}
+
+void DeviceState::print(ostream& out) const
+{
+ out << "device " << devid << "\n";
+ out << "host " << server << "\n";
+ set<string> d;
+ for (auto& j : daemons) {
+ d.insert(to_string(j));
+ }
+ out << "daemons " << d << "\n";
+ if (expected_failure != utime_t()) {
+ out << "expected_failure " << expected_failure
+ << " (as of " << expected_failure_stamp << ")\n";
+ }
+}
+
void DaemonStateIndex::insert(DaemonStatePtr dm)
{
RWLock::WLocker l(lock);
// For PerfCounterType
#include "messages/MMgrReport.h"
+namespace ceph {
+ class Formatter;
+}
// Unique reference to a daemon within a cluster
typedef std::pair<std::string, std::string> DaemonKey;
bool empty() const {
return daemons.empty() && metadata.empty();
}
+
+ void dump(Formatter *f) const;
+ void print(ostream& out) const;
};
typedef boost::intrusive_ptr<DeviceState> DeviceStateRef;