rufus-scheduler 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +7 -0
- data/CREDITS.txt +2 -0
- data/lib/rufus/otime.rb +1 -1
- data/lib/rufus/scheduler.rb +54 -15
- data/test/scheduler_0_test.rb +14 -3
- data/test/time_1_test.rb +1 -0
- metadata +2 -2
data/CHANGELOG.txt
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
= rufus-scheduler CHANGELOG.txt
|
3
3
|
|
4
4
|
|
5
|
+
== rufus-scheduler - 1.0.5 released 2008/03/17
|
6
|
+
|
7
|
+
- bug #18363 : constrained precision to 0.0 < p <= 1.0 - s188
|
8
|
+
- todo #18821 : best effort drift correction integrated - s187
|
9
|
+
- bug #18513 : 0 seconds and :drop_seconds => "0m". Fixed - s186
|
10
|
+
|
11
|
+
|
5
12
|
== rufus-scheduler - 1.0.4 released 2008/02/29
|
6
13
|
|
7
14
|
- todo #18474 : implemented to_duration_array() - s183
|
data/CREDITS.txt
CHANGED
data/lib/rufus/otime.rb
CHANGED
data/lib/rufus/scheduler.rb
CHANGED
@@ -236,7 +236,24 @@ module Rufus
|
|
236
236
|
# By default, the precision is 0.250, with means the scheduler
|
237
237
|
# will check for jobs to execute 4 times per second.
|
238
238
|
#
|
239
|
-
|
239
|
+
attr_reader :precision
|
240
|
+
|
241
|
+
#
|
242
|
+
# Setting the precision ( 0.0 < p <= 1.0 )
|
243
|
+
#
|
244
|
+
def precision= (f)
|
245
|
+
|
246
|
+
raise "precision must be 0.0 < p <= 1.0" \
|
247
|
+
if f <= 0.0 or f > 1.0
|
248
|
+
|
249
|
+
@precision = f
|
250
|
+
end
|
251
|
+
|
252
|
+
#--
|
253
|
+
# Set by default at 0.00045, it's meant to minimize drift
|
254
|
+
#
|
255
|
+
#attr_accessor :correction
|
256
|
+
#++
|
240
257
|
|
241
258
|
#
|
242
259
|
# As its name implies.
|
@@ -262,11 +279,13 @@ module Rufus
|
|
262
279
|
@precision = 0.250
|
263
280
|
# every 250ms, the scheduler wakes up (default value)
|
264
281
|
begin
|
265
|
-
|
282
|
+
self.precision = Float(params[:scheduler_precision])
|
266
283
|
rescue Exception => e
|
267
284
|
# let precision at its default value
|
268
285
|
end
|
269
286
|
|
287
|
+
#@correction = 0.00045
|
288
|
+
|
270
289
|
@exit_when_no_more_jobs = false
|
271
290
|
@dont_reschedule_every = false
|
272
291
|
|
@@ -296,10 +315,15 @@ module Rufus
|
|
296
315
|
|
297
316
|
break if @stopped
|
298
317
|
|
318
|
+
t0 = Time.now.to_f
|
319
|
+
|
299
320
|
step
|
300
321
|
|
301
|
-
|
302
|
-
|
322
|
+
d = Time.now.to_f - t0 # + @correction
|
323
|
+
|
324
|
+
next if d > @precision
|
325
|
+
|
326
|
+
sleep (@precision - d)
|
303
327
|
end
|
304
328
|
end
|
305
329
|
end
|
@@ -665,7 +689,7 @@ module Rufus
|
|
665
689
|
#
|
666
690
|
def Scheduler.is_cron_string (s)
|
667
691
|
|
668
|
-
s.match
|
692
|
+
s.match ".+ .+ .+ .+ .+"
|
669
693
|
end
|
670
694
|
|
671
695
|
#protected
|
@@ -886,7 +910,7 @@ module Rufus
|
|
886
910
|
|
887
911
|
if @exit_when_no_more_jobs
|
888
912
|
|
889
|
-
|
913
|
+
if @pending_jobs.size < 1
|
890
914
|
|
891
915
|
@stopped = true
|
892
916
|
return
|
@@ -911,6 +935,7 @@ module Rufus
|
|
911
935
|
|
912
936
|
@cron_jobs.each do |cron_id, cron_job|
|
913
937
|
#puts "step() cron_id : #{cron_id}"
|
938
|
+
#trigger(cron_job) if cron_job.matches?(now, @precision)
|
914
939
|
trigger(cron_job) if cron_job.matches?(now)
|
915
940
|
end
|
916
941
|
end
|
@@ -1166,8 +1191,10 @@ module Rufus
|
|
1166
1191
|
# has to fire this CronJob instance.
|
1167
1192
|
#
|
1168
1193
|
def matches? (time)
|
1194
|
+
#def matches? (time, precision)
|
1169
1195
|
|
1170
|
-
|
1196
|
+
#@cron_line.matches?(time, precision)
|
1197
|
+
@cron_line.matches?(time)
|
1171
1198
|
end
|
1172
1199
|
|
1173
1200
|
#
|
@@ -1240,17 +1267,29 @@ module Rufus
|
|
1240
1267
|
#
|
1241
1268
|
# Returns true if the given time matches this cron line.
|
1242
1269
|
#
|
1270
|
+
# (the precision is passed as well to determine if it's
|
1271
|
+
# worth checking seconds and minutes)
|
1272
|
+
#
|
1243
1273
|
def matches? (time)
|
1274
|
+
#def matches? (time, precision)
|
1244
1275
|
|
1245
1276
|
time = Time.at(time) \
|
1246
1277
|
if time.kind_of?(Float) or time.kind_of?(Integer)
|
1247
1278
|
|
1248
|
-
return false
|
1249
|
-
|
1250
|
-
|
1251
|
-
return false
|
1252
|
-
|
1253
|
-
|
1279
|
+
return false \
|
1280
|
+
if no_match?(time.sec, @seconds)
|
1281
|
+
#if precision <= 1 and no_match?(time.sec, @seconds)
|
1282
|
+
return false \
|
1283
|
+
if no_match?(time.min, @minutes)
|
1284
|
+
#if precision <= 60 and no_match?(time.min, @minutes)
|
1285
|
+
return false \
|
1286
|
+
if no_match?(time.hour, @hours)
|
1287
|
+
return false \
|
1288
|
+
if no_match?(time.day, @days)
|
1289
|
+
return false \
|
1290
|
+
if no_match?(time.month, @months)
|
1291
|
+
return false \
|
1292
|
+
if no_match?(time.wday, @weekdays)
|
1254
1293
|
|
1255
1294
|
true
|
1256
1295
|
end
|
@@ -1381,10 +1420,10 @@ module Rufus
|
|
1381
1420
|
return false if not cron_values
|
1382
1421
|
|
1383
1422
|
cron_values.each do |v|
|
1384
|
-
return false if value == v
|
1423
|
+
return false if value == v # ok, it matches
|
1385
1424
|
end
|
1386
1425
|
|
1387
|
-
true
|
1426
|
+
true # no match found
|
1388
1427
|
end
|
1389
1428
|
end
|
1390
1429
|
|
data/test/scheduler_0_test.rb
CHANGED
@@ -235,9 +235,9 @@ class SchedulerTest < Test::Unit::TestCase
|
|
235
235
|
#
|
236
236
|
def test_scheduler_7
|
237
237
|
|
238
|
-
scheduler =
|
238
|
+
scheduler = Rufus::Scheduler.new(:scheduler_precision => 0.100)
|
239
239
|
|
240
|
-
assert_equal
|
240
|
+
assert_equal 0.100, scheduler.precision
|
241
241
|
end
|
242
242
|
|
243
243
|
#
|
@@ -249,7 +249,7 @@ class SchedulerTest < Test::Unit::TestCase
|
|
249
249
|
#
|
250
250
|
def test_8
|
251
251
|
|
252
|
-
scheduler =
|
252
|
+
scheduler = Rufus::Scheduler.new
|
253
253
|
scheduler.start
|
254
254
|
|
255
255
|
var = false
|
@@ -313,6 +313,17 @@ class SchedulerTest < Test::Unit::TestCase
|
|
313
313
|
scheduler.stop
|
314
314
|
end
|
315
315
|
|
316
|
+
def test_10
|
317
|
+
|
318
|
+
e = nil
|
319
|
+
begin
|
320
|
+
OpenWFE::Scheduler.new.precision = 10
|
321
|
+
rescue Exception => e
|
322
|
+
end
|
323
|
+
|
324
|
+
assert_not_nil e, "exception not caught"
|
325
|
+
end
|
326
|
+
|
316
327
|
protected
|
317
328
|
|
318
329
|
class TestSchedulable
|
data/test/time_1_test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rufus-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-03-17 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|