Exemplo n.º 1
0
    def test_get_tag_keys_filter_true(self):
        """Test that not all tag keys are returned with a filter."""
        url = ("?filter[time_scope_units]=month&filter[time_scope_value]=-2"
               "&filter[resolution]=monthly&filter[enabled]=false")
        query_params = self.mocked_query_params(url, OCPTagView)
        handler = OCPTagQueryHandler(query_params)

        with tenant_context(self.tenant):
            usage_tag_keys = (OCPUsageLineItemDailySummary.objects.filter(
                usage_start__lte=self.dh.this_month_start).annotate(
                    tag_keys=JSONBObjectKeys("pod_labels")).values(
                        "tag_keys").distinct().all())

            usage_tag_keys = [tag.get("tag_keys") for tag in usage_tag_keys]

            storage_tag_keys = (OCPUsageLineItemDailySummary.objects.filter(
                usage_start__lte=self.dh.this_month_start).annotate(
                    tag_keys=JSONBObjectKeys("volume_labels")).values(
                        "tag_keys").distinct().all())
            storage_tag_keys = [
                tag.get("tag_keys") for tag in storage_tag_keys
            ]
            tag_keys = list(set(usage_tag_keys + storage_tag_keys))

        result = handler.get_tag_keys(filters=True)
        self.assertNotEqual(sorted(result), sorted(tag_keys))
        self.assertIn("qa", result)
        self.assertNotIn("qa", tag_keys)

        url = ("?filter[time_scope_units]=month&filter[time_scope_value]=-2"
               "&filter[resolution]=monthly&filter[enabled]=true")
        query_params = self.mocked_query_params(url, OCPTagView)
        handler = OCPTagQueryHandler(query_params)
        result = handler.get_tag_keys(filters=True)
        self.assertEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 2
0
    def test_get_tag_keys_filter_false(self):
        """Test that all tag keys are returned with no filter."""
        query_params = {
            'filter': {
                'resolution': 'monthly',
                'time_scope_value': -1,
                'time_scope_units': 'month'
            },
        }
        handler = OCPTagQueryHandler(query_params, None, self.tenant, **{})

        with tenant_context(self.tenant):
            usage_tag_keys = OCPUsageLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('pod_labels'))\
                .values('tag_keys')\
                .annotate(tag_count=Count('tag_keys'))\
                .all()

            usage_tag_keys = [tag.get('tag_keys') for tag in usage_tag_keys]

            storage_tag_keys = OCPStorageLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('volume_labels'))\
                .values('tag_keys')\
                .annotate(tag_count=Count('tag_keys'))\
                .all()
            storage_tag_keys = [
                tag.get('tag_keys') for tag in storage_tag_keys
            ]
            tag_keys = list(set(usage_tag_keys + storage_tag_keys))

        result = handler.get_tag_keys(filters=False)
        self.assertEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 3
0
    def test_get_tag_keys_filter_false(self):
        """Test that all tag keys are returned with no filter."""
        # '?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly'
        params = {
            'filter': {
                'resolution': 'monthly',
                'time_scope_value': -2,
                'time_scope_units': 'month'
            }
        }
        query_params = FakeQueryParameters(params, tenant=self.tenant)
        handler = OCPTagQueryHandler(query_params.mock_qp)

        with tenant_context(self.tenant):
            usage_tag_keys = OCPUsageLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('pod_labels'))\
                .values('tag_keys')\
                .distinct()\
                .all()

            usage_tag_keys = [tag.get('tag_keys') for tag in usage_tag_keys]

            storage_tag_keys = OCPUsageLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('volume_labels'))\
                .values('tag_keys')\
                .distinct()\
                .all()
            storage_tag_keys = [
                tag.get('tag_keys') for tag in storage_tag_keys
            ]
            tag_keys = list(set(usage_tag_keys + storage_tag_keys))

        result = handler.get_tag_keys(filters=False)
        self.assertEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 4
0
    def test_get_tag_keys_filter_false(self):
        """Test that all tag keys are returned with no filter."""
        url = '?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly'
        query_params = self.mocked_query_params(url, OCPTagView)
        handler = OCPTagQueryHandler(query_params)

        with tenant_context(self.tenant):
            usage_tag_keys = (
                OCPUsageLineItemDailySummary.objects.annotate(
                    tag_keys=JSONBObjectKeys('pod_labels')
                )
                .values('tag_keys')
                .distinct()
                .all()
            )

            usage_tag_keys = [tag.get('tag_keys') for tag in usage_tag_keys]

            storage_tag_keys = (
                OCPUsageLineItemDailySummary.objects.annotate(
                    tag_keys=JSONBObjectKeys('volume_labels')
                )
                .values('tag_keys')
                .distinct()
                .all()
            )
            storage_tag_keys = [tag.get('tag_keys') for tag in storage_tag_keys]
            tag_keys = list(set(usage_tag_keys + storage_tag_keys))

        result = handler.get_tag_keys(filters=False)
        self.assertEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 5
