dante 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NWJkYTJiOTVkOWY1OTYzMzFhNGFmMzIzZmM5YjI0NWMxMzIxY2UwYQ==
5
+ data.tar.gz: !binary |-
6
+ NTViMjBkMGYwYWM2ZDE2YjBlMzJiZWQ1YjFlZDU0OWM2YWUzODU4NQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MzIwNDBlMGNjY2Y0YmQwMjEzNzMzMjU4MmE4Y2ZkNDhhNTUwMDg5NmRlNWEy
10
+ ZDY3MWE5NjZiYTE4Y2U3NzFiZDA5ZmZmMWM4YTdkZGU0ZjBkMTI4MjEyMGFm
11
+ YjVhNTY1NjJhMjY4MjA0NmNjY2JjN2Q1MjdmNTNhMDZjMWQ3NWM=
12
+ data.tar.gz: !binary |-
13
+ YmQ4YTExNDIxYzc3YWUzNDA0MjBjMzUzYTcyMjI5NTY1OGM5YTQwOWJlYjZk
14
+ NThhNWRiYTM5ZmQ0MGVjOTlkNmVhZTgwOTM1ZWNhY2FjNjVjMWI2NmM5Mjhh
15
+ NmRlMzE3Y2JlMmQ5Yzg5YWMzOTAzNjg1MjJiYzg3NDc3MDY2NzU=
data/README.md CHANGED
@@ -65,12 +65,19 @@ This gives your binary several useful things for free:
65
65
 
66
66
  will start the app undaemonized in the terminal, handling trapping and stopping the process.
67
67
 
68
+ ```
69
+ ./bin/myapp -l /var/log/myapp.log
70
+ ```
71
+
72
+ will start the app undaemonized in the terminal and redirect all stdout and stderr to the specified logfile.
73
+
68
74
  ```
69
75
  ./bin/myapp -p 8080 -d -P /var/run/myapp.pid -l /var/log/myapp.log
70
76
  ```
71
77
 
72
78
  will daemonize and start the process, storing the pid in the specified pid file.
73
- All stdout and stderr will be redirected to the specified logfile.
79
+ All stdout and stderr will be redirected to the specified logfile. If no logfile is specified in daemon mode then all
80
+ stdout and stderr will be directed to /var/log/<myapp name>.log.
74
81
 
