scheduler_daemon 0.5.1 → 1.1.1
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/Gemfile +7 -0
- data/Gemfile.lock +36 -0
- data/README.markdown +83 -28
- data/Rakefile +39 -31
- data/VERSION +1 -1
- data/bin/scheduler_daemon +59 -0
- data/lib/loader/scheduler_loader.rb +12 -0
- data/lib/scheduler_daemon.rb +2 -0
- data/lib/scheduler_daemon/base.rb +149 -0
- data/lib/scheduler_daemon/command_line_args_to_hash.rb +47 -0
- data/lib/scheduler_daemon/exception_handler.rb +30 -0
- data/{generators → lib/scheduler_daemon/rails/generators}/scheduler/USAGE +0 -0
- data/lib/scheduler_daemon/rails/generators/scheduler/scheduler_generator.rb +16 -0
- data/lib/scheduler_daemon/rails/generators/scheduler/templates/README +11 -0
- data/lib/scheduler_daemon/rails/generators/scheduler/templates/lib/scheduled_tasks/session_cleaner_task.rb +29 -0
- data/lib/scheduler_daemon/rails/generators/scheduler_task/scheduler_task_generator.rb +17 -0
- data/{generators → lib/scheduler_daemon/rails/generators}/scheduler_task/templates/README +1 -1
- data/lib/scheduler_daemon/rails/generators/scheduler_task/templates/scheduled_tasks/example_task.rb +19 -0
- data/lib/scheduler_daemon/rails/railtie.rb +9 -0
- data/{generators/scheduler/templates/lib/scheduler → lib/scheduler_daemon}/scheduler_task.rb +17 -8
- data/scheduler_daemon.gemspec +58 -35
- data/spec/command_line_args_to_hash_spec.rb +26 -0
- data/spec/scheduled_tasks/session_cleaner_task_spec.rb +11 -7
- data/spec/scheduler_spec.rb +18 -7
- data/spec/spec_helper.rb +16 -0
- metadata +177 -50
- data/.gitignore +0 -1
- data/CHANGES +0 -10
- data/generators/scheduler/scheduler_generator.rb +0 -25
- data/generators/scheduler/templates/README +0 -8
- data/generators/scheduler/templates/bin/boot.rb +0 -10
- data/generators/scheduler/templates/bin/scheduler_daemon.rb +0 -25
- data/generators/scheduler/templates/lib/scheduled_tasks/session_cleaner_task.rb +0 -21
- data/generators/scheduler/templates/lib/scheduler.rb +0 -90
- data/generators/scheduler/templates/lib/scheduler/exception_handler.rb +0 -12
- data/generators/scheduler/templates/lib/scheduler/hijack_puts.rb +0 -8
- data/generators/scheduler_task/scheduler_task_generator.rb +0 -11
- data/generators/scheduler_task/templates/scheduled_tasks/example_task.rb +0 -10
- data/init.rb +0 -1
- data/install.rb +0 -1
- data/lib/scheduler.rb +0 -2
- data/spec/README +0 -1
- data/uninstall.rb +0 -1
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'eventmachine'
|
2
|
-
require 'rufus/scheduler'
|
3
|
-
require File.join(File.dirname(__FILE__), 'scheduler', 'hijack_puts')
|
4
|
-
require File.join(File.dirname(__FILE__), 'scheduler', 'scheduler_task')
|
5
|
-
require File.join(File.dirname(__FILE__), 'scheduler', 'exception_handler')
|
6
|
-
|
7
|
-
module Scheduler
|
8
|
-
class Base
|
9
|
-
attr_reader :load_only, :load_except, :tasks
|
10
|
-
|
11
|
-
def initialize(*command_line_args)
|
12
|
-
@load_only = []
|
13
|
-
@load_except = []
|
14
|
-
@tasks = []
|
15
|
-
@rufus_scheduler = nil
|
16
|
-
|
17
|
-
decide_what_to_run(command_line_args)
|
18
|
-
load_tasks
|
19
|
-
run_scheduler
|
20
|
-
end
|
21
|
-
|
22
|
-
def run_scheduler
|
23
|
-
puts "Starting Scheduler in #{RAILS_ENV}"
|
24
|
-
|
25
|
-
EventMachine::run {
|
26
|
-
@rufus_scheduler = Rufus::Scheduler::EmScheduler.start_new
|
27
|
-
|
28
|
-
def @rufus_scheduler.handle_exception(job, exception)
|
29
|
-
msg = "[#{RAILS_ENV}] scheduler job #{job.job_id} (#{job.tags * ' '}) caught exception #{exception.inspect}"
|
30
|
-
puts msg
|
31
|
-
puts exception.backtrace.join("\n")
|
32
|
-
Scheduler::ExceptionHandler.handle_exception(exception, job, message)
|
33
|
-
end
|
34
|
-
|
35
|
-
# This is where the magic happens. tasks in scheduled_tasks/*.rb are loaded up.
|
36
|
-
tasks.each do |task|
|
37
|
-
if task.should_run_in_current_environment?
|
38
|
-
task.add_to(@rufus_scheduler)
|
39
|
-
else
|
40
|
-
puts "#{task} configured not to run in #{RAILS_ENV} environment; skipping."
|
41
|
-
end
|
42
|
-
end
|
43
|
-
}
|
44
|
-
end
|
45
|
-
|
46
|
-
def load_tasks
|
47
|
-
tasks_to_run.each{|f|
|
48
|
-
begin
|
49
|
-
unless load_only.any? && load_only.all?{|m| f !~ Regexp.new(Regexp.escape(m)) }
|
50
|
-
require f
|
51
|
-
filename = f.split('/').last.split('.').first
|
52
|
-
puts "Loading task #{filename}..."
|
53
|
-
tasks << filename.camelcase.constantize # path/newsfeed_task.rb => NewsfeedTask
|
54
|
-
end
|
55
|
-
rescue Exception => e
|
56
|
-
msg = "Error loading task #{filename}: #{e.class.name}: #{e.message}"
|
57
|
-
puts msg
|
58
|
-
puts e.backtrace.join("\n")
|
59
|
-
Railsbot.say "#{msg}, see log for backtrace" if Rails.env.production? || Rails.env.staging?
|
60
|
-
end
|
61
|
-
}
|
62
|
-
end
|
63
|
-
|
64
|
-
def tasks_to_run
|
65
|
-
task_files = Dir[File.join(File.dirname(__FILE__), %w(scheduled_tasks *.rb))]
|
66
|
-
|
67
|
-
if load_only.any?
|
68
|
-
task_files.reject!{|f| load_only.all?{|m| f !~ Regexp.new(Regexp.escape(m))}}
|
69
|
-
end
|
70
|
-
|
71
|
-
if load_except.any?
|
72
|
-
task_files.reject!{|f| load_except.any?{|m| f =~ Regexp.new(Regexp.escape(m))}}
|
73
|
-
end
|
74
|
-
task_files
|
75
|
-
end
|
76
|
-
|
77
|
-
# takes input from command line to later modify list of tasks to run
|
78
|
-
def decide_what_to_run(command_line_args)
|
79
|
-
# allow ruby daemons/bin/task_runner.rb run -- --only=toadcamp,newsfeed
|
80
|
-
if only_arg = command_line_args.detect{|arg| arg =~ /^--only/}
|
81
|
-
@load_only = only_arg.split('=').last.split(',')
|
82
|
-
end
|
83
|
-
|
84
|
-
# allow ruby daemons/bin/task_runner.rb run -- --except=toadcamp
|
85
|
-
if except_arg = command_line_args.detect{|arg| arg =~ /^--except/}
|
86
|
-
@load_except = except_arg.split('=').last.split(',')
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module Scheduler
|
2
|
-
class ExceptionHandler
|
3
|
-
# Change me to do something meaningful
|
4
|
-
def self.handle_exception(exception, job, message)
|
5
|
-
# If your team all hangs out in Campfire, you might want to make a
|
6
|
-
# Campfire class that makes use of the tinder gem to write these errors there.
|
7
|
-
#
|
8
|
-
# eg:
|
9
|
-
# Campfire.say "#{msg}, see log for backtrace" if Rails.env.production? || Rails.env.staging?
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
# hijack puts to log with a timestamp, since any output is going to be logged anyway.
|
2
|
-
module Kernel
|
3
|
-
def puts_with_timestamp(*args)
|
4
|
-
time = Time.respond_to?(:zone) ? Time.zone.now.to_s : Time.now.to_s
|
5
|
-
puts_without_timestamp(%([#{time}] #{args.join("\n")}))
|
6
|
-
end
|
7
|
-
alias_method_chain :puts, :timestamp
|
8
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
class SchedulerTaskGenerator < Rails::Generator::NamedBase
|
2
|
-
def manifest
|
3
|
-
record do |m|
|
4
|
-
m.directory File.join('scheduler', 'lib', 'scheduled_tasks')
|
5
|
-
|
6
|
-
m.template 'scheduled_tasks/example_task.rb', "scheduler/lib/scheduled_tasks/#{file_name}_task.rb", :assigns => { :class_name => class_name }
|
7
|
-
|
8
|
-
m.readme('README')
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'scheduler'
|
data/install.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
puts File.read(File.join(File.dirname(__FILE__), 'README.markdown'))
|
data/lib/scheduler.rb
DELETED
data/spec/README
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
To install the specs for the scheduler daemon, copy this "spec" folder to one called "scheduler_daemon" in your project's spec folder.
|
data/uninstall.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
puts "Nooooooooo! but we were so good together!"
|