0
    def test_get_tag_type_filter_storage(self):
        """Test that all storage tags are returned with storage type filter."""
        query_params = {
            'filter': {
                'resolution': 'monthly',
                'time_scope_value': -2,
                'time_scope_units': 'month',
                'type': 'storage'
            },
        }
        query_string = '?filter[resolution]=monthly&' + \
                       'filter[time_scope_value]=-2&' + \
                       'filter[time_scope_units]=month&' + \
                       'filter[type]=storage&'
        handler = OCPTagQueryHandler(query_params, query_string, self.tenant,
                                     **{})

        with tenant_context(self.tenant):
            storage_tag_keys = OCPStorageLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('volume_labels'))\
                .values('tag_keys')\
                .annotate(tag_count=Count('tag_keys'))\
                .all()
            storage_tag_keys = [
                tag.get('tag_keys') for tag in storage_tag_keys
            ]
            tag_keys = storage_tag_keys

        result = handler.get_tag_keys(filters=False)
        self.assertEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 6
0
    def get_tag_keys(self, filters=True):
        """Get a list of tag keys to validate filters."""
        type_filter = self.parameters.get_filter("type")
        tag_keys = []
        with tenant_context(self.tenant):
            for source in self.data_sources:
                tag_keys_query = source.get("db_table").objects

                if filters is True:
                    tag_keys_query = tag_keys_query.filter(self.query_filter)

                if type_filter and type_filter != source.get("type"):
                    continue
                exclusion = self._get_exclusions(source.get("db_column"))
                tag_keys_query = (tag_keys_query.annotate(
                    tag_keys=JSONBObjectKeys(F(source.get("db_column")))
                ).exclude(exclusion).values("tag_keys").distinct().all())

                tag_keys_query = [
                    tag.get("tag_keys") for tag in tag_keys_query
                ]
                for tag_key in tag_keys_query:
                    tag_keys.append(tag_key)

        return list(set(tag_keys))
Exemplo n.º 7
0
    def test_get_tag_keys(self):
        """Test that all OCP-on-AWS tag keys are returned."""
        query_params = {'filter': {'resolution': 'monthly',
                                   'time_scope_value': -2,
                                   'time_scope_units': 'month'},
                        }
        query_string = '?filter[resolution]=monthly&' + \
                       'filter[time_scope_value]=-2&' + \
                       'filter[time_scope_units]=month&'
        handler = OCPAWSTagQueryHandler(
            query_params,
            query_string,
            self.tenant,
            **{}
        )

        with tenant_context(self.tenant):
            tag_keys = OCPAWSCostLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('tags'))\
                .values('tag_keys')\
                .distinct()\
                .all()
            tag_keys = [tag.get('tag_keys') for tag in tag_keys]

        result = handler.get_tag_keys()
        self.assertEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 8
0
    def get_tag_keys(self, filters=True):
        """Get a list of tag keys to validate filters."""
        type_filter = self.parameter_filter.get('type')
        tag_keys = []
        with tenant_context(self.tenant):
            for source in self.data_sources:
                tag_keys_query = source.get('db_table').objects

                if filters is True:
                    tag_keys_query = tag_keys_query.filter(self.query_filter)

                if type_filter and type_filter != source.get('type'):
                    continue

                tag_keys_query = tag_keys_query.annotate(
                    tag_keys=JSONBObjectKeys(F(source.get('db_column'))))\
                    .values('tag_keys')\
                    .distinct()\
                    .all()

                tag_keys_query = [
                    tag.get('tag_keys') for tag in tag_keys_query
                ]
                for tag_key in tag_keys_query:
                    tag_keys.append(tag_key)

        return list(set(tag_keys))
Exemplo n.º 9
0
    def test_get_tag_keys_filter_false(self):
        """Test that all tag keys are returned with no filter."""
        query_params = {
            'filter': {
                'resolution': 'monthly',
                'time_scope_value': -2,
                'time_scope_units': 'month'
            },
        }
        query_string = '?filter[resolution]=monthly&' + \
                       'filter[time_scope_value]=-2&' + \
                       'filter[time_scope_units]=month&'
        handler = AzureTagQueryHandler(query_params, query_string, self.tenant,
                                       **{})

        tag_keys = set()
        with tenant_context(self.tenant):
            tags = AzureCostEntryLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('tags'))\
                .values('tags')\
                .distinct()\
                .all()

            for tag in tags:
                for key in tag.get('tags').keys():
                    tag_keys.add(key)

        result = handler.get_tag_keys(filters=False)
        self.assertEqual(sorted(result), sorted(list(tag_keys)))
