foreverb 0.3.0.b → 0.3.0.c
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/.gitignore +2 -2
- data/Rakefile +2 -1
- data/examples/simple +3 -1
- data/lib/forever/base.rb +55 -29
- data/lib/forever/version.rb +1 -1
- metadata +3 -3
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -31,7 +31,8 @@ namespace :example do
|
|
31
31
|
desc "Run example #{name}"
|
32
32
|
task name, :fork do |t, args|
|
33
33
|
ENV['FORK'] = args[:fork]
|
34
|
-
|
34
|
+
log = File.expand_path("../log/#{name}.log", path)
|
35
|
+
exec "#{Gem.ruby} #{path} && sleep 5 && tail -f -n 150 #{log}; #{path} stop"
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
data/examples/simple
CHANGED
@@ -5,6 +5,7 @@ require 'forever'
|
|
5
5
|
|
6
6
|
Forever.run :fork => ENV['FORK'] do
|
7
7
|
dir File.expand_path('../', __FILE__) # Default is ../../__FILE__
|
8
|
+
queue 2
|
8
9
|
|
9
10
|
before :each do
|
10
11
|
puts 'before all'
|
@@ -15,7 +16,8 @@ Forever.run :fork => ENV['FORK'] do
|
|
15
16
|
end
|
16
17
|
|
17
18
|
every 1.seconds do
|
18
|
-
puts 'wait me 10 seconds'
|
19
|
+
puts 'wait me 10 seconds'
|
20
|
+
sleep 10
|
19
21
|
end
|
20
22
|
|
21
23
|
every 2.seconds do
|
data/lib/forever/base.rb
CHANGED
@@ -17,8 +17,8 @@ module Forever
|
|
17
17
|
|
18
18
|
# Setup directories
|
19
19
|
Dir.chdir(dir)
|
20
|
-
|
21
|
-
Dir.mkdir(tmp)
|
20
|
+
clean_tmp!
|
21
|
+
Dir.mkdir(tmp) unless File.exist?(tmp)
|
22
22
|
Dir.mkdir(File.dirname(log)) if log && !File.exist?(File.dirname(log))
|
23
23
|
|
24
24
|
write_config!
|
@@ -79,15 +79,16 @@ module Forever
|
|
79
79
|
@started_at = Time.now
|
80
80
|
|
81
81
|
# Invoke our before :all filters
|
82
|
-
|
82
|
+
filters[:before][:all].each { |block| safe_call(block) }
|
83
83
|
|
84
84
|
# Start deamons
|
85
85
|
until stopping?
|
86
86
|
current_queue = 1
|
87
|
-
jobs.
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
jobs.each do |job|
|
88
|
+
next unless job.time?(Time.now)
|
89
|
+
if queue && current_queue > queue
|
90
|
+
puts "\n\nThe queue limit has been exceeded. You are using #{current_queue} of #{queue} slots.\n\n"
|
91
|
+
on_limit_exceeded ? on_limit_exceeded.call : sleep(60)
|
91
92
|
break
|
92
93
|
end
|
93
94
|
if forking
|
@@ -102,13 +103,14 @@ module Forever
|
|
102
103
|
end
|
103
104
|
current_queue += 1
|
104
105
|
end
|
106
|
+
sleep 0.5
|
105
107
|
end
|
106
108
|
|
107
109
|
# Invoke our after :all filters
|
108
|
-
|
110
|
+
filters[:after][:all].each { |block| safe_call(block) }
|
109
111
|
|
110
112
|
# If we are here it means we are exiting so we can remove the pid and pending stop.txt
|
111
|
-
|
113
|
+
clean_tmp!
|
112
114
|
end
|
113
115
|
|
114
116
|
self
|
@@ -197,8 +199,8 @@ module Forever
|
|
197
199
|
if running?
|
198
200
|
pid_was = File.read(pid).to_i
|
199
201
|
print "[\e[90m%s\e[0m] Killing process \e[1m%d\e[0m...\n" % [name, pid_was]
|
200
|
-
|
201
|
-
|
202
|
+
filters[:after][:all].each { |block| safe_call(block) }
|
203
|
+
clean_tmp!
|
202
204
|
Process.kill(:KILL, pid_was)
|
203
205
|
else
|
204
206
|
print "[\e[90m%s\e[0m] Process with \e[1mnot found\e[0m" % name
|
@@ -227,6 +229,13 @@ module Forever
|
|
227
229
|
block_given? ? @_on_error = block : @_on_error
|
228
230
|
end
|
229
231
|
|
232
|
+
##
|
233
|
+
# Callback raised when queue limit was exceeded
|
234
|
+
#
|
235
|
+
def on_limit_exceeded(&block)
|
236
|
+
block_given? ? @_on_limit_exceeded = block : @_on_limit_exceeded
|
237
|
+
end
|
238
|
+
|
230
239
|
##
|
231
240
|
# Callback raised when at exit
|
232
241
|
#
|
@@ -262,32 +271,43 @@ module Forever
|
|
262
271
|
is_running
|
263
272
|
end
|
264
273
|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
alias :inspect :to_s
|
269
|
-
|
270
|
-
def config
|
271
|
-
{ :dir => dir, :file => file, :log => log, :pid => pid }
|
272
|
-
end
|
273
|
-
|
274
|
+
##
|
275
|
+
# Before :all or :each jobs hook
|
276
|
+
#
|
274
277
|
def before(filter, &block)
|
275
278
|
raise "Filter #{filter.inspect} not supported, available options are: :each, :all" unless [:each, :all].include?(filter)
|
276
|
-
|
279
|
+
filters[:before][filter] << block
|
277
280
|
end
|
278
281
|
|
282
|
+
##
|
283
|
+
# After :all or :each jobs hook
|
284
|
+
#
|
279
285
|
def after(filter, &block)
|
280
286
|
raise "Filter #{filter.inspect} not supported, available options are: :each, :all" unless [:each, :all].include?(filter)
|
281
|
-
|
287
|
+
filters[:after][filter] << block
|
282
288
|
end
|
283
289
|
|
284
|
-
|
285
|
-
|
286
|
-
|
290
|
+
##
|
291
|
+
# Return config of current worker in a hash
|
292
|
+
#
|
293
|
+
def config
|
294
|
+
{ :dir => dir, :file => file, :log => log, :pid => pid }
|
295
|
+
end
|
296
|
+
|
297
|
+
##
|
298
|
+
# Convert forever object in a readable string showing current config
|
299
|
+
#
|
300
|
+
def to_s
|
301
|
+
"#<Forever dir:#{dir}, file:#{file}, log:#{log}, pid:#{pid} jobs:#{jobs.size}>"
|
287
302
|
end
|
303
|
+
alias :inspect :to_s
|
288
304
|
|
289
|
-
|
290
|
-
|
305
|
+
private
|
306
|
+
def filters
|
307
|
+
@_filters ||= {
|
308
|
+
:before => { :each => [], :all => [] },
|
309
|
+
:after => { :each => [], :all => [] }
|
310
|
+
}
|
291
311
|
end
|
292
312
|
|
293
313
|
def stopping?
|
@@ -308,9 +328,9 @@ module Forever
|
|
308
328
|
def job_call(job)
|
309
329
|
return unless job.time?(Time.now)
|
310
330
|
job.run!
|
311
|
-
|
331
|
+
filters[:before][:each].each { |block| safe_call(block) }
|
312
332
|
safe_call(job)
|
313
|
-
|
333
|
+
filters[:after][:each].each { |block| safe_call(block) }
|
314
334
|
ensure
|
315
335
|
job.stop!
|
316
336
|
end
|
@@ -327,5 +347,11 @@ module Forever
|
|
327
347
|
def stop_txt
|
328
348
|
@_stop_txt ||= File.join(tmp, 'stop.txt')
|
329
349
|
end
|
350
|
+
|
351
|
+
def clean_tmp!
|
352
|
+
return unless File.exist?(tmp)
|
353
|
+
Dir[File.join(tmp, '*.job')].each { |f| FileUtils.rm_rf(f) }
|
354
|
+
FileUtils.rm_rf(pid)
|
355
|
+
end
|
330
356
|
end # Base
|
331
357
|
end # Forever
|
data/lib/forever/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreverb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 48
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 0.3.0.
|
10
|
+
- c
|
11
|
+
version: 0.3.0.c
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- DAddYE
|