]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: only dump non-empty "task status"
authorKefu Chai <kchai@redhat.com>
Thu, 16 Jul 2020 11:39:13 +0000 (19:39 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 16 Jul 2020 11:41:59 +0000 (19:41 +0800)
* 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 <kchai@redhat.com>
src/mgr/ServiceMap.cc
src/mgr/ServiceMap.h
src/mon/Monitor.cc

index f2abcfb9ab8eaf56ada550a13a82a6e6a0246547..490b118bcf0c618def658dab74d2fbefe3c05e8c 100644 (file)
@@ -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:
index e91ce94ad15d21362591f44e94d465a6b75f4e25..ed027907c54430ad8f62063aaf5310879199e848 100644 (file)
@@ -41,6 +41,7 @@ struct ServiceMap {
     static void generate_test_instances(std::list<Service*>& 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<std::string,int> *out) const;
index f7abdba65ecbfaaf3142a4305d9b571ea541d8a9..0e47ffea0fb87da318d1e7ed6c0f306ea5330fbd 100644 (file)
@@ -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);
       }
     }