Exemplo n.º 10
0
    def test_get_tag_keys_filter_false(self):
        """Test that all tag keys are returned with no filter."""
        url = "?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly"
        query_params = self.mocked_query_params(url, OCPTagView)
        handler = OCPTagQueryHandler(query_params)

        with tenant_context(self.tenant):
            usage_tag_keys = list(
                OCPUsageLineItemDailySummary.objects.annotate(
                    tag_keys=JSONBObjectKeys("pod_labels")).values_list(
                        "tag_keys", flat=True).distinct().all())
            storage_tag_keys = list(
                OCPUsageLineItemDailySummary.objects.annotate(
                    tag_keys=JSONBObjectKeys("volume_labels")).values_list(
                        "tag_keys", flat=True).distinct().all())
            tag_keys = list(set(usage_tag_keys + storage_tag_keys))

        result = handler.get_tag_keys(filters=False)
        self.assertNotEqual(sorted(result), sorted(tag_keys))
        self.assertIn("disabled", result)
        self.assertNotIn("disabled", tag_keys)
Exemplo n.º 11
0
    def test_get_tag_keys(self):
        """Test that all OCP-on-AWS tag keys are returned."""
        url = "?filter[time_scope_units]=month&filter[time_scope_value]=-1&filter[resolution]=monthly"
        query_params = self.mocked_query_params(url, OCPAWSTagView)
        handler = OCPAWSTagQueryHandler(query_params)

        with tenant_context(self.tenant):
            tag_keys = (OCPAWSCostLineItemDailySummary.objects.annotate(
                tag_keys=JSONBObjectKeys("tags")).values(
                    "tag_keys").distinct().all())
            tag_keys = [tag.get("tag_keys") for tag in tag_keys]

        result = handler.get_tag_keys()
        self.assertEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 12
0
    def get_tag_keys(self, filters=True):
        """Get a list of tag keys to validate filters."""
        with tenant_context(self.tenant):
            tag_keys = OCPUsageLineItemDailySummary.objects
            if filters is True:
                tag_keys = tag_keys.filter(self.query_filter)

            tag_keys = tag_keys.annotate(tag_keys=JSONBObjectKeys('pod_labels'))\
                .values('tag_keys')\
                .annotate(tag_count=Count('tag_keys'))\
                .all()
            tag_keys = [tag.get('tag_keys') for tag in tag_keys]

        return tag_keys
Exemplo n.º 13
0
    def test_get_tag_keys_filter_true(self):
        """Test that not all tag keys are returned with a filter."""
        query_params = {
            'filter': {
                'resolution': 'monthly',
                'time_scope_value': -2,
                'time_scope_units': 'month'
            },
        }
        query_string = '?filter[resolution]=monthly&' + \
                       'filter[time_scope_value]=-2&' + \
                       'filter[time_scope_units]=month&'
        handler = OCPTagQueryHandler(query_params, query_string, self.tenant,
                                     **{})

        with tenant_context(self.tenant):
            usage_tag_keys = OCPUsageLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('pod_labels'))\
                .values('tag_keys')\
                .distinct()\
                .all()

            usage_tag_keys = [tag.get('tag_keys') for tag in usage_tag_keys]

            storage_tag_keys = OCPStorageLineItemDailySummary.objects\
                .annotate(tag_keys=JSONBObjectKeys('volume_labels'))\
                .values('tag_keys')\
                .distinct()\
                .all()
            storage_tag_keys = [
                tag.get('tag_keys') for tag in storage_tag_keys
            ]
            tag_keys = list(set(usage_tag_keys + storage_tag_keys))

        result = handler.get_tag_keys(filters=True)
        self.assertNotEqual(sorted(result), sorted(tag_keys))
Exemplo n.º 14
0
    def test_get_tag_type_filter_storage(self):
        """Test that all storage tags are returned with storage type filter."""
        url = "?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly&filter[type]=storage"  # noqa: E501
        query_params = self.mocked_query_params(url, OCPTagView)
        handler = OCPTagQueryHandler(query_params)

        with tenant_context(self.tenant):
            storage_tag_keys = (OCPUsageLineItemDailySummary.objects.annotate(
                tag_keys=JSONBObjectKeys("volume_labels")).values(
                    "tag_keys").distinct().all())
            storage_tag_keys = [
                tag.get("tag_keys") for tag in storage_tag_keys
            ]
            tag_keys = storage_tag_keys

        result = handler.get_tag_keys(filters=False)
        self.assertEqual(sorted(result), sorted(tag_keys))
    def test_get_tag_keys_filter_false(self):
        """Test that all tag keys are returned with no filter."""
        url = "?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly"
        query_params = self.mocked_query_params(url, AzureTagView)
        handler = AzureTagQueryHandler(query_params)

        tag_keys = set()
        with tenant_context(self.tenant):
            tags = (AzureCostEntryLineItemDailySummary.objects.annotate(
                tag_keys=JSONBObjectKeys("tags")).values(
                    "tags").distinct().all())

            for tag in tags:
                for key in tag.get("tags").keys():
                    tag_keys.add(key)

        result = handler.get_tag_keys(filters=False)
        self.assertEqual(sorted(result), sorted(list(tag_keys)))