scheduler_daemon 0.5.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
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,10 +1,21 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ require 'scheduler_daemon/base'
2
3
 
3
4
  describe Scheduler::Base do
4
- it "should load tasks without errors"
5
- it "should decide which tasks to run"
6
- it "should support --only"
7
- it "should support --except"
8
- it "should set up exception handling"
9
- it "should add each task to the scheduler"
5
+ before(:each) do
6
+ @scheduler = Scheduler::Base.new(:skip_init => true, :silent => true)
7
+ @scheduler.stub!(:log)
8
+ end
9
+
10
+ describe 'decide_what_to_run' do
11
+ it "should support --only" do
12
+ @scheduler = Scheduler::Base.new({:skip_init => true, :silent => true}, ['--only=alphabets'])
13
+ @scheduler.options['only'].should == ['alphabets']
14
+ end
15
+
16
+ it "should support --except" do
17
+ @scheduler = Scheduler::Base.new({:skip_init => true, :silent => true}, ['--except=balloons,monkeys'])
18
+ @scheduler.options['except'].should == ['balloons', 'monkeys']
19
+ end
20
+ end
10
21
  end
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ spec_runner = nil
3
+ begin
4
+ require 'rspec'
5
+ spec_runner = RSpec
6
+ rescue
7
+ require 'spec'
8
+ spec_runner = Spec::Runner
9
+ end
10
+ require 'chronic'
11
+ require 'active_support'
12
+
13
+ RAILS_ENV = 'test' unless defined?(RAILS_ENV) && RAILS_ENV == 'test'
14
+
15
+ spec_runner.configure do |config|
16
+ end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scheduler_daemon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ hash: 17
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 1
10
+ version: 1.1.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Steven Soroka
@@ -9,113 +15,234 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-10-16 00:00:00 -05:00
13
- default_executable:
18
+ date: 2011-04-14 00:00:00 Z
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: eventmachine
21
+ requirement: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ version_requirements: *id001
31
+ name: scheduler_daemon
32
+ prerelease: false
17
33
  type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
34
+ - !ruby/object:Gem::Dependency
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
20
37
  requirements:
21
38
  - - ">="
22
39
  - !ruby/object:Gem::Version
40
+ hash: 63
41
+ segments:
42
+ - 0
43
+ - 12
44
+ - 8
23
45
  version: 0.12.8
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: daemons
46
+ version_requirements: *id002
47
+ name: eventmachine
48
+ prerelease: false
27
49
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
50
+ - !ruby/object:Gem::Dependency
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
30
53
  requirements:
31
54
  - - ">="
32
55
  - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 1
59
+ - 0
60
+ - 10
33
61
  version: 1.0.10
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: rufus-scheduler
62
+ version_requirements: *id003
63
+ name: daemons
64
+ prerelease: false
37
65
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
66
+ - !ruby/object:Gem::Dependency
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
40
69
  requirements:
41
70
  - - ">="
42
71
  - !ruby/object:Gem::Version
72
+ hash: 13
73
+ segments:
74
+ - 2
75
+ - 0
76
+ - 1
43
77
  version: 2.0.1
44
- version:
78
+ version_requirements: *id004
79
+ name: rufus-scheduler
80
+ prerelease: false
81
+ type: :runtime
45
82
  - !ruby/object:Gem::Dependency
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 23
89
+ segments:
90
+ - 0
91
+ - 2
92
+ - 0
93
+ version: 0.2.0
94
+ version_requirements: *id005
46
95
  name: chronic
96
+ prerelease: false
97
+ type: :runtime
98
+ - !ruby/object:Gem::Dependency
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ version_requirements: *id006
109
+ name: activesupport
110
+ prerelease: false
111
+ type: :runtime
112
+ - !ruby/object:Gem::Dependency
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 63
119
+ segments:
120
+ - 0
121
+ - 12
122
+ - 8
123
+ version: 0.12.8
124
+ version_requirements: *id007
125
+ name: eventmachine
126
+ prerelease: false
47
127
  type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
128
+ - !ruby/object:Gem::Dependency
129
+ requirement: &id008 !ruby/object:Gem::Requirement
130
+ none: false
50
131
  requirements:
51
132
  - - ">="
52
133
  - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 1
137
+ - 0
138
+ - 10
139
+ version: 1.0.10
140
+ version_requirements: *id008
141
+ name: daemons
142
+ prerelease: false
143
+ type: :runtime
144
+ - !ruby/object:Gem::Dependency
145
+ requirement: &id009 !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 13
151
+ segments:
152
+ - 2
153
+ - 0
154
+ - 1
155
+ version: 2.0.1
156
+ version_requirements: *id009
157
+ name: rufus-scheduler
158
+ prerelease: false
159
+ type: :runtime
160
+ - !ruby/object:Gem::Dependency
161
+ requirement: &id010 !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ hash: 23
167
+ segments:
168
+ - 0
169
+ - 2
170
+ - 0
53
171
  version: 0.2.0
