Ejemplo n.º 1
0
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"]
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
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