taverna-player 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/Gemfile +18 -0
- data/LICENCE.rdoc +29 -0
- data/README.rdoc +663 -0
- data/Rakefile +65 -0
- data/app/assets/javascripts/taverna_player/application.js +14 -0
- data/app/assets/javascripts/taverna_player/runs.js +42 -0
- data/app/assets/stylesheets/scaffold.css +56 -0
- data/app/assets/stylesheets/taverna_player/application.css +13 -0
- data/app/assets/stylesheets/taverna_player/coderay.css +120 -0
- data/app/controllers/taverna_player/application_controller.rb +16 -0
- data/app/controllers/taverna_player/runs_controller.rb +18 -0
- data/app/controllers/taverna_player/service_credentials_controller.rb +18 -0
- data/app/helpers/taverna_player/application_helper.rb +55 -0
- data/app/helpers/taverna_player/runs_helper.rb +84 -0
- data/app/models/taverna_player/interaction.rb +25 -0
- data/app/models/taverna_player/run.rb +117 -0
- data/app/models/taverna_player/run_port.rb +148 -0
- data/app/models/taverna_player/service_credential.rb +56 -0
- data/app/views/layouts/taverna_player/embedded.html.erb +27 -0
- data/app/views/taverna_player/runs/_button.html.erb +19 -0
- data/app/views/taverna_player/runs/_info.html.erb +56 -0
- data/app/views/taverna_player/runs/_info.json.jbuilder +2 -0
- data/app/views/taverna_player/runs/_inputs.html.erb +34 -0
- data/app/views/taverna_player/runs/_inputs.json.jbuilder +8 -0
- data/app/views/taverna_player/runs/_interaction.html.erb +68 -0
- data/app/views/taverna_player/runs/_outputs.html.erb +41 -0
- data/app/views/taverna_player/runs/_poll.html.erb +27 -0
- data/app/views/taverna_player/runs/create.json.jbuilder +3 -0
- data/app/views/taverna_player/runs/embedded/_button.html.erb +19 -0
- data/app/views/taverna_player/runs/embedded/_info.html.erb +25 -0
- data/app/views/taverna_player/runs/embedded/_inputs.html.erb +32 -0
- data/app/views/taverna_player/runs/embedded/_outputs.html.erb +32 -0
- data/app/views/taverna_player/runs/embedded/new.html.erb +58 -0
- data/app/views/taverna_player/runs/embedded/show.html.erb +39 -0
- data/app/views/taverna_player/runs/embedded/show.js.erb +35 -0
- data/app/views/taverna_player/runs/index.html.erb +40 -0
- data/app/views/taverna_player/runs/index.json.jbuilder +1 -0
- data/app/views/taverna_player/runs/new.html.erb +56 -0
- data/app/views/taverna_player/runs/new.json.jbuilder +1 -0
- data/app/views/taverna_player/runs/show.html.erb +29 -0
- data/app/views/taverna_player/runs/show.js.erb +25 -0
- data/app/views/taverna_player/runs/show.json.jbuilder +25 -0
- data/app/views/taverna_player/service_credentials/_form.html.erb +53 -0
- data/app/views/taverna_player/service_credentials/edit.html.erb +18 -0
- data/app/views/taverna_player/service_credentials/index.html.erb +41 -0
- data/app/views/taverna_player/service_credentials/new.html.erb +17 -0
- data/app/views/taverna_player/service_credentials/show.html.erb +36 -0
- data/config/routes.rb +34 -0
- data/db/migrate/20130313105546_create_taverna_player_runs.rb +16 -0
- data/db/migrate/20130315163019_create_taverna_player_run_ports.rb +15 -0
- data/db/migrate/20130318170744_add_attachment_file_to_taverna_player_run_ports.rb +6 -0
- data/db/migrate/20130319183634_create_delayed_jobs.rb +22 -0
- data/db/migrate/20130320102600_add_status_message_to_taverna_player_runs.rb +5 -0
- data/db/migrate/20130321100110_add_depth_and_metadata_to_taverna_player_run_ports.rb +6 -0
- data/db/migrate/20130704095504_add_attachment_results_to_taverna_player_runs.rb +5 -0
- data/db/migrate/20130705142704_add_embedded_to_taverna_player_runs.rb +5 -0
- data/db/migrate/20130714140911_create_taverna_player_interactions.rb +13 -0
- data/db/migrate/20130717083653_add_proxy_to_taverna_player_runs.rb +6 -0
- data/db/migrate/20130717155415_add_stop_to_taverna_player_runs.rb +5 -0
- data/db/migrate/20130811152840_add_attachment_log_to_taverna_player_runs.rb +5 -0
- data/db/migrate/20130811211725_change_taverna_player_runs_state_column.rb +5 -0
- data/db/migrate/20130812155839_add_name_to_taverna_player_runs.rb +5 -0
- data/db/migrate/20130918135348_create_taverna_player_service_credentials.rb +15 -0
- data/db/migrate/20130919154200_add_displayed_to_taverna_player_interactions.rb +5 -0
- data/db/migrate/20131007153209_add_job_ref_to_taverna_player_runs.rb +13 -0
- data/db/migrate/20131010094537_add_reply_caching_to_taverna_player_interactions.rb +19 -0
- data/db/migrate/20131017141514_add_failure_message_to_taverna_player_run.rb +5 -0
- data/db/migrate/20131018152940_add_serial_number_to_taverna_player_interactions.rb +5 -0
- data/db/migrate/20131018160715_add_parent_run_id_to_taverna_player_runs.rb +5 -0
- data/db/migrate/20131102113933_add_page_uri_to_taverna_player_interaction.rb +5 -0
- data/db/migrate/20131105115218_remove_proxy_from_taverna_player_runs.rb +11 -0
- data/db/migrate/20131105141934_change_taverna_player_interactions_output_value_column_name.rb +5 -0
- data/db/migrate/20131112165520_add_user_to_taverna_player_run.rb +5 -0
- data/lib/generators/taverna_player/callbacks_generator.rb +25 -0
- data/lib/generators/taverna_player/controllers_generator.rb +30 -0
- data/lib/generators/taverna_player/install_generator.rb +30 -0
- data/lib/generators/taverna_player/job_generator.rb +26 -0
- data/lib/generators/taverna_player/models_generator.rb +27 -0
- data/lib/generators/taverna_player/renderers_generator.rb +26 -0
- data/lib/generators/taverna_player/views_generator.rb +27 -0
- data/lib/generators/templates/ReadMe.txt +118 -0
- data/lib/generators/templates/callbacks/render_callbacks.rb +56 -0
- data/lib/generators/templates/callbacks/worker_callbacks.rb +31 -0
- data/lib/generators/templates/controllers/runs_controller.rb +20 -0
- data/lib/generators/templates/controllers/service_credentials_controller.rb +20 -0
- data/lib/generators/templates/initializer.rb +154 -0
- data/lib/generators/templates/models/run.rb +20 -0
- data/lib/tasks/delete-cancelled-runs.rake +26 -0
- data/lib/tasks/delete-old-embedded-runs.rake +26 -0
- data/lib/taverna-player.rb +139 -0
- data/lib/taverna_player/concerns/controllers/runs_controller.rb +281 -0
- data/lib/taverna_player/concerns/controllers/service_credentials_controller.rb +89 -0
- data/lib/taverna_player/concerns/models/run.rb +205 -0
- data/lib/taverna_player/engine.rb +23 -0
- data/lib/taverna_player/model_proxy.rb +51 -0
- data/lib/taverna_player/output_renderer.rb +96 -0
- data/lib/taverna_player/render_callbacks.rb +41 -0
- data/lib/taverna_player/version.rb +15 -0
- data/lib/taverna_player/worker.rb +325 -0
- data/script/delayed_job +5 -0
- data/script/rails +8 -0
- data/taverna_player.gemspec +46 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +16 -0
- data/test/dummy/app/assets/stylesheets/application.css +14 -0
- data/test/dummy/app/controllers/application_controller.rb +15 -0
- data/test/dummy/app/controllers/home_controller.rb +16 -0
- data/test/dummy/app/controllers/taverna_player/runs_controller.rb +25 -0
- data/test/dummy/app/controllers/taverna_player/service_credentials_controller.rb +25 -0
- data/test/dummy/app/controllers/workflows_controller.rb +17 -0
- data/test/dummy/app/models/user.rb +15 -0
- data/test/dummy/app/models/workflow.rb +32 -0
- data/test/dummy/app/views/home/index.html.erb +18 -0
- data/test/dummy/app/views/layouts/application.html.erb +43 -0
- data/test/dummy/app/views/workflows/index.html.erb +35 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +58 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/taverna_player.example.rb +40 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +22 -0
- data/test/dummy/db/migrate/20130314103555_create_workflows.rb +12 -0
- data/test/dummy/db/migrate/20130318141557_create_taverna_player_runs.taverna_player.rb +17 -0
- data/test/dummy/db/migrate/20130318141558_create_taverna_player_run_ports.taverna_player.rb +16 -0
- data/test/dummy/db/migrate/20130318173013_add_attachment_file_to_taverna_player_run_ports.taverna_player.rb +7 -0
- data/test/dummy/db/migrate/20130319183816_create_delayed_jobs.taverna_player.rb +23 -0
- data/test/dummy/db/migrate/20130320102635_add_status_message_to_taverna_player_runs.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20130321161859_add_depth_and_metadata_to_taverna_player_run_ports.taverna_player.rb +7 -0
- data/test/dummy/db/migrate/20130704100146_add_attachment_results_to_taverna_player_runs.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20130705142816_add_embedded_to_taverna_player_runs.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20130714142144_create_taverna_player_interactions.taverna_player.rb +14 -0
- data/test/dummy/db/migrate/20130717084809_add_proxy_to_taverna_player_runs.taverna_player.rb +7 -0
- data/test/dummy/db/migrate/20130718102707_add_stop_to_taverna_player_runs.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20130811204449_add_attachment_log_to_taverna_player_runs.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20130811212709_change_taverna_player_runs_state_column.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20130812161152_add_name_to_taverna_player_runs.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20130918155525_create_taverna_player_service_credentials.taverna_player.rb +16 -0
- data/test/dummy/db/migrate/20130919155202_add_displayed_to_taverna_player_interactions.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20131007153659_add_job_ref_to_taverna_player_runs.taverna_player.rb +14 -0
- data/test/dummy/db/migrate/20131016123941_add_reply_caching_to_taverna_player_interactions.taverna_player.rb +20 -0
- data/test/dummy/db/migrate/20131017141614_add_failure_message_to_taverna_player_run.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20131018153316_add_serial_number_to_taverna_player_interactions.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20131018164614_add_parent_run_id_to_taverna_player_runs.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20131102114343_add_page_uri_to_taverna_player_interaction.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20131105115724_remove_proxy_from_taverna_player_runs.taverna_player.rb +12 -0
- data/test/dummy/db/migrate/20131105142417_change_taverna_player_interactions_output_value_column_name.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20131112165815_add_user_to_taverna_player_run.taverna_player.rb +6 -0
- data/test/dummy/db/migrate/20131114130937_create_users.rb +10 -0
- data/test/dummy/db/schema.rb +123 -0
- data/test/dummy/lib/callbacks.rb +35 -0
- data/test/dummy/log/.gitkeep +0 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/delayed_job +5 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/functional/home_controller_test.rb +28 -0
- data/test/dummy/test/functional/workflows_controller_test.rb +21 -0
- data/test/fixtures/files/crassostrea_gigas.csv +737 -0
- data/test/fixtures/taverna_player/interactions.yml +32 -0
- data/test/fixtures/taverna_player/run_ports.yml +54 -0
- data/test/fixtures/taverna_player/runs.yml +69 -0
- data/test/fixtures/taverna_player/service_credentials.yml +25 -0
- data/test/fixtures/users.yml +16 -0
- data/test/fixtures/workflows.yml +32 -0
- data/test/functional/taverna_player/runs_controller_test.rb +316 -0
- data/test/functional/taverna_player/service_credentials_controller_test.rb +99 -0
- data/test/taverna_player_test.rb +25 -0
- data/test/test_helper.rb +33 -0
- data/test/unit/helpers/taverna_player/application_helper_test.rb +70 -0
- data/test/unit/helpers/taverna_player/runs_helper_test.rb +45 -0
- data/test/unit/taverna_player/interaction_test.rb +47 -0
- data/test/unit/taverna_player/run_port_test.rb +309 -0
- data/test/unit/taverna_player/run_test.rb +196 -0
- data/test/unit/taverna_player/service_credential_test.rb +64 -0
- data/test/workflows/hello.t2flow +164 -0
- data/test/workflows/list_with_errors.t2flow +107 -0
- data/test/workflows/pass_through.t2flow +12 -0
- metadata +539 -0
data/.gitignore
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Gemfile.lock
|
2
|
+
.bundle/
|
3
|
+
log/*.log
|
4
|
+
pkg/
|
5
|
+
test/dummy/db/*.sqlite3
|
6
|
+
test/dummy/log/*.log
|
7
|
+
test/dummy/tmp/
|
8
|
+
test/dummy/.sass-cache
|
9
|
+
test/dummy/public/system/
|
10
|
+
test/dummy/config/initializers/taverna_player.rb
|
11
|
+
|
12
|
+
*~
|
13
|
+
rdoc/
|
14
|
+
.buildpath
|
15
|
+
.project
|
16
|
+
.settings
|
17
|
+
.idea
|
18
|
+
.rvmrc
|
data/Gemfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
# Declare your gem's dependencies in taverna_player.gemspec.
|
4
|
+
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
+
# development dependencies will be added by default to the :development group.
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
# These gems are used by the dummy application
|
9
|
+
gem "jquery-rails"
|
10
|
+
gem "taverna-t2flow", "~> 0.4.5"
|
11
|
+
|
12
|
+
# Declare any dependencies that are still in development here instead of in
|
13
|
+
# your gemspec. These might include edge Rails or gems from your path or
|
14
|
+
# Git. Remember to move these dependencies to your gemspec before releasing
|
15
|
+
# your gem to rubygems.org.
|
16
|
+
|
17
|
+
# To use debugger
|
18
|
+
# gem 'debugger'
|
data/LICENCE.rdoc
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Copyright (c) 2013 The University of Manchester, UK.
|
2
|
+
|
3
|
+
All rights reserved.
|
4
|
+
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
7
|
+
|
8
|
+
* Redistributions of source code must retain the above copyright notice,
|
9
|
+
this list of conditions and the following disclaimer.
|
10
|
+
|
11
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
13
|
+
and/or other materials provided with the distribution.
|
14
|
+
|
15
|
+
* Neither the names of The University of Manchester nor the names of its
|
16
|
+
contributors may be used to endorse or promote products derived from this
|
17
|
+
software without specific prior written permission.
|
18
|
+
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,663 @@
|
|
1
|
+
= Taverna Player
|
2
|
+
|
3
|
+
Authors:: Robert Haines
|
4
|
+
Contact:: mailto:support@mygrid.org.uk
|
5
|
+
URL:: http://www.taverna.org.uk
|
6
|
+
Licence:: BSD (See LICENCE or http://www.opensource.org/licenses/bsd-license.php)
|
7
|
+
Copyright:: (c) 2013 The University of Manchester, UK
|
8
|
+
|
9
|
+
{<img src="https://codeclimate.com/github/myGrid/taverna-player.png" />}[https://codeclimate.com/github/myGrid/taverna-player]
|
10
|
+
|
11
|
+
== Synopsis
|
12
|
+
|
13
|
+
Taverna Player is a Ruby on Rails plugin to run Taverna workflows on a Taverna
|
14
|
+
Server.
|
15
|
+
|
16
|
+
Taverna Player handles all aspects of running a workflow including:
|
17
|
+
* Gathering inputs and upload to Taverna Server
|
18
|
+
* Monitoring the run
|
19
|
+
* Presenting workflow interactions to the user
|
20
|
+
* Gathering and download of workflow outputs
|
21
|
+
|
22
|
+
It, purposefully, does not:
|
23
|
+
* Manage workflows
|
24
|
+
* Manage users
|
25
|
+
|
26
|
+
== Getting started
|
27
|
+
|
28
|
+
These instructions assume that you are familiar with Rails and its concepts.
|
29
|
+
Also, knowledge of {Rails Engines}[http://guides.rubyonrails.org/engines.html]
|
30
|
+
and how they integrate with other Rails applications will be useful.
|
31
|
+
|
32
|
+
Taverna Player works with Rails 3.2. Add it to your Gemfile with:
|
33
|
+
gem "taverna-player"
|
34
|
+
|
35
|
+
And run the <tt>bundle install</tt> command to install it.
|
36
|
+
|
37
|
+
Next you need to run the install generator:
|
38
|
+
rails generate taverna_player:install
|
39
|
+
|
40
|
+
This installs an initializer (into your application's
|
41
|
+
<tt>config/initializers</tt> directory) which describes all of Taverna Player's
|
42
|
+
configuration options and there are some things that MUST be configured before
|
43
|
+
it will work - see below for more information. The install generator also
|
44
|
+
prints out a list of other steps for setting up Taverna Player; these are
|
45
|
+
repeated and detailed below.
|
46
|
+
|
47
|
+
== Running Taverna Player
|
48
|
+
|
49
|
+
Once you have Taverna Player installed and configured in your Rails application
|
50
|
+
it will largely take care of itself. The nature of Rails Engines is that they
|
51
|
+
become part of the containing application relatively seamlessly.
|
52
|
+
|
53
|
+
The only extra step required for full operation of Taverna Player is to start
|
54
|
+
the delayed_job script so that workflows are actually run. Even if you already
|
55
|
+
use delayed_job in your application it is worth checking this section because
|
56
|
+
Taverna Player uses its own named queue to run jobs.
|
57
|
+
|
58
|
+
=== In development
|
59
|
+
|
60
|
+
If you simply want to have a single worker running while testing then you can
|
61
|
+
use the rake task supplied by delayed_job:
|
62
|
+
|
63
|
+
rake jobs:work
|
64
|
+
|
65
|
+
=== In production
|
66
|
+
|
67
|
+
In production you will want to run lots of workers for maximum throughput. A
|
68
|
+
good starting number of concurrent workers will probably be the number of
|
69
|
+
workflows that your Taverna Server can run at the same time. Any lower than
|
70
|
+
this and you are not running Taverna Server at its configured capacity; any
|
71
|
+
higher and you just end up with workers waiting for Taverna Server to have
|
72
|
+
space for them anyway. You might pick up some efficiencies starting new
|
73
|
+
workflow runs while the results of those just finished are being collected but
|
74
|
+
it is probably not worth having more than one or two extra workers for this.
|
75
|
+
|
76
|
+
So if your Taverna Server can run 20 concurrent workflows at once then you
|
77
|
+
would start your workers like this:
|
78
|
+
|
79
|
+
RAILS_ENV=production bundle exec ./script/delayed_job -n 20 --queue=player start
|
80
|
+
|
81
|
+
See the documentation for {delayed_job}[https://rubygems.org/gems/delayed_job]
|
82
|
+
for more options and information.
|
83
|
+
|
84
|
+
== Hooking Taverna Player into your Rails application
|
85
|
+
|
86
|
+
Mount the Taverna Player engine in your <tt>config/routes.rb</tt>. For example:
|
87
|
+
|
88
|
+
mount TavernaPlayer::Engine, :at => "/"
|
89
|
+
|
90
|
+
You can also nest the Taverna Player runs resources within your workflows
|
91
|
+
resources if you wish, like this:
|
92
|
+
|
93
|
+
resources :workflows do
|
94
|
+
resources :runs, :controller => "TavernaPlayer::Runs", :except => :edit
|
95
|
+
end
|
96
|
+
|
97
|
+
The runs resources in Taverna Player do not provide an edit view by default
|
98
|
+
so, unless you add it yourself by overriding the controller you should add the
|
99
|
+
<tt>:except</tt> clause to the routes.
|
100
|
+
|
101
|
+
Perform Taverna Player's migrations:
|
102
|
+
|
103
|
+
rake taverna_player:install:migrations
|
104
|
+
rake db:migrate
|
105
|
+
|
106
|
+
Make sure you have defined root_url to something in your
|
107
|
+
<tt>config/routes.rb</tt>. For example:
|
108
|
+
|
109
|
+
root :to => "home#index"
|
110
|
+
|
111
|
+
Add Taverna Player's assets to your application's manifests.
|
112
|
+
|
113
|
+
In app/assets/javascripts/application.js:
|
114
|
+
|
115
|
+
//= require taverna_player/application
|
116
|
+
|
117
|
+
In app/assets/stylesheets/application.css
|
118
|
+
|
119
|
+
*= require taverna_player/application
|
120
|
+
|
121
|
+
And everything should be found by the asset pipeline automatically.
|
122
|
+
|
123
|
+
Make sure you have flash messages in your main layout
|
124
|
+
(usually <tt>app/views/layouts/application.html.erb</tt>). For example:
|
125
|
+
|
126
|
+
<p class="notice"><%= notice %></p>
|
127
|
+
<p class="alert"><%= alert %></p>
|
128
|
+
|
129
|
+
Taverna Player uses delayed_job to run workflows on a Taverna Server. If your
|
130
|
+
application is not already using delayed_job then you can install the
|
131
|
+
delayed_job script in your <tt>script</tt> directory with:
|
132
|
+
|
133
|
+
rails generate taverna_player:job
|
134
|
+
|
135
|
+
Taverna Player comes with some very simple, unstyled views and layouts. If you
|
136
|
+
wish to override these with your own customized views you can copy them into
|
137
|
+
your application with:
|
138
|
+
|
139
|
+
rails generate taverna_player:views
|
140
|
+
|
141
|
+
The views are copied to the <tt>app/views/taverna_player</tt> directory so that
|
142
|
+
they take precedence over the default ones. You can delete any that you do not
|
143
|
+
need to customize but there are no penalties for leaving them there. There is
|
144
|
+
more information on overriding views below.
|
145
|
+
|
146
|
+
If you need to override the Taverna Player controllers, to implement user
|
147
|
+
authorization for example, you can copy some customizable stubs with:
|
148
|
+
|
149
|
+
rails generate taverna_player:controllers
|
150
|
+
|
151
|
+
The stubs are copied to the <tt>app/controllers/taverna_player</tt> directory
|
152
|
+
so that they take precedence over the default ones. You can delete any that you
|
153
|
+
do not need to customize but there are no penalties for leaving them there.
|
154
|
+
There is more information on overriding controllers below.
|
155
|
+
|
156
|
+
If you need to override the Taverna Player Run model, to add columns to the
|
157
|
+
table for example, you can copy a customizable stub with:
|
158
|
+
|
159
|
+
rails generate taverna_player:models
|
160
|
+
|
161
|
+
The stub is copied to the <tt>app/models/taverna_player</tt> directory so that
|
162
|
+
it takes precedence over the default one. There is more information on
|
163
|
+
overriding models below.
|
164
|
+
|
165
|
+
If you want to use pre- and post-run callbacks you can setup some basic stubs
|
166
|
+
with:
|
167
|
+
|
168
|
+
rails generate taverna_player:callbacks
|
169
|
+
|
170
|
+
They will be saved to <tt>lib/taverna_player_callbacks.rb</tt>. Don't forget to
|
171
|
+
then require and register them in the Taverna Player initializer. There is more
|
172
|
+
information on callbacks below.
|
173
|
+
|
174
|
+
You can add to, or change, the workflow run outputs render methods to better
|
175
|
+
suit your particular application. To copy the defaults that Taverna Player
|
176
|
+
ships with into your application for customization run:
|
177
|
+
|
178
|
+
rails generate taverna_player:renderers
|
179
|
+
|
180
|
+
They will be saved to <tt>lib/taverna_player_renderers.rb</tt>. Don't forget to
|
181
|
+
then require and register them in the Taverna Player initializer. There is more
|
182
|
+
information on renderers below.
|
183
|
+
|
184
|
+
== Taverna Player initializer
|
185
|
+
|
186
|
+
The {default initializer}[https://github.com/myGrid/taverna-player/blob/master/lib/generators/templates/initializer.rb]
|
187
|
+
that is installed by the install generator requires minimal configuration for
|
188
|
+
simple set ups. It is fully commented with everything that needs to be set but
|
189
|
+
further explanations are given below.
|
190
|
+
|
191
|
+
=== Essential (required) configuration
|
192
|
+
|
193
|
+
Firstly, Taverna Player needs to know what the model is that represents
|
194
|
+
workflows within your application and it needs to know how to get a workflow
|
195
|
+
file out of that model so it can run it. If your workflow model is called
|
196
|
+
"Workflow" and the method to get the workflow filename from that model is
|
197
|
+
called "file_name" then the following will configure this correctly:
|
198
|
+
|
199
|
+
config.workflow_model_proxy("Workflow") do |proxy|
|
200
|
+
proxy.file_method_name = :file_name
|
201
|
+
end
|
202
|
+
|
203
|
+
Secondly, Taverna Player needs to know where your Taverna Server is and how to
|
204
|
+
authenticate to it:
|
205
|
+
|
206
|
+
config.server_address = "http://localhost:8080/taverna"
|
207
|
+
config.server_username = "taverna"
|
208
|
+
config.server_password = "taverna"
|
209
|
+
|
210
|
+
Make sure you do not commit this information into your repository!
|
211
|
+
|
212
|
+
This should usually be enough to get Taverna Player up and running within your
|
213
|
+
application but there are lots of other configuration options detailed below.
|
214
|
+
|
215
|
+
=== Optional configuration
|
216
|
+
|
217
|
+
==== Taverna Server
|
218
|
+
|
219
|
+
There are two settings to control how often Taverna Player communicates with
|
220
|
+
Taverna Server:
|
221
|
+
|
222
|
+
config.server_poll_interval = 5
|
223
|
+
config.server_retry_interval = 10
|
224
|
+
|
225
|
+
The first specifies, in seconds, how often <em>each run</em> is polled. Polling
|
226
|
+
is used to check a run's status (has it finished yet?) and check for
|
227
|
+
interactions. If you have long running workflows then it is probably worth
|
228
|
+
setting this value higher; If you have lots of interactions then keeping it low
|
229
|
+
is good to improve the responsiveness for users. Keep in mind that as polling
|
230
|
+
is for each run then setting this value very low will produce a lot of polling
|
231
|
+
requests when you have lots of running workflows.
|
232
|
+
|
233
|
+
The second specifies, in seconds, how long to wait before retrying an operation
|
234
|
+
that Taverna Server has rejected due to its current load. This can happen in
|
235
|
+
two places:
|
236
|
+
* Creating the run. Each Taverna Server has a limit (usually quite high) to
|
237
|
+
how many workflow runs it can support at a time - this is the entire set of
|
238
|
+
runs resident on the server in any state (initialized, running or finished).
|
239
|
+
If it is at this limit then it will refuse requests to create any more.
|
240
|
+
* Starting the run. Each Taverna Server also has a limit to how many workflow
|
241
|
+
runs it can have actually running at once - runs that are yet to start, or
|
242
|
+
that have finished do not count towards this total. If it is at this limit
|
243
|
+
then it will refuse requests to start any more.
|
244
|
+
Neither of these situations are fatal errors however, so Taverna Player will
|
245
|
+
back off for the specified time and then try again. It is worth tailoring this
|
246
|
+
number to the sort of workflows you will be running. For long-running,
|
247
|
+
batch-style workflows then it can be set quite high but if you have workflows
|
248
|
+
that make use of interactions (so you have users watching the workflows
|
249
|
+
running) then it should probably be set lower.
|
250
|
+
|
251
|
+
There are a number of options for configuring the connection to the Taverna
|
252
|
+
Server. These are actually provided by the underlying
|
253
|
+
{t2-server client library}[https://rubygems.org/gems/t2-server] and surfaced
|
254
|
+
here for extra control. They are
|
255
|
+
{documented in more detail}[http://mygrid.github.io/t2-server-gem/] elsewhere
|
256
|
+
but broadly fall into two categories: Security and timeouts.
|
257
|
+
|
258
|
+
The following are all concerned with connecting to a secure Taverna Server and
|
259
|
+
will be set to your Ruby/OS defaults if you leave them alone. If you use a
|
260
|
+
self-signed certificate for your server, or you require client certificate
|
261
|
+
authentication you will need to edit them appropriately.
|
262
|
+
|
263
|
+
config.server_connection[:verify_peer] = true
|
264
|
+
config.server_connection[:ca_file] = "/etc/certs/my-cert.crt"
|
265
|
+
config.server_connection[:ca_path] = "/etc/certs/"
|
266
|
+
config.server_connection[:client_certificate] = "client-cert.crt"
|
267
|
+
config.server_connection[:client_password] = "P@5$w0Rd!"
|
268
|
+
config.server_connection[:ssl_version] = :TLSv1
|
269
|
+
|
270
|
+
The following are timeout options and should be set with care. The underlying
|
271
|
+
operating system defaults (usually 300 seconds each) will be used if they are
|
272
|
+
not set explicitly.
|
273
|
+
|
274
|
+
config.server_connection[:open_timeout] = 300
|
275
|
+
config.server_connection[:read_timeout] = 300
|
276
|
+
|
277
|
+
==== Users
|
278
|
+
|
279
|
+
If your application has users then there is some basic support for that
|
280
|
+
out-of-the-box in Taverna Player. You can tell Taverna Player what your user
|
281
|
+
model is called with (example "User" here):
|
282
|
+
|
283
|
+
config.user_model_proxy = "User"
|
284
|
+
|
285
|
+
And you can tell it how to discover who your current user is by specifying a
|
286
|
+
callback. If you are using {Devise}[https://rubygems.org/gems/devise]
|
287
|
+
(recommended) for your authentication then you would supply the provided
|
288
|
+
"current_user" method like this:
|
289
|
+
|
290
|
+
config.current_user_callback = :current_user
|
291
|
+
|
292
|
+
With this set up then when a run is created Taverna Player will set the owner
|
293
|
+
of that run to be the current logged in user if there is one.
|
294
|
+
|
295
|
+
Note that this does not automatically mean that Taverna Player is checking that
|
296
|
+
users are authenticated! If you require this or if you have more complex
|
297
|
+
requirements then you will need to override the Run model and the Runs
|
298
|
+
controller. See below for more details.
|
299
|
+
|
300
|
+
==== Files
|
301
|
+
|
302
|
+
Taverna Player needs to store various files for each run's inputs and outputs.
|
303
|
+
The {paperclip}[https://rubygems.org/gems/paperclip] gem is used to provide
|
304
|
+
these facilities and the only configuration required is to specify where you
|
305
|
+
want it to store its files:
|
306
|
+
|
307
|
+
config.file_store = ":rails_root/public/system"
|
308
|
+
|
309
|
+
Use ":rails_root" for the root of your application, or specify a full path for
|
310
|
+
anywhere else.
|
311
|
+
|
312
|
+
==== Run callbacks and renderers
|
313
|
+
|
314
|
+
These are described in their own sections, below.
|
315
|
+
|
316
|
+
== Overriding the default views
|
317
|
+
|
318
|
+
If you use the generator, described above, to copy the views into your
|
319
|
+
application they will be used in preference to the default ones. This means
|
320
|
+
that any changes you make will be immediately reflected in the output of your
|
321
|
+
application. See the
|
322
|
+
{Rails documentation}[http://guides.rubyonrails.org/engines.html#overriding-views]
|
323
|
+
for more information on overriding views.
|
324
|
+
|
325
|
+
The supplied views provide a good example of how to maintain a current view of
|
326
|
+
the state of a run and handle any workflow interactions that may occur during
|
327
|
+
a run. It is worth understanding how they work before pulling them apart for
|
328
|
+
your own needs.
|
329
|
+
|
330
|
+
== Overriding the default models and controllers
|
331
|
+
|
332
|
+
You can override the following core components:
|
333
|
+
* Run (model)
|
334
|
+
* RunsController
|
335
|
+
* ServiceCredentialsController
|
336
|
+
|
337
|
+
Use the generators, detailed above, to create stubs for you to expand. These
|
338
|
+
components have been designed for overriding with the decorator pattern using
|
339
|
+
{ActiveSupport::Concern}[http://api.rubyonrails.org/classes/ActiveSupport/Concern.html].
|
340
|
+
This allows for things to be overridden but still have the same name (as is
|
341
|
+
required for such things within Rails). Please also see the information about
|
342
|
+
overriding models and controllers in the
|
343
|
+
{Rails documentation}[http://guides.rubyonrails.org/engines.html#overriding-models-and-controllers].
|
344
|
+
|
345
|
+
The vitally important thing is to preserve the +include+ statement within your
|
346
|
+
overriding code. For example, the RunsController stub looks like this:
|
347
|
+
|
348
|
+
module TavernaPlayer
|
349
|
+
class RunsController < TavernaPlayer::ApplicationController
|
350
|
+
# Do not remove the next line.
|
351
|
+
include TavernaPlayer::Concerns::Controllers::RunsController
|
352
|
+
|
353
|
+
# Extend the RunsController here.
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
You can add code both before and after the +include+ statement but anything
|
358
|
+
before it might be overridden by the original code itself if there are name
|
359
|
+
clashes.
|
360
|
+
|
361
|
+
If you wanted to add a before filter to authenticate your users you would add
|
362
|
+
that line before the +include+ statement, for example.
|
363
|
+
|
364
|
+
== Run callbacks
|
365
|
+
|
366
|
+
Taverna Player provides four points around a workflow run for you to specify
|
367
|
+
callbacks to be run:
|
368
|
+
* Pre-run: This is called directly before Taverna Server is contacted.
|
369
|
+
* Post-run: This is called after all operations on Taverna Server have been
|
370
|
+
completed when the run finishes normally.
|
371
|
+
* Run-cancelled: This is called after all operations on Taverna Server have
|
372
|
+
been completed when the run has been cancelled by the user.
|
373
|
+
* Run-failed: This is called after all operations on Taverna Server have been
|
374
|
+
completed when the run has failed.
|
375
|
+
|
376
|
+
Each of these callbacks is provided with the current run object as its
|
377
|
+
parameter and can be set in the initializer by providing the name of the method
|
378
|
+
(string or symbol) to run or a Proc object:
|
379
|
+
|
380
|
+
config.pre_run_callback = :player_pre_run_callback
|
381
|
+
config.post_run_callback = "player_post_run_callback"
|
382
|
+
config.run_cancelled_callback = Proc.new { |run| puts "Cancelled: #{run.name}" }
|
383
|
+
config.run_failed_callback = :player_run_failed_callback
|
384
|
+
|
385
|
+
*Important!* If your callback fails then the run itself will "fail". This may
|
386
|
+
or may not matter for the run-failed callback but if your pre-run callback
|
387
|
+
fails then the run will never get to Taverna Server! How can it? Your pre-run
|
388
|
+
callback may have been setting up vital resources for your run; Taverna Player
|
389
|
+
can not second-guess this so "fails" the run.
|
390
|
+
|
391
|
+
For this reason it is not recommended to put a lot of complex functionality
|
392
|
+
into the callbacks. An ideal use would be to gather statistics from the run
|
393
|
+
(average time, how many times a user runs it, etc) once it has finished.
|
394
|
+
|
395
|
+
An example callback that just prints out the run's name and workflow id would
|
396
|
+
be:
|
397
|
+
|
398
|
+
def player_run_callback(run)
|
399
|
+
w = Workflow.find(run.workflow_id)
|
400
|
+
puts "Callback called for run '#{run.name}' of workflow '#{w.id}'"
|
401
|
+
end
|
402
|
+
|
403
|
+
A set of example callbacks can be installed with the generator detailed above.
|
404
|
+
Don't forget to make sure any callback code is <tt>require</tt>d somewhere and
|
405
|
+
the callbacks themselves registered in the initializer.
|
406
|
+
|
407
|
+
== Rendering outputs
|
408
|
+
|
409
|
+
Workflows can produce results in many different formats and Taverna Player
|
410
|
+
tries to accomodate this as best it can. It provides basic facilities for
|
411
|
+
rendering as many result types as it can and these are extendible wherever
|
412
|
+
possible.
|
413
|
+
|
414
|
+
=== Output helper
|
415
|
+
|
416
|
+
A very basic output helper is provided, <tt>show_output</tt>, which can be
|
417
|
+
used in your views. This will format the output of each workflow output port in
|
418
|
+
a generic way. If it is a singleton output then it is displayed normally. If it
|
419
|
+
is a list output then the list is rendered as a HTML ordered list
|
420
|
+
(<tt><ol></tt>).
|
421
|
+
|
422
|
+
If you require anything more complex then you will have to override this helper
|
423
|
+
or provide your own and call it from your views.
|
424
|
+
|
425
|
+
=== Type renderers
|
426
|
+
|
427
|
+
Taverna Player has a system of specific type renderers to handle different
|
428
|
+
types of output. A number of defaults are supplied but these can be replaced
|
429
|
+
and added to if required.
|
430
|
+
|
431
|
+
To install a set of example renderers you can use the generator detailed above.
|
432
|
+
|
433
|
+
To register a renderer for use add it into the renderers block in the
|
434
|
+
initializer:
|
435
|
+
|
436
|
+
config.output_renderers do |renderers|
|
437
|
+
...
|
438
|
+
end
|
439
|
+
|
440
|
+
So to just register a single default renderer method (called
|
441
|
+
"my_default_renderer") you would do this:
|
442
|
+
|
443
|
+
config.output_renderers do |renderers|
|
444
|
+
renderers.default(:my_default_renderer)
|
445
|
+
end
|
446
|
+
|
447
|
+
And it would be used to render every type of output. A more sensible example
|
448
|
+
would be to have a renderer for PNG-type images and a renderer for text
|
449
|
+
outputs as well:
|
450
|
+
|
451
|
+
config.output_renderers do |renderers|
|
452
|
+
renderers.default(:my_default_renderer)
|
453
|
+
renderers.add("text/plain", :text_renderer, true)
|
454
|
+
renderers.add("image/png", :show_image)
|
455
|
+
end
|
456
|
+
|
457
|
+
This does three things:
|
458
|
+
* Registers a renderer for PNG images. This could be as simple as wrapping it
|
459
|
+
in an <tt><img ../></tt> tag.
|
460
|
+
* Registers a renderer for outputs of type "text/plain" and <em>sets this as
|
461
|
+
the default renderer for all other types beginning with "text"</em>. That is
|
462
|
+
what the final parameter set to +true+ does.
|
463
|
+
* Registers a default renderer for all other types. This should probably give
|
464
|
+
an explanation as to why the output cannot be shown in the browser with a
|
465
|
+
link to download the output to the user's computer.
|
466
|
+
|
467
|
+
Note the use of MIME types for specifying all types.
|
468
|
+
|
469
|
+
Obviously outputs such as images and text are so common that Taverna Player
|
470
|
+
provides these renderers for you and has them set up and registered by default.
|
471
|
+
You would only need to override them if you wanted extra information to be
|
472
|
+
displayed as well, such as sizes next to images, etc.
|
473
|
+
|
474
|
+
Note that it is not a good idea to register a single image renderer for all
|
475
|
+
"image" types as many cannot be shown in most browsers, e.g. TIFF images.
|
476
|
+
The default set of registered renderers is shown in the default initializer
|
477
|
+
but, as an example, here is how it handles the images that most browsers can
|
478
|
+
show:
|
479
|
+
|
480
|
+
renderers.add("image/jpeg", :show_image)
|
481
|
+
renderers.add("image/png", :show_image)
|
482
|
+
renderers.add("image/gif", :show_image)
|
483
|
+
renderers.add("image/bmp", :show_image)
|
484
|
+
|
485
|
+
Note that the same renderer callback is used for each one.
|
486
|
+
|
487
|
+
=== Writing your own renderers
|
488
|
+
|
489
|
+
To be a renderer callback a method must accept two parameters (in this order):
|
490
|
+
1. The content to be rendered.
|
491
|
+
1. The MIME type of the content.
|
492
|
+
|
493
|
+
In the case of text outputs the content will likely (depending on the output
|
494
|
+
helper you use, described above) be the entire text content of the output. In
|
495
|
+
most other cases it will probably be a URI or path to the actual content for
|
496
|
+
use in, for example, an <tt><img .../></tt> tag.
|
497
|
+
|
498
|
+
The type is provided in case a renderer wishes to be general and differentiate
|
499
|
+
between different subtypes.
|
500
|
+
|
501
|
+
Note that all renderer callbacks are called by Taverna Player in a context that
|
502
|
+
includes the {ActionView::Helpers}[http://api.rubyonrails.org/classes/ActionView/Helpers.html]
|
503
|
+
so your callbacks have access to them too, including helpers from third-party
|
504
|
+
gems that register their helpers correctly.
|
505
|
+
|
506
|
+
=== Example type renderers
|
507
|
+
|
508
|
+
These are some of the supplied renderers that are registered by default in
|
509
|
+
Taverna Player.
|
510
|
+
|
511
|
+
==== Plain text
|
512
|
+
|
513
|
+
Taverna Player provides a plain text renderer that formats text with a
|
514
|
+
monospaced font, converts URI-like things to clickable links and respects
|
515
|
+
carriage returns and newlines. It looks something like this:
|
516
|
+
|
517
|
+
def format_text(content, type)
|
518
|
+
# Use CodeRay to format text so that newlines are respected.
|
519
|
+
content = CodeRay.scan(content, :text).div(:css => :class)
|
520
|
+
|
521
|
+
# Use auto_link to turn URI-like text into links.
|
522
|
+
auto_link(content, :html => { :target => '_blank' }, :sanitize => false)
|
523
|
+
end
|
524
|
+
|
525
|
+
The {coderay}[https://rubygems.org/gems/coderay] gem is used to format the
|
526
|
+
text, preserving newlines and the
|
527
|
+
{rails_autolink}[https://rubygems.org/gems/rails_autolink] gem is used to
|
528
|
+
convert URI-like text into clickable links.
|
529
|
+
|
530
|
+
This renderer is registered as the default for all "text" media types.
|
531
|
+
|
532
|
+
==== XML
|
533
|
+
|
534
|
+
This renderer catches "text/XML" outputs:
|
535
|
+
|
536
|
+
def format_xml(content, type)
|
537
|
+
# Make sure XML is indented consistently.
|
538
|
+
out = String.new
|
539
|
+
REXML::Document.new(content).write(out, 1)
|
540
|
+
CodeRay.scan(out, :xml).div(:css => :class, :line_numbers => :table)
|
541
|
+
end
|
542
|
+
|
543
|
+
It uses {REXML}[http://ruby-doc.org/stdlib-1.9.3/libdoc/rexml/rdoc/index.html]
|
544
|
+
to format the XML and {coderay}[https://rubygems.org/gems/coderay] to
|
545
|
+
syntax-highlight it.
|
546
|
+
|
547
|
+
Note that for XML to be detected as XML it must, as per the standard, include
|
548
|
+
the XML declaration, e.g.:
|
549
|
+
|
550
|
+
<?xml version="1.0" ?>
|
551
|
+
|
552
|
+
==== Images
|
553
|
+
|
554
|
+
As described above, images are just dropped into an <tt><img ../></tt> tag:
|
555
|
+
|
556
|
+
def show_image(content, type)
|
557
|
+
# Can't use image_tag() here because the image doesn't really exist (it's
|
558
|
+
# in a zip file, really) and this confuses the Rails asset pipeline.
|
559
|
+
tag("img", :src => content)
|
560
|
+
end
|
561
|
+
|
562
|
+
Note the comment about the Rails asset pipeline in there if you are writing
|
563
|
+
your own image renderer and are using the asset pipeline.
|
564
|
+
|
565
|
+
The content parameter here gives the path to the image to be displayed.
|
566
|
+
|
567
|
+
==== Other types catch-all
|
568
|
+
|
569
|
+
The default renderer for other, or unknown types, is:
|
570
|
+
|
571
|
+
def cannot_inline(content, type)
|
572
|
+
"Sorry but we cannot show this type of content in the browser. Please " +
|
573
|
+
link_to("download it", content) + " to view it on your local machine."
|
574
|
+
end
|
575
|
+
|
576
|
+
== Service Credentials
|
577
|
+
|
578
|
+
<b>Please see the notes in the limitations section below!</b>
|
579
|
+
|
580
|
+
At the moment the Service Credentials facilities are basic and provided purely
|
581
|
+
to allow access to services which are ostensibly public but still require a
|
582
|
+
login of some kind.
|
583
|
+
|
584
|
+
In practice very few services that will be used via public tools such as
|
585
|
+
Taverna Player are in use so this should not affect most users at this time.
|
586
|
+
It is the intention to fill this gap in functionality as soon as possible,
|
587
|
+
however.
|
588
|
+
|
589
|
+
If you do have services in your workflows that require such a login then you
|
590
|
+
can add them through the Service Credentials model. The types of credential
|
591
|
+
that Taverna Server can accept are detailed in the
|
592
|
+
{Client Library Documentation}[http://mygrid.github.io/t2-server-gem/] but
|
593
|
+
Taverna Player supports a subset:
|
594
|
+
|
595
|
+
=== REST
|
596
|
+
|
597
|
+
REST services are commonly secured via HTTP Basic or HTTP Digest authentication
|
598
|
+
and Taverna treats these two schemes in the same way. Simply register the
|
599
|
+
username and password with the host name of the server on which the service is
|
600
|
+
running:
|
601
|
+
|
602
|
+
https://example.com:8443/
|
603
|
+
|
604
|
+
The above example shows a https server running on port 8443. If the service is
|
605
|
+
on port 80 for http or port 443 for https then you don’t need to specify the
|
606
|
+
port.
|
607
|
+
|
608
|
+
If there are services on the same host that require different credentials then
|
609
|
+
you will need to specify the realm for which each set of credentials applies.
|
610
|
+
This is done by adding the name of the realm to the end of the host name with
|
611
|
+
a # separating them:
|
612
|
+
|
613
|
+
https://example.com:8443/#realm
|
614
|
+
|
615
|
+
=== SOAP
|
616
|
+
|
617
|
+
SOAP services are commonly secured via WS-Security. Simply register the WSDL
|
618
|
+
address of the service with your username and password:
|
619
|
+
|
620
|
+
https://example.com:8443/services/MyService?wsdl
|
621
|
+
|
622
|
+
=== R server
|
623
|
+
|
624
|
+
You can authenticate to R Servers in almost exactly the same way as for REST
|
625
|
+
services - only the protocol scheme is different. So instead of http or https
|
626
|
+
it is rserve:
|
627
|
+
|
628
|
+
rserve://example.com:6311
|
629
|
+
|
630
|
+
== Limitations and to-do list
|
631
|
+
|
632
|
+
The most serious limitation is with the Service Credentials. Because Taverna
|
633
|
+
Server needs to be given the credentials in plaintext (which is why you should
|
634
|
+
always use HTTPS) we have to store them as such. For the time being it is
|
635
|
+
recommended to only use them for services that are ostensibly public, but with
|
636
|
+
a login requirement. An example of this might be a R server on the local
|
637
|
+
machine, which is only available locally, but nevertheless requires a login.
|
638
|
+
|
639
|
+
Service Credentials are also intended, at the moment, to be a global resource.
|
640
|
+
They are not per-user. Every workflow run will be given these credentials.
|
641
|
+
|
642
|
+
Service Credentials only provide username/password type credentials at the
|
643
|
+
moment.
|
644
|
+
|
645
|
+
=== To do
|
646
|
+
|
647
|
+
In no particular order:
|
648
|
+
|
649
|
+
* Taverna Player as a service. Allow usage of Taverna Player via a fully
|
650
|
+
RESTful interface with JSON and XML support (in progress).
|
651
|
+
* User specific (and therefore private) credentials wallet for secure services.
|
652
|
+
* Comprehensive Taverna Server administration panel. This would allow admin
|
653
|
+
users to view and manage runs directly on the Taverna Server along with
|
654
|
+
other such admin tasks.
|
655
|
+
|
656
|
+
== Support
|
657
|
+
|
658
|
+
Please email {support@mygrid.org.uk}[mailto:support@mygrid.org.uk] for any
|
659
|
+
questions relating to Taverna Player.
|
660
|
+
|
661
|
+
Bug reports or feature requests may be submitted to the
|
662
|
+
{public issue tracker}[https://github.com/myGrid/taverna-player/issues] at
|
663
|
+
GitHub.
|