diff --git a/koku/api/report/ocp/dataclasses/__init__.py b/koku/api/report/ocp/capacity/__init__.py similarity index 100% rename from koku/api/report/ocp/dataclasses/__init__.py rename to koku/api/report/ocp/capacity/__init__.py diff --git a/koku/api/report/ocp/dataclasses/cluster_capacity.py b/koku/api/report/ocp/capacity/cluster_capacity.py similarity index 97% rename from koku/api/report/ocp/dataclasses/cluster_capacity.py rename to koku/api/report/ocp/capacity/cluster_capacity.py index 5c2e747318..7294f39d2b 100644 --- a/koku/api/report/ocp/dataclasses/cluster_capacity.py +++ b/koku/api/report/ocp/capacity/cluster_capacity.py @@ -27,14 +27,17 @@ def calculate_unused(row, finalized_mapping={}): request = row.get("request") if row.get("request") else Decimal(0) effective_usage = max(usage, request) unused_capacity = max(capacity - effective_usage, 0) - capacity_unused_percent = (unused_capacity / max(capacity, Decimal(1))) * 100 + if capacity <= 0: + # Check to see if we are about to divide by zero or a negative. + capacity = max(capacity, Decimal(1)) + capacity_unused_percent = (unused_capacity / capacity) * 100 row["capacity_unused"] = unused_capacity row["capacity_unused_percent"] = capacity_unused_percent unused_request = max(request - usage, 0) row["request_unused"] = unused_request if request <= 0: request = 1 - row["request_unused_percent"] = (unused_request / max(capacity, Decimal(1))) * 100 + row["request_unused_percent"] = (unused_request / capacity) * 100 @dataclass diff --git a/koku/api/report/ocp/dataclasses/node_capacity.py b/koku/api/report/ocp/capacity/node_capacity.py similarity index 98% rename from koku/api/report/ocp/dataclasses/node_capacity.py rename to koku/api/report/ocp/capacity/node_capacity.py index d2704e0c96..3eda2a61ae 100644 --- a/koku/api/report/ocp/dataclasses/node_capacity.py +++ b/koku/api/report/ocp/capacity/node_capacity.py @@ -11,7 +11,7 @@ from django.db.models.query import QuerySet -from api.report.ocp.dataclasses.cluster_capacity import calculate_unused +from api.report.ocp.capacity.cluster_capacity import calculate_unused @dataclass diff --git a/koku/api/report/ocp/query_handler.py b/koku/api/report/ocp/query_handler.py index 1217f8e79b..2192aec27e 100644 --- a/koku/api/report/ocp/query_handler.py +++ b/koku/api/report/ocp/query_handler.py @@ -21,9 +21,9 @@ from django_tenants.utils import tenant_context from api.models import Provider -from api.report.ocp.dataclasses.cluster_capacity import calculate_unused -from api.report.ocp.dataclasses.cluster_capacity import ClusterCapacity -from api.report.ocp.dataclasses.node_capacity import NodeCapacity +from api.report.ocp.capacity.cluster_capacity import calculate_unused +from api.report.ocp.capacity.cluster_capacity import ClusterCapacity +from api.report.ocp.capacity.node_capacity import NodeCapacity from api.report.ocp.provider_map import OCPProviderMap from api.report.queries import is_grouped_by_node from api.report.queries import is_grouped_by_project diff --git a/koku/api/report/test/ocp/test_dataclasses.py b/koku/api/report/test/ocp/test_dataclasses.py index 6cf06f0a31..8ff53bbb4d 100644 --- a/koku/api/report/test/ocp/test_dataclasses.py +++ b/koku/api/report/test/ocp/test_dataclasses.py @@ -10,8 +10,8 @@ from api.iam.test.iam_test_case import IamTestCase from api.provider.models import Provider -from api.report.ocp.dataclasses.cluster_capacity import ClusterCapacity -from api.report.ocp.dataclasses.node_capacity import NodeCapacity +from api.report.ocp.capacity.cluster_capacity import ClusterCapacity +from api.report.ocp.capacity.node_capacity import NodeCapacity from api.report.ocp.provider_map import OCPProviderMap from api.report.ocp.query_handler import OCPReportQueryHandler from api.report.ocp.view import OCPCostView