@ApiController('tcmuiscsi')
@AuthRequired()
class TcmuIscsi(RESTController):
+ def _get_rate(self, daemon_type, daemon_name, stat):
+ data = mgr.get_counter(daemon_type, daemon_name, stat)[stat]
+
+ if data and len(data) > 1:
+ return (data[-1][1] - data[-2][1]) / float(data[-1][0] - data[-2][0])
+ return 0
+
# pylint: disable=too-many-locals,too-many-nested-blocks
def list(self): # pylint: disable=unused-argument
daemons = {}
image['stats_history'] = {}
for s in ['rd', 'wr', 'rd_bytes', 'wr_bytes']:
perf_key = "{}{}".format(perf_key_prefix, s)
- image['stats'][s] = mgr.get_rate(
+ image['stats'][s] = self._get_rate(
'tcmu-runner', service_id, perf_key)
image['stats_history'][s] = mgr.get_counter(
'tcmu-runner', service_id, perf_key)[perf_key]
mocked_get_counter = {
'librbd-42-pool1-image1.lock_acquired_time': [[10000.0, 10000.0]],
- 'librbd-42-pool1-image1.rd': 43,
- 'librbd-42-pool1-image1.wr': 44,
- 'librbd-42-pool1-image1.rd_bytes': 45,
- 'librbd-42-pool1-image1.wr_bytes': 46,
+ 'librbd-42-pool1-image1.rd': [[0, 0], [1, 43]],
+ 'librbd-42-pool1-image1.wr': [[0, 0], [1, 44]],
+ 'librbd-42-pool1-image1.rd_bytes': [[0, 0], [1, 45]],
+ 'librbd-42-pool1-image1.wr_bytes': [[0, 0], [1, 46]],
}
-mocked_get_rate = 47
-
class TcmuIscsiControllerTest(ControllerTestCase):
mgr.get_metadata.return_value = mocked_metadata
mgr.get_daemon_status.return_value = mocked_get_daemon_status
mgr.get_counter.return_value = mocked_get_counter
- mgr.get_rate.return_value = mocked_get_rate
mgr.url_prefix = ''
TcmuIscsi._cp_config['tools.authenticate.on'] = False # pylint: disable=protected-access
'id': '42', 'optimized_paths': ['ceph-dev'],
'non_optimized_paths': [],
'optimized_since': 1e-05,
- 'stats': {'rd': 47, 'rd_bytes': 47, 'wr': 47, 'wr_bytes': 47},
+ 'stats': {
+ 'rd': 43.0,
+ 'wr': 44.0,
+ 'rd_bytes': 45.0,
+ 'wr_bytes': 46.0},
'stats_history': {
- 'rd': 43, 'wr': 44, 'rd_bytes': 45, 'wr_bytes': 46}
+ 'rd': [[0, 0], [1, 43]],
+ 'wr': [[0, 0], [1, 44]],
+ 'rd_bytes': [[0, 0], [1, 45]],
+ 'wr_bytes': [[0, 0], [1, 46]]}
}]
})