54
- version:
55
- description:
172
+ version_requirements: *id010
173
+ name: chronic
174
+ prerelease: false
175
+ type: :runtime
176
+ description: a Rails 2.3, Rails 3, and Ruby compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks to perform maintenance tasks, only loading the environment ONCE.
56
177
  email: ssoroka78@gmail.com
57
- executables: []
58
-
178
+ executables:
179
+ - scheduler_daemon
59
180
  extensions: []
60
181
 
61
182
  extra_rdoc_files:
62
183
  - README.markdown
63
184
  files:
64
- - .gitignore
65
- - CHANGES
185
+ - Gemfile
186
+ - Gemfile.lock
66
187
  - MIT-LICENSE
67
188
  - README.markdown
68
189
  - Rakefile
69
190
  - VERSION
70
- - generators/scheduler/USAGE
71
- - generators/scheduler/scheduler_generator.rb
72
- - generators/scheduler/templates/README
73
- - generators/scheduler/templates/bin/boot.rb
74
- - generators/scheduler/templates/bin/scheduler_daemon.rb
75
- - generators/scheduler/templates/lib/scheduled_tasks/session_cleaner_task.rb
76
- - generators/scheduler/templates/lib/scheduler.rb
77
- - generators/scheduler/templates/lib/scheduler/exception_handler.rb
78
- - generators/scheduler/templates/lib/scheduler/hijack_puts.rb
79
- - generators/scheduler/templates/lib/scheduler/scheduler_task.rb
80
- - generators/scheduler_task/scheduler_task_generator.rb
81
- - generators/scheduler_task/templates/README
82
- - generators/scheduler_task/templates/scheduled_tasks/example_task.rb
83
- - init.rb
84
- - install.rb
85
- - lib/scheduler.rb
191
+ - bin/scheduler_daemon
192
+ - lib/loader/scheduler_loader.rb
193
+ - lib/scheduler_daemon.rb
194
+ - lib/scheduler_daemon/base.rb
195
+ - lib/scheduler_daemon/command_line_args_to_hash.rb
196
+ - lib/scheduler_daemon/exception_handler.rb
197
+ - lib/scheduler_daemon/rails/generators/scheduler/USAGE
198
+ - lib/scheduler_daemon/rails/generators/scheduler/scheduler_generator.rb
199
+ - lib/scheduler_daemon/rails/generators/scheduler/templates/README
200
+ - lib/scheduler_daemon/rails/generators/scheduler/templates/lib/scheduled_tasks/session_cleaner_task.rb
201
+ - lib/scheduler_daemon/rails/generators/scheduler_task/scheduler_task_generator.rb
202
+ - lib/scheduler_daemon/rails/generators/scheduler_task/templates/README
203
+ - lib/scheduler_daemon/rails/generators/scheduler_task/templates/scheduled_tasks/example_task.rb
204
+ - lib/scheduler_daemon/rails/railtie.rb
205
+ - lib/scheduler_daemon/scheduler_task.rb
86
206
  - scheduler_daemon.gemspec
87
- - spec/README
207
+ - spec/command_line_args_to_hash_spec.rb
88
208
  - spec/scheduled_tasks/session_cleaner_task_spec.rb
89
209
  - spec/scheduler_spec.rb
90
- - uninstall.rb
91
- has_rdoc: true
210
+ - spec/spec_helper.rb
92
211
  homepage: http://github.com/ssoroka/scheduler_daemon
93
212
  licenses: []
94
213
 
95
214
  post_install_message:
96
- rdoc_options:
97
- - --charset=UTF-8
215
+ rdoc_options: []
216
+
98
217
  require_paths:
99
218
  - lib
100
219
  required_ruby_version: !ruby/object:Gem::Requirement
220
+ none: false
101
221
  requirements:
102
222
  - - ">="
103
223
  - !ruby/object:Gem::Version
224
+ hash: 3
225
+ segments:
226
+ - 0
104
227
  version: "0"
105
- version:
106
228
  required_rubygems_version: !ruby/object:Gem::Requirement
229
+ none: false
107
230
  requirements:
108
231
  - - ">="
109
232
  - !ruby/object:Gem::Version
233
+ hash: 3
234
+ segments:
235
+ - 0
110
236
  version: "0"
111
- version:
112
237
  requirements: []
113
238
 
114
239
  rubyforge_project:
115
- rubygems_version: 1.3.5
240
+ rubygems_version: 1.7.2
116
241
  signing_key:
117
242
  specification_version: 3
118
- summary: Rails 2.3.2 compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks to perform maintenance tasks in Rails apps. Scheduler Daemon is made specifically for your Rails app, and only loads the environment once, no matter how many tasks run. What's so great about it? Well, I'm glad you asked! - Only loads your Rails environment once on daemon start, not every time a task is run - Allows you to easily deploy the scheduled tasks with your Rails app instead of depending on an administrator to update crontab - It doesn't use rake or cron! - Gets you up and running with your own daemon in under 2 minutes
243
+ summary: Rails 3 compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks to perform maintenance tasks in Rails apps. Scheduler Daemon is made specifically for your Rails app, and only loads the environment once, no matter how many tasks run. What's so great about it? Well, I'm glad you asked! - Only loads your Rails environment once on daemon start, not every time a task is run - Allows you to easily deploy the scheduled tasks with your Rails app instead of depending on an administrator to update crontab - It doesn't use rake or cron! - Gets you up and running with your own daemon in under 2 minutes
119
244
  test_files:
