Exemple #1
0
 def test_get_tenant_no_user(self):
     """Test that get_tenant() raises ValidationError when user is missing."""
     user = Mock(customer=Mock(schema_name="acct10001"))
     with patch("api.query_params.Tenant.objects.get",
                side_effect=User.DoesNotExist):
         with self.assertRaises(ValidationError):
             get_tenant(user)
Exemple #2
0
 def retrieve(self, request, *args, **kwargs):
     """Get a provider."""
     response = super().retrieve(request=request, args=args, kwargs=kwargs)
     tenant = get_tenant(request.user)
     manager = ProviderManager(kwargs['uuid'])
     response.data['infrastructure'] = manager.get_infrastructure_name(
         tenant)
     response.data['stats'] = manager.provider_statistics(tenant)
     return response
Exemple #3
0
 def list(self, request, *args, **kwargs):
     """Obtain the list of providers."""
     response = super().list(request=request, args=args, kwargs=kwargs)
     for provider in response.data['data']:
         manager = ProviderManager(provider['uuid'])
         tenant = get_tenant(request.user)
         provider['stats'] = manager.provider_statistics(tenant)
         provider['infrastructure'] = manager.get_infrastructure_name(
             tenant)
     return response
Exemple #4
0
 def retrieve(self, request, *args, **kwargs):
     """Get a provider."""
     response = super().retrieve(request=request, args=args, kwargs=kwargs)
     stats = request.query_params.get("stats", "false").lower()
     tenant = get_tenant(request.user)
     manager = ProviderManager(kwargs["uuid"])
     response.data["infrastructure"] = manager.get_infrastructure_name()
     if stats == "true":
         response.data["stats"] = manager.provider_statistics(tenant)
     response.data["cost_models"] = [{
         "name": model.name,
         "uuid": model.uuid
     } for model in manager.get_cost_models(tenant)]
     return response
Exemple #5
0
 def list(self, request, *args, **kwargs):
     """Obtain the list of providers."""
     response = super().list(request=request, args=args, kwargs=kwargs)
     stats = request.query_params.get("stats", "false").lower()
     for provider in response.data["data"]:
         manager = ProviderManager(provider["uuid"])
         tenant = get_tenant(request.user)
         if stats == "true":
             provider["stats"] = manager.provider_statistics(tenant)
         provider["infrastructure"] = manager.get_infrastructure_name()
         provider["cost_models"] = [{
             "name": model.name,
             "uuid": model.uuid
         } for model in manager.get_cost_models(tenant)]
     return response
Exemple #6
0
 def retrieve(self, request, *args, **kwargs):
     """Get a provider."""
     response = super().retrieve(request=request, args=args, kwargs=kwargs)
     stats = request.query_params.get('stats', 'false').lower()
     tenant = get_tenant(request.user)
     manager = ProviderManager(kwargs['uuid'])
     response.data['infrastructure'] = manager.get_infrastructure_name(
         tenant)
     if stats == 'true':
         response.data['stats'] = manager.provider_statistics(tenant)
     response.data['cost_models'] = [{
         'name': model.name,
         'uuid': model.uuid
     } for model in manager.get_cost_models(tenant)]
     return response
Exemple #7
0
 def list(self, request, *args, **kwargs):
     """Obtain the list of providers."""
     response = super().list(request=request, args=args, kwargs=kwargs)
     stats = request.query_params.get('stats', 'false').lower()
     for provider in response.data['data']:
         manager = ProviderManager(provider['uuid'])
         tenant = get_tenant(request.user)
         if stats == 'true':
             provider['stats'] = manager.provider_statistics(tenant)
         provider['infrastructure'] = manager.get_infrastructure_name(
             tenant)
         provider['cost_models'] = [{
             'name': model.name,
             'uuid': model.uuid
         } for model in manager.get_cost_models(tenant)]
     return response
Exemple #8
0
 def test_get_tenant_invalid(self):
     """Test that get_tenant() raises ValidationError when user is invalid."""
     with self.assertRaises(ValidationError):
         get_tenant(None)
Exemple #9
0
 def test_get_tenant(self):
     """Test that get_tenant() returns a Tenant."""
     user = Mock(customer=Mock(schema_name="acct10001"))
     self.assertIsInstance(get_tenant(user), Tenant)
Exemple #10
0
    def get(self, request, **kwargs):

        tenant = get_tenant(request.user)
        with tenant_context(tenant):

            aws_account_count = AWSCostSummaryByAccountP.objects.values("usage_account_id").distinct().count()
            gcp_account_count = GCPCostSummaryByAccountP.objects.values("account_id").distinct().count()
            gcp_project_count = GCPCostSummaryByProjectP.objects.values("project_id").distinct().count()
            aws_org_unit_count = (
                AWSOrganizationalUnit.objects.filter(deleted_timestamp__isnull=True)
                .values("org_unit_id")
                .distinct()
                .count()
            )

            azure_sub_guid_count = AzureCostSummaryByAccountP.objects.values("subscription_guid").distinct().count()
            ocp_cluster_count = OCPCostSummaryP.objects.values("cluster_id").distinct().count()
            ocp_node_count = OCPCostSummaryByNodeP.objects.values("node").distinct().count()
            ocp_project_count = OCPCostSummaryByProjectP.objects.values("namespace").distinct().count()

            cost_model_count = CostModel.objects.count()

            aws_account_dict = {
                "value": "aws.account",
                "path": "/api/cost-management/v1/resource-types/aws-accounts/",
                "count": aws_account_count,
            }
            aws_org_unit_dict = {
                "value": "aws.organizational_unit",
                "path": "/api/cost-management/v1/resource-types/aws-organizational-units/",
                "count": aws_org_unit_count,
            }
            azure_sub_guid_dict = {
                "value": "azure.subscription_guid",
                "path": "/api/cost-management/v1/resource-types/azure-subscription-guids/",
                "count": azure_sub_guid_count,
            }
            ocp_cluster_dict = {
                "value": "openshift.cluster",
                "path": "/api/cost-management/v1/resource-types/openshift-clusters/",
                "count": ocp_cluster_count,
            }
            ocp_node_dict = {
                "value": "openshift.node",
                "path": "/api/cost-management/v1/resource-types/openshift-nodes/",
                "count": ocp_node_count,
            }
            ocp_project_dict = {
                "value": "openshift.project",
                "path": "/api/cost-management/v1/resource-types/openshift-projects/",
                "count": ocp_project_count,
            }
            gcp_account_dict = {
                "value": "gcp.account",
                "path": "/api/cost-management/v1/resource-types/gcp-accounts/",
                "count": gcp_account_count,
            }
            gcp_project_dict = {
                "value": "gcp.projects",
                "path": "/api/cost-management/v1/resource-types/gcp-projects/",
                "count": gcp_project_count,
            }
            cost_model_dict = {
                "value": "cost_model",
                "path": "/api/cost-management/v1/resource-types/cost-models/",
                "count": cost_model_count,
            }
            data = [
                aws_account_dict,
                aws_org_unit_dict,
                azure_sub_guid_dict,
                ocp_cluster_dict,
                ocp_node_dict,
                ocp_project_dict,
                gcp_account_dict,
                gcp_project_dict,
                cost_model_dict,
            ]
            paginator = ListPaginator(data, request)

            return paginator.get_paginated_response(data)