rufus-scheduler 1.0.4 → 1.0.5
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.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
|
|