rsched 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,4 +1,10 @@
1
1
 
2
+ == 2011-07-23 version 0.3.2
3
+
4
+ * Added --env K=V option
5
+ * Accepts multiple -f, --file option
6
+
7
+
2
8
  == 2011-07-20 version 0.3.1
3
9
 
4
10
  * Run task exactly at XX:XX:00
data/README.rdoc CHANGED
@@ -45,18 +45,23 @@ _Example:_
45
45
  --exec COMMAND Execute command
46
46
  --run SCRIPT.rb Run method named 'run' defined in the script
47
47
  -a, --add EXPR Add an execution schedule
48
- -t, --timeout SEC Retry timeout (default: 600)
48
+ -t, --timeout SEC Retry timeout (default: 30)
49
49
  -r, --resume SEC Limit time to resume tasks (default: 3600)
50
50
  -E, --delete SEC Limit time to delete tasks (default: 2592000)
51
51
  -n, --name NAME Unique name of this node (default: PID.HOSTNAME)
52
52
  -w, --delay SEC Delay time before running a task (default: 0)
53
- -F, --from UNIX_TIME_OR_now Time to start scheduling
53
+ -F, --from YYYY-mm-dd_OR_now Time to start scheduling
54
+ -e, --extend-timeout SEC Threashold time before extending visibility timeout (default: timeout * 3/4)
55
+ -x, --kill-timeout SEC Threashold time before killing process (default: timeout * 10)
56
+ -X, --kill-retry SEC Threashold time before retrying killing process (default: 60)
54
57
  -i, --interval SEC Scheduling interval (default: 10)
58
+ -U, --release-on-fail Releases lock if task failed so that other node can retry immediately
55
59
  -T, --type TYPE Lock database type (default: mysql)
56
60
  -D, --database DB Database name
57
61
  -H, --host HOST[:PORT] Database host
58
62
  -u, --user NAME Database user name
59
63
  -p, --password PASSWORD Database password
64
+ --env K=V Set environment variable
60
65
  -d, --daemon PIDFILE Daemonize (default: foreground)
61
66
  -f, --file PATH.yaml Read configuration file
62
67
 
@@ -15,7 +15,7 @@ defaults = {
15
15
  :delay => 0,
16
16
  :interval => 10,
17
17
  :type => 'mysql',
18
- :name => "#{Process.pid}.#{`hostname`.strip}",
18
+ :node_name => "#{Process.pid}.#{`hostname`.strip}",
19
19
  :kill_retry => 60,
20
20
  :release_on_fail => false,
21
21
  }
@@ -51,7 +51,7 @@ op.on('-E', '--delete SEC', 'Limit time to delete tasks (default: 2592000)', Int
51
51
  }
52
52
 
53
53
  op.on('-n', '--name NAME', 'Unique name of this node (default: PID.HOSTNAME)') {|s|
54
- conf[:name] = s
54
+ conf[:node_name] = s
55
55
  }
56
56
 
