From: Kefu Chai Date: Thu, 16 Jul 2020 11:39:13 +0000 (+0800) Subject: mon: only dump non-empty "task status" X-Git-Tag: v16.1.0~1692^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7305acda01b1f4b66327cd2ce5e6b12acfb65de6;p=ceph.git mon: only dump non-empty "task status" * mgr/ServiceMap: add ServiceMap::Service::has_running_tasks() to tell if a service has any running tasks * mon/Monitor: do not print an empty "task status" section when printing cluster status. it's just confusing. Signed-off-by: Kefu Chai --- diff --git a/src/mgr/ServiceMap.cc b/src/mgr/ServiceMap.cc index f2abcfb9ab8e..490b118bcf0c 100644 --- a/src/mgr/ServiceMap.cc +++ b/src/mgr/ServiceMap.cc @@ -91,6 +91,13 @@ std::string ServiceMap::Service::get_summary() const return ss.str(); } +bool ServiceMap::Service::has_running_tasks() const +{ + return std::any_of(daemons.begin(), daemons.end(), [](auto& daemon) { + return !daemon.second.task_status.empty(); + }); +} + std::string ServiceMap::Service::get_task_summary(const std::string_view task_prefix) const { // contruct a map similar to: diff --git a/src/mgr/ServiceMap.h b/src/mgr/ServiceMap.h index e91ce94ad15d..ed027907c544 100644 --- a/src/mgr/ServiceMap.h +++ b/src/mgr/ServiceMap.h @@ -41,6 +41,7 @@ struct ServiceMap { static void generate_test_instances(std::list& ls); std::string get_summary() const; + bool has_running_tasks() const; std::string get_task_summary(const std::string_view task_prefix) const; void count_metadata(const std::string& field, std::map *out) const; diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index f7abdba65ecb..0e47ffea0fb8 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -3027,15 +3027,15 @@ void Monitor::get_cluster_status(stringstream &ss, Formatter *f) } } - { - auto& service_map = mgrstatmon()->get_service_map(); - if (!service_map.services.empty()) { - ss << "\n \n task status:\n"; - { - for (auto &p : service_map.services) { - ss << p.second.get_task_summary(p.first); - } - } + if (auto& service_map = mgrstatmon()->get_service_map(); + std::any_of(service_map.services.begin(), + service_map.services.end(), + [](auto& service) { + return service.second.has_running_tasks(); + })) { + ss << "\n \n task status:\n"; + for (auto& [name, service] : service_map.services) { + ss << service.get_task_summary(name); } }