def get_wf_status(cromwell_auth, wf_id, log_on_fail=True): result = CromwellAPI.status(wf_id, cromwell_auth) try: result.raise_for_status() except requests.exceptions.HTTPError as e: err_msg = "Message from cromwell server: {0}".format( result.json()["message"]) if log_on_fail: logging.error(err_msg) raise WFStatusCheckFailException(err_msg) return result.json()["status"]
def test_status(self, mock_request): def _request_callback_status(request, context): context.status_code = 200 context.headers['test'] = 'header' return {'status': 'Succeeded'} workflow_id = "01234" for cromwell_auth in self.auth_options: mock_request.get( cromwell_auth.url + '/api/workflows/v1/{}/status'.format(workflow_id), json=_request_callback_status, ) result = CromwellAPI.status(workflow_id, cromwell_auth) self.assertEqual(result.json()['status'], 'Succeeded')
def calculate_metric(template_values, scan_values): merged_values = { k: v for (k, v) in (template_values.items() + scan_values.items()) } merged_json_file, merged_json_path = tempfile.mkstemp() with open(merged_json_path, 'w') as f: json.dump(merged_values, f) cromwell_auth = CromwellAuth(url=args.cromwell_server, header={'Authorization': 'bearer fake_token'}, auth=None) with open(args.workflow_wdl, 'r') as w, open(merged_json_path, 'r') as j: submit = CromwellAPI.submit(cromwell_auth, w, j) workflow_id = submit.json()['id'] logger.info('Submitted workflow: ' + workflow_id) time.sleep(5) logger.info('Waiting for workflow to complete...') # Query workflow status indefinitely until success or failure returned. # If success returned, attempt to retrieve objective_value from metadata and return. # If failure returned or if exception raised during metadata retreival, return bad_value. try: while True: try: CromwellAPI.wait([workflow_id], cromwell_auth, timeout_minutes=600, poll_interval_seconds=20, verbose=False) response = CromwellAPI.status(workflow_id, cromwell_auth) status = response.json()['status'] if status == 'Succeeded': logger.info('Workflow succeeded...') break except WorkflowFailedException: logger.info('Workflow failed, returning bad value...') return bad_value except Exception as e: logger.info(e) logger.info( 'Cromwell exception, retrying wait and status check...') logger.info('Getting metadata...') session = retry_session(retries=10) metadata = session.post( url=cromwell_auth.url + CromwellAPI._metadata_endpoint.format(uuid=workflow_id), auth=cromwell_auth.auth, headers=cromwell_auth.header) workflow_name = metadata.json()['workflowName'] objective_value = metadata.json()['outputs'][ '{}.objective_value'.format(workflow_name)] return objective_value except Exception as e: logger.info(e) logger.info( 'Cromwell exception during metadata retrieval, returning bad value...' ) return bad_value