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.
- 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
data/spec/scheduler_spec.rb
CHANGED
@@ -1,10 +1,21 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require 'scheduler_daemon/base'
|
2
3
|
|
3
4
|
describe Scheduler::Base do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|
-
|
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:
|
13
|
-
default_executable:
|
18
|
+
date: 2011-04-14 00:00:00 Z
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
46
|
+
version_requirements: *id002
|
47
|
+
name: eventmachine
|
48
|
+
prerelease: false
|
27
49
|
type: :runtime
|
28
|
-
|
29
|
-
|
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
|
-
|
35
|
-
|
36
|
-
|
62
|
+
version_requirements: *id003
|
63
|
+
name: daemons
|
64
|
+
prerelease: false
|
37
65
|
type: :runtime
|
38
|
-
|
39
|
-
|
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
|
-
|
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
|
-
|
49
|
-
|
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
|
-
|
55
|
-
|
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
|
-
-
|
65
|
-
-
|
185
|
+
- Gemfile
|
186
|
+
- Gemfile.lock
|
66
187
|
- MIT-LICENSE
|
67
188
|
- README.markdown
|
68
189
|
- Rakefile
|
69
190
|
- VERSION
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
-
|
78
|
-
- generators/scheduler/templates/
|
79
|
-
- generators/scheduler/templates/lib/
|
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
|
-
-
|
84
|
-
-
|
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/
|
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
|
-
-
|
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
|
-
|
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.
|
240
|
+
rubygems_version: 1.7.2
|
116
241
|
signing_key:
|
117
242
|
specification_version: 3
|
118
|
-
summary: Rails
|
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,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,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
|