@@ -14443,33 +14443,59 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
1444314443 ss << " availability tracking is disabled; you can enable it by setting the config option enable_availability_tracking" ;
1444414444 err = -EOPNOTSUPP;
1444514445 goto reply_no_propose;
14446- }
14447- TextTable tbl;
14448- tbl.define_column (" POOL" , TextTable::LEFT, TextTable::LEFT);
14449- tbl.define_column (" UPTIME" , TextTable::LEFT, TextTable::RIGHT);
14450- tbl.define_column (" DOWNTIME" , TextTable::LEFT, TextTable::RIGHT);
14451- tbl.define_column (" NUMFAILURES" , TextTable::LEFT, TextTable::RIGHT);
14452- tbl.define_column (" MTBF" , TextTable::LEFT, TextTable::RIGHT);
14453- tbl.define_column (" MTTR" , TextTable::LEFT, TextTable::RIGHT);
14454- tbl.define_column (" SCORE" , TextTable::LEFT, TextTable::RIGHT);
14455- tbl.define_column (" AVAILABLE" , TextTable::LEFT, TextTable::RIGHT);
14446+ }
14447+
1445614448 std::map<uint64_t , PoolAvailability> pool_availability = mon.mgrstatmon ()->get_pool_availability ();
14457- for (const auto & i : pool_availability) {
14458- const auto & p = i.second ;
14459- double mtbf = p.num_failures > 0 ? (p.uptime / p.num_failures ) : 0 ;
14460- double mttr = p.num_failures > 0 ? (p.downtime / p.num_failures ) : 0 ;
14461- double score = mtbf > 0 ? mtbf / (mtbf + mttr): 1.0 ;
14462- tbl << p.pool_name ;
14463- tbl << timespan_str (make_timespan (p.uptime ));
14464- tbl << timespan_str (make_timespan (p.downtime ));
14465- tbl << p.num_failures ;
14466- tbl << timespan_str (make_timespan (mtbf));
14467- tbl << timespan_str (make_timespan (mttr));
14468- tbl << score;
14469- tbl << p.is_avail ;
14470- tbl << TextTable::endrow;
14471- }
14472- rdata.append (stringify (tbl));
14449+
14450+ if (f) {
14451+ f->open_array_section (" pools" );
14452+ for (const auto & i : pool_availability) {
14453+ const auto & p = i.second ;
14454+ double mtbf = p.num_failures > 0 ? (p.uptime / p.num_failures ) : 0 ;
14455+ double mttr = p.num_failures > 0 ? (p.downtime / p.num_failures ) : 0 ;
14456+ double score = mtbf > 0 ? mtbf / (mtbf + mttr): 1.0 ;
14457+
14458+ f->open_object_section (" pool" );
14459+ f->dump_string (" pool" , p.pool_name );
14460+ f->dump_unsigned (" uptime" , p.uptime );
14461+ f->dump_unsigned (" downtime" , p.downtime );
14462+ f->dump_float (" mtbf" , mtbf);
14463+ f->dump_float (" mttr" , mttr);
14464+ f->dump_unsigned (" num_failures" , p.num_failures );
14465+ f->dump_float (" score" , score);
14466+ f->dump_bool (" available" , p.is_avail );
14467+ f->close_section ();
14468+ }
14469+ f->close_section ();
14470+ f->flush (rdata);
14471+ } else {
14472+ TextTable tbl;
14473+ tbl.define_column (" POOL" , TextTable::LEFT, TextTable::LEFT);
14474+ tbl.define_column (" UPTIME" , TextTable::LEFT, TextTable::RIGHT);
14475+ tbl.define_column (" DOWNTIME" , TextTable::LEFT, TextTable::RIGHT);
14476+ tbl.define_column (" NUMFAILURES" , TextTable::LEFT, TextTable::RIGHT);
14477+ tbl.define_column (" MTBF" , TextTable::LEFT, TextTable::RIGHT);
14478+ tbl.define_column (" MTTR" , TextTable::LEFT, TextTable::RIGHT);
14479+ tbl.define_column (" SCORE" , TextTable::LEFT, TextTable::RIGHT);
14480+ tbl.define_column (" AVAILABLE" , TextTable::LEFT, TextTable::RIGHT);
14481+
14482+ for (const auto & i : pool_availability) {
14483+ const auto & p = i.second ;
14484+ double mtbf = p.num_failures > 0 ? (p.uptime / p.num_failures ) : 0 ;
14485+ double mttr = p.num_failures > 0 ? (p.downtime / p.num_failures ) : 0 ;
14486+ double score = mtbf > 0 ? mtbf / (mtbf + mttr): 1.0 ;
14487+ tbl << p.pool_name ;
14488+ tbl << timespan_str (make_timespan (p.uptime ));
14489+ tbl << timespan_str (make_timespan (p.downtime ));
14490+ tbl << p.num_failures ;
14491+ tbl << timespan_str (make_timespan (mtbf));
14492+ tbl << timespan_str (make_timespan (mttr));
14493+ tbl << score;
14494+ tbl << p.is_avail ;
14495+ tbl << TextTable::endrow;
14496+ }
14497+ rdata.append (stringify (tbl));
14498+ }
1447314499 } else if (prefix == " osd force-create-pg" ) {
1447414500 pg_t pgid;
1447514501 string pgidstr;
0 commit comments