Skip to content

Commit

Permalink
Merge pull request #590 from oda-hub/job_id-included-in-exception-mes…
Browse files Browse the repository at this point in the history
…sage

Job id included in exception message for sentry
  • Loading branch information
burnout87 authored Sep 18, 2023
2 parents 8eb7072 + f5d64c5 commit e0a5b04
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 12 deletions.
25 changes: 15 additions & 10 deletions cdci_data_analysis/analysis/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ def get_parameters_list_as_json(self, prod_dict=None):
def get_prod_by_name(self,name):
return self.query_prod_list.get_prod_by_name(name)

def test_communication(self, instrument, query_type='Real', logger=None, config=None, sentry_dsn=None):
def test_communication(self, instrument, job=None, query_type='Real', logger=None, config=None, sentry_dsn=None):
if logger is None:
logger = self.get_logger()

Expand All @@ -431,7 +431,10 @@ def test_communication(self, instrument, query_type='Real', logger=None, config=
query_out.set_done(message=message, debug_message=str(debug_message),status=status)

except ConnectionError as e:
e_message = f'Connection with the backend (instrument: {instrument.name}, product: {self.name}) failed!\n' + repr(e)
job_id_message = ''
if job is not None:
job_id_message = f', job_id: {job.job_id}'
e_message = f'Connection with the backend (instrument: {instrument.name}, product: {self.name}{job_id_message}) failed!\n' + repr(e)

if hasattr(e, 'debug_message') and e.debug_message is not None:
debug_message = e.debug_message
Expand Down Expand Up @@ -460,7 +463,7 @@ def test_communication(self, instrument, query_type='Real', logger=None, config=

return query_out

def test_has_products(self,instrument,query_type='Real',logger=None,config=None,scratch_dir=None,sentry_dsn=None):
def test_has_products(self,instrument,job=None,query_type='Real',logger=None,config=None,scratch_dir=None,sentry_dsn=None):
if logger is None:
logger = self.get_logger()

Expand Down Expand Up @@ -583,17 +586,16 @@ def get_query_products(self,instrument,job,run_asynch,query_type='Real',logger=N
# TODO: could we avoid these? they make error tracking hard
# TODO we could use the very same approach used when test_communication fails
logger.exception("failed to get query products")
e_message = repr(e) + '\n' + getattr(e, 'message', '') + '\n' + getattr(e, 'debug_message', '')

#status=1
job.set_failed()
if os.environ.get('DISPATCHER_DEBUG', 'yes') == 'yes':
raise

e_message = getattr(e, 'message', '')
exception_message = getattr(e, 'message', '')
e_message = f'Failed when getting query products for job {job.job_id}:\n{exception_message}'
messages['debug_message'] = repr(e) + ' : ' + getattr(e, 'debug_message', '')

query_out.set_failed('get_dataserver_products found job failed',
query_out.set_failed('get_query_products found job failed',
logger=logger,
sentry_dsn=sentry_dsn,
excep=e,
Expand Down Expand Up @@ -649,13 +651,16 @@ def process_query_product(self,
process_products_query_out.set_done( message=message, debug_message=str(debug_message), job_status=job.status,status=status,comment=backend_comment,warning=backend_warning)

except Exception as e:
exception_message = getattr(e, 'message', '')
e_message = f'Failed when processing products for job {job.job_id}:\n{exception_message}\n{repr(e)}'
#status=1
job.set_failed()
# FAILED
process_products_query_out.set_failed('product processing',
extra_message='product processing failed',
logger=logger,
sentry_dsn=sentry_dsn,
e_message=e_message,
excep=e)

logger.info('==>prod_process_status %d' % process_products_query_out.get_status())
Expand Down Expand Up @@ -683,19 +688,19 @@ def run_query(self,
self._t_query_steps = OrderedDict()
self._t_query_steps['start'] = _time.time()

query_out = self.test_communication(instrument,query_type=query_type,logger=logger,config=config,sentry_dsn=sentry_dsn)
query_out = self.test_communication(instrument, job, query_type=query_type, logger=logger, config=config, sentry_dsn=sentry_dsn)
self._t_query_steps['after_test_communication'] = _time.time()

input_prod_list=None
if query_out.status_dictionary['status'] == 0:
query_out=self.test_has_products(instrument,query_type=query_type, logger=logger, config=config,scratch_dir=scratch_dir,sentry_dsn=sentry_dsn)
query_out=self.test_has_products(instrument, job, query_type=query_type, logger=logger, config=config, scratch_dir=scratch_dir, sentry_dsn=sentry_dsn)
input_prod_list=query_out.prod_dictionary['input_prod_list']
self._t_query_steps['after_test_has_products'] = _time.time()



if query_out.status_dictionary['status'] == 0:
query_out = self.get_query_products(instrument,job,run_asynch, query_type=query_type, logger=logger, config=config,scratch_dir=scratch_dir,sentry_dsn=sentry_dsn,api=api)
query_out = self.get_query_products(instrument,job,run_asynch, query_type=query_type, logger=logger, config=config, scratch_dir=scratch_dir, sentry_dsn=sentry_dsn, api=api)
self._t_query_steps['after_get_query_products'] = _time.time()

if query_out.status_dictionary['status'] == 0:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ def build_product_list(self, instrument, res, out_dir, prod_prefix='', api=False

def test_communication(self,
instrument: Instrument,
job=None,
query_type='Real',
logger=None,
config=None,
Expand Down Expand Up @@ -372,12 +373,12 @@ def process_product_method(self, instrument, prod_list, api=False, **kw):
query_out.prod_dictionary['echo'] = prod_list.prod_list[0]
return query_out

def test_communication(self, instrument, query_type='Real', logger=None, config=None, sentry_dsn=None):
def test_communication(self, instrument, job=None, query_type='Real', logger=None, config=None, sentry_dsn=None):
query_out = QueryOutput()
query_out.set_done()
return query_out

def test_has_products(self, instrument, query_type='Real', logger=None, config=None, scratch_dir=None, sentry_dsn=None):
def test_has_products(self, instrument, job=None, query_type='Real', logger=None, config=None, scratch_dir=None, sentry_dsn=None):
query_out = QueryOutput()
query_out.prod_dictionary['input_prod_list'] = []
query_out.set_done()
Expand Down

0 comments on commit e0a5b04

Please sign in to comment.