Exemple #1
0
    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']
        )
Exemple #7
0
    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)