From e55ef24c9140c23c832a2205a2154e68452545a3 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 31 Oct 2017 11:05:47 -0400 Subject: [PATCH] mgr/dashboard: added iSCSI IOPS/throughput metrics Fixes: http://tracker.ceph.com/issues/21391 Signed-off-by: Jason Dillaman --- src/pybind/mgr/dashboard/rbd_iscsi.html | 24 ++++++++++++++++++++++-- src/pybind/mgr/dashboard/rbd_iscsi.py | 8 ++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/pybind/mgr/dashboard/rbd_iscsi.html b/src/pybind/mgr/dashboard/rbd_iscsi.html index d49796cff79..ef648e149ce 100644 --- a/src/pybind/mgr/dashboard/rbd_iscsi.html +++ b/src/pybind/mgr/dashboard/rbd_iscsi.html @@ -10,7 +10,8 @@ var refresh = function() { $.get("{{ url_prefix }}/rbd_iscsi_data", function(data) { _.extend(content_data, data); - setTimeout(refresh, 30000); + $('.inlinesparkline').sparkline(); + setTimeout(refresh, 5000); }); }; @@ -23,8 +24,19 @@ return moment(date_str * 1000).fromNow(); } + rivets.formatters.sparkline_data = function(time_series) { + result = ""; + for (var i = 1; i < time_series.length; ++i) { + var delta_v = time_series[i][1] - time_series[i - 1][1]; + var delta_t = time_series[i][0] - time_series[i - 1][0]; + result += (delta_v / delta_t + ","); + } + return result; + }; + rivets.bind($("div#content"), content_data); - setTimeout(refresh, 30000); + $('.inlinesparkline').sparkline(); + setTimeout(refresh, 5000); $('#daemons').DataTable({ 'paging' : true, @@ -92,6 +104,10 @@ Image Active/Optimized Active/Non-Optimized + Read Bytes + Write Bytes + Read Ops + Write Ops A/O Since @@ -101,6 +117,10 @@ {image.name} {image.optimized_paths} {image.non_optimized_paths} + {image.stats.rd_bytes | dimless_binary}/s + {image.stats.wr_bytes | dimless_binary}/s + {image.stats.rd | dimless}/s + {image.stats.wr | dimless}/s {image.optimized_since | relative_date} diff --git a/src/pybind/mgr/dashboard/rbd_iscsi.py b/src/pybind/mgr/dashboard/rbd_iscsi.py index 007abd11044..6f5e75ed180 100644 --- a/src/pybind/mgr/dashboard/rbd_iscsi.py +++ b/src/pybind/mgr/dashboard/rbd_iscsi.py @@ -54,6 +54,14 @@ class DaemonsAndImages(RemoteViewCache): [[0,0]])[-1][1] / 1000000000 if lock_acquired_time > image.get('optimized_since', None): image['optimized_since'] = lock_acquired_time + image['stats'] = {} + image['stats_history'] = {} + for s in ['rd', 'wr', 'rd_bytes', 'wr_bytes']: + perf_key = "{}{}".format(perf_key_prefix, s) + image['stats'][s] = self._module.get_rate( + 'tcmu-runner', service_id, perf_key) + image['stats_history'][s] = self._module.get_counter( + 'tcmu-runner', service_id, perf_key)[perf_key] else: daemon['non_optimized_paths'] += 1 image['non_optimized_paths'].append(server['hostname']) -- 2.39.5