def test_init(self, cassandra_connect_mock): repo = cassandra_repo.MetricsRepository() self.assertIsNone( repo.cluster.auth_provider, 'cassandra cluster auth provider is expected to None') repo.conf.cassandra.user = '******' repo.conf.cassandra.password = '******' repo = cassandra_repo.MetricsRepository() self.assertIsInstance( repo.cluster.auth_provider, PlainTextAuthProvider, 'cassandra cluster auth provider is expected to be PlainTextAuthProvider' )
def test_list_metric_names(self, cassandra_connect_mock): cassandra_session_mock = cassandra_connect_mock.return_value cassandra_future_mock = cassandra_session_mock.execute_async.return_value Metric = namedtuple('Metric', 'metric_name') cassandra_future_mock.result.return_value = [ Metric('disk.space_used_perc'), Metric('cpu.idle_perc') ] cassandra_session_mock.execute.return_value = [ Metric('disk.space_used_perc'), Metric('cpu.idle_perc') ] repo = cassandra_repo.MetricsRepository() result = repo.list_metric_names( "0b5e7d8c43f74430add94fba09ffd66e", "region", dimensions={ "hostname": "host0", "hosttype": "native", "mount_point": "/", "device": "rootfs"}) self.assertEqual([ { u'name': u'cpu.idle_perc' }, { u'name': u'disk.space_used_perc' } ], result)
def test_check_status_server_error(self, cassandra_connect_mock): repo = cassandra_repo.MetricsRepository() cassandra_connect_mock.side_effect = \ cassandra.DriverException("Cluster is already shut down") result = repo.check_status() self.assertEqual(result, (False, 'Cluster is already shut down'))
def test_metrics_statistics(self, cassandra_connect_mock): Measurement = namedtuple('Measurement', 'time_stamp value value_meta') cassandra_session_mock = cassandra_connect_mock.return_value cassandra_session_mock.execute.side_effect = [ [[ "0b5e7d8c43f74430add94fba09ffd66e", "region", binascii.unhexlify( b"01d39f19798ed27bbf458300bf843edd17654614"), { "__name__": "cpu.idle_perc", "hostname": "host0", "service": "monitoring", } ]], [ Measurement(self._convert_time_string("2016-05-19T11:58:24Z"), 95.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:25Z"), 97.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:26Z"), 94.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:27Z"), 96.0, '{}'), ] ] start_timestamp = (self._convert_time_string("2016-05-19T11:58:24Z") - datetime(1970, 1, 1)).total_seconds() end_timestamp = (self._convert_time_string("2016-05-19T11:58:27Z") - datetime(1970, 1, 1)).total_seconds() print(start_timestamp) repo = cassandra_repo.MetricsRepository() result = repo.metrics_statistics( "tenant_id", "region", name="cpu.idle_perc", dimensions=None, start_timestamp=start_timestamp, end_timestamp=end_timestamp, statistics=['avg', 'min', 'max', 'count', 'sum'], period=300, offset=None, limit=1, merge_metrics_flag=True) self.assertEqual([{ u'dimensions': None, u'statistics': [[u'2016-05-19T11:58:24Z', 95.5, 94, 97, 4, 382]], u'name': u'cpu.idle_perc', u'columns': [u'timestamp', u'avg', u'min', u'max', u'count', u'sum'], u'id': u'2016-05-19T11:58:24Z' }], result)
def test_measurement_list(self, cassandra_connect_mock): Measurement = namedtuple('Measurement', 'time_stamp value value_meta') cassandra_session_mock = cassandra_connect_mock.return_value cassandra_session_mock.execute.side_effect = [ [[ "0b5e7d8c43f74430add94fba09ffd66e", "region", binascii.unhexlify( b"01d39f19798ed27bbf458300bf843edd17654614"), { "__name__": "disk.space_used_perc", "device": "rootfs", "hostname": "host0", "hosttype": "native", "mount_point": "/", "service": "monitoring", } ]], [ Measurement( self._convert_time_string("2015-03-14T09:26:53.59Z"), 2, None), Measurement( self._convert_time_string("2015-03-14T09:26:53.591Z"), 2.5, ''), Measurement( self._convert_time_string("2015-03-14T09:26:53.6Z"), 4.0, '{}'), Measurement(self._convert_time_string("2015-03-14T09:26:54Z"), 4, '{"key": "value"}'), ] ] repo = cassandra_repo.MetricsRepository() result = repo.measurement_list("tenant_id", "region", name="disk.space_used_perc", dimensions=None, start_timestamp=1, end_timestamp=2, offset=None, limit=1, merge_metrics_flag=True) self.assertEqual(len(result), 1) self.assertIsNone(result[0]['dimensions']) self.assertEqual(result[0]['name'], 'disk.space_used_perc') self.assertEqual(result[0]['columns'], ['timestamp', 'value', 'value_meta']) measurements = result[0]['measurements'] self.assertEqual([["2015-03-14T09:26:53.590Z", 2, {}], ["2015-03-14T09:26:53.591Z", 2.5, {}], ["2015-03-14T09:26:53.600Z", 4.0, {}], ["2015-03-14T09:26:54.000Z", 4, { "key": "value" }]], measurements)
def test_measurement_list(self, cassandra_connect_mock): Measurement = namedtuple('Measurement', 'time_stamp value value_meta') cassandra_session_mock = cassandra_connect_mock.return_value cassandra_future_mock = cassandra_session_mock.execute_async.return_value Metric = namedtuple('Metric', 'metric_id metric_name dimensions') cassandra_future_mock.result.side_effect = [ [ Metric( metric_id=binascii.unhexlify(b"01d39f19798ed27bbf458300bf843edd17654614"), metric_name='disk.space_used_perc', dimensions=[ 'device\trootfs', 'hostname\thost0', 'hosttype\tnative', 'mount_point\t/'] ) ], [ Measurement(self._convert_time_string("2015-03-14T09:26:53.59Z"), 2, None), Measurement(self._convert_time_string("2015-03-14T09:26:53.591Z"), 4, '{"key": "value"}'), Measurement(self._convert_time_string("2015-03-14T09:26:53.6Z"), 2.5, ''), Measurement(self._convert_time_string("2015-03-14T09:26:54.0Z"), 4.0, '{}'), ] ] repo = cassandra_repo.MetricsRepository() result = repo.measurement_list( "tenant_id", "region", name="disk.space_used_perc", dimensions=None, start_timestamp=1, end_timestamp=2, offset=None, limit=2, merge_metrics_flag=True, group_by=None) self.assertEqual(len(result), 1) self.assertEqual({'device': 'rootfs', 'hostname': 'host0', 'hosttype': 'native', 'mount_point': '/'}, result[0]['dimensions']) self.assertEqual(result[0]['name'], 'disk.space_used_perc') self.assertEqual(result[0]['columns'], ['timestamp', 'value', 'value_meta']) self.assertEqual( [['2015-03-14T09:26:53.590Z', 2, {}], ['2015-03-14T09:26:53.591Z', 4, {'key': 'value'}]], result[0]['measurements'] )
def test_list_metric_names(self, cassandra_connect_mock): cassandra_session_mock = cassandra_connect_mock.return_value cassandra_session_mock.execute.return_value = [ [ binascii.unhexlify( b"01d39f19798ed27bbf458300bf843edd17654614"), { "__name__": "disk.space_used_perc", "device": "rootfs", "hostname": "host0", "hosttype": "native", "mount_point": "/", } ], [ binascii.unhexlify( b"042da8f7445d779f4bb7214aaf744e512d897ac7"), { "__name__": "cpu.idle_perc", "hostname": "host0", "service": "monitoring" } ] ] repo = cassandra_repo.MetricsRepository() result = repo.list_metric_names("0b5e7d8c43f74430add94fba09ffd66e", "region", dimensions={ "hostname": "host0", "hosttype": "native", "mount_point": "/", "device": "rootfs" }, offset=None, limit=1) self.assertEqual([{ u'name': u'disk.space_used_perc', u'id': u'01d39f19798ed27bbf458300bf843edd17654614' }, { u'name': u'cpu.idle_perc', u'id': u'042da8f7445d779f4bb7214aaf744e512d897ac7' }], result)
def test_list_metrics_empty_metric_id(self, cassandra_connect_mock): cassandra_session_mock = cassandra_connect_mock.return_value cassandra_future_mock = cassandra_session_mock.execute_async.return_value Metric = namedtuple('Metric', 'metric_id metric_name dimensions') cassandra_future_mock.result.return_value = [ Metric( metric_id=None, metric_name='disk.space_used_perc', dimensions=[ 'device\trootfs', 'hostname\thost0', 'hosttype\tnative', 'mount_point\t/'] ) ] repo = cassandra_repo.MetricsRepository() result = repo.list_metrics( "0b5e7d8c43f74430add94fba09ffd66e", "region", name="disk.space_user_perc", dimensions={ "hostname": "host0", "hosttype": "native", "mount_point": "/", "device": "rootfs"}, offset=None, limit=1) self.assertEqual([{ u'id': None, u'name': u'disk.space_used_perc', u'dimensions': { u'device': u'rootfs', u'hostname': u'host0', u'mount_point': u'/', u'hosttype': u'native' }}], result)
def test_list_metrics(self, cassandra_connect_mock): cassandra_session_mock = cassandra_connect_mock.return_value cassandra_session_mock.execute.return_value = [[ "0b5e7d8c43f74430add94fba09ffd66e", "region", binascii.unhexlify(b"01d39f19798ed27bbf458300bf843edd17654614"), { "__name__": "disk.space_used_perc", "device": "rootfs", "hostname": "host0", "hosttype": "native", "mount_point": "/", } ]] repo = cassandra_repo.MetricsRepository() result = repo.list_metrics( "0b5e7d8c43f74430add94fba09ffd66e", "region", name="disk.space_user_perc", dimensions={ "hostname": "host0", "hosttype": "native", "mount_point": "/", "device": "rootfs"}, offset=None, limit=1) self.assertEqual([{ u'id': u'01d39f19798ed27bbf458300bf843edd17654614', u'name': u'disk.space_used_perc', u'dimensions': { u'device': u'rootfs', u'hostname': u'host0', u'mount_point': u'/', u'hosttype': u'native' }}], result)
def test_check_status(self, _): repo = cassandra_repo.MetricsRepository() result = repo.check_status() self.assertEqual(result, (True, 'OK'))
def test_alarm_history(self, cassandra_connect_mock): AlarmHistory = namedtuple('AlarmHistory', 'alarm_id, time_stamp, metrics, ' 'new_state, old_state, reason, ' 'reason_data, sub_alarms, tenant_id') cassandra_session_mock = cassandra_connect_mock.return_value cassandra_session_mock.execute.return_value = [ AlarmHistory('741e1aa149524c0f9887a8d6750f67b1', '09c2f5e7-9245-4b7e-bce1-01ed64a3c63d', self._convert_time_string("2016-05-19T11:58:27Z"), """[{ "dimensions": {"hostname": "devstack", "service": "monitoring"}, "id": "", "name": "cpu.idle_perc" }]""", 'OK', 'UNDETERMINED', 'The alarm threshold(s) have not been exceeded for the sub-alarms: ' 'avg(cpu.idle_perc) < 10.0 times 3 with the values: [84.35]', '{}', """[ { "sub_alarm_state": "OK", "currentValues": [ "84.35" ], "sub_alarm_expression": { "function": "AVG", "period": 60, "threshold": 10.0, "periods": 3, "operator": "LT", "metric_definition": { "dimensions": "{}", "id": "", "name": "cpu.idle_perc" } } } ]""") ] repo = cassandra_repo.MetricsRepository() result = repo.alarm_history('741e1aa149524c0f9887a8d6750f67b1', ['09c2f5e7-9245-4b7e-bce1-01ed64a3c63d'], None, None, None, None) # TODO(Cassandra) shorted out temporarily until the api is implemented in Cassandra self.assertNotEqual( [{ u'id': u'1463659107000', u'time_stamp': u'2016-05-19T11:58:27.000Z', u'new_state': u'OK', u'old_state': u'UNDETERMINED', u'reason_data': u'{}', u'reason': u'The alarm threshold(s) have not been exceeded for the sub-alarms: ' u'avg(cpu.idle_perc) < 10.0 times 3 with the values: [84.35]', u'alarm_id': u'09c2f5e7-9245-4b7e-bce1-01ed64a3c63d', u'metrics': [{ u'id': u'', u'name': u'cpu.idle_perc', u'dimensions': { u'service': u'monitoring', u'hostname': u'devstack' } }], u'sub_alarms': [ { u'sub_alarm_state': u'OK', u'currentValues': [ u'84.35' ], u'sub_alarm_expression': { u'dimensions': u'{}', u'threshold': 10.0, u'periods': 3, u'operator': u'LT', u'period': 60, u'metric_name': u'cpu.idle_perc', u'function': u'AVG' } } ] }], result)
def test_metrics_statistics(self, cassandra_connect_mock): Measurement = namedtuple('Measurement', 'time_stamp value value_meta') cassandra_session_mock = cassandra_connect_mock.return_value cassandra_future_mock = cassandra_session_mock.execute_async.return_value Metric = namedtuple('Metric', 'metric_id metric_name dimensions') cassandra_future_mock.result.side_effect = [ [ Metric( metric_id=binascii.unhexlify(b"01d39f19798ed27bbf458300bf843edd17654614"), metric_name='cpu.idle_perc', dimensions=[ 'device\trootfs', 'hostname\thost0', 'hosttype\tnative', 'mount_point\t/'] ) ], [ Measurement(self._convert_time_string("2016-05-19T11:58:24Z"), 95.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:25Z"), 97.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:26Z"), 94.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:27Z"), 96.0, '{}'), ] ] start_timestamp = (self._convert_time_string("2016-05-19T11:58:24Z") - datetime(1970, 1, 1)).total_seconds() end_timestamp = (self._convert_time_string("2016-05-19T11:58:27Z") - datetime(1970, 1, 1)).total_seconds() print(start_timestamp) repo = cassandra_repo.MetricsRepository() result = repo.metrics_statistics( "tenant_id", "region", name="cpu.idle_perc", dimensions=None, start_timestamp=start_timestamp, end_timestamp=end_timestamp, statistics=['avg', 'min', 'max', 'count', 'sum'], period=300, offset=None, limit=1, merge_metrics_flag=True, group_by=None) self.assertEqual([ { u'dimensions': {'device': 'rootfs', 'hostname': 'host0', 'hosttype': 'native', 'mount_point': '/'}, u'end_time': u'2016-05-19T11:58:27.000Z', u'statistics': [[u'2016-05-19T11:58:24.000Z', 95.5, 94.0, 97.0, 4, 382.0]], u'name': u'cpu.idle_perc', u'columns': [u'timestamp', 'avg', 'min', 'max', 'count', 'sum'], u'id': b'01d39f19798ed27bbf458300bf843edd17654614' } ], result) cassandra_future_mock.result.side_effect = [ [ Metric( metric_id=binascii.unhexlify(b"01d39f19798ed27bbf458300bf843edd17654614"), metric_name='cpu.idle_perc', dimensions=[ 'device\trootfs', 'hostname\thost0', 'hosttype\tnative', 'mount_point\t/'] ) ], [ Measurement(self._convert_time_string("2016-05-19T11:58:24Z"), 95.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:25Z"), 97.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:26Z"), 94.0, '{}'), Measurement(self._convert_time_string("2016-05-19T11:58:27Z"), 96.0, '{}'), ] ] result = repo.metrics_statistics( "tenant_id", "region", name="cpu.idle_perc", dimensions=None, start_timestamp=start_timestamp, end_timestamp=None, statistics=['avg', 'min', 'max', 'count', 'sum'], period=300, offset=None, limit=1, merge_metrics_flag=True, group_by=None) self.assertEqual([ { u'dimensions': {'device': 'rootfs', 'hostname': 'host0', 'hosttype': 'native', 'mount_point': '/'}, u'end_time': u'2016-05-19T12:03:23.999Z', u'statistics': [[u'2016-05-19T11:58:24.000Z', 95.5, 94.0, 97.0, 4, 382.0]], u'name': u'cpu.idle_perc', u'columns': [u'timestamp', 'avg', 'min', 'max', 'count', 'sum'], u'id': b'01d39f19798ed27bbf458300bf843edd17654614' } ], result)