Skip to content

Commit

Permalink
Merge 9d6ec7d into 789454d
Browse files Browse the repository at this point in the history
  • Loading branch information
roksys committed Feb 11, 2020
2 parents 789454d + 9d6ec7d commit 1aeaff9
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 9 deletions.
16 changes: 15 additions & 1 deletion docs/openapi.json
Expand Up @@ -504,6 +504,20 @@
"name": "workflow_id_or_name",
"required": true,
"type": "string"
},
{
"description": "Steps of a workflow.",
"in": "body",
"name": "steps",
"required": false,
"schema": {
"description": "List of step names to get logs for.",
"items": {
"description": "Step name.",
"type": "string"
},
"type": "array"
}
}
],
"produces": [
Expand Down Expand Up @@ -1242,4 +1256,4 @@
},
"swagger": "2.0",
"tags": []
}
}
13 changes: 10 additions & 3 deletions reana_workflow_controller/rest/utils.py
Expand Up @@ -21,6 +21,7 @@
from reana_commons.k8s.secrets import REANAUserSecretsStore
from reana_commons.utils import get_workflow_status_change_verb
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy import and_

import fs
from flask import current_app as app
Expand Down Expand Up @@ -120,10 +121,16 @@ def get_workflow_name(workflow):
return workflow.name + '.' + str(workflow.run_number)


def build_workflow_logs(workflow):
def build_workflow_logs(workflow, steps=None):
"""Return the logs for all jobs of a workflow."""
jobs = Session.query(Job).filter_by(workflow_uuid=workflow.id_).order_by(
Job.created).all()
if steps:
jobs = Session.query(Job).filter(
and_(
Job.workflow_uuid == workflow.id_,
Job.job_name.in_(steps))).order_by(Job.created).all()
else:
jobs = Session.query(Job).filter_by(
workflow_uuid=workflow.id_).order_by(Job.created).all()
all_logs = {}
for job in jobs:
item = {
Expand Down
24 changes: 21 additions & 3 deletions reana_workflow_controller/rest/workflows_status.py
Expand Up @@ -58,6 +58,16 @@ def get_workflow_logs(workflow_id_or_name): # noqa
description: Required. Workflow UUID or name.
required: true
type: string
- name: steps
in: body
description: Steps of a workflow.
required: false
schema:
type: array
description: List of step names to get logs for.
items:
type: string
description: Step name.
responses:
200:
description: >-
Expand Down Expand Up @@ -119,9 +129,17 @@ def get_workflow_logs(workflow_id_or_name): # noqa
return jsonify(
{'message': 'User {} is not allowed to access workflow {}'
.format(user_uuid, workflow_id_or_name)}), 403
workflow_logs = {'workflow_logs': workflow.logs,
'job_logs': build_workflow_logs(workflow),
'engine_specific': workflow.engine_specific}
steps = None
if request.json:
steps = request.json
if steps:
workflow_logs = {'workflow_logs': None,
'job_logs': build_workflow_logs(workflow, steps),
'engine_specific': None}
else:
workflow_logs = {'workflow_logs': workflow.logs,
'job_logs': build_workflow_logs(workflow),
'engine_specific': workflow.engine_specific}
return jsonify({'workflow_id': workflow.id_,
'workflow_name': get_workflow_name(workflow),
'logs': json.dumps(workflow_logs),
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -52,7 +52,7 @@
'jsonpickle>=0.9.6',
'marshmallow>2.13.0,<=2.20.1',
'packaging>=18.0',
'reana-commons[kubernetes]>=0.7.0.dev20200203,<0.8.0',
'reana-commons[kubernetes]>=0.7.0.dev20200211,<0.8.0',
'reana-db>=0.7.0.dev20200206,<0.8.0',
'requests==2.20.0',
'sqlalchemy-utils>=0.31.0',
Expand Down
3 changes: 2 additions & 1 deletion tests/test_views.py
Expand Up @@ -701,7 +701,8 @@ def test_get_created_workflow_logs(app, default_user, cwl_workflow_with_name):
res = client.get(url_for('statuses.get_workflow_logs',
workflow_id_or_name=workflow_uuid),
query_string={"user": default_user.id_},
content_type='application/json')
content_type='application/json',
data=json.dumps(None))
assert res.status_code == 200
response_data = json.loads(res.get_data(as_text=True))
create_workflow_logs = ""
Expand Down

0 comments on commit 1aeaff9

Please sign in to comment.