Skip to content

Commit 9be27c6

Browse files
authored
VED-1010: refactor audit table functions (#1137)
* Refactor upsert_audit_table to create_audit_table_item * Refactor update_audit_table_status and set_audit_table_ingestion_start_time in recordprocessor to use common update_audit_table_item * Refactor ack_backend to use shared update Also moved other audit table functions to shared file * Use shared function in batch_processor_filter * Refactor update_audit_table_item * Consolidate unit tests * Tidy up create_audit_table_item and unit tests * Delete consolidated unit test files * Self review * Tidy up after rebase * Self review 2 * Fix linting issue * Address review feedback * Tidy up error handling
1 parent 9de992f commit 9be27c6

27 files changed

Lines changed: 1234 additions & 788 deletions

lambdas/ack_backend/src/ack_processor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import json
44

5-
from audit_table import increment_records_failed_count
5+
from common.batch.audit_table import increment_records_failed_count
66
from common.batch.eof_utils import is_eof_message
77
from convert_message_to_ack_row import convert_message_to_ack_row
88
from logging_decorators import ack_lambda_handler_logging_decorator

lambdas/ack_backend/src/audit_table.py

Lines changed: 0 additions & 114 deletions
This file was deleted.

lambdas/ack_backend/src/update_ack_file.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,11 @@
77

88
from botocore.exceptions import ClientError
99

10-
from audit_table import (
11-
change_audit_table_status_to_processed,
12-
get_record_count_and_failures_by_message_id,
13-
set_audit_record_success_count_and_end_time,
14-
)
1510
from common.aws_s3_utils import move_file
11+
from common.batch.audit_table import get_record_count_and_failures_by_message_id, update_audit_table_item
1612
from common.clients import get_s3_client, logger
1713
from common.log_decorator import generate_and_send_logs
18-
from common.models.batch_constants import ACK_BUCKET_NAME, SOURCE_BUCKET_NAME
14+
from common.models.batch_constants import ACK_BUCKET_NAME, SOURCE_BUCKET_NAME, AuditTableKeys, FileStatus
1915
from constants import (
2016
ACK_HEADERS,
2117
BATCH_FILE_ARCHIVE_DIR,
@@ -81,12 +77,21 @@ def complete_batch_file_process(
8177
move_file(SOURCE_BUCKET_NAME, f"{BATCH_FILE_PROCESSING_DIR}/{file_key}", f"{BATCH_FILE_ARCHIVE_DIR}/{file_key}")
8278

8379
total_ack_rows_processed, total_failures = get_record_count_and_failures_by_message_id(message_id)
84-
change_audit_table_status_to_processed(file_key, message_id)
80+
update_audit_table_item(
81+
file_key=file_key, message_id=message_id, attrs_to_update={AuditTableKeys.STATUS: FileStatus.PROCESSED}
82+
)
8583

8684
# Consider creating time utils and using datetime instead of time
8785
ingestion_end_time = time.strftime("%Y%m%dT%H%M%S00", time.gmtime())
8886
successful_record_count = total_ack_rows_processed - total_failures
89-
set_audit_record_success_count_and_end_time(file_key, message_id, successful_record_count, ingestion_end_time)
87+
update_audit_table_item(
88+
file_key=file_key,
89+
message_id=message_id,
90+
attrs_to_update={
91+
AuditTableKeys.RECORDS_SUCCEEDED: successful_record_count,
92+
AuditTableKeys.INGESTION_END_TIME: ingestion_end_time,
93+
},
94+
)
9095

9196
result = {
9297
"message_id": message_id,

lambdas/ack_backend/tests/test_ack_processor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444

4545
@patch.dict(os.environ, MOCK_ENVIRONMENT_DICT)
46-
@patch("audit_table.AUDIT_TABLE_NAME", AUDIT_TABLE_NAME)
46+
@patch("common.batch.audit_table.AUDIT_TABLE_NAME", AUDIT_TABLE_NAME)
4747
@mock_aws
4848
class TestAckProcessor(unittest.TestCase):
4949
"""Tests for the ack processor lambda handler."""

lambdas/ack_backend/tests/test_audit_table.py

Lines changed: 0 additions & 142 deletions
This file was deleted.

lambdas/ack_backend/tests/test_splunk_logging.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -386,8 +386,8 @@ def test_splunk_update_ack_file_not_logged(self):
386386
patch("common.log_decorator.send_log_to_firehose") as mock_send_log_to_firehose, # noqa: E999
387387
patch("common.log_decorator.logger") as mock_logger, # noqa: E999
388388
patch(
389-
"update_ack_file.change_audit_table_status_to_processed"
390-
) as mock_change_audit_table_status_to_processed, # noqa: E999
389+
"update_ack_file.update_audit_table_item",
390+
) as mock_update_audit_table_item, # noqa: E999
391391
patch("ack_processor.increment_records_failed_count"), # noqa: E999
392392
): # noqa: E999
393393
result = lambda_handler(generate_event(messages), context={})
@@ -413,7 +413,7 @@ def test_splunk_update_ack_file_not_logged(self):
413413
call(self.stream_name, last_logger_info_call_args),
414414
]
415415
)
416-
mock_change_audit_table_status_to_processed.assert_not_called()
416+
mock_update_audit_table_item.assert_not_called()
417417

