loop_dance 0.2.0 → 0.2.2
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 +1 -1
- data/Rakefile +8 -3
- data/VERSION +1 -1
- data/lib/loop_dance/commands.rb +11 -0
- data/lib/loop_dance/controller.rb +23 -6
- data/lib/loop_dance/dancer.rb +1 -3
- data/lib/loop_dance/railtie.rb +9 -8
- data/lib/loop_dance.rb +16 -9
- data/loop_dance.gemspec +22 -6
- data/tasks/loop_dance.rake +52 -0
- data/test/rails/Gemfile +4 -0
- metadata +81 -7
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -15,14 +15,19 @@ Jeweler::Tasks.new do |gem|
|
|
15
15
|
gem.name = "loop_dance"
|
16
16
|
gem.homepage = "http://github.com/dapi/loop_dance"
|
17
17
|
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{
|
19
|
-
|
18
|
+
gem.summary = %Q{Daemon builder and controller. Easy setup and managed from the rails application or rake tasks. Autostart at rails server startup} # ' anti ruby-mode
|
19
|
+
# Simple scheduler daemon. It's managed from ruby application or by rake tasks
|
20
|
+
gem.description = %Q{Really simple daemon builder and manager. Based on the looper and daemon_controller}
|
20
21
|
gem.email = "danil@orionet.ru"
|
21
22
|
gem.authors = ["Danil Pismenny"]
|
22
23
|
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
24
|
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
25
|
gem.add_runtime_dependency 'daemon_controller', '>= 0.2.5'
|
25
|
-
|
26
|
+
gem.add_runtime_dependency 'active_support', '>= 3.0'
|
27
|
+
gem.add_runtime_dependency 'i18n'
|
28
|
+
gem.add_development_dependency 'rspec'
|
29
|
+
gem.add_development_dependency 'jeweler'
|
30
|
+
gem.add_development_dependency 'shoulda'
|
26
31
|
end
|
27
32
|
Jeweler::RubygemsDotOrgTasks.new
|
28
33
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/lib/loop_dance/commands.rb
CHANGED
@@ -42,6 +42,17 @@ module LoopDance
|
|
42
42
|
def log(text)
|
43
43
|
puts "#{Time.now} #{self}: #{text}"
|
44
44
|
end
|
45
|
+
|
46
|
+
def print_status
|
47
|
+
puts "#{self}: timeout: #{self.timeout.inspect}, status: #{self.controller.running? ? 'running' : 'stopped'}\n"
|
48
|
+
if tasks.empty?
|
49
|
+
puts " no tasks defined"
|
50
|
+
else
|
51
|
+
tasks.each_with_index do |task,index|
|
52
|
+
puts " Task ##{index} runs every #{task.interval.inspect}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
45
56
|
|
46
57
|
private
|
47
58
|
|
@@ -38,18 +38,35 @@ module LoopDance
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
41
|
+
def safely_start
|
42
42
|
dancer.log "Starting.. (#{@start_command})"
|
43
|
-
|
43
|
+
if running?
|
44
|
+
dancer.log "Dancer is already running"
|
45
|
+
else
|
46
|
+
start
|
47
|
+
dancer.log "Started"
|
48
|
+
end
|
44
49
|
rescue => exception # DaemonController::StartTimeout
|
45
|
-
|
46
|
-
dancer.log exception.backtrace if defined?( Rails ) && !Rails.env.production?
|
50
|
+
log_exception exception
|
47
51
|
end
|
48
|
-
|
49
|
-
|
52
|
+
|
53
|
+
def safely_stop
|
54
|
+
dancer.log "Stopping.."
|
55
|
+
stop if running?
|
56
|
+
rescue => exception # DaemonController::StartTimeout
|
57
|
+
log_exception exception
|
58
|
+
end
|
59
|
+
|
50
60
|
#stop
|
51
61
|
#start
|
52
62
|
#running
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def log_exception( exception )
|
67
|
+
dancer.log "Exception until stopping #{dancer}: #{exception.inspect}"
|
68
|
+
dancer.log exception.backtrace if defined?( Rails ) && !Rails.env.production?
|
69
|
+
end
|
53
70
|
|
54
71
|
end
|
55
72
|
end
|
data/lib/loop_dance/dancer.rb
CHANGED
@@ -4,13 +4,11 @@ module LoopDance
|
|
4
4
|
|
5
5
|
autoload :Commands, 'loop_dance/commands'
|
6
6
|
autoload :Controller, 'loop_dance/controller'
|
7
|
-
|
7
|
+
|
8
8
|
class Dancer
|
9
9
|
|
10
|
-
|
11
10
|
extend LoopDance::Commands
|
12
11
|
|
13
|
-
|
14
12
|
class << self
|
15
13
|
|
16
14
|
# Can start daemon automatically at rails server startup? true by default
|
data/lib/loop_dance/railtie.rb
CHANGED
@@ -2,25 +2,26 @@ require 'rails'
|
|
2
2
|
module LoopDance
|
3
3
|
|
4
4
|
class Railtie < Rails::Railtie
|
5
|
-
|
6
|
-
initializer 'loop_dance.initialize', :after => :after_initialize do
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
LoopDance.auto_start if server_startup?
|
6
|
+
def self.load_dancers
|
7
|
+
require 'dancers'
|
11
8
|
end
|
12
9
|
|
13
|
-
|
14
|
-
|
10
|
+
initializer 'loop_dance.initialize' do
|
11
|
+
self.class.load_dancers
|
12
|
+
# Do not start dancers if rake or other tasks
|
13
|
+
LoopDance.start_all if server_startup?
|
15
14
|
end
|
16
15
|
|
16
|
+
|
17
17
|
# FIX: Is there more cute solution?
|
18
18
|
def server_startup?
|
19
19
|
caller.to_s=~/config\.ru/
|
20
20
|
end
|
21
21
|
|
22
22
|
rake_tasks do
|
23
|
-
|
23
|
+
load_dancers
|
24
|
+
load File.expand_path('../../../tasks/loop_dance.rake', __FILE__)
|
24
25
|
end
|
25
26
|
|
26
27
|
end
|
data/lib/loop_dance.rb
CHANGED
@@ -3,17 +3,24 @@ module LoopDance
|
|
3
3
|
autoload :Task, "loop_dance/task"
|
4
4
|
autoload :Dancer, "loop_dance/dancer"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
class << self
|
7
|
+
|
8
|
+
def start_all( force=false )
|
9
|
+
return puts "LoopDance: No dancers defined" if LoopDance::Dancer.subclasses.empty?
|
10
|
+
LoopDance::Dancer.subclasses.each do |dancer|
|
11
|
+
dancer.controller.safely_start if force || dancer.start_automatic
|
12
|
+
end
|
10
13
|
end
|
14
|
+
|
15
|
+
def stop_all
|
16
|
+
return puts "LoopDance: No dancers defined" if LoopDance::Dancer.subclasses.empty?
|
17
|
+
LoopDance::Dancer.subclasses.each do |dancer|
|
18
|
+
dancer.controller.safely_stop
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
11
22
|
end
|
12
23
|
|
13
24
|
end
|
14
25
|
|
15
|
-
|
16
|
-
require 'loop_dance/railtie'
|
17
|
-
rescue LoadError => e
|
18
|
-
puts "Can't load loop_dance/railtie"
|
19
|
-
end
|
26
|
+
require 'loop_dance/railtie' if defined? Rails
|
data/loop_dance.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{loop_dance}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Danil Pismenny"]
|
12
12
|
s.date = %q{2011-01-01}
|
13
|
-
s.description = %q{Really
|
13
|
+
s.description = %q{Really simple daemon builder and manager. Based on the looper and daemon_controller}
|
14
14
|
s.email = %q{danil@orionet.ru}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
"spec/dancer_spec.rb",
|
36
36
|
"spec/spec_helper.rb",
|
37
37
|
"spec/task_spec.rb",
|
38
|
+
"tasks/loop_dance.rake",
|
38
39
|
"test/rails/.gitignore",
|
39
40
|
"test/rails/Gemfile",
|
40
41
|
"test/rails/Rakefile",
|
@@ -77,7 +78,7 @@ Gem::Specification.new do |s|
|
|
77
78
|
s.licenses = ["MIT"]
|
78
79
|
s.require_paths = ["lib"]
|
79
80
|
s.rubygems_version = %q{1.3.7}
|
80
|
-
s.summary = %q{
|
81
|
+
s.summary = %q{Daemon builder and controller. Easy setup and managed from the rails application or rake tasks. Autostart at rails server startup}
|
81
82
|
s.test_files = [
|
82
83
|
"spec/dancer_spec.rb",
|
83
84
|
"spec/spec_helper.rb",
|
@@ -106,7 +107,7 @@ Gem::Specification.new do |s|
|
|
106
107
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
107
108
|
s.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
|
108
109
|
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
109
|
-
s.add_runtime_dependency(%q<daemon_controller>, [">= 0"])
|
110
|
+
s.add_runtime_dependency(%q<daemon_controller>, [">= 0.2.5"])
|
110
111
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
111
112
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
112
113
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
@@ -114,10 +115,15 @@ Gem::Specification.new do |s|
|
|
114
115
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
115
116
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
116
117
|
s.add_runtime_dependency(%q<daemon_controller>, [">= 0.2.5"])
|
118
|
+
s.add_runtime_dependency(%q<active_support>, [">= 3.0"])
|
119
|
+
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
120
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
121
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
122
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
117
123
|
else
|
118
124
|
s.add_dependency(%q<activesupport>, [">= 3.0"])
|
119
125
|
s.add_dependency(%q<i18n>, [">= 0"])
|
120
|
-
s.add_dependency(%q<daemon_controller>, [">= 0"])
|
126
|
+
s.add_dependency(%q<daemon_controller>, [">= 0.2.5"])
|
121
127
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
122
128
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
123
129
|
s.add_dependency(%q<rcov>, [">= 0"])
|
@@ -125,11 +131,16 @@ Gem::Specification.new do |s|
|
|
125
131
|
s.add_dependency(%q<rspec>, [">= 0"])
|
126
132
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
127
133
|
s.add_dependency(%q<daemon_controller>, [">= 0.2.5"])
|
134
|
+
s.add_dependency(%q<active_support>, [">= 3.0"])
|
135
|
+
s.add_dependency(%q<i18n>, [">= 0"])
|
136
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
137
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
138
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
128
139
|
end
|
129
140
|
else
|
130
141
|
s.add_dependency(%q<activesupport>, [">= 3.0"])
|
131
142
|
s.add_dependency(%q<i18n>, [">= 0"])
|
132
|
-
s.add_dependency(%q<daemon_controller>, [">= 0"])
|
143
|
+
s.add_dependency(%q<daemon_controller>, [">= 0.2.5"])
|
133
144
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
134
145
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
135
146
|
s.add_dependency(%q<rcov>, [">= 0"])
|
@@ -137,6 +148,11 @@ Gem::Specification.new do |s|
|
|
137
148
|
s.add_dependency(%q<rspec>, [">= 0"])
|
138
149
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
139
150
|
s.add_dependency(%q<daemon_controller>, [">= 0.2.5"])
|
151
|
+
s.add_dependency(%q<active_support>, [">= 3.0"])
|
152
|
+
s.add_dependency(%q<i18n>, [">= 0"])
|
153
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
154
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
155
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
140
156
|
end
|
141
157
|
end
|
142
158
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#require 'watchdog'
|
4
|
+
|
5
|
+
namespace :loop_dance do
|
6
|
+
|
7
|
+
task :loop_dance => :environment do
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Start (or restart) all dancers"
|
11
|
+
task :start_all => :loop_dance do
|
12
|
+
LoopDance.start_all
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Stop all dancers"
|
16
|
+
task :stop_all => :loop_dance do
|
17
|
+
LoopDance.stop_all
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Status of all dancers"
|
21
|
+
task :status => :loop_dance do
|
22
|
+
return puts "LoopDance: No dancers defined" if LoopDance::Dancer.subclasses.empty?
|
23
|
+
LoopDance::Dancer.subclasses.each do |dancer|
|
24
|
+
dancer.print_status
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
LoopDance::Dancer.subclasses.each do |dancer|
|
29
|
+
|
30
|
+
namespace dancer.name.underscore.to_sym do
|
31
|
+
|
32
|
+
desc "Start (or restart) all #{dancer}"
|
33
|
+
task :start => :loop_dance do
|
34
|
+
dancer.controller.safely_start
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Stop #{dancer}"
|
38
|
+
task :stop => :loop_dance do
|
39
|
+
dancer.controller.safely_stop
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "Status of #{dancer}"
|
43
|
+
task :status => :loop_dance do
|
44
|
+
dancer.print_status
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
data/test/rails/Gemfile
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loop_dance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Danil Pismenny
|
@@ -55,10 +55,12 @@ dependencies:
|
|
55
55
|
requirements:
|
56
56
|
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
hash:
|
58
|
+
hash: 29
|
59
59
|
segments:
|
60
60
|
- 0
|
61
|
-
|
61
|
+
- 2
|
62
|
+
- 5
|
63
|
+
version: 0.2.5
|
62
64
|
requirement: *id003
|
63
65
|
type: :runtime
|
64
66
|
- !ruby/object:Gem::Dependency
|
@@ -165,7 +167,78 @@ dependencies:
|
|
165
167
|
version: 0.2.5
|
166
168
|
requirement: *id010
|
167
169
|
type: :runtime
|
168
|
-
|
170
|
+
- !ruby/object:Gem::Dependency
|
171
|
+
prerelease: false
|
172
|
+
name: active_support
|
173
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
174
|
+
none: false
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
hash: 7
|
179
|
+
segments:
|
180
|
+
- 3
|
181
|
+
- 0
|
182
|
+
version: "3.0"
|
183
|
+
requirement: *id011
|
184
|
+
type: :runtime
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
prerelease: false
|
187
|
+
name: i18n
|
188
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
189
|
+
none: false
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
hash: 3
|
194
|
+
segments:
|
195
|
+
- 0
|
196
|
+
version: "0"
|
197
|
+
requirement: *id012
|
198
|
+
type: :runtime
|
199
|
+
- !ruby/object:Gem::Dependency
|
200
|
+
prerelease: false
|
201
|
+
name: rspec
|
202
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
hash: 3
|
208
|
+
segments:
|
209
|
+
- 0
|
210
|
+
version: "0"
|
211
|
+
requirement: *id013
|
212
|
+
type: :development
|
213
|
+
- !ruby/object:Gem::Dependency
|
214
|
+
prerelease: false
|
215
|
+
name: jeweler
|
216
|
+
version_requirements: &id014 !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ">="
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
hash: 3
|
222
|
+
segments:
|
223
|
+
- 0
|
224
|
+
version: "0"
|
225
|
+
requirement: *id014
|
226
|
+
type: :development
|
227
|
+
- !ruby/object:Gem::Dependency
|
228
|
+
prerelease: false
|
229
|
+
name: shoulda
|
230
|
+
version_requirements: &id015 !ruby/object:Gem::Requirement
|
231
|
+
none: false
|
232
|
+
requirements:
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
hash: 3
|
236
|
+
segments:
|
237
|
+
- 0
|
238
|
+
version: "0"
|
239
|
+
requirement: *id015
|
240
|
+
type: :development
|
241
|
+
description: Really simple daemon builder and manager. Based on the looper and daemon_controller
|
169
242
|
email: danil@orionet.ru
|
170
243
|
executables: []
|
171
244
|
|
@@ -193,6 +266,7 @@ files:
|
|
193
266
|
- spec/dancer_spec.rb
|
194
267
|
- spec/spec_helper.rb
|
195
268
|
- spec/task_spec.rb
|
269
|
+
- tasks/loop_dance.rake
|
196
270
|
- test/rails/.gitignore
|
197
271
|
- test/rails/Gemfile
|
198
272
|
- test/rails/Rakefile
|
@@ -263,7 +337,7 @@ rubyforge_project:
|
|
263
337
|
rubygems_version: 1.3.7
|
264
338
|
signing_key:
|
265
339
|
specification_version: 3
|
266
|
-
summary:
|
340
|
+
summary: Daemon builder and controller. Easy setup and managed from the rails application or rake tasks. Autostart at rails server startup
|
267
341
|
test_files:
|
268
342
|
- spec/dancer_spec.rb
|
269
343
|
- spec/spec_helper.rb
|