warehouse_supervisor 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ CHANGELOG
2
+ =========
3
+
4
+ 0.0.2
5
+ -----
6
+ * Added rake rasks
7
+ * Output from supervisor in console instead of log files when run with `start`
8
+
9
+ 0.0.1
10
+ -----
11
+ * Initial release
data/README.md CHANGED
@@ -18,25 +18,37 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- There are 2 basic commands:
21
+ Warehouse Supervisor may be used either from its own CLI interface or from rake, both provide the same commands:
22
22
 
23
23
  ### print
24
24
 
25
25
  warehouse_supervisor print -g production -c config.yml processes.conf.erb
26
+
27
+ or
28
+
29
+ rake warehouse_supervisor:print WS_GROUP=production CONFIG=config.yml TEMPLATES=processes.conf.erb
26
30
 
27
- This will print your config file according to config.yml and processes.conf.erb
31
+ This will print the programs in config.yml, using the templates in processes.conf.erb.
32
+
33
+ Note that only [program:x] sections are printed. The result of this command is intended to be redirected to a file to be
34
+ [included in your main supervisord.conf file](http://supervisord.org/configuration.html#include-section-settings)
28
35
 
29
36
  ### start
30
37
 
31
38
  warehouse_supervisor start -g production -c config.yml processes.conf.erb
32
39
 
40
+ or
41
+
42
+ rake warehouse_supervisor:start WS_GROUP=production CONFIG=config.yml TEMPLATES=processes.conf.erb
43
+
44
+
33
45
  This will start a supervisor instance running in the foreground with the config you specified
34
46
 
35
47
  Both these commands take the following options:
36
48
 
37
- * --group | -g: Group to use
38
- * --config | -c: Definition file
39
- * --log-dir | -q (only in `start`): Log directory
49
+ * `--group | -g`, `WS_GROUP=` Group to use.
50
+ * `--config | -c`, `CONFIG=` Definition file.
51
+ * ` `, `TEMPLATES=` Templates file.
40
52
 
41
53
  ## Files
42
54
 
@@ -50,10 +62,10 @@ Warehouse Supervisor needs 2 files to work:
50
62
  This is an erb file where you'll define the different *program templates* that your app uses, for example:
51
63
 
52
64
  <% template :resque_web do %>
53
- user = <%= user || ENV["USER"] %>
54
- directory = <%=dir || ENV["RAILS_ROOT"]%>
55
- command = bundle exec resque-web -F -L -p 5678 config/resque_config.rb
56
- environment = HOME='<%=home || ENV["HOME"]%>',USER=<%=user || ENV["USER"]%>
65
+ user = <%= user || ENV["USER"] %>
66
+ directory = <%=dir || ENV["RAILS_ROOT"]%>
67
+ command = bundle exec resque-web -F -L -p 5678 config/resque_config.rb
68
+ environment = HOME='<%=home || ENV["HOME"]%>',USER=<%=user || ENV["USER"]%>
57
69
  <% end %>
58
70
 
59
71
  Each program template that you need will be define in a `template` block.
data/Rakefile CHANGED
@@ -1 +1,2 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'warehouse_supervisor/tasks'
@@ -1,5 +1,5 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require 'lib/warehouse_supervisor/warehouse_supervisor_cli'
3
+ require 'warehouse_supervisor/warehouse_supervisor_cli'
4
4
 
5
5
  WarehouseSupervisor::WarehouseSupervisorCli.start(ARGV)
@@ -23,3 +23,11 @@
23
23
  environment = HOME='<%=home || ENV["HOME"]%>',USER=<%=user || ENV["USER"]%>, RAILS_ENV=<%=rails_env || ENV["RAILS_ENV"]%>, VERBOSE=1
24
24
  <% end %>
25
25
 
26
+ <% template :ls do %>
27
+ user = <%= user || ENV["USER"] %>
28
+ directory = <%=dir || ENV["HOME"]%>
29
+ command = ls
30
+ environment = HOME='<%=home || ENV["HOME"]%>',USER=<%=user || ENV["USER"]%>
31
+ redirect_stderr = true
32
+ <% end %>
33
+
@@ -29,4 +29,8 @@ production:
29
29
  resque_web:
30
30
  template: resque_web
31
31
 
32
+ test:
33
+ ls:
34
+ template: ls
35
+
32
36
 
@@ -1,4 +1,5 @@
1
1
  require "warehouse_supervisor/version"
2
+ require "warehouse_supervisor/main"
2
3
 
3
4
  module WarehouseSupervisor
4
5
  # Your code goes here...
@@ -0,0 +1,46 @@
1
+ require 'yaml'
2
+ require 'tempfile'
3
+ require 'warehouse_supervisor/renderer'
4
+
5
+ module WarehouseSupervisor
6
+ class Main
7
+ def initialize(erb_file, options={})
8
+ @erb_file = erb_file
9
+ @options = options
10
+ end
11
+
12
+ def generate_contents
13
+ unless File.exist?(@options[:config])
14
+ STDERR.puts "Bad file '#{@options[:config]}'"
15
+ exit 1
16
+ end
17
+ unless File.exist?(@erb_file)
18
+ STDERR.puts "Bad file '#{@erb_file}'"
19
+ exit 1
20
+ end
21
+ definitions = YAML.load(File.read(@options[:config]))[@options[:group].to_s]
22
+ unless definitions
23
+ STDERR.puts "Bad group '#{@options[:group]}'"
24
+ exit 1
25
+ end
26
+ erb_content = File.read(@erb_file)
27
+ Renderer.new(definitions, erb_content).render
28
+ end
29
+
30
+ def start
31
+ Tempfile.open("supervisord.conf") do |f|
32
+ Tempfile.open("supervisord.log") do |l|
33
+ f.puts "[supervisord]"
34
+ f.puts "nodaemon = true"
35
+ f.puts "logfile = #{l.path}"
36
+ f.puts "loglevel = debug"
37
+ f.write self.generate_contents
38
+ f.flush
39
+ command = "supervisord -c '#{f.path}'"
40
+ puts command
41
+ exec command
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -12,6 +12,7 @@ module WarehouseSupervisor
12
12
  def render(program_name)
13
13
  program_definition = TemplateBinding.new(program_name, @definitions[program_name])
14
14
  ERB.new(@erb_content, nil, nil, "@output").result(program_definition.get_binding).gsub(/^$\n/, "").gsub(/^[\s]+/, "")
15
+ program_definition._output.gsub(/^$\n/, "").gsub(/^[\s]+/, "")
15
16
  end
16
17
  end
17
18
 
@@ -0,0 +1,22 @@
1
+ require 'warehouse_supervisor'
2
+
3
+ namespace :warehouse_supervisor do
4
+
5
+ def get_opts
6
+ erb_file = ENV['TEMPLATES'] || raise("required TEMPLATES file")
7
+ config_file = ENV['CONFIG']|| raise("required CONFIG file")
8
+ group = ENV['WS_GROUP'] || raise("required configuration WS_GROUP")
9
+ [erb_file, {:group => group, :config => config_file}]
10
+ end
11
+
12
+ desc "output the file acording to the config"
13
+ task :print do
14
+ puts WarehouseSupervisor::Main.new(*get_opts()).generate_contents
15
+ end
16
+
17
+ desc "start an undemonized supervisor with file"
18
+ task :start do
19
+ puts WarehouseSupervisor::Main.new(*get_opts()).start
20
+ end
21
+
22
+ end
@@ -1,6 +1,9 @@
1
1
  module WarehouseSupervisor
2
2
 
3
3
  class TemplateBinding
4
+
5
+ attr_reader :_output
6
+
4
7
  def initialize(program_name, hash)
5
8
  @program_name = program_name
6
9
  @template = hash["template"]
@@ -12,8 +15,9 @@ module WarehouseSupervisor
12
15
 
13
16
  def template(t)
14
17
  if @template == t.to_s
15
- @output << "[program:#{@program_name}]"
18
+ @output = "[program:#{@program_name}]"
16
19
  yield
20
+ @_output = @output.dup
17
21
  end
18
22
  end
19
23
 
@@ -1,3 +1,3 @@
1
1
  module WarehouseSupervisor
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,46 +1,19 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'yaml'
4
- require 'tempfile'
5
- require 'fileutils'
6
1
  require 'thor'
7
- require 'warehouse_supervisor/renderer'
2
+ require 'warehouse_supervisor'
8
3
 
9
4
  module WarehouseSupervisor
10
5
  class WarehouseSupervisorCli < Thor
11
- class_option :group, :aliases => :g, :default => "development"
6
+ class_option :group, :aliases => :g, :required => true
12
7
  class_option :config, :aliases => :c, :required => true
13
8
 
14
9
  desc "print file", "output the file acording to the config"
15
10
  def print(erb_file)
16
- puts generate_contents(options[:group], options[:config], erb_file)
11
+ puts WarehouseSupervisor::Main.new(erb_file, options).generate_contents
17
12
  end
18
13
 
19
14
  desc "start file", "start an undemonized supervisor with file"
20
- option :log_dir, :aliases => :q, :default => "log"
21
15
  def start(erb_file)
22
- Tempfile.open("supervisord.conf") do |f|
23
- log_dir = options[:log_dir]
24
- f.puts "[supervisord]"
25
- f.puts "logfile = #{File.join(log_dir, "supervisord.log")}"
26
- f.puts "childlogdir = #{log_dir}"
27
- f.puts "nodaemon = true"
28
- f.puts
29
- f.write generate_contents(options[:group], options[:config], erb_file)
30
- f.flush
31
- FileUtils.mkdir_p options[:log_dir]
32
- command = "supervisord -c '#{f.path}'"
33
- puts command
34
- exec command
35
- end
36
- end
37
-
38
- private
39
-
40
- def generate_contents(group, definitions_file, erb_file)
41
- definitions = YAML.load(File.read(definitions_file))[group.to_s]
42
- erb_content = File.read(erb_file)
43
- Renderer.new(definitions, erb_content).render
16
+ WarehouseSupervisor::Main.new(erb_file, options).start
44
17
  end
45
18
 
46
19
  end
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
1
  require 'yaml'
4
2
  require 'warehouse_supervisor/program_renderer'
5
3
 
@@ -34,4 +32,17 @@ describe ProgramRenderer do
34
32
  pr = ProgramRenderer.new(definitions["development"], erb_content).render("resque_web")
35
33
  pr.should_not include "^\s+"
36
34
  end
35
+
36
+ it "should not print stuff outside of the template" do
37
+ erb_content = %q{
38
+ I should not appear (upper)
39
+
40
+ <% template :tal do %>
41
+ awambabaluba
42
+ <% end %>
43
+
44
+ I should not appear (downer)
45
+ }
46
+ pr = ProgramRenderer.new({"cual" => {"template" => "tal"}}, erb_content).render("cual").should_not =~ /appear/
47
+ end
37
48
  end
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
1
  require 'yaml'
4
2
  require 'warehouse_supervisor/renderer'
5
3
 
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
1
  require 'yaml'
4
2
  require 'warehouse_supervisor/template_binding'
5
3
 
@@ -17,7 +17,6 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency 'rake'
21
20
  gem.add_dependency 'thor'
22
21
  gem.add_development_dependency 'rspec'
23
22
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warehouse_supervisor
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Diego Guerra
@@ -15,10 +15,10 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-04-28 00:00:00 Z
18
+ date: 2013-05-04 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: rake
21
+ name: thor
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
@@ -31,24 +31,10 @@ dependencies:
31
31
  version: "0"
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: thor
36
- 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"
46
- type: :runtime
47
- version_requirements: *id002
48
34
  - !ruby/object:Gem::Dependency
49
35
  name: rspec
50
36
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
52
38
  none: false
53
39
  requirements:
54
40
  - - ">="
@@ -58,7 +44,7 @@ dependencies:
58
44
  - 0
59
45
  version: "0"
60
46
  type: :development
61
- version_requirements: *id003
47
+ version_requirements: *id002
62
48
  description: Easily create and run supervisord configuration files
63
49
  email:
64
50
  - diego.guerra.suarez@gmail.com
@@ -70,6 +56,7 @@ extra_rdoc_files: []
70
56
 
71
57
  files:
72
58
  - .gitignore
59
+ - CHANGELOG.md
73
60
  - Gemfile
74
61
  - LICENSE.txt
75
62
  - README.md
@@ -78,8 +65,10 @@ files:
78
65
  - example/processes.conf.erb
79
66
  - example/warehouse_supervisor.yml
80
67
  - lib/warehouse_supervisor.rb
68
+ - lib/warehouse_supervisor/main.rb
81
69
  - lib/warehouse_supervisor/program_renderer.rb
82
70
  - lib/warehouse_supervisor/renderer.rb
71
+ - lib/warehouse_supervisor/tasks.rb
83
72
  - lib/warehouse_supervisor/template_binding.rb
84
73
  - lib/warehouse_supervisor/version.rb
85
74
  - lib/warehouse_supervisor/warehouse_supervisor_cli.rb