feedupdater 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/config/feed_updater.yml +3 -0
- data/lib/feed_updater/version.rb +1 -1
- data/lib/feed_updater.rb +37 -35
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
== FeedUpdater 0.2.2
|
2
|
+
* better distribution of work across threads
|
3
|
+
* fixed major threading bug
|
4
|
+
* added configuration variable for sleep time
|
1
5
|
== FeedUpdater 0.2.1
|
2
6
|
* no longer attempts to update feeds that have been updated very recently
|
3
7
|
* fixed logging levels
|
data/config/feed_updater.yml
CHANGED
@@ -9,6 +9,9 @@ load_script: example/custom_updater.rb
|
|
9
9
|
# Never set it higher than 1 if you're on a shared server.
|
10
10
|
threads: 5
|
11
11
|
|
12
|
+
# The amount of time to sleep between updates. Expressed in minutes.
|
13
|
+
sleep_time: 65
|
14
|
+
|
12
15
|
# This is the path to store the pid files.
|
13
16
|
pid_file_path: config
|
14
17
|
|
data/lib/feed_updater/version.rb
CHANGED
data/lib/feed_updater.rb
CHANGED
@@ -226,7 +226,8 @@ module FeedTools
|
|
226
226
|
if !defined?(@updater_options) || @updater_options.nil?
|
227
227
|
@updater_options = {
|
228
228
|
:start_delay => true,
|
229
|
-
:
|
229
|
+
:threads => 1,
|
230
|
+
:sleep_time => 60,
|
230
231
|
:log_level => 0
|
231
232
|
}
|
232
233
|
end
|
@@ -334,7 +335,7 @@ module FeedTools
|
|
334
335
|
# The main feed update loop.
|
335
336
|
loop do
|
336
337
|
result = nil
|
337
|
-
sleepy_time =
|
338
|
+
sleepy_time = self.updater_options[:sleep_time].to_i.minutes
|
338
339
|
begin
|
339
340
|
result = Benchmark.measure do
|
340
341
|
self.update_feeds()
|
@@ -342,7 +343,9 @@ module FeedTools
|
|
342
343
|
self.logger.info(
|
343
344
|
"#{@feed_href_list.size} feed(s) updated " +
|
344
345
|
"in #{result.real.round} seconds.")
|
345
|
-
sleepy_time =
|
346
|
+
sleepy_time =
|
347
|
+
(self.updater_options[:sleep_time].to_i.minutes -
|
348
|
+
result.real.round)
|
346
349
|
rescue Exception => error
|
347
350
|
self.logger.error("Feed update sequence errored out.")
|
348
351
|
self.logger.error(error.class.name + ": " + error.message)
|
@@ -354,11 +357,14 @@ module FeedTools
|
|
354
357
|
ObjectSpace.garbage_collect()
|
355
358
|
if sleepy_time > 0
|
356
359
|
self.logger.info(
|
357
|
-
"Sleeping for #{(sleepy_time /
|
360
|
+
"Sleeping for #{(sleepy_time / 1.minute.to_f).round} " +
|
361
|
+
"minutes...")
|
358
362
|
sleep(sleepy_time)
|
359
363
|
else
|
360
364
|
self.logger.info(
|
361
|
-
"Update took more than
|
365
|
+
"Update took more than " +
|
366
|
+
"#{self.updater_options[:sleep_time].to_i} minutes, " +
|
367
|
+
"restarting immediately.")
|
362
368
|
end
|
363
369
|
end
|
364
370
|
end
|
@@ -432,6 +438,20 @@ module FeedTools
|
|
432
438
|
self.start()
|
433
439
|
end
|
434
440
|
|
441
|
+
def progress_precentage()
|
442
|
+
if !defined?(@remaining_href_list) || !defined?(@feed_href_list)
|
443
|
+
return nil
|
444
|
+
end
|
445
|
+
if @remaining_href_list.nil? || @feed_href_list.nil?
|
446
|
+
return nil
|
447
|
+
end
|
448
|
+
if @feed_href_list == []
|
449
|
+
return nil
|
450
|
+
end
|
451
|
+
return 100.0 - (100.0 *
|
452
|
+
(@remaining_href_list.size.to_f / @feed_href_list.size.to_f))
|
453
|
+
end
|
454
|
+
|
435
455
|
# Updates all of the feeds.
|
436
456
|
def update_feeds()
|
437
457
|
self.logger.level = 0
|
@@ -467,22 +487,10 @@ module FeedTools
|
|
467
487
|
end
|
468
488
|
self.logger.info("Updating #{@feed_href_list.size} feed(s)...")
|
469
489
|
self.logger.level = self.updater_options[:log_level]
|
470
|
-
ObjectSpace.garbage_collect()
|
471
490
|
|
472
|
-
threads = []
|
473
|
-
|
474
|
-
thread_slice_size =
|
475
|
-
(@feed_href_list.size / self.updater_options[:threads])
|
491
|
+
@threads = []
|
492
|
+
@remaining_href_list = @feed_href_list.dup
|
476
493
|
|
477
|
-
for i in 0...self.updater_options[:threads]
|
478
|
-
if i != self.updater_options[:threads] - 1
|
479
|
-
thread_slices << @feed_href_list[
|
480
|
-
(i * thread_slice_size)...((i + 1) * thread_slice_size)]
|
481
|
-
else
|
482
|
-
thread_slices << @feed_href_list[
|
483
|
-
(i * thread_slice_size)..-1]
|
484
|
-
end
|
485
|
-
end
|
486
494
|
ObjectSpace.garbage_collect()
|
487
495
|
|
488
496
|
begin_updating = false
|
@@ -501,7 +509,8 @@ module FeedTools
|
|
501
509
|
Thread.pass
|
502
510
|
end
|
503
511
|
mutex.synchronize do
|
504
|
-
self.logger.prefix =
|
512
|
+
self.logger.prefix =
|
513
|
+
"Thread #{Thread.current.thread_id} ".ljust(20)
|
505
514
|
self.logger.info("Thread started.")
|
506
515
|
|
507
516
|
begin
|
@@ -512,23 +521,16 @@ module FeedTools
|
|
512
521
|
rescue Exception => error
|
513
522
|
self.logger.info(error)
|
514
523
|
end
|
515
|
-
|
516
|
-
self.logger.info(
|
517
|
-
"Thread ##{Thread.current.thread_id} handling " +
|
518
|
-
"#{thread_slices[Thread.current.thread_id].size} feeds...")
|
519
524
|
end
|
520
525
|
|
521
526
|
ObjectSpace.garbage_collect()
|
522
527
|
Thread.pass
|
523
|
-
href_list = thread_slices[Thread.current.thread_id]
|
524
528
|
|
525
|
-
|
529
|
+
while @remaining_href_list.size > 0
|
526
530
|
progress = nil
|
527
531
|
mutex.synchronize do
|
528
|
-
Thread.current.
|
529
|
-
Thread.current.
|
530
|
-
(href_list.index(Thread.current.href).to_f /
|
531
|
-
href_list.size.to_f) * 100
|
532
|
+
Thread.current.progress = self.progress_precentage()
|
533
|
+
Thread.current.href = @remaining_href_list.shift()
|
532
534
|
progress = sprintf("%.2f", Thread.current.progress)
|
533
535
|
end
|
534
536
|
begin
|
@@ -594,7 +596,7 @@ module FeedTools
|
|
594
596
|
Thread.pass
|
595
597
|
end
|
596
598
|
end
|
597
|
-
threads << updater_thread
|
599
|
+
@threads << updater_thread
|
598
600
|
class <<updater_thread
|
599
601
|
attr_accessor :thread_id
|
600
602
|
attr_accessor :progress
|
@@ -606,20 +608,20 @@ module FeedTools
|
|
606
608
|
mutex.synchronize do
|
607
609
|
self.logger.prefix = "FeedUpdater".ljust(20)
|
608
610
|
self.logger.info(
|
609
|
-
"#{threads.size} thread(s) successfully started...")
|
611
|
+
"#{@threads.size} thread(s) successfully started...")
|
610
612
|
begin_updating = true
|
611
613
|
end
|
612
614
|
Thread.pass
|
613
615
|
|
614
616
|
ObjectSpace.garbage_collect()
|
615
617
|
Thread.pass
|
616
|
-
for i in 0
|
618
|
+
for i in 0...@threads.size
|
617
619
|
mutex.synchronize do
|
618
620
|
self.logger.prefix = "FeedUpdater".ljust(20)
|
619
621
|
self.logger.info(
|
620
|
-
"Joining on thread #{threads[i].thread_id}...")
|
622
|
+
"Joining on thread #{@threads[i].thread_id}...")
|
621
623
|
end
|
622
|
-
threads[i].join
|
624
|
+
@threads[i].join
|
623
625
|
end
|
624
626
|
self.logger.prefix = "FeedUpdater".ljust(20)
|
625
627
|
ObjectSpace.garbage_collect()
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: feedupdater
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.2.2
|
7
|
+
date: 2006-05-17 00:00:00 -04:00
|
8
8
|
summary: Automatic feed updater daemon.
|
9
9
|
require_paths:
|
10
10
|
- lib
|