daemonizer 0.1.5 → 0.1.6

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/Rakefile CHANGED
@@ -5,7 +5,7 @@ begin
5
5
  require 'jeweler'
6
6
  Jeweler::Tasks.new do |gemspec|
7
7
  gemspec.name = "daemonizer"
8
- gemspec.summary = "Daemonizer allows you to easily create custom daemons on ruby. Supporting preforked and threaded models."
8
+ gemspec.summary = "Daemonizer allows you to easily create custom daemons on ruby. Supporting prefork model"
9
9
  gemspec.description = "Inspired by bundler and rack. Mostly built on top of Alexey Kovyrin's loops code. http://github.com/kovyrin/loops"
10
10
  gemspec.email = "glebpom@gmail.com"
11
11
  gemspec.homepage = "http://github.com/glebpom/daemonizer"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
data/daemonizer.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{daemonizer}
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gleb Pomykalov"]
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
44
44
  s.rdoc_options = ["--charset=UTF-8"]
45
45
  s.require_paths = ["lib"]
46
46
  s.rubygems_version = %q{1.3.7}
47
- s.summary = %q{Daemonizer allows you to easily create custom daemons on ruby. Supporting preforked and threaded models.}
47
+ s.summary = %q{Daemonizer allows you to easily create custom daemons on ruby. Supporting prefork model}
48
48
 
49
49
  if s.respond_to? :specification_version then
50
50
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -33,7 +33,6 @@ module Daemonizer
33
33
  def init_defaults
34
34
  @options[:before_init] ||= nil
35
35
  @options[:after_init] ||= nil
36
- @options[:engine] ||= :fork
37
36
  @options[:workers] ||= 1
38
37
  @options[:log_file] ||= "log/#{@pool}.log"
39
38
  @options[:poll_period] ||= 5
@@ -45,8 +44,6 @@ module Daemonizer
45
44
 
46
45
  def validate
47
46
  raise ConfigError, "Workers count should be more then zero" if @options[:workers] < 1
48
- raise ConfigError, "Engine #{@options[:engine]} is not known" unless [:fork, :thread].include?(@options[:engine])
49
-
50
47
  raise ConfigError, "Poll period should be more then zero" if @options[:poll_period] < 1
51
48
  if @options[:handler]
52
49
  raise ConfigError, "Handler should be a class" unless @options[:handler].is_a?(Class)
@@ -61,7 +58,7 @@ module Daemonizer
61
58
  end
62
59
  end
63
60
 
64
- [:engine, :workers, :poll_period, :root, :cow_friendly].each do |method|
61
+ [:workers, :poll_period, :root, :cow_friendly].each do |method|
65
62
  define_method method do
66
63
  @options[method.to_sym]
67
64
  end
@@ -44,11 +44,7 @@ class Daemonizer::Dsl
44
44
  def workers(num)
45
45
  @options[:workers] = num.to_i
46
46
  end
47
-
48
- def engine(name)
49
- @options[:engine] = name.to_sym
50
- end
51
-
47
+
52
48
  def before_init(&blk)
53
49
  @options[:before_init] = blk
54
50
  end
@@ -13,7 +13,7 @@ module Daemonizer
13
13
  def start_workers(&blk)
14
14
  raise ArgumentError, "Need a worker block!" unless block_given?
15
15
 
16
- @worker_pools[@config.pool] = WorkerPool.new(@config.pool, self, @config.engine, &blk)
16
+ @worker_pools[@config.pool] = WorkerPool.new(@config.pool, self, &blk)
17
17
  @worker_pools[@config.pool].start_workers(@config.workers)
18
18
  end
19
19
 
@@ -3,7 +3,7 @@ module Daemonizer
3
3
  attr_reader :name
4
4
  attr_reader :pid
5
5
 
6
- def initialize(name, pm, engine, worker_id, &blk)
6
+ def initialize(name, pm, worker_id, &blk)
7
7
  raise ArgumentError, "Need a worker block!" unless block_given?
8
8
 
9
9
  @name = name
@@ -23,80 +23,60 @@ module Daemonizer
23
23
 
24
24
  def run
25
25
  return if shutdown?
26
- if @engine == 'fork'
27
- @pid = Kernel.fork do
28
- Dir.chdir '/'
29
- File.umask 0000
26
+ @pid = Kernel.fork do
27
+ Dir.chdir '/'
28
+ File.umask 0000
30
29
 
31
- STDIN.reopen '/dev/null'
32
- STDOUT.reopen '/dev/null', 'a'
33
- STDERR.reopen STDOUT
34
-
35
- @pid = Process.pid
36
- GDC.set "#{@pid}/#{@worker_id}"
37
- normal_exit = false
38
- begin
39
- $0 = "#{@name} worker: instance #{@worker_id}\0"
40
- @worker_block.call(@worker_id)
41
- normal_exit = true
42
- exit(0)
43
- rescue Exception => e
44
- message = SystemExit === e ? "exit(#{e.status})" : e.to_s
45
- if SystemExit === e and e.success?
46
- if normal_exit
47
- logger.info("Worker finished: normal return")
48
- else
49
- logger.error("Worker exited: #{message} at #{e.backtrace.first}")
50
- end
30
+ STDIN.reopen '/dev/null'
31
+ STDOUT.reopen '/dev/null', 'a'
32
+ STDERR.reopen STDOUT
33
+
34
+ @pid = Process.pid
35
+ GDC.set "#{@pid}/#{@worker_id}"
36
+ normal_exit = false
37
+ begin
38
+ $0 = "#{@name} worker: instance #{@worker_id}\0"
39
+ @worker_block.call(@worker_id)
40
+ normal_exit = true
41
+ exit(0)
42
+ rescue Exception => e
43
+ message = SystemExit === e ? "exit(#{e.status})" : e.to_s
44
+ if SystemExit === e and e.success?
45
+ if normal_exit
46
+ logger.info("Worker finished: normal return")
51
47
  else
