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.
Files changed (43) hide show
  1. data/Gemfile +7 -0
  2. data/Gemfile.lock +36 -0
  3. data/README.markdown +83 -28
  4. data/Rakefile +39 -31
  5. data/VERSION +1 -1
  6. data/bin/scheduler_daemon +59 -0
  7. data/lib/loader/scheduler_loader.rb +12 -0
  8. data/lib/scheduler_daemon.rb +2 -0
  9. data/lib/scheduler_daemon/base.rb +149 -0
  10. data/lib/scheduler_daemon/command_line_args_to_hash.rb +47 -0
  11. data/lib/scheduler_daemon/exception_handler.rb +30 -0
  12. data/{generators → lib/scheduler_daemon/rails/generators}/scheduler/USAGE +0 -0
  13. data/lib/scheduler_daemon/rails/generators/scheduler/scheduler_generator.rb +16 -0
  14. data/lib/scheduler_daemon/rails/generators/scheduler/templates/README +11 -0
  15. data/lib/scheduler_daemon/rails/generators/scheduler/templates/lib/scheduled_tasks/session_cleaner_task.rb +29 -0
  16. data/lib/scheduler_daemon/rails/generators/scheduler_task/scheduler_task_generator.rb +17 -0
  17. data/{generators → lib/scheduler_daemon/rails/generators}/scheduler_task/templates/README +1 -1
  18. data/lib/scheduler_daemon/rails/generators/scheduler_task/templates/scheduled_tasks/example_task.rb +19 -0
  19. data/lib/scheduler_daemon/rails/railtie.rb +9 -0
  20. data/{generators/scheduler/templates/lib/scheduler → lib/scheduler_daemon}/scheduler_task.rb +17 -8
  21. data/scheduler_daemon.gemspec +58 -35
  22. data/spec/command_line_args_to_hash_spec.rb +26 -0
  23. data/spec/scheduled_tasks/session_cleaner_task_spec.rb +11 -7
  24. data/spec/scheduler_spec.rb +18 -7
  25. data/spec/spec_helper.rb +16 -0
  26. metadata +177 -50
  27. data/.gitignore +0 -1
  28. data/CHANGES +0 -10
  29. data/generators/scheduler/scheduler_generator.rb +0 -25
  30. data/generators/scheduler/templates/README +0 -8
  31. data/generators/scheduler/templates/bin/boot.rb +0 -10
  32. data/generators/scheduler/templates/bin/scheduler_daemon.rb +0 -25
  33. data/generators/scheduler/templates/lib/scheduled_tasks/session_cleaner_task.rb +0 -21
  34. data/generators/scheduler/templates/lib/scheduler.rb +0 -90
  35. data/generators/scheduler/templates/lib/scheduler/exception_handler.rb +0 -12
  36. data/generators/scheduler/templates/lib/scheduler/hijack_puts.rb +0 -8
  37. data/generators/scheduler_task/scheduler_task_generator.rb +0 -11
  38. data/generators/scheduler_task/templates/scheduled_tasks/example_task.rb +0 -10
  39. data/init.rb +0 -1
  40. data/install.rb +0 -1
  41. data/lib/scheduler.rb +0 -2
  42. data/spec/README +0 -1
  43. 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
@@ -1,10 +0,0 @@
1
- class <%= class_name %>Task < Scheduler::SchedulerTask
2
- environments :all
3
-
4
- every '10s'
5
-
6
- def run
7
- # Your code here, eg: User.send_due_invoices!
8
- # use puts for writing to log, eg: puts "I've sent invoices!"
9
- end
10
- 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'))
@@ -1,2 +0,0 @@
1
- # You probably want to look in generators/, most of the code is there.
2
- # In the future I may move some of it here; maybe.
@@ -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.
@@ -1 +0,0 @@
1
- puts "Nooooooooo! but we were so good together!"