Skip to content

Commit 764a911

Browse files
authored
[COST-5028] guard against report_status not existing (#5099)
1 parent 5e23153 commit 764a911

File tree

4 files changed

+36
-11
lines changed

4 files changed

+36
-11
lines changed

koku/masu/processor/parquet/ocp_cloud_parquet_report_processor.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def get_ocp_provider_uuids_tuple(self):
231231
ocp_provider_uuids.append(ocp_provider_uuid)
232232
return tuple(ocp_provider_uuids)
233233

234-
def process(self, parquet_base_filename, daily_data_frames, manifest_id=None):
234+
def process(self, parquet_base_filename, daily_data_frames):
235235
"""Filter data and convert to parquet."""
236236
if not (ocp_provider_uuids := self.get_ocp_provider_uuids_tuple()):
237237
return
@@ -243,7 +243,10 @@ def process(self, parquet_base_filename, daily_data_frames, manifest_id=None):
243243
)
244244
return
245245

246-
self.report_status.update_status(CombinedChoices.OCP_CLOUD_PROCESSING)
246+
if self.report_status:
247+
# internal masu endpoints may result in this being None, so guard this in case there is no status to update
248+
self.report_status.update_status(CombinedChoices.OCP_CLOUD_PROCESSING)
249+
247250
# # Get OpenShift topology data
248251
with OCPReportDBAccessor(self.schema_name) as accessor:
249252
if self.provider_type == Provider.PROVIDER_GCP:

koku/masu/processor/parquet/parquet_report_processor.py

+12-8
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,12 @@ def __init__(
7979
ingress_reports_uuid=None,
8080
):
8181
"""initialize report processor."""
82-
if context is None:
83-
context = {}
8482
self._schema_name = schema_name
8583
self._provider_uuid = provider_uuid
8684
self._report_file = Path(report_path)
8785
self.provider_type = provider_type
8886
self._manifest_id = manifest_id
89-
self._context = context
87+
self._context = context or {}
9088
self.start_date = self._context.get("start_date")
9189
self.invoice_month_date = None
9290
if invoice_month := self._context.get("invoice_month"):
@@ -98,10 +96,6 @@ def __init__(
9896

9997
self.split_files = [Path(file) for file in self._context.get("split_files") or []]
10098
self.ocp_files_to_process: dict[str, dict[str, str]] = self._context.get("ocp_files_to_process")
101-
if self.manifest_id:
102-
self.report_status = CostUsageReportStatus.objects.get(
103-
report_name=Path(self._report_file).name, manifest_id=self.manifest_id
104-
)
10599

106100
@property
107101
def schema_name(self):
@@ -149,6 +143,13 @@ def manifest_id(self):
149143
"""The manifest id."""
150144
return self._manifest_id
151145

146+
@cached_property
147+
def report_status(self):
148+
if self.manifest_id:
149+
return CostUsageReportStatus.objects.get(
150+
report_name=Path(self._report_file).name, manifest_id=self.manifest_id
151+
)
152+
152153
@property
153154
def report_file(self):
154155
"""The complete CSV file path."""
@@ -582,7 +583,10 @@ def convert_csv_to_parquet(self, csv_filename: os.PathLike): # noqa: C901
582583
),
583584
exc_info=err,
584585
)
585-
self.report_status.update_status(CombinedChoices.FAILED)
586+
if self.report_status:
587+
# internal masu endpoints may result in this being None,
588+
# so guard this in case there is no status to update
589+
self.report_status.update_status(CombinedChoices.FAILED)
586590
return parquet_base_filename, daily_data_frames, False
587591

588592
return parquet_base_filename, daily_data_frames, True

koku/masu/processor/report_processor.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def process(self):
118118
try:
119119
parquet_base_filename, daily_data_frames = self._processor.process()
120120
if self.ocp_on_cloud_processor:
121-
self.ocp_on_cloud_processor.process(parquet_base_filename, daily_data_frames, self.manifest_id)
121+
self.ocp_on_cloud_processor.process(parquet_base_filename, daily_data_frames)
122122
return daily_data_frames != []
123123
except ReportsAlreadyProcessed:
124124
report_status.update_status(CombinedChoices.DONE)

koku/masu/test/processor/parquet/test_ocp_cloud_parquet_report_processor.py

+18
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from masu.util.aws.common import match_openshift_resources_and_labels
2323
from masu.util.gcp.common import match_openshift_resources_and_labels as gcp_match_openshift_resources_and_labels
2424
from reporting.provider.all.models import EnabledTagKeys
25+
from reporting_common.models import CostUsageReportStatus
2526

2627

2728
class TestOCPCloudParquetReportProcessor(MasuTestCase):
@@ -443,3 +444,20 @@ def test_get_matched_tags_trino(self, mock_has_enabled, mock_matching_enabled, m
443444
):
444445
self.report_processor.get_matched_tags([])
445446
mock_get_tags.assert_not_called()
447+
448+
def test_instantiating_processor_without_manifest_id(self):
449+
"""Assert that report_status exists and is None."""
450+
report_processor = OCPCloudParquetReportProcessor(
451+
schema_name=self.schema,
452+
report_path=self.report_path,
453+
provider_uuid=self.gcp_provider_uuid,
454+
provider_type=Provider.PROVIDER_GCP_LOCAL,
455+
manifest_id=0,
456+
context={"request_id": self.request_id, "start_date": self.start_date, "create_table": True},
457+
)
458+
self.assertIsNone(report_processor.report_status)
459+
460+
def test_instantiating_processor_with_manifest_id(self):
461+
"""Assert that report_status exists and is not None."""
462+
self.assertIsNotNone(self.report_processor.report_status)
463+
self.assertIsInstance(self.report_processor.report_status, CostUsageReportStatus)

0 commit comments

Comments
 (0)