52
- logger.error("Worker exited with error: #{message}\n #{e.backtrace.join("\n ")}")
48
+ logger.error("Worker exited: #{message} at #{e.backtrace.first}")
53
49
  end
54
- logger.debug("Terminating #{@name} worker: #{@pid}")
50
+ else
51
+ logger.error("Worker exited with error: #{message}\n #{e.backtrace.join("\n ")}")
55
52
  end
53
+ logger.debug("Terminating #{@name} worker: #{@pid}")
56
54
  end
57
- elsif @engine == 'thread'
58
- @thread = Thread.start do
59
- @worker_block.call(@worker_id)
60
- end
61
- else
62
- raise ArgumentError, "Invalid engine name: #{@engine}"
63
55
  end
64
56
  rescue Exception => e
65
57
  logger.error("Exception from worker: #{e} at #{e.backtrace.first}")
66
58
  end
67
59
 
68
60
  def running?(verbose = false)
69
- if @engine == 'fork'
70
- return false unless @pid
71
- begin
72
- Process.waitpid(@pid, Process::WNOHANG)
73
- res = Process.kill(0, @pid)
74
- logger.debug("KILL(#{@pid}) = #{res}") if verbose
75
- return true
76
- rescue Errno::ESRCH, Errno::ECHILD, Errno::EPERM => e
77
- logger.error("Exception from kill: #{e} at #{e.backtrace.first}") if verbose
78
- return false
79
- end
80
- elsif @engine == 'thread'
81
- @thread && @thread.alive?
82
- else
83
- raise ArgumentError, "Invalid engine name: #{@engine}"
61
+ return false unless @pid
62
+ begin
63
+ Process.waitpid(@pid, Process::WNOHANG)
64
+ res = Process.kill(0, @pid)
65
+ logger.debug("KILL(#{@pid}) = #{res}") if verbose
66
+ return true
67
+ rescue Errno::ESRCH, Errno::ECHILD, Errno::EPERM => e
68
+ logger.error("Exception from kill: #{e} at #{e.backtrace.first}") if verbose
69
+ return false
84
70
  end
85
71
  end
86
72
 
87
73
  def stop(force = false)
88
- if @engine == 'fork'
89
- begin
90
- sig = force ? 'SIGKILL' : 'SIGTERM'
91
- logger.debug("Sending #{sig} to ##{@pid}")
92
- Process.kill(sig, @pid)
93
- rescue Errno::ESRCH, Errno::ECHILD, Errno::EPERM=> e
94
- logger.error("Exception from kill: #{e} at #{e.backtrace.first}")
95
- end
96
- elsif @engine == 'thread'
97
- force && !defined?(::JRuby) ? @thread.kill! : @thread.kill
98
- else
99
- raise ArgumentError, "Invalid engine name: #{@engine}"
74
+ begin
75
+ sig = force ? 'SIGKILL' : 'SIGTERM'
76
+ logger.debug("Sending #{sig} to ##{@pid}")
77
+ Process.kill(sig, @pid)
78
+ rescue Errno::ESRCH, Errno::ECHILD, Errno::EPERM=> e
79
+ logger.error("Exception from kill: #{e} at #{e.backtrace.first}")
100
80
  end
101
81
  end
102
82
  end
@@ -2,11 +2,10 @@ module Daemonizer
2
2
  class WorkerPool
3
3
  attr_reader :name, :logger
4
4
 
5
- def initialize(name, pm, engine, &blk)
5
+ def initialize(name, pm, &blk)
6
6
  @name = name
7
7
  @pm = pm
8
8
  @worker_block = blk
9
- @engine = engine
10
9
  @workers = []
11
10
  @logger = @pm.logger
12
11
  end
@@ -18,7 +17,7 @@ module Daemonizer
18
17
  def start_workers(number)
19
18
  logger.debug "Creating #{number} workers for #{name} pool..."
20
19
  number.times do |i|
21
- @workers << Worker.new(name, @pm, @engine, i+1, &@worker_block)
20
+ @workers << Worker.new(name, @pm, i+1, &@worker_block)
22
21
  end
23
22
  end
24
23
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daemonizer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 5
10
- version: 0.1.5
9
+ - 6
10
+ version: 0.1.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gleb Pomykalov
@@ -113,6 +113,6 @@ rubyforge_project:
113
113
  rubygems_version: 1.3.7
114
114
  signing_key:
115
115
  specification_version: 3
116
- summary: Daemonizer allows you to easily create custom daemons on ruby. Supporting preforked and threaded models.
116
+ summary: Daemonizer allows you to easily create custom daemons on ruby. Supporting prefork model
117
117
  test_files: []
118
118