def test_build_group_by_clause_without_period(self):
        group_by = 'hostname,service'
        expected_clause = ' group by hostname,service'

        repo = influxdb_repo.MetricsRepository()
        clause = repo._build_group_by_clause(group_by)
        self.assertEqual(clause, expected_clause)
    def test_list_dimension_names(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            u'series': [{
                u'values': [[
                    u'custom_metric,_region=useast,_tenant_id=38dc2a2549f94d2e9a4fa1cc45a4970c,'
                    u'hostname=custom_host,service=custom_service', u'useast',
                    u'38dc2a2549f94d2e9a4fa1cc45a4970c', u'custom_host',
                    u'custom_service'
                ]],
                u'name':
                u'custom_metric',
                u'columns':
                [u'_key', u'_region', u'_tenant_id', u'hostname', u'service']
            }]
        }

        repo = influxdb_repo.MetricsRepository()

        result = repo.list_dimension_names("38dc2a2549f94d2e9a4fa1cc45a4970c",
                                           "useast", "custom_metric")

        self.assertEqual(result, [{
            u'dimension_name': u'hostname'
        }, {
            u'dimension_name': u'service'
        }])
Beispiel #3
0
    def test_list_dimension_values(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            u'series': [{
                u'values': [[
                    u'custom_metric,_region=useast,_tenant_id=38dc2a2549f94d2e9a4fa1cc45a4970c,'
                    u'hostname=custom_host,service=custom_service', u'useast',
                    u'38dc2a2549f94d2e9a4fa1cc45a4970c', u'custom_host',
                    u'custom_service'
                ]],
                u'name':
                u'custom_metric',
                u'columns':
                [u'_key', u'_region', u'_tenant_id', u'hostname', u'service']
            }]
        }

        repo = influxdb_repo.MetricsRepository()

        result = repo.list_dimension_values("38dc2a2549f94d2e9a4fa1cc45a4970c",
                                            "useast",
                                            "custom_metric",
                                            "hostname",
                                            offset=None,
                                            limit=1)

        self.assertEqual(
            result, {
                u'dimension_name': 'hostname',
                u'values': [u'custom_host'],
                u'id': 'bea9565d854a16a3366164de213694c190f27675',
                u'metric_name': 'custom_metric'
            })
Beispiel #4
0
    def test_measurement_list(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            "series": [{
                "name":
                "dummy.series",
                "values": [[1, 2, None], [2, 2.5, ''], [3, 4.0, '{}'],
                           [4, 4, '{"key": "value"}']]
            }]
        }

        repo = influxdb_repo.MetricsRepository()
        result = repo.measurement_list("tenant_id",
                                       "region",
                                       name=None,
                                       dimensions=None,
                                       start_timestamp=1,
                                       end_timestamp=2,
                                       offset=None,
                                       limit=1,
                                       merge_metrics_flag=True)

        self.assertEqual(len(result), 1)
        self.assertEqual(result[0]['dimensions'], None)
        self.assertEqual(result[0]['name'], 'dummy.series')
        self.assertEqual(result[0]['columns'],
                         ['timestamp', 'value', 'value_meta'])

        measurements = result[0]['measurements']

        self.assertEqual(
            [[1, 2, {}], [2, 2.5, {}], [3, 4.0, {}], [4, 4, {
                "key": "value"
            }]], measurements)
    def test_build_group_by_clause_with_period(self):
        group_by = 'hostname,service'
        period = 300
        expected_clause = ' group by hostname,service,time(300s) fill(none)'

        repo = influxdb_repo.MetricsRepository()
        clause = repo._build_group_by_clause(group_by, period)
        self.assertEqual(clause, expected_clause)
Beispiel #6
0
    def test_list_dimension_names(self, influxdb_client_mock, timestamp=False):
        mock_client = influxdb_client_mock.return_value

        tenant_id = u'38dc2a2549f94d2e9a4fa1cc45a4970c'
        region = u'useast'
        metric = u'custom_metric'
        start_timestamp = 1571917171275
        end_timestamp = 1572917171275
        mock_client.query.return_value.raw = {
            u'series': [{
                u'values': [[u'_region'], [u'_tenant_id'], [u'hostname'],
                            [u'service']],
                u'name':
                metric,
                u'columns': [u'tagKey']
            }]
        }

        repo = influxdb_repo.MetricsRepository()
        mock_client.query.reset_mock()

        db_per_tenant = repo.conf.influxdb.db_per_tenant
        database = repo.conf.influxdb.database_name
        database += "_%s" % tenant_id if db_per_tenant else ""

        result = (repo.list_dimension_names(tenant_id, region, metric,
                                            start_timestamp, end_timestamp)
                  if timestamp else repo.list_dimension_names(
                      tenant_id, region, metric))

        self.assertEqual(result, [{
            u'dimension_name': u'hostname'
        }, {
            u'dimension_name': u'service'
        }])

        query = ('show tag keys from "{metric}"'
                 ' where _region = \'{region}\''.format(region=region,
                                                        metric=metric))
        query += ('' if db_per_tenant else
                  ' and _tenant_id = \'{tenant_id}\''.format(
                      tenant_id=tenant_id))
        query += (' and time >= {start_timestamp}000000u'
                  ' and time < {end_timestamp}000000u'.format(
                      start_timestamp=start_timestamp,
                      end_timestamp=end_timestamp) if timestamp else '')

        mock_client.query.assert_called_once_with(query, database=database)
