This PR optimises the queries for notification by reference.

By added the notification_type to the filter we get a better performance on the query. Especially when selecting for NotificationHistory.
This commit is contained in:
Rebecca Law
2020-06-16 13:15:49 +01:00
parent eec2c2859e
commit 132e75f99f
6 changed files with 25 additions and 38 deletions

View File

@@ -42,6 +42,7 @@ from app.models import (
NOTIFICATION_TECHNICAL_FAILURE,
NOTIFICATION_VALIDATION_FAILED,
NOTIFICATION_VIRUS_SCAN_FAILED,
LETTER_TYPE
)
from app.cronitor import cronitor
@@ -216,7 +217,7 @@ def group_letters(letter_pdfs):
def sanitise_letter(self, filename):
try:
reference = get_reference_from_filename(filename)
notification = dao_get_notification_by_reference(reference)
notification = dao_get_notification_by_reference(reference=reference, notification_type=LETTER_TYPE)
current_app.logger.info('Notification ID {} Virus scan passed: {}'.format(notification.id, filename))
@@ -352,7 +353,7 @@ def _move_invalid_letter_and_update_status(
def process_virus_scan_failed(filename):
move_failed_pdf(filename, ScanErrorType.FAILURE)
reference = get_reference_from_filename(filename)
notification = dao_get_notification_by_reference(reference)
notification = dao_get_notification_by_reference(reference=reference, notification_type=LETTER_TYPE)
updated_count = update_letter_pdf_status(reference, NOTIFICATION_VIRUS_SCAN_FAILED, billable_units=0)
if updated_count != 1:
@@ -371,7 +372,7 @@ def process_virus_scan_failed(filename):
def process_virus_scan_error(filename):
move_failed_pdf(filename, ScanErrorType.ERROR)
reference = get_reference_from_filename(filename)
notification = dao_get_notification_by_reference(reference)
notification = dao_get_notification_by_reference(reference=reference, notification_type=LETTER_TYPE)
updated_count = update_letter_pdf_status(reference, NOTIFICATION_TECHNICAL_FAILURE, billable_units=0)
if updated_count != 1:

View File

@@ -10,7 +10,7 @@ from app import notify_celery, statsd_client
from app.config import QueueNames
from app.clients.email.aws_ses import get_aws_responses
from app.dao import notifications_dao
from app.models import NOTIFICATION_SENDING, NOTIFICATION_PENDING
from app.models import NOTIFICATION_SENDING, NOTIFICATION_PENDING, EMAIL_TYPE
from app.notifications.notifications_ses_callback import (
determine_notification_bounce_type,
@@ -39,7 +39,9 @@ def process_ses_results(self, response):
reference = ses_message['mail']['messageId']
try:
notification = notifications_dao.dao_get_notification_or_history_by_reference(reference=reference)
notification = notifications_dao.dao_get_notification_or_history_by_reference(
reference=reference, notification_type=EMAIL_TYPE
)
except NoResultFound:
message_time = iso8601.parse_date(ses_message['mail']['timestamp']).replace(tzinfo=None)
if datetime.utcnow() - message_time < timedelta(minutes=5):

View File

@@ -536,7 +536,7 @@ def update_letter_notification(filename, temporary_failures, update):
def check_billable_units(notification_update):
notification = dao_get_notification_or_history_by_reference(notification_update.reference)
notification = dao_get_notification_or_history_by_reference(notification_update.reference, LETTER_TYPE)
if int(notification_update.page_count) != notification.billable_units:
msg = 'Notification with id {} has {} billable_units but DVLA says page count is {}'.format(