From: Venky Shankar Date: Thu, 25 Mar 2021 09:40:28 +0000 (-0400) Subject: cephfs-top: include additional metrics reported by `fs perf stats`. X-Git-Tag: v16.2.0~10^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=cec0518f32de54ec4dc9700aeffc926df4be6fb8;p=ceph.git cephfs-top: include additional metrics reported by `fs perf stats`. Without this, `cephfs-top` hits an exception since the additional metrics keys were not configured. Also, include a validation suring selftest that checks if `ceph fs perf stats` metrics match what cephfs-top is configured to report. Fixes: http://tracker.ceph.com/issues/49974 Signed-off-by: Venky Shankar (cherry picked from commit 5a119dcc13354549071dddae96e9fb6f7df747e5) --- diff --git a/src/tools/cephfs/top/cephfs-top b/src/tools/cephfs/top/cephfs-top index f5a74b8264544..44c3b21330f30 100755 --- a/src/tools/cephfs/top/cephfs-top +++ b/src/tools/cephfs/top/cephfs-top @@ -56,6 +56,9 @@ MAIN_WINDOW_TOP_LINE_METRICS = OrderedDict([ ("WRITE_LATENCY", MetricType.METRIC_TYPE_LATENCY), ("METADATA_LATENCY", MetricType.METRIC_TYPE_LATENCY), ("DENTRY_LEASE", MetricType.METRIC_TYPE_PERCENTAGE), + ("OPENED_FILES", MetricType.METRIC_TYPE_NONE), + ("PINNED_ICAPS", MetricType.METRIC_TYPE_NONE), + ("OPENED_INODES", MetricType.METRIC_TYPE_NONE), ]) MGR_STATS_COUNTERS = list(MAIN_WINDOW_TOP_LINE_METRICS.keys()) @@ -130,6 +133,9 @@ class FSTop(object): stats_json = self.perf_stats_query() if not stats_json['version'] == FS_TOP_SUPPORTED_VER: raise FSTopException('perf stats version mismatch!') + missing = [m for m in stats_json["global_counters"] if m.upper() not in MGR_STATS_COUNTERS] + if missing: + raise FSTopException(f'Cannot handle unknown metrics from \'ceph fs perf stats\': {missing}') def setup_curses(self): self.stdscr = curses.initscr() @@ -173,6 +179,7 @@ class FSTop(object): elif typ == MetricType.METRIC_TYPE_LATENCY: return "(s)" else: + # return empty string for none type return '' def refresh_top_line_and_build_coord(self): @@ -228,6 +235,9 @@ class FSTop(object): self.mainw.addstr(y_coord, coord[0], f'{calc_perc(m)}') elif typ == MetricType.METRIC_TYPE_LATENCY: self.mainw.addstr(y_coord, coord[0], f'{calc_lat(m)}') + else: + # display 0th element from metric tuple + self.mainw.addstr(y_coord, coord[0], f'{m[0]}') else: self.mainw.addstr(y_coord, coord[0], "N/A") cidx += 1