condor 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +9 -1
- data/bin/condor-exec +28 -4
- data/lib/condor.rb +44 -9
- data/test/test_condor.rb +1 -1
- metadata +2 -2
data/README
CHANGED
@@ -6,13 +6,21 @@ It consists of a wrapper for a Condor submit file and a program, <tt>condor-exec
|
|
6
6
|
|
7
7
|
condor-exec prog --option arg1 arg2
|
8
8
|
|
9
|
-
queues up a job for the +prog+ with arguments <tt>--option arg1 arg2</tt>. To pass options to <tt>condor-exec</tt> itself, place them before +prog+. For example:
|
9
|
+
queues up a job for the program +prog+ with arguments <tt>--option arg1 arg2</tt>. To pass options to <tt>condor-exec</tt> itself, place them before +prog+. For example:
|
10
10
|
|
11
11
|
condor-exec --universe=MPI prog --option arg1 arg2
|
12
12
|
|
13
|
+
Alternately arguments may be specified in a separate arguments file, and one
|
14
|
+
Condor job will be queued for each line in the file
|
15
|
+
|
16
|
+
condor-exec --argfile=args prog
|
17
|
+
|
18
|
+
See <tt>condor-exec --help</tt> for more information.
|
19
|
+
|
13
20
|
= History
|
14
21
|
|
15
22
|
1.0.0:: Basic submit file wrapper; <tt>condor-exec</tt> program
|
23
|
+
1.1.0:: Additional options in <tt>condor-exec</tt>, including argument files; Add logging support
|
16
24
|
|
17
25
|
= Copyright
|
18
26
|
|
data/bin/condor-exec
CHANGED
@@ -38,7 +38,7 @@ class CommandPassingOptionParser < OptionParser
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
options = {}
|
41
|
+
options = {:submit => true}
|
42
42
|
p = CommandPassingOptionParser.new do |opts|
|
43
43
|
opts.banner = <<EOS
|
44
44
|
Usage: #{File.basename(__FILE__)} [options] command [arguments]
|
@@ -51,12 +51,32 @@ It creates a condor_submit.nnn file in the current directory along with
|
|
51
51
|
a Condor log file in the system temporary directory.
|
52
52
|
|
53
53
|
Switch options appearing before the first non-switch argument are passed to
|
54
|
-
#{File.basename(__FILE__)}.
|
55
|
-
|
54
|
+
#{File.basename(__FILE__)}. There must be no spaces in these arguments (e.g.
|
55
|
+
'--universe=vanilla' and not '--universe vanilla'). Switch options appearing
|
56
|
+
after the first non-switch argument are treated as arguments to the command.
|
57
|
+
|
58
|
+
If an argument file is specified, one Condor job is created for each line in
|
59
|
+
the file, using the text of the line as arguments. These arguments are
|
60
|
+
appended after any specified on the command line.
|
56
61
|
|
57
|
-
Options:
|
58
62
|
EOS
|
59
63
|
|
64
|
+
opts.on("-aVALUE", "--argfile VALUE", "Argument filename") do |value|
|
65
|
+
options[:argfile] = value
|
66
|
+
end
|
67
|
+
|
68
|
+
opts.on("-l", "--logging LEVEL", "Logging level") do |level|
|
69
|
+
Condor.set_log_level(eval("Logger::#{level.upcase}"))
|
70
|
+
end
|
71
|
+
|
72
|
+
opts.on("-oVALUE", "--output VALUE", "Output filename") do |value|
|
73
|
+
options[:output] = value
|
74
|
+
end
|
75
|
+
|
76
|
+
opts.on("-eVALUE", "--error VALUE", "Error filename") do |value|
|
77
|
+
options[:error] = value
|
78
|
+
end
|
79
|
+
|
60
80
|
opts.on("-gVALUE", "--getenv VALUE", "Get environment") do |value|
|
61
81
|
options[:getenv] = value
|
62
82
|
end
|
@@ -69,6 +89,10 @@ EOS
|
|
69
89
|
options[:universe] = value
|
70
90
|
end
|
71
91
|
|
92
|
+
opts.on("-s", "--[no-]submit", "no-submit generates the submit file but does not call condor_submit") do |value|
|
93
|
+
options[:submit] = value
|
94
|
+
end
|
95
|
+
|
72
96
|
end
|
73
97
|
|
74
98
|
command_line = p.parse_command_line
|
data/lib/condor.rb
CHANGED
@@ -17,12 +17,34 @@
|
|
17
17
|
# St, Fifth Floor, Boston, MA 02110-1301 USA
|
18
18
|
|
19
19
|
require "erb"
|
20
|
+
require "logger"
|
20
21
|
require "tempfile"
|
21
22
|
|
22
23
|
# Wrapper for the Condor distributed computing system.
|
23
24
|
module Condor
|
25
|
+
VERSION = "1.1.0"
|
24
26
|
|
25
|
-
|
27
|
+
# Create the logger and set its default log level to ERROR. This function
|
28
|
+
# is called when the module is loaded.
|
29
|
+
def Condor.initialize_logger
|
30
|
+
logger = Logger.new(STDOUT)
|
31
|
+
logger.level = Logger::ERROR
|
32
|
+
logger.datetime_format = "%Y-%m-%d %H:%M:%S"
|
33
|
+
logger
|
34
|
+
end
|
35
|
+
|
36
|
+
private_class_method :initialize_logger
|
37
|
+
|
38
|
+
# Logger used by all objects in this module. This is initialized at module
|
39
|
+
# load time. The default log level is ERROR.
|
40
|
+
LOGGER = initialize_logger
|
41
|
+
|
42
|
+
# Set the logging level. For example:
|
43
|
+
#
|
44
|
+
# > Condor.set_log_level(Logger::DEBUG)
|
45
|
+
def Condor.set_log_level(level)
|
46
|
+
Condor::LOGGER.level = level
|
47
|
+
end
|
26
48
|
|
27
49
|
# The text of a file that can be sent to the condor_submit program.
|
28
50
|
class SubmitFile < ERB
|
@@ -39,8 +61,8 @@ module Condor
|
|
39
61
|
@executable = executable
|
40
62
|
@argument_list = argument_list
|
41
63
|
@log = File.join(Dir::tmpdir, "#{ENV['USER']}.condor.$(Cluster).$(Process)")
|
42
|
-
@output = current_dir_log_file("output")
|
43
|
-
@error = current_dir_log_file("error")
|
64
|
+
@output = options.fetch(:output, current_dir_log_file("output"))
|
65
|
+
@error = options.fetch(:error, current_dir_log_file("error"))
|
44
66
|
# Create the header common to all the jobs.
|
45
67
|
template = <<-EOTEXT
|
46
68
|
Universe = <%= @options[:universe] %>
|
@@ -81,13 +103,14 @@ Queue
|
|
81
103
|
# and STDERR are routed to *.output and *.error files with the names of the
|
82
104
|
# executable and the process ID in the name. The Condor log file is written
|
83
105
|
# to the system's temporary directory.
|
84
|
-
def Condor.submit(executable,
|
106
|
+
def Condor.submit(executable, command_line_arguments, options = {})
|
85
107
|
if executable.nil? or executable.empty?
|
86
108
|
raise "You must specify a command to run"
|
87
109
|
end
|
88
|
-
#
|
110
|
+
# Condor needs the full path to the command.
|
111
|
+
# BUGBUG This is UNIX specific.
|
89
112
|
executable = `which #{executable} 2> /dev/null`.strip
|
90
|
-
raise "
|
113
|
+
not executable.empty? or raise "#{executable} is not executable."
|
91
114
|
# Create a unique submit file name of the form condor_submit.nnn.
|
92
115
|
n = 0
|
93
116
|
while n < 1000
|
@@ -97,12 +120,24 @@ Queue
|
|
97
120
|
n += 1
|
98
121
|
end
|
99
122
|
raise "Cannot create unique submit file name" if n == 1000
|
123
|
+
# Optionally read arguments from a file.
|
124
|
+
arguments_list = if options.has_key?(:argfile)
|
125
|
+
open(options[:argfile]) do |file|
|
126
|
+
file.collect do |line|
|
127
|
+
line.strip!
|
128
|
+
next if line.empty?
|
129
|
+
command_line_arguments + line.split
|
130
|
+
end
|
131
|
+
end
|
132
|
+
else
|
133
|
+
[command_line_arguments]
|
134
|
+
end
|
100
135
|
# Write Condor information to the submit file.
|
101
136
|
File.open(submit_name, "w") do |file|
|
102
|
-
file << Condor::SubmitFile.new(executable,
|
137
|
+
file << Condor::SubmitFile.new(executable, arguments_list, options)
|
103
138
|
end
|
104
|
-
#
|
105
|
-
`condor_submit #{submit_name}`
|
139
|
+
# Optionally submit the Condor job.
|
140
|
+
`condor_submit #{submit_name}` if options[:submit]
|
106
141
|
end
|
107
142
|
|
108
143
|
end # Condor
|
data/test/test_condor.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: condor
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2009-
|
6
|
+
version: 1.1.0
|
7
|
+
date: 2009-02-12 00:00:00 -08:00
|
8
8
|
summary: Ruby wrapper for the Condor distributed computing system
|
9
9
|
require_paths:
|
10
10
|
- lib
|