57
57
  op.on('-w', '--delay SEC', 'Delay time before running a task (default: 0)', Integer) {|i|
@@ -82,12 +82,12 @@ op.on('-i', '--interval SEC', 'Scheduling interval (default: 10)', Integer) {|i|
82
82
  conf[:interval] = i
83
83
  }
84
84
 
85
- op.on('-E', '--release-on-fail', 'Releases lock if task failed so that other node can retry immediately', TrueClass) {|b|
85
+ op.on('-U', '--release-on-fail', 'Releases lock if task failed so that other node can retry immediately', TrueClass) {|b|
86
86
  conf[:release_on_fail] = b
87
87
  }
88
88
 
89
89
  op.on('-T', '--type TYPE', 'Lock database type (default: mysql)') {|s|
90
- conf[:type] = s
90
+ conf[:db_type] = s
91
91
  }
92
92
 
93
93
  op.on('-D', '--database DB', 'Database name') {|s|
@@ -106,12 +106,17 @@ op.on('-p', '--password PASSWORD', 'Database password') {|s|
106
106
  conf[:db_password] = s
107
107
  }
108
108
 
109
+ op.on('--env K=V', 'Set environment variable') {|s|
110
+ k, v = s.split('=',2)
111
+ (conf[:env] ||= {})[k] = v
112
+ }
113
+
109
114
  op.on('-d', '--daemon PIDFILE', 'Daemonize (default: foreground)') {|s|
110
115
  conf[:daemon] = s
111
116
  }
112
117
 
113
118
  op.on('-f', '--file PATH.yaml', 'Read configuration file') {|s|
114
- conf[:file] = s
119
+ (conf[:files] ||= []) << s
115
120
  }
116
121
 
117
122
 
@@ -137,11 +142,16 @@ begin
137
142
  usage nil
138
143
  end
139
144
 
140
- if conf[:file]
145
+ if conf[:files]
141
146
  require 'yaml'
142
- yaml = YAML.load File.read(conf[:file])
147
+ docs = ''
148
+ conf[:files].each {|file|
149
+ docs << File.read(file)
150
+ }
143
151
  y = {}
144
- yaml.each_pair {|k,v| y[k.to_sym] = v }
152
+ YAML.load_documents(docs) {|yaml|
153
+ yaml.each_pair {|k,v| y[k.to_sym] = v }
154
+ }
145
155
 
146
156
  conf = defaults.merge(y).merge(conf)
147
157
 
@@ -174,7 +184,7 @@ begin
174
184
  raise "delete time (-E) must be larger than resume time (-r)"
175
185
  end
176
186
 
177
- case conf[:type]
187
+ case conf[:db_type]
178
188
  when 'mysql'
179
189
  if !conf[:db_database] || !conf[:db_host] || !conf[:db_user]
180
190
  raise "--database, --host and --user are required for mysql"
@@ -188,7 +198,7 @@ begin
188
198
  dbi = "DBI:SQLite3:#{conf[:db_database]}"
189
199
 
190
200
  else
191
- raise "Unknown lock server type '#{conf[:type]}'"
201
+ raise "Unknown lock server type '#{conf[:db_type]}'"
192
202
  end
193
203
 
194
204
  unless conf[:extend_timeout]
@@ -207,7 +217,7 @@ end
207
217
  if confout
208
218
  require 'yaml'
209
219
 
210
- conf.delete(:file)
220
+ conf.delete(:files)
211
221
  conf[:schedule] = schedule
212
222
  conf[:args] = ARGV
213
223
 
@@ -226,7 +236,7 @@ if schedule.empty?
226
236
  end
227
237
 
228
238
 
229
- puts "Using node name #{conf[:name]}"
239
+ puts "Using node name #{conf[:node_name]}"
230
240
 
231
241
 
232
242
  if conf[:daemon]
@@ -244,7 +254,7 @@ end
244
254
 
245
255
 
246
256
  begin
247
- lock = RSched::DBLock.new(conf[:name], conf[:timeout], dbi, conf[:db_user].to_s, conf[:db_password].to_s)
257
+ lock = RSched::DBLock.new(conf[:node_name], conf[:timeout], dbi, conf[:db_user].to_s, conf[:db_password].to_s)
248
258
  rescue DBI::InterfaceError
249
259
  STDERR.puts "Can't initialize DBI interface: #{$!}"
250
260
  STDERR.puts "You may have to install database driver first:"
data/lib/rsched/engine.rb CHANGED
@@ -56,6 +56,7 @@ class Engine
56
56
  @kill_retry = conf[:kill_retry]
57
57
  @sched_start = conf[:from] || 0
58
58
  @release_on_fail = conf[:release_on_fail]
59
+ @env = conf[:env] || {}
59
60
  @finished = false
60
61
  @ss = {}
61
62
 
@@ -146,6 +147,10 @@ class Engine
146
147
  def process(token, ident, time, action)
147
148
  puts "started token=#{token.inspect} time=#{time}"
148
149
 
150
+ @env.each_pair {|k,v|
151
+ ENV[k] = v
152
+ }
153
+
149
154
  @extender.set_token(token)
150
155
 
151
156
  success = false
@@ -1,5 +1,5 @@
1
1
  module RSched
2
2
 
3
- VERSION = '0.3.1'
3
+ VERSION = '0.3.2'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsched
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 1
10
- version: 0.3.1
9
+ - 2
10
+ version: 0.3.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sadayuki Furuhashi
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-20 00:00:00 +09:00
18
+ date: 2011-07-23 00:00:00 +09:00
19
19
  default_executable: rsched
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency