rsched 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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