daemons-rails 0.0.3 → 1.0.0

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/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/README CHANGED
@@ -11,6 +11,7 @@ Then insert your code in the lib/daemons/<name>.rb stub. All pids and logs will
11
11
 
12
12
  == CHANGES ==
13
13
 
14
+ 1.0.0 - changed api for Daemons::Rails::Monitoring, fixed path in template for script, improved documentation, added RSpec
14
15
  0.0.3 - added rake for running script without daemonization (rake daemon:<name>)
15
16
 
16
17
  == CONTROL ==
@@ -19,6 +20,27 @@ Individual control script:
19
20
  > ./lib/daemons/<name>_ctl [start|stop|restart|status]
20
21
  > rake daemon:<name>[:(start|stop|status)]
21
22
 
23
+ Examples:
24
+ rake daemon:test - runs lib/daemons/test.rb not daemonized
25
+ rake daemon:test:start - start daemon using lib/daemons/test_ctl start
26
+ rake daemon:test:stop - stop daemon using lib/daemons/test_ctl stop
27
+ rake daemon:test:status - show running status for daemon using lib/daemons/test_ctl status
28
+
22
29
  App-wide control script:
23
30
  > ./script/daemons [start|stop|restart]
24
- > rake daemons:(start|stop|status)
31
+ > rake daemons:(start|stop|status)
32
+
33
+ == MONITORING API ==
34
+
35
+ Daemons::Rails::Monitoring.statuses - hash with all daemons and corresponding statuses
36
+ Daemons::Rails::Monitoring.start("test.rb") - start daemon using lib/daemons/test_ctl start
37
+ Daemons::Rails::Monitoring.stop("test.rb") - start daemon using lib/daemons/test_ctl stop
38
+ Daemons::Rails::Monitoring.controllers - list of controllers
39
+ Daemons::Rails::Monitoring.controller("test.rb") - controller for test.rb application
40
+
41
+ controller = Daemons::Rails::Monitoring.controller("test.rb")
42
+ controller.path # => lib/daemons/test_ctl
43
+ controller.app_name # => test.rb
44
+ controller.start # => starts daemon
45
+ controller.stop # => stops daemon
46
+ controller.status # => :not_exists or :running
@@ -19,4 +19,5 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency 'daemons'
20
20
  gem.add_dependency 'multi_json', '~>1.0'
21
21
  gem.add_development_dependency "rake"
22
+ gem.add_development_dependency 'rspec', '~>2.7.0'
22
23
  end
@@ -0,0 +1,28 @@
1
+ module Daemons
2
+ module Rails
3
+ class Controller
4
+ attr_reader :path, :app_name
5
+
6
+ def initialize(controller_path)
7
+ @path = controller_path
8
+ @app_name = "#{controller_path.basename.to_s[0..-'_ctrl'.length]}.rb"
9
+ end
10
+
11
+ def run(command)
12
+ `#{path} #{command}`
13
+ end
14
+
15
+ def start
16
+ run('start')
17
+ end
18
+
19
+ def stop
20
+ run('stop')
21
+ end
22
+
23
+ def status
24
+ run('status').to_s.split("\n").last =~ /: running \[pid \d+\]$/ ? :running : :not_exists
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,4 +1,6 @@
1
1
  require "daemons"
2
+ require "daemons/rails/config"
3
+ require "daemons/rails/controller"
2
4
 
3
5
  module Daemons
4
6
  module Rails
@@ -11,33 +13,24 @@ module Daemons
11
13
  @daemons_directory ||= ::Rails.root.join('lib', 'daemons')
12
14
  end
13
15
 
14
- def self.application(app_name)
15
- group(app_name).applications.first
16
+ def self.controller(app_name)
17
+ controllers.find { |controller| controller.app_name == app_name }
16
18
  end
17
19
 
18
- # We do not cache group to be sure we have actual information about running applications
19
- def self.group(app_name)
20
- app_config = Daemons::Rails::Config.new(app_name, ::Rails.root)
21
- group = Daemons::ApplicationGroup.new("#{app_name}.rb", app_config.to_hash)
22
- group.setup
23
- group
20
+ def self.controllers
21
+ Pathname.glob(daemons_directory.join('*_ctl')).map { |path| Daemons::Rails::Controller.new(path) }
24
22
  end
25
23
 
26
- def self.groups
27
- groups = []
28
- daemons_directory.each_entry do |file|
29
- if !file.directory? && file.basename.to_s =~ /(\w+)_ctl/
30
- groups << group($1)
31
- end
32
- end
33
- groups
24
+ def self.statuses
25
+ controllers.each_with_object({}) { |controller, statuses| statuses[controller.app_name] = controller.status }
34
26
  end
35
27
 
36
- def self.status
37
- groups.each_with_object({}) do |group, statuses|
38
- app = group.applications.first
39
- statuses[group.app_name.sub(/\.rb$/, "")] = app && app.running? ? :running : :not_exists
40
- end
28
+ def self.start(app_name)
29
+ controller(app_name).start
30
+ end
31
+
32
+ def self.stop(app_name)
33
+ controller(app_name).stop
41
34
  end