245
+ - spec/command_line_args_to_hash_spec.rb
120
246
  - spec/scheduled_tasks/session_cleaner_task_spec.rb
121
247
  - spec/scheduler_spec.rb
248
+ - spec/spec_helper.rb
data/.gitignore DELETED
@@ -1 +0,0 @@
1
- pkg
data/CHANGES DELETED
@@ -1,10 +0,0 @@
1
- Version 0.3.0
2
-
3
- add a default task to delete old AR sessions
4
-
5
- Version 0.2.0
6
-
7
- - syntax to load up only selected tasks for testing, by partial name:
8
-
9
- ruby daemons/bin/task_runner.rb run -- --only=toadcamp,newsfeed
10
-
@@ -1,25 +0,0 @@
1
- class SchedulerGenerator < Rails::Generator::Base
2
- def banner
3
- "Usage: #{$0} #{spec.name}"
4
- end
5
-
6
- def manifest
7
- record do |m|
8
- m.directory File.join('scheduler', 'bin')
9
- m.directory File.join('scheduler', 'lib', 'scheduled_tasks')
10
- m.directory File.join('scheduler', 'lib', 'scheduler')
11
-
12
- m.template 'bin/scheduler_daemon.rb', 'scheduler/bin/scheduler_daemon.rb'
13
- m.template 'bin/boot.rb', 'scheduler/bin/boot.rb'
14
-
15
- m.template 'lib/scheduler.rb', 'scheduler/lib/scheduler.rb'
16
- m.template 'lib/scheduler/scheduler_task.rb', 'scheduler/lib/scheduler/scheduler_task.rb'
17
- m.template 'lib/scheduler/hijack_puts.rb', 'scheduler/lib/scheduler/hijack_puts.rb'
18
- m.template 'lib/scheduler/exception_handler.rb', 'scheduler/lib/scheduler/exception_handler.rb'
19
-
20
- m.template 'lib/scheduled_tasks/session_cleaner_task.rb', 'scheduler/lib/scheduled_tasks/session_cleaner_task.rb'
21
-
22
- m.readme('README')
23
- end
24
- end
25
- end
@@ -1,8 +0,0 @@
1
-
2
- GREAT!
3
-
4
- Now that you've generated the scheduler daemon, try:
5
-
6
- script/generate scheduler_task Example
7
-
8
- and lets take a look at an example task!
@@ -1,10 +0,0 @@
1
- # load the environment, just once. yay!
2
- rails_root = File.expand_path(File.join(File.dirname(__FILE__), %w(.. ..)))
3
- daemons_lib_dir = File.expand_path(File.join(File.dirname(__FILE__), %w(.. lib)))
4
-
5
- Dir.chdir(rails_root)
6
-
7
- require 'config/environment'
8
- require File.join(daemons_lib_dir, 'scheduler')
9
-
10
- Scheduler::Base.new(ARGV)
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # USAGE:
3
- #
4
- # ruby scheduler/bin/scheduler_daemon.rb run -- start the daemon and stay on top
5
- # ruby scheduler/bin/scheduler_daemon.rb start -- start the daemon and stay on top
6
- # ruby scheduler/bin/scheduler_daemon.rb stop -- stop the daemon
7
- # ruby scheduler/bin/scheduler_daemon.rb restart -- stop the daemon and restart it afterwards
8
-
9
- require 'rubygems'
10
- require 'daemons'
11
-
12
- boot_scheduler = File.join(File.dirname(__FILE__), 'boot.rb')
13
- pid_dir = File.expand_path(File.join(File.dirname(__FILE__), %w(.. .. log)))
14
-
15
- FileUtils.mkdir_p(pid_dir) unless File.exist?(pid_dir)
16
-
17
- app_options = {
18
- :dir_mode => :normal,
19
- :dir => pid_dir,
20
- :multiple => false,
21
- :backtrace => true,
22
- :log_output => true
23
- }
24
-
25
- Daemons.run(boot_scheduler, app_options)
@@ -1,21 +0,0 @@
1
- class SessionCleanerTask < Scheduler::SchedulerTask
2
- environments :all
3
-
4
- every '1d', :first_at => Chronic.parse('2 am')
5
-
6
- def run
7
- puts "running the session cleaner"
8
- remove_old_sessions
9
- puts "old sessions are gone!"
10
- end
11
-
12
- def remove_old_sessions
13
- if ActionController::Base.session_store == ActiveRecord::SessionStore
14
- ActiveRecord::Base.connection.execute("DELETE FROM #{session_table_name} WHERE updated_at < '#{7.days.ago.to_s(:db)}'")
15
- end
16
- end
17
-
18
- def session_table_name
19
- ActiveRecord::Base.pluralize_table_names ? :sessions : :session
20
- end
21
- end