Skip to content

Commit

Permalink
Merge pull request #3303 from antgonza/improve-job-error-report-email
Browse files Browse the repository at this point in the history
improve job error report email
  • Loading branch information
charles-cowart committed Jun 16, 2023
2 parents efa3c24 + 9b8019e commit 4492c3d
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 32 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ Version 2023.06
* Admin Sample Validation now uses tube_id; mainly contributed by @CatFish47.
* Registered users cannot start sample deletion jobs within public studies.
* The qp-knight-lab-processing now links the SPP job to the preparation it creates and links the created files to that preparation. Note that no files are being moved to the upload folder.
* Fixed the following issues [#3227](https://github.com/qiita-spots/qiita/issues/3227), [#3279](https://github.com/qiita-spots/qiita/issues/3279).
* Fixed the following issues [#3227](https://github.com/qiita-spots/qiita/issues/3227), [#3279](https://github.com/qiita-spots/qiita/issues/3280), [#3227](https://github.com/qiita-spots/qiita/issues/3280).
* Added ProcessingJob.external_id to status-report messages generated, and added sending an email to our system-admin when a (wet-lab) admin job errors.


Version 2023.05
Expand Down
23 changes: 18 additions & 5 deletions qiita_db/processing_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -729,7 +729,8 @@ def _generate_notification_message(self, value, error_msg):
return None

# generate subject line
subject = '%s: %s (%s)' % (self.command.name, value, self.id)
subject = (f'{self.command.name}: {value}, {self.id} '
f'[{self.external_id}]')

# generate message line
message = ''
Expand Down Expand Up @@ -758,10 +759,17 @@ def _generate_notification_message(self, value, error_msg):
study_id = study_ids.pop()

# there should be at least one prep_id and probably more.
prep_ids = set(prep_ids)
prep_ids = list(set(prep_ids))
if len(prep_ids) == 0:
raise qdb.exceptions.QiitaError("No Prep IDs were "
"found")
if len(prep_ids) == 1:
study_url = (f'{qiita_config.base_url}/study/'
f'description/{study_id}?prep_id='
f'{prep_ids[0]}')
else:
study_url = (f'{qiita_config.base_url}/study/'
f'description/{study_id}')
# convert into a string for presentation.
prep_ids = [str(x) for x in prep_ids]
prep_ids = ', '.join(prep_ids)
Expand All @@ -774,10 +782,9 @@ def _generate_notification_message(self, value, error_msg):
f"{data_types}")
data_type = data_types.pop()

message = f'Processing Job: {self.command.name}\n'
message += f'{qiita_config.base_url}/study/'
message += f'description/{study_id}\n'
message = f'{self.command.name}\n'
message += f'Prep IDs: {prep_ids}\n'
message += f'{study_url}\n'
message += f'Data Type: {data_type}\n'
elif artifact.analysis:
# this is an analysis job. display analysis id as link and
Expand Down Expand Up @@ -832,6 +839,12 @@ def _set_status(self, value, error_msg=None):
# send email
qdb.util.send_email(self.user.email, msg['subject'],
msg['message'])
# send email to our sys-admin if error from admin
if self.user.level in {'admin', 'wet-lab admin'}:
if value == 'error':
qdb.util.send_email(
'jdereus@health.ucsd.edu', msg['subject'],
msg['message'])

sql = """UPDATE qiita.processing_job
SET processing_job_status_id = %s
Expand Down
49 changes: 23 additions & 26 deletions qiita_db/test/test_processing_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -870,50 +870,47 @@ def test_notification_mail_generation(self):
# messages of type 'error'.
obs = self.tester1._generate_notification_message('error', None)

exp = {'subject': ('Split libraries FASTQ: error '
'(063e553b-327c-4818-ab4a-adfe58e49860)'),
'message': ('Processing Job: Split libraries FASTQ\n'
f'{qiita_config.base_url}/study/description/1'
'\nPrep IDs: 1\nData Type: 18S\nNew '
'status: error')}
exp = {'subject': ('Split libraries FASTQ: error, 063e553b-327c-4818-'
'ab4a-adfe58e49860 [Not Available]'),
'message': ('Split libraries FASTQ\nPrep IDs: 1'
f'\n{qiita_config.base_url}/study/description/1?'
'prep_id=1\nData Type: 18S\nNew status: error')}
self.assertDictEqual(obs, exp)

obs = self.tester1._generate_notification_message('error',
'An Error Message')
exp = {'subject': ('Split libraries FASTQ: error '
'(063e553b-327c-4818-ab4a-adfe58e49860)'),
'message': ('Processing Job: Split libraries FASTQ\n'
f'{qiita_config.base_url}/study/description/1\n'
'Prep IDs: 1\nData Type: 18S\nNew status'
': error\n\nError:\nAn Error Message')}
exp = {'subject': ('Split libraries FASTQ: error, 063e553b-327c-4818-'
'ab4a-adfe58e49860 [Not Available]'),
'message': ('Split libraries FASTQ\nPrep IDs: 1'
f'\n{qiita_config.base_url}/study/description/1?'
'prep_id=1\nData Type: 18S\nNew status: error'
'\n\nError:\nAn Error Message')}
self.assertDictEqual(obs, exp)

# The inclusion of an error message has no effect on other valid
# status types e.g. 'running'.
obs = self.tester1._generate_notification_message('running', None)
exp = {'subject': ('Split libraries FASTQ: running '
'(063e553b-327c-4818-ab4a-adfe58e49860)'),
'message': ('Processing Job: Split libraries FASTQ\n'
f'{qiita_config.base_url}/study/description/1\n'
'Prep IDs: 1\nData Type: 18S\nNew status'
': running')}
exp = {'subject': ('Split libraries FASTQ: running, 063e553b-327c-'
'4818-ab4a-adfe58e49860 [Not Available]'),
'message': ('Split libraries FASTQ\nPrep IDs: 1'
f'\n{qiita_config.base_url}/study/description/1?'
'prep_id=1\nData Type: 18S\nNew status: running')}
self.assertDictEqual(obs, exp)

obs = self.tester1._generate_notification_message('running', 'Yahoo!')
exp = {'subject': ('Split libraries FASTQ: running '
'(063e553b-327c-4818-ab4a-adfe58e49860)'),
'message': ('Processing Job: Split libraries FASTQ\n'
f'{qiita_config.base_url}/study/description/1\n'
'Prep IDs: 1\nData Type: 18S\nNew status'
': running')}
exp = {'subject': ('Split libraries FASTQ: running, 063e553b-327c-'
'4818-ab4a-adfe58e49860 [Not Available]'),
'message': ('Split libraries FASTQ\nPrep IDs: 1'
f'\n{qiita_config.base_url}/study/description/1?'
'prep_id=1\nData Type: 18S\nNew status: running')}
self.assertDictEqual(obs, exp)

# checking analysis emails
jid = '8a7a8461-e8a1-4b4e-a428-1bc2f4d3ebd0'
pj = qdb.processing_job.ProcessingJob(jid)
obs = pj._generate_notification_message('running', 'Yahoo!')
exp = {'subject': 'Single Rarefaction: running '
'(8a7a8461-e8a1-4b4e-a428-1bc2f4d3ebd0)',
exp = {'subject': ('Single Rarefaction: running, 8a7a8461-e8a1-'
'4b4e-a428-1bc2f4d3ebd0 [Not Available]'),
'message': 'Analysis Job Single Rarefaction\n'
f'{qiita_config.base_url}/analysis/description/1/\n'
'New status: running'}
Expand Down

0 comments on commit 4492c3d

Please sign in to comment.