42
35
  end
43
36
  end
@@ -1,5 +1,5 @@
1
1
  module Daemons
2
2
  module Rails
3
- VERSION = "0.0.3"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -3,7 +3,7 @@
3
3
  # You might want to change this
4
4
  ENV["RAILS_ENV"] ||= "production"
5
5
 
6
- require File.dirname(__FILE__) + "/../../config/environment"
6
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "environment"))
7
7
 
8
8
  $running = true
9
9
  Signal.trap("TERM") do
@@ -0,0 +1,6 @@
1
+ dir_mode: script
2
+ dir: "../../log"
3
+ multiple: false
4
+ backtrace: true
5
+ monitor: false
6
+ ontop: false
@@ -0,0 +1 @@
1
+ #Test script
@@ -0,0 +1 @@
1
+ # Test controller
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+ require "daemons/rails/monitoring"
3
+ require "ostruct"
4
+
5
+ describe Daemons::Rails::Monitoring do
6
+ subject { Daemons::Rails::Monitoring }
7
+
8
+ it "should get list of controllers" do
9
+ controllers = subject.controllers
10
+ controllers.should have(1).item
11
+ controller = controllers[0]
12
+ controller.path.should == Rails.root.join('lib', 'daemons', 'test_ctl')
13
+ controller.app_name.should == 'test.rb'
14
+ end
15
+
16
+ describe "using controllers" do
17
+ before :each do
18
+ @controller = Daemons::Rails::Controller.new(Rails.root.join('lib', 'daemons', 'test_ctl'))
19
+ subject.stub(:controllers).and_return([@controller])
20
+ end
21
+
22
+ it "should return status for all controllers" do
23
+ @controller.should_receive(:run).with('status').and_return('test.rb: running [pid 10880]')
24
+ subject.statuses.should == {'test.rb' => :running}
25
+ end
26
+
27
+ it "should start controller by name" do
28
+ @controller.should_receive(:run).with('start')
29
+ subject.start('test.rb')
30
+ end
31
+
32
+ it "should stop controller by name" do
33
+ @controller.should_receive(:run).with('stop')
34
+ subject.stop('test.rb')
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ class Rails
2
+ def Rails.root
3
+ @root ||= Pathname.new(File.absolute_path(File.dirname(__FILE__))).join('fixtures')
4
+ end
5
+ end
6
+
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daemons-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-16 00:00:00.000000000Z
12
+ date: 2012-01-13 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &7575200 !ruby/object:Gem::Requirement
16
+ requirement: &14263920 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *7575200
24
+ version_requirements: *14263920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: daemons
27
- requirement: &7574340 !ruby/object:Gem::Requirement
27
+ requirement: &14260740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *7574340
35
+ version_requirements: *14260740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: multi_json
38
- requirement: &7572640 !ruby/object:Gem::Requirement
38
+ requirement: &14257180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *7572640
46
+ version_requirements: *14257180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &7572060 !ruby/object:Gem::Requirement
49
+ requirement: &14233540 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,18 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *7572060
57
+ version_requirements: *14233540
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: &14228840 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 2.7.0
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *14228840
58
69
  description: daemons gem support for Rails 3
59
70
  email: []
60
71
  executables: []
@@ -62,6 +73,7 @@ extensions: []
62
73
  extra_rdoc_files: []
63
74
  files:
64
75
  - .gitignore
76
+ - .rspec
65
77
  - Gemfile
66
78
  - README
67
79
  - Rakefile
@@ -69,6 +81,7 @@ files:
69
81
  - install.rb
70
82
  - lib/daemons-rails.rb
71
83
  - lib/daemons/rails/config.rb
84
+ - lib/daemons/rails/controller.rb
72
85
  - lib/daemons/rails/monitoring.rb
73
86
  - lib/daemons/rails/version.rb
74
87
  - lib/generators/USAGE
@@ -78,6 +91,11 @@ files:
78
91
  - lib/generators/templates/script.rb
79
92
  - lib/generators/templates/script_ctl
80
93
  - lib/tasks/daemons.rake
94
+ - spec/fixtures/config/daemons.yml
95
+ - spec/fixtures/lib/daemons/test.rb
96
+ - spec/fixtures/lib/daemons/test_ctl
97
+ - spec/lib/daemons/rails/monitoring_spec.rb
98
+ - spec/spec_helper.rb
81
99
  homepage: ''
82
100
  licenses: []
83
101
  post_install_message:
@@ -92,7 +110,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
110
  version: '0'
93
111
  segments:
94
112
  - 0
95
- hash: 1511355952573857073
113
+ hash: -1263531604415930102
96
114
  required_rubygems_version: !ruby/object:Gem::Requirement
97
115
  none: false
98
116
  requirements:
@@ -101,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
119
  version: '0'
102
120
  segments:
103
121
  - 0
104
- hash: 1511355952573857073
122
+ hash: -1263531604415930102
105
123
  requirements: []
106
124
  rubyforge_project:
107
125
  rubygems_version: 1.8.10