418418
def test_splunk_update_ack_file_logged(self):
419419
"""Tests that update_ack_file is logged if we have sent acks for the whole file"""
@@ -428,12 +428,7 @@ def test_splunk_update_ack_file_logged(self):
428428
patch("update_ack_file.datetime") as mock_datetime,
429429
patch("common.log_decorator.logger") as mock_logger, # noqa: E999
430430
patch("update_ack_file.get_record_count_and_failures_by_message_id", return_value=(99, 2)),
431-
patch(
432-
"update_ack_file.change_audit_table_status_to_processed"
433-
) as mock_change_audit_table_status_to_processed, # noqa: E999
434-
patch(
435-
"update_ack_file.set_audit_record_success_count_and_end_time"
436-
) as mock_set_records_succeeded_count_and_end_time, # noqa: E999
431+
patch("update_ack_file.update_audit_table_item") as mock_update_audit_table_item, # noqa: E999
437432
patch("ack_processor.increment_records_failed_count"), # noqa: E999
438433
): # noqa: E999
439434
mock_datetime.now.return_value = ValidValues.fixed_datetime
@@ -469,8 +464,8 @@ def test_splunk_update_ack_file_logged(self):
469464
call(self.stream_name, last_logger_info_call_args),
470465
]
471466
)
472-
mock_change_audit_table_status_to_processed.assert_called()
473-
mock_set_records_succeeded_count_and_end_time.assert_called()
467+
468+
self.assertEqual(mock_update_audit_table_item.call_count, 2)
474469

475470

476471
if __name__ == "__main__":

lambdas/ack_backend/tests/test_update_ack_file_flow.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,15 @@ def setUp(self):
3333
self.logger_patcher = patch("update_ack_file.logger")
3434
self.mock_logger = self.logger_patcher.start()
3535

36-
self.change_audit_status_patcher = patch("update_ack_file.change_audit_table_status_to_processed")
37-
self.mock_change_audit_status = self.change_audit_status_patcher.start()
36+
self.update_audit_table_item_patcher = patch("update_ack_file.update_audit_table_item")
37+
self.mock_update_audit_table_item = self.update_audit_table_item_patcher.start()
3838
self.get_record_and_failure_count_patcher = patch("update_ack_file.get_record_count_and_failures_by_message_id")
3939
self.mock_get_record_and_failure_count = self.get_record_and_failure_count_patcher.start()
40-
self.set_records_succeeded_count_patcher = patch("update_ack_file.set_audit_record_success_count_and_end_time")
41-
self.mock_set_records_succeeded_count = self.set_records_succeeded_count_patcher.start()
4240

4341
def tearDown(self):
4442
self.logger_patcher.stop()
45-
self.change_audit_status_patcher.stop()
43+
self.update_audit_table_item_patcher.stop()
4644
self.get_record_and_failure_count_patcher.stop()
47-
self.set_records_succeeded_count_patcher.stop()
4845

4946
def test_audit_table_updated_correctly_when_ack_process_complete(self):
5047
"""VED-167 - Test that the audit table has been updated correctly"""
@@ -73,5 +70,4 @@ def test_audit_table_updated_correctly_when_ack_process_complete(self):
7370

7471
# Assert: Only check audit table interactions
7572
self.mock_get_record_and_failure_count.assert_called_once_with(message_id)
76-
self.mock_change_audit_status.assert_called_once_with(file_key, message_id)
77-
self.mock_set_records_succeeded_count.assert_called_once()
73+
self.assertEqual(self.mock_update_audit_table_item.call_count, 2)

0 commit comments

Comments
 (0)