From 989e04799be567ee93369a87b90405833c3fe8d2 Mon Sep 17 00:00:00 2001 From: Thorsten Behrens Date: Fri, 6 Feb 2015 01:26:40 +0100 Subject: [PATCH] Always provide summary for non-healthy cluster. This fixes a problem, wherein calamari does not provide popup drill-downs for warnings or errors, should the summary be missing. Calamari gets health info from /api/v1/cluster/$FSID/health. If the data here has a summary field, this summary is provided in a popup window: /api/v1/cluster/$FSID/health is populated (ultimately) with status obtained via librados python bindings from the ceph cluster. In the case where there's clock skew, the summary field supplied by the ceph cluster is empty. No summary field, no popup window with more health details. Signed-off-by: Thorsten Behrens (cherry picked from commit eaf6e0cf48488fe604d0ef0db164d44948d4e8d4) Conflicts: src/mon/Monitor.cc firefly needs ss --- src/mon/Monitor.cc | 49 +++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index c39faad23e2..371341c998b 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -1925,30 +1925,6 @@ void Monitor::get_health(string& status, bufferlist *detailbl, Formatter *f) health_monitor->get_health(f, summary, (detailbl ? &detail : NULL)); - if (f) - f->open_array_section("summary"); - stringstream ss; - health_status_t overall = HEALTH_OK; - if (!summary.empty()) { - ss << ' '; - while (!summary.empty()) { - if (overall > summary.front().first) - overall = summary.front().first; - ss << summary.front().second; - if (f) { - f->open_object_section("item"); - f->dump_stream("severity") << summary.front().first; - f->dump_string("summary", summary.front().second); - f->close_section(); - } - summary.pop_front(); - if (!summary.empty()) - ss << "; "; - } - } - if (f) - f->close_section(); - if (f) { f->open_object_section("timechecks"); f->dump_int("epoch", get_epoch()); @@ -1957,6 +1933,8 @@ void Monitor::get_health(string& status, bufferlist *detailbl, Formatter *f) << ((timecheck_round%2) ? "on-going" : "finished"); } + stringstream ss; + health_status_t overall = HEALTH_OK; if (!timecheck_skews.empty()) { list warns; if (f) @@ -2003,6 +1981,7 @@ void Monitor::get_health(string& status, bufferlist *detailbl, Formatter *f) if (!warns.empty()) ss << ","; } + summary.push_back(make_pair(HEALTH_WARN, "Monitor clock skew detected ")); } if (f) f->close_section(); @@ -2010,6 +1989,28 @@ void Monitor::get_health(string& status, bufferlist *detailbl, Formatter *f) if (f) f->close_section(); + if (f) + f->open_array_section("summary"); + if (!summary.empty()) { + ss << ' '; + while (!summary.empty()) { + if (overall > summary.front().first) + overall = summary.front().first; + ss << summary.front().second; + if (f) { + f->open_object_section("item"); + f->dump_stream("severity") << summary.front().first; + f->dump_string("summary", summary.front().second); + f->close_section(); + } + summary.pop_front(); + if (!summary.empty()) + ss << "; "; + } + } + if (f) + f->close_section(); + stringstream fss; fss << overall; status = fss.str() + ss.str(); -- 2.47.3