Beispiel #7
0
    def test_measurement_list(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            "series": [
                {
                    "name": "dummy.series",
                    "values": [
                        ["2015-03-14T09:26:53.59Z", 2, None],
                        ["2015-03-14T09:26:53.591Z", 2.5, ''],
                        ["2015-03-14T09:26:53.6Z", 4.0, '{}'],
                        ["2015-03-14T09:26:54Z", 4, '{"key": "value"}'],
                        ["2015-03-14T09:26:53.1234567Z", 1, '{}']
                    ]
                }
            ]
        }

        repo = influxdb_repo.MetricsRepository()
        repo._version = 'from_0.11.0'
        result = repo.measurement_list(
            "tenant_id",
            "region",
            name=None,
            dimensions=None,
            start_timestamp=1,
            end_timestamp=2,
            offset=None,
            limit=1,
            merge_metrics_flag=True,
            group_by=None)

        self.assertEqual(len(result), 1)
        self.assertIsNone(result[0]['dimensions'])
        self.assertEqual(result[0]['name'], 'dummy.series')
        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"}],
             ["2015-03-14T09:26:53.123Z", 1, {}]],
            measurements
        )
    def test_list_metrics(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            u'series': [{
                u'values': [[
                    u'disk.space_used_perc,_region=region,_tenant_id='
                    u'0b5e7d8c43f74430add94fba09ffd66e,device=rootfs,'
                    'hostname=host0,hosttype=native,mount_point=/',
                    u'region',
                    u'0b5e7d8c43f74430add94fba09ffd66e',
                    u'rootfs',
                    u'host0',
                    u'native',
                    u'',
                    u'/'
                ]],
                u'name': u'disk.space_used_perc',
                u'columns': [u'_key', u'_region', u'_tenant_id', u'device',
                             u'hostname', u'hosttype', u'extra', u'mount_point']
            }]
        }

        repo = influxdb_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(result, [{
            u'id': '0',
            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'
            },
        }])
Beispiel #9
0
    def test_metrics_statistics(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            u'series': [{
                u'values': [[u'1970-01-01T00:00:00Z', 0.047]],
                u'name': u'cpu.utilization',
                u'columns': [u'time', u'mean']
            }],
            u'statement_id':
            0
        }

        tenant_id = '1'
        region = 'USA'
        name = 'cpu.utilization'
        start_timestamp = 1484036107.86
        statistics = [u"avg"]
        limit = 10000
        dimensions = None
        end_timestamp = None
        period = None
        offset = None
        merge_metrics_flag = None
        group_by = None

        repo = influxdb_repo.MetricsRepository()
        stats_list = repo.metrics_statistics(tenant_id, region, name,
                                             dimensions, start_timestamp,
                                             end_timestamp, statistics, period,
                                             offset, limit, merge_metrics_flag,
                                             group_by)
        expected_result = [{
            u'columns': [u'timestamp', u'avg'],
            u'dimensions': {
                u'mean': 0.047,
                u'time': u'1970-01-01T00:00:00Z'
            },
            u'id': '0',
            u'name': u'cpu.utilization',
            u'statistics': [[u'1970-01-01T00:00:00Z', 0.047]]
        }]
        self.assertEqual(stats_list, expected_result)
    def test_list_dimension_values(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            u'series': [
                {
                    u'values': [[u'custom_host']],
                    u'name': u'custom_metric',
                    u'columns': [u'hostname']
                }]
        }

        repo = influxdb_repo.MetricsRepository()

        result = repo.list_dimension_values(
            "38dc2a2549f94d2e9a4fa1cc45a4970c",
            "useast",
            "custom_metric",
            "hostname")

        self.assertEqual(result, [{u'dimension_value': u'custom_host'}])
    def test_list_dimension_values(self, influxdb_client_mock):
        mock_client = influxdb_client_mock.return_value
        mock_client.query.return_value.raw = {
            u'series': [{
                u'values': [[u'custom_host']],
                u'name': u'custom_metric',
                u'columns': [u'hostname']
            }]
        }

        repo = influxdb_repo.MetricsRepository()
        mock_client.query.reset_mock()

        result = repo.list_dimension_values("38dc2a2549f94d2e9a4fa1cc45a4970c",
                                            "useast", "custom_metric",
                                            "hostname")

        self.assertEqual(result, [{u'dimension_value': u'custom_host'}])

        mock_client.query.assert_called_once_with(
            'show tag values from "custom_metric" with key = "hostname"'
            ' where _tenant_id = \'38dc2a2549f94d2e9a4fa1cc45a4970c\''
            '  and _region = \'useast\' ')