75
82
  ```
76
83
  ./bin/myapp -k -P /var/run/myapp.pid
@@ -104,6 +111,10 @@ runner.with_options do |opts|
104
111
  options[:test] = test
105
112
  end
106
113
  end
114
+ # Create validation hook for options
115
+ runner.verify_options_hook = lambda { |opts|
116
+ raise Exception.new("Must supply test parameter") if opts[:test].nil?
117
+ }
107
118
  # Parse command-line options and execute the process
108
119
  runner.execute do |opts|
109
120
  # opts: host, pid_path, port, daemonize, user, group
@@ -170,4 +181,4 @@ and that's all. Of course now you can also easily daemonize as well as start/sto
170
181
 
171
182
  ## Copyright
172
183
 
173
- Copyright © 2011 Nathan Esquenazi. See [LICENSE](https://github.com/bazaarlabs/dante/blob/master/LICENSE) for details.
184
+ Copyright © 2011 Nathan Esquenazi. See [LICENSE](https://github.com/bazaarlabs/dante/blob/master/LICENSE) for details.
@@ -18,7 +18,7 @@ module Dante
18
18
  class Runner
19
19
  MAX_START_TRIES = 5
20
20
 
21
- attr_accessor :options, :name, :description
21
+ attr_accessor :options, :name, :description, :verify_options_hook
22
22
 
23
23
  class << self
24
24
  def run(*args, &block)
@@ -50,6 +50,8 @@ module Dante
50
50
  parse_options
51
51
  self.options.merge!(opts)
52
52
 
53
+ @verify_options_hook.call(self.options) if @verify_options_hook
54
+
53
55
  if options.include?(:kill)
54
56
  self.stop
55
57
  else # create process
@@ -76,6 +78,10 @@ module Dante
76
78
  def daemonize
77
79
  return log("Process is already started") if self.daemon_running? # daemon already started
78
80
 
81
+ if !options[:log_path]
82
+ options[:log_path] = "/var/log/#{@name}.log"
83
+ end
84
+
79
85
  # Start process
80
86
  pid = fork do
81
87
  exit if fork
@@ -86,6 +92,7 @@ module Dante
86
92
  redirect_output!
87
93
  start
88
94
  end
95
+ Process.waitpid pid
89
96
  # Ensure process is running
90
97
  if until_true(MAX_START_TRIES) { self.daemon_running? }
91
98
  log "Daemon has started successfully"
@@ -99,6 +106,10 @@ module Dante
99
106
  def start
100
107
  log "Starting #{@name} service..."
101
108
 
109
+ if log_path = options[:log_path] && options[:daemonize].nil?
110
+ redirect_output!
111
+ end
112
+
102
113
  trap("INT") {
103
114
  interrupt
104
115
  exit
@@ -175,7 +186,7 @@ module Dante
175
186
  options[:daemonize] = v
176
187
  end
177
188
 
178
- opts.on("-l", "--log FILE", String, "Logfile for output") do |v|
189
+ opts.on("-l", "--log FILE", String, "Logfile for output", "(default: /var/log/#{@name}.log)") do |v|
179
190
  options[:log_path] = v
180
191
  end
181
192
 
@@ -1,3 +1,3 @@
1
1
  module Dante
2
- VERSION = "0.1.5"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,6 +1,25 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
3
  describe "dante runner" do
4
+
5
+ describe "verify options fails" do
6
+ it "should bubble up exception" do
7
+ runner = Dante::Runner.new('test-process', {key1:"val2"}) {
8
+ raise Exception.new("should not get here!!!")
9
+ }
10
+
11
+ runner.verify_options_hook = lambda { |opts|
12
+ raise Exception.new("Look for this exception") if(opts[:key1] != "val1")
13
+ }
14
+
15
+ err = assert_raises(Exception) {
16
+ runner.execute
17
+ }
18
+
19
+ assert_equal(err.message, "Look for this exception")
20
+ end
21
+ end
22
+
4
23
  describe "with no daemonize" do
5
24
  before do
6
25
  @process = TestingProcess.new('a')
metadata CHANGED
@@ -1,74 +1,64 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dante
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 5
10
- version: 0.1.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Nathan Esquenazi
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-06-22 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2013-12-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: rake
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
32
20
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: minitest
36
21
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
46
34
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: mocha
50
35
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
60
48
  type: :development
61
- version_requirements: *id003
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
62
55
  description: Turn any process into a demon.
63
- email:
56
+ email:
64
57
  - nesquena@gmail.com
65
58
  executables: []
66
-
67
59
  extensions: []
68
-
69
60
  extra_rdoc_files: []
70
-
71
- files:
61
+ files:
72
62
  - .gitignore
73
63
  - Gemfile
74
64
  - LICENSE
@@ -83,38 +73,28 @@ files:
83
73
  - test/test_helper.rb
84
74
  homepage: https://github.com/bazaarlabs/dante
85
75
  licenses: []
86
-
76
+ metadata: {}
87
77
  post_install_message:
88
78
  rdoc_options: []
89
-
90
- require_paths:
79
+ require_paths:
91
80
  - lib
92
- required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- hash: 3
98
- segments:
99
- - 0
100
- version: "0"
101
- required_rubygems_version: !ruby/object:Gem::Requirement
102
- none: false
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- hash: 3
107
- segments:
108
- - 0
109
- version: "0"
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
110
91
  requirements: []
111
-
112
92
  rubyforge_project: dante
113
- rubygems_version: 1.8.21
93
+ rubygems_version: 2.0.7
114
94
  signing_key:
115
- specification_version: 3
95
+ specification_version: 4
116
96
  summary: Turn any process into a demon
117
- test_files:
97
+ test_files:
118
98
  - test/dante_test.rb
119
99
  - test/runner_test.rb
120
100
  - test/test_helper.rb