Added alert when job.notification_count doesn't match total notification for job

- Added log for when a job starts so that we will know when the processing of a job starts with the number of notifications
- Added dao method to get total notifications for a job id
- Added a test to check whether the number of notifications in the table matches the job notification_count
This commit is contained in:
Ken Tsang
2017-10-10 15:04:55 +01:00
parent 04914d711a
commit dcf0d22d7b
4 changed files with 67 additions and 8 deletions

View File

@@ -29,6 +29,7 @@ from app.dao.jobs_dao import (
dao_update_job_status)
from app.dao.notifications_dao import (
get_notification_by_id,
dao_get_total_notifications_for_job_id,
dao_update_notifications_for_job_to_sent_to_dvla,
dao_update_notifications_by_reference
)
@@ -85,6 +86,8 @@ def process_job(job_id):
TemplateClass = get_template_class(db_template.template_type)
template = TemplateClass(db_template.__dict__)
current_app.logger.info("Starting job {} processing {} notifications".format(job_id, job.notification_count))
for row_number, recipient, personalisation in RecipientCSV(
s3.get_job_from_s3(str(service.id), str(job_id)),
template_type=template.template_type,
@@ -92,14 +95,21 @@ def process_job(job_id):
).enumerated_recipients_and_personalisation:
process_row(row_number, recipient, personalisation, template, job, service)
if template.template_type == LETTER_TYPE:
if service.research_mode:
update_job_to_sent_to_dvla.apply_async([str(job.id)], queue=QueueNames.RESEARCH_MODE)
else:
build_dvla_file.apply_async([str(job.id)], queue=QueueNames.JOBS)
current_app.logger.info("send job {} to build-dvla-file in the {} queue".format(job_id, QueueNames.JOBS))
notification_total_in_db = dao_get_total_notifications_for_job_id(job.id)
if job.notification_count != notification_total_in_db:
current_app.logger.error("Job {} is missing {} notifications".format(
job.id, notification_total_in_db - notification_total_in_db))
job.job_status = JOB_STATUS_ERROR
else:
job.job_status = JOB_STATUS_FINISHED
if template.template_type == LETTER_TYPE:
if service.research_mode:
update_job_to_sent_to_dvla.apply_async([str(job.id)], queue=QueueNames.RESEARCH_MODE)
else:
build_dvla_file.apply_async([str(job.id)], queue=QueueNames.JOBS)
current_app.logger.info("send job {} to build-dvla-file in the {} queue".format(job_id, QueueNames.JOBS))
else:
job.job_status = JOB_STATUS_FINISHED
finished = datetime.utcnow()
job.processing_started = start

View File

@@ -442,6 +442,16 @@ def get_total_sent_notifications_in_date_range(start_date, end_date, notificatio
return result or 0
def dao_get_total_notifications_for_job_id(job_id):
result = db.session.query(
func.count(Notification.id).label('count')
).filter(
Notification.job_id == job_id
).scalar()
return result or 0
def is_delivery_slow_for_provider(
sent_at,
provider,