tbl.define_column("HOST:DEV", TextTable::LEFT, TextTable::LEFT);
tbl.define_column("DAEMONS", TextTable::LEFT, TextTable::LEFT);
tbl.define_column("LIFE EXPECTANCY", TextTable::LEFT, TextTable::LEFT);
- daemon_state.with_devices([&tbl](const DeviceState& dev) {
+ auto now = ceph_clock_now();
+ daemon_state.with_devices([&tbl, now](const DeviceState& dev) {
string h;
for (auto& i : dev.devnames) {
if (h.size()) {
tbl << dev.devid
<< h
<< d
- << dev.get_life_expectancy_str()
+ << dev.get_life_expectancy_str(now)
<< TextTable::endrow;
});
cmdctx->odata.append(stringify(tbl));
tbl.define_column("HOST:DEV", TextTable::LEFT, TextTable::LEFT);
tbl.define_column("EXPECTED FAILURE", TextTable::LEFT,
TextTable::LEFT);
+ auto now = ceph_clock_now();
for (auto& i : dm->devices) {
- daemon_state.with_device(i.first, [&tbl] (const DeviceState& dev) {
+ daemon_state.with_device(
+ i.first, [&tbl, now] (const DeviceState& dev) {
string h;
for (auto& i : dev.devnames) {
if (h.size()) {
}
tbl << dev.devid
<< h
- << dev.get_life_expectancy_str()
+ << dev.get_life_expectancy_str(now)
<< TextTable::endrow;
});
}
tbl.define_column("DEV", TextTable::LEFT, TextTable::LEFT);
tbl.define_column("DAEMONS", TextTable::LEFT, TextTable::LEFT);
tbl.define_column("EXPECTED FAILURE", TextTable::LEFT, TextTable::LEFT);
+ auto now = ceph_clock_now();
for (auto& devid : devids) {
daemon_state.with_device(
- devid, [&tbl, &host] (const DeviceState& dev) {
+ devid, [&tbl, &host, now] (const DeviceState& dev) {
string n;
for (auto& j : dev.devnames) {
if (j.first == host) {
tbl << dev.devid
<< n
<< d
- << dev.get_life_expectancy_str()
+ << dev.get_life_expectancy_str(now)
<< TextTable::endrow;
});
}
metadata.erase("life_expectancy_stamp");
}
-string DeviceState::get_life_expectancy_str() const
+string DeviceState::get_life_expectancy_str(utime_t now) const
{
if (life_expectancy.first == utime_t()) {
return string();
}
- return stringify(life_expectancy.first) + " to " +
- stringify(life_expectancy.second);
+ if (now >= life_expectancy.first) {
+ return "now";
+ }
+ utime_t min = life_expectancy.first - now;
+ utime_t max = life_expectancy.second - now;
+ if (life_expectancy.second == utime_t()) {
+ return string(">") + timespan_str(make_timespan(min));
+ }
+ string a = timespan_str(make_timespan(min));
+ string b = timespan_str(make_timespan(max));
+ if (a == b) {
+ return a;
+ }
+ return a + " to " + b;
}
void DeviceState::dump(Formatter *f) const