t2-server 0.6.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -0
- data/CHANGES.rdoc +48 -0
- data/LICENCE.rdoc +2 -2
- data/README.rdoc +245 -10
- data/Rakefile +108 -0
- data/bin/t2-delete-runs +21 -34
- data/bin/t2-get-output +134 -0
- data/bin/t2-run-workflow +121 -109
- data/bin/t2-server-admin +128 -0
- data/bin/t2-server-info +25 -38
- data/lib/t2-server-cli.rb +116 -0
- data/lib/t2-server.rb +16 -27
- data/lib/t2-server/admin.rb +147 -0
- data/lib/t2-server/connection-parameters.rb +144 -0
- data/lib/t2-server/connection.rb +352 -0
- data/lib/t2-server/credentials.rb +84 -0
- data/lib/t2-server/exceptions.rb +42 -21
- data/lib/t2-server/port.rb +472 -0
- data/lib/t2-server/run.rb +822 -227
- data/lib/t2-server/server.rb +313 -317
- data/lib/t2-server/util.rb +71 -0
- data/lib/t2-server/xml/libxml.rb +87 -0
- data/lib/t2-server/xml/nokogiri.rb +85 -0
- data/lib/t2-server/xml/rexml.rb +85 -0
- data/lib/t2-server/xml/xml.rb +111 -0
- data/lib/t2server.rb +4 -1
- data/t2-server.gemspec +112 -0
- data/test/tc_admin.rb +63 -0
- data/test/{tc_paths.rb → tc_params.rb} +11 -25
- data/test/tc_perms.rb +132 -0
- data/test/tc_run.rb +200 -67
- data/test/tc_secure.rb +191 -0
- data/test/tc_server.rb +25 -23
- data/test/tc_util.rb +74 -0
- data/test/ts_t2server.rb +57 -12
- data/test/workflows/always_fail.t2flow +69 -0
- data/test/workflows/list_and_value.t2flow +12 -0
- data/test/workflows/list_with_errors.t2flow +107 -0
- data/test/workflows/secure/basic-http.t2flow +74 -0
- data/test/workflows/secure/basic-https.t2flow +74 -0
- data/test/workflows/secure/client-https.t2flow +162 -0
- data/test/workflows/secure/digest-http.t2flow +129 -0
- data/test/workflows/secure/digest-https.t2flow +107 -0
- data/test/workflows/secure/heater-pk.pem +20 -0
- data/test/workflows/secure/user-cert.p12 +0 -0
- data/test/workflows/secure/ws-http.t2flow +180 -0
- data/test/workflows/secure/ws-https.t2flow +180 -0
- data/test/workflows/strings.txt +10 -0
- data/test/workflows/xml_xpath.t2flow +136 -136
- data/version.yml +4 -0
- metadata +132 -34
- data/lib/t2-server/xml.rb +0 -86
data/bin/t2-delete-runs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# Copyright (c) 2010
|
2
|
+
# Copyright (c) 2010-2012 The University of Manchester, UK.
|
3
3
|
#
|
4
4
|
# All rights reserved.
|
5
5
|
#
|
@@ -15,7 +15,7 @@
|
|
15
15
|
#
|
16
16
|
# * Neither the names of The University of Manchester nor the names of its
|
17
17
|
# contributors may be used to endorse or promote products derived from this
|
18
|
-
# software without specific prior written permission.
|
18
|
+
# software without specific prior written permission.
|
19
19
|
#
|
20
20
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
21
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
@@ -32,34 +32,24 @@
|
|
32
32
|
# Author: Robert Haines
|
33
33
|
|
34
34
|
require 'rubygems'
|
35
|
-
require 't2-server'
|
36
|
-
|
35
|
+
require 't2-server-cli'
|
36
|
+
|
37
|
+
include T2Server::CLI
|
37
38
|
|
38
39
|
# set up options
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
opt.separator ""
|
43
|
-
|
44
|
-
opt.separator " e.g.: http://example.com:8080/taverna, run-ids are the
|
40
|
+
options = {}
|
41
|
+
conn_params, creds = register_options("Usage: t2-delete-runs [options] " +
|
42
|
+
"server-address [run-ids...]") do |opt|
|
43
|
+
opt.separator " Where server-address is the full URI of the server to " +
|
44
|
+
"connect to,"
|
45
|
+
opt.separator " e.g.: http://example.com:8080/taverna, run-ids are the " +
|
46
|
+
"id numbers"
|
45
47
|
opt.separator " of the runs you want to delete and [options] can be:"
|
46
48
|
opt.on("--all", "Delete all runs on the server") do
|
47
|
-
|
48
|
-
end
|
49
|
-
opt.on_tail("-h", "-?", "--help", "Show this message") do
|
50
|
-
puts opt
|
51
|
-
exit
|
52
|
-
end
|
53
|
-
opt.on_tail("-v", "--version", "Show the version") do
|
54
|
-
puts "Taverna 2 Server Ruby Gem version: #{T2Server::GEM_VERSION}"
|
55
|
-
puts "Taverna 2 Server REST API version: #{T2Server::API_VERSION}"
|
56
|
-
exit
|
49
|
+
options[:all] = true
|
57
50
|
end
|
58
51
|
end
|
59
52
|
|
60
|
-
# parse options
|
61
|
-
opts.parse!
|
62
|
-
|
63
53
|
# get runs and server address from the arguments
|
64
54
|
runs = []
|
65
55
|
address = ""
|
@@ -71,33 +61,30 @@ for arg in ARGV
|
|
71
61
|
end
|
72
62
|
end
|
73
63
|
|
74
|
-
|
75
|
-
if address == ""
|
76
|
-
puts opts
|
77
|
-
exit 1
|
78
|
-
end
|
64
|
+
uri, creds = parse_address(address, creds)
|
79
65
|
|
80
66
|
# connect...
|
81
67
|
begin
|
82
|
-
server = T2Server::Server.
|
83
|
-
rescue
|
68
|
+
server = T2Server::Server.new(uri, conn_params)
|
69
|
+
rescue RuntimeError => e
|
84
70
|
puts e
|
85
71
|
exit 1
|
86
72
|
end
|
87
73
|
|
88
74
|
# ...and delete them!
|
89
|
-
if
|
75
|
+
if options[:all]
|
90
76
|
begin
|
91
|
-
server.delete_all_runs
|
77
|
+
server.delete_all_runs(creds)
|
92
78
|
rescue T2Server::AuthorizationError => ae
|
93
79
|
puts "You are not authorized to delete runs on this server."
|
94
80
|
rescue T2Server::T2ServerError => e
|
95
|
-
puts "There was a problem while deleting runs.
|
81
|
+
puts "There was a problem while deleting runs. " +
|
82
|
+
"Some may remain on the server."
|
96
83
|
end
|
97
84
|
else
|
98
85
|
for run in runs
|
99
86
|
begin
|
100
|
-
server.delete_run(run)
|
87
|
+
server.delete_run(run, creds)
|
101
88
|
rescue T2Server::RunNotFoundError => rnf
|
102
89
|
puts "Run '#{run}' not found - skipping."
|
103
90
|
next
|
data/bin/t2-get-output
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Copyright (c) 2010-2012 The University of Manchester, UK.
|
3
|
+
#
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
8
|
+
#
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
10
|
+
# this list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
14
|
+
# and/or other materials provided with the distribution.
|
15
|
+
#
|
16
|
+
# * Neither the names of The University of Manchester nor the names of its
|
17
|
+
# contributors may be used to endorse or promote products derived from this
|
18
|
+
# software without specific prior written permission.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
#
|
32
|
+
# Author: Robert Haines
|
33
|
+
|
34
|
+
require 'rubygems'
|
35
|
+
require 't2-server-cli'
|
36
|
+
|
37
|
+
include T2Server::CLI
|
38
|
+
|
39
|
+
# set up options
|
40
|
+
options = {}
|
41
|
+
ports = []
|
42
|
+
conn_params, creds = register_options("Usage: t2-get-output [options] " +
|
43
|
+
"server-address run-id") do |opt|
|
44
|
+
opt.separator " Where server-address is the full URI of the server to"
|
45
|
+
opt.separator " connect to, e.g.: http://example.com:8080/taverna, run-ids"
|
46
|
+
opt.separator " are the id numbers of the runs you want to collect output"
|
47
|
+
opt.separator " from and [options] can be:"
|
48
|
+
opt.on("-r", "--refs", "Return references to the output data rather than " +
|
49
|
+
"the data itself.") do
|
50
|
+
options[:refs] = true
|
51
|
+
end
|
52
|
+
opt.on("-o", "--output=OUTPUT", "Return the named output port. If none " +
|
53
|
+
"are specified then list all the output ports.") do |val|
|
54
|
+
ports << val.chomp
|
55
|
+
end
|
56
|
+
opt.on("-x", "--exitcode", "Return the exitcode of the run.") do
|
57
|
+
options[:exitcode] = true
|
58
|
+
end
|
59
|
+
opt.on("-e", "--stderr", 'Return the "standard error" output of the run.') do
|
60
|
+
options[:stderr] = true
|
61
|
+
end
|
62
|
+
opt.on("-s", "--stdout", 'Return the "standard out" output of the run.') do
|
63
|
+
options[:stdout] = true
|
64
|
+
end
|
65
|
+
opt.on("-t", "--total-size", "Return the total size of the data in the " +
|
66
|
+
"output.") do
|
67
|
+
options[:tsize] = true
|
68
|
+
end
|
69
|
+
opt.on("-T", "--types", "Return the mime types of singleton ports.") do
|
70
|
+
options[:types] = true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# get run id and server address from the arguments
|
75
|
+
run_id = ""
|
76
|
+
address = ""
|
77
|
+
for arg in ARGV
|
78
|
+
argc = arg.chomp
|
79
|
+
if argc.match(/https?:\/\//).nil?
|
80
|
+
run_id = argc
|
81
|
+
else
|
82
|
+
address = argc
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
uri, creds = parse_address(address, creds)
|
87
|
+
|
88
|
+
if run_id.empty?
|
89
|
+
puts opts
|
90
|
+
exit 1
|
91
|
+
end
|
92
|
+
|
93
|
+
# connect...
|
94
|
+
begin
|
95
|
+
server = T2Server::Server.new(uri, conn_params)
|
96
|
+
run = server.run(run_id, creds)
|
97
|
+
|
98
|
+
ports = run.output_ports.keys if ports.empty?
|
99
|
+
ports.each do |p|
|
100
|
+
port = run.output_port(p)
|
101
|
+
puts "#{port.name}"
|
102
|
+
if options[:refs]
|
103
|
+
print " Reference: "
|
104
|
+
p port.reference
|
105
|
+
else
|
106
|
+
print " Value: "
|
107
|
+
p port.value
|
108
|
+
end
|
109
|
+
|
110
|
+
if options[:types]
|
111
|
+
print " Type: "
|
112
|
+
p port.type
|
113
|
+
end
|
114
|
+
|
115
|
+
if options[:tsize]
|
116
|
+
puts " Total data size: #{port.total_size}"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
if options[:exitcode]
|
121
|
+
puts "Exitcode: #{run.exitcode}"
|
122
|
+
end
|
123
|
+
|
124
|
+
if options[:stdout]
|
125
|
+
puts "Stdout: #{run.stdout}"
|
126
|
+
end
|
127
|
+
|
128
|
+
if options[:stderr]
|
129
|
+
puts "Stderr: #{run.stderr}"
|
130
|
+
end
|
131
|
+
rescue RuntimeError => e
|
132
|
+
puts e
|
133
|
+
exit 1
|
134
|
+
end
|
data/bin/t2-run-workflow
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# Copyright (c) 2010
|
2
|
+
# Copyright (c) 2010-2012 The University of Manchester, UK.
|
3
3
|
#
|
4
4
|
# All rights reserved.
|
5
5
|
#
|
@@ -15,7 +15,7 @@
|
|
15
15
|
#
|
16
16
|
# * Neither the names of The University of Manchester nor the names of its
|
17
17
|
# contributors may be used to endorse or promote products derived from this
|
18
|
-
# software without specific prior written permission.
|
18
|
+
# software without specific prior written permission.
|
19
19
|
#
|
20
20
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
21
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
@@ -32,156 +32,168 @@
|
|
32
32
|
# Author: Robert Haines
|
33
33
|
|
34
34
|
require 'rubygems'
|
35
|
-
require 't2-server'
|
36
|
-
|
35
|
+
require 't2-server-cli'
|
36
|
+
|
37
|
+
include T2Server::CLI
|
37
38
|
|
38
39
|
# set up options
|
39
40
|
inputs = {}
|
40
41
|
files = {}
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
delete_run = false
|
45
|
-
no_wait = false
|
46
|
-
opts = OptionParser.new do |opt|
|
47
|
-
opt.banner = "Usage: t2-run-workflow [options] server-address"
|
48
|
-
opt.separator ""
|
42
|
+
options = {}
|
43
|
+
conn_params, creds = register_options("Usage: t2-run-workflow [options] " +
|
44
|
+
"server-address") do |opt|
|
49
45
|
opt.separator " Where server-address is the full URI of the server to"
|
50
46
|
opt.separator " connect to, e.g.: http://example.com:8080/taverna"
|
51
47
|
opt.separator " and [options] can be:"
|
52
|
-
opt.on("-w WORKFLOW", "--workflow=WORKFLOW", "The workflow to run. If
|
53
|
-
"specified then the workflow is read from standard
|
54
|
-
|
48
|
+
opt.on("-w WORKFLOW", "--workflow=WORKFLOW", "The workflow to run. If " +
|
49
|
+
"this is not specified then the workflow is read from standard " +
|
50
|
+
"input") do |val|
|
51
|
+
options[:wkf_file] = val.chomp
|
55
52
|
end
|
56
|
-
opt.on("-i INPUT:VALUE", "--input=INPUT:VALUE", "Set input port INPUT to
|
57
|
-
|
58
|
-
|
53
|
+
opt.on("-i INPUT:VALUE", "--input=INPUT:VALUE", "Set input port INPUT to " +
|
54
|
+
"VALUE") do |val|
|
55
|
+
input, value = val.chomp.split(':', 2)
|
56
|
+
inputs[input] = value
|
59
57
|
end
|
60
58
|
opt.on("-f INPUT:FILE", "--input-file=INPUT:FILE",
|
61
59
|
"Set input port INPUT to use the contents of FILE as its input") do |val|
|
62
60
|
input, filename = val.chomp.split(':', 2)
|
63
61
|
files[input] = filename
|
64
|
-
end
|
65
|
-
opt.on("-b BACLAVA", "--baclava-in=BACLAVA", "Set baclava file for input port values") do |val|
|
66
|
-
inputs[:baclava] = val
|
67
62
|
end
|
68
|
-
opt.on("-
|
63
|
+
opt.on("-e EXPIRY", "--expiry=EXPIRY", "Set the expiry date/time of this " +
|
64
|
+
"run") do |val|
|
65
|
+
options[:expiry] = Time.parse(val.chomp)
|
66
|
+
end
|
67
|
+
opt.on("-b BACLAVA", "--baclava-in=BACLAVA", "Set baclava file for input " +
|
68
|
+
"port values") do |val|
|
69
|
+
inputs[:baclava] = val
|
70
|
+
end
|
71
|
+
opt.on("-o", "--baclava-out=BACLAVA", "Return outputs in baclava format." +
|
69
72
|
" A filename may be specified or 'out.xml' is used") do |val|
|
70
|
-
|
71
|
-
baclava_out = val
|
72
|
-
else
|
73
|
-
baclava_out = "out.xml"
|
74
|
-
end
|
73
|
+
options[:baclava_out] = val.chomp
|
75
74
|
end
|
76
75
|
opt.on("-n", "--no-wait", "Do not wait for workflow to finish, return " +
|
77
76
|
"once it has started running") do |val|
|
78
|
-
no_wait = true
|
77
|
+
options[:no_wait] = true
|
79
78
|
end
|
80
79
|
opt.on("-r", "--output-refs", "Return URIs that point to the data items " +
|
81
80
|
"of the output rather than the data items themselves.") do |val|
|
82
|
-
|
81
|
+
options[:output_refs] = val
|
83
82
|
end
|
84
83
|
opt.on("-D", "--delete", "Delete the run from the server when it is " +
|
85
84
|
"complete. By default the run and its results are preserved. Note that " +
|
86
85
|
"the run will still be deleted when its expiry time is reached") do |val|
|
87
|
-
|
86
|
+
options[:delete] = val
|
88
87
|
end
|
89
|
-
opt.
|
90
|
-
|
91
|
-
|
92
|
-
end
|
93
|
-
opt.on_tail("-v", "--version", "Show the version") do
|
94
|
-
puts "Taverna 2 Server Ruby Gem version: #{T2Server::GEM_VERSION}"
|
95
|
-
puts "Taverna 2 Server REST API version: #{T2Server::API_VERSION}"
|
96
|
-
exit
|
88
|
+
opt.on("-z", "--zip=FILE", "Get the entire working directory of the run " +
|
89
|
+
"in zip format and save it to the provided filename.") do |val|
|
90
|
+
options[:zip_out] = val.chomp
|
97
91
|
end
|
98
92
|
end
|
99
93
|
|
100
|
-
# parse options
|
101
|
-
opts.parse!
|
102
|
-
|
103
94
|
# read and check server address
|
104
|
-
uri = ARGV.shift
|
105
|
-
if uri == nil
|
106
|
-
puts opts
|
107
|
-
exit 1
|
108
|
-
end
|
95
|
+
uri, creds = parse_address(ARGV.shift, creds)
|
109
96
|
|
110
|
-
# read workflow
|
111
|
-
if wkf_file
|
112
|
-
wkf =
|
97
|
+
# read workflow and ensure that it is not empty
|
98
|
+
if options[:wkf_file]
|
99
|
+
wkf = IO.read(options[:wkf_file])
|
113
100
|
else
|
114
|
-
wkf =
|
101
|
+
wkf = ARGF.read
|
115
102
|
end
|
103
|
+
exit 1 if wkf == ""
|
116
104
|
|
117
|
-
# create run
|
118
105
|
begin
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
exit 1
|
123
|
-
end
|
124
|
-
puts "Created run with uuid: #{run.uuid}"
|
125
|
-
puts "Created at #{run.create_time}"
|
106
|
+
T2Server::Run.create(uri, wkf, creds, conn_params) do |run|
|
107
|
+
puts "Created run with identifier: #{run.identifier}"
|
108
|
+
puts "Created at #{run.create_time}"
|
126
109
|
|
127
|
-
# set
|
128
|
-
if
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
run.
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
110
|
+
# set run expiry
|
111
|
+
if options[:expiry]
|
112
|
+
run.expiry=(options[:expiry])
|
113
|
+
puts "Expiry time set to #{run.expiry}"
|
114
|
+
end
|
115
|
+
|
116
|
+
# set inputs
|
117
|
+
in_ports = run.input_ports
|
118
|
+
if inputs.has_key?(:baclava)
|
119
|
+
run.baclava_input = inputs[:baclava]
|
120
|
+
puts "Uploaded baclava input file"
|
121
|
+
else
|
122
|
+
in_ports.each_value do |port|
|
123
|
+
input = port.name
|
124
|
+
if inputs.include? input
|
125
|
+
port.value = inputs[input]
|
126
|
+
puts "Input '#{input}' set to #{port.value}"
|
127
|
+
elsif files.include? input
|
128
|
+
port.file = files[input]
|
129
|
+
puts "Input '#{input}' set to use file '#{port.file}'"
|
130
|
+
else
|
131
|
+
puts "Input '#{input}' has not been set."
|
132
|
+
run.delete
|
133
|
+
exit 1
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
143
137
|
|
144
|
-
# output baclava?
|
145
|
-
run.
|
138
|
+
# output baclava?
|
139
|
+
run.request_baclava_output if options[:baclava_out]
|
146
140
|
|
147
|
-
# start run and wait until it is finished
|
148
|
-
run.start
|
149
|
-
puts "Started at #{run.start_time}"
|
141
|
+
# start run and wait until it is finished
|
142
|
+
run.start
|
143
|
+
puts "Started at #{run.start_time}"
|
150
144
|
|
151
|
-
# bail out if user doesn't want to wait
|
152
|
-
exit 0 if no_wait
|
145
|
+
# bail out if user doesn't want to wait
|
146
|
+
exit 0 if options[:no_wait]
|
153
147
|
|
154
|
-
# otherwise wait
|
155
|
-
print "Running"
|
156
|
-
run.
|
157
|
-
|
148
|
+
# otherwise wait
|
149
|
+
print "Running"
|
150
|
+
until run.finished?
|
151
|
+
sleep(1)
|
152
|
+
print "."
|
153
|
+
$stdout.flush
|
154
|
+
end
|
155
|
+
puts "\nFinished at #{run.finish_time}"
|
158
156
|
|
159
|
-
# get outputs
|
160
|
-
stdout = run.stdout
|
161
|
-
stderr = run.stderr
|
162
|
-
exitcd = run.exitcode
|
163
|
-
puts "Exitcode: #{exitcd}"
|
164
|
-
if stdout != "" then puts "Stdout:\n#{stdout}" end
|
165
|
-
if stderr != "" then puts "Stderr:\n#{stderr}" end
|
157
|
+
# get outputs
|
158
|
+
stdout = run.stdout
|
159
|
+
stderr = run.stderr
|
160
|
+
exitcd = run.exitcode
|
161
|
+
puts "Exitcode: #{exitcd}"
|
162
|
+
if stdout != "" then puts "Stdout:\n#{stdout}" end
|
163
|
+
if stderr != "" then puts "Stderr:\n#{stderr}" end
|
166
164
|
|
167
|
-
if exitcd == 0
|
168
|
-
|
169
|
-
|
170
|
-
|
165
|
+
if exitcd == 0
|
166
|
+
if options[:baclava_out]
|
167
|
+
File.open(options[:baclava_out], "w") do |file|
|
168
|
+
file.syswrite(run.baclava_output)
|
169
|
+
end
|
170
|
+
puts "Baclava file written to '#{options[:baclava_out]}'"
|
171
|
+
elsif options[:zip_out]
|
172
|
+
File.open(options[:zip_out],"w") do |file|
|
173
|
+
file.syswrite(run.zip_output)
|
174
|
+
end
|
175
|
+
puts "Zip file written to '#{options[:zip_out]}'"
|
176
|
+
else
|
177
|
+
# go through the outputs and print them out
|
178
|
+
puts "Outputs:"
|
179
|
+
run.output_ports.each_value do |port|
|
180
|
+
print " #{port.name} (#{port.depth}) -> "
|
181
|
+
if options[:output_refs]
|
182
|
+
p port.reference
|
183
|
+
else
|
184
|
+
p port.value
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
171
188
|
end
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
print " #{o} -> "
|
178
|
-
p run.get_output("#{o}", output_refs)
|
189
|
+
|
190
|
+
# delete run?
|
191
|
+
if options[:delete]
|
192
|
+
run.delete
|
193
|
+
puts "Run deleted"
|
179
194
|
end
|
180
195
|
end
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
if delete_run
|
185
|
-
run.delete
|
186
|
-
puts "Run deleted"
|
196
|
+
rescue RuntimeError => e
|
197
|
+
puts e
|
198
|
+
exit 1
|
187
199
|
end
|