procodile 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 362a13aa9b06e4850e9b004e02cbfb5895bb54fe
4
- data.tar.gz: 05af226142d708e1764c4f2ac0cba68026d29a53
3
+ metadata.gz: 27d02f49619a2bed4bf6ea758c041de21c45a0a6
4
+ data.tar.gz: 185f7a035f673787062f20218fdfee23f14d0276
5
5
  SHA512:
6
- metadata.gz: '09418e90b2052c698bf9846ddcfc83701a50779f1bc6c488e693bc9db20d016fea0bdca558dac130587f55254c30ca1f094b0e8ff61e0c31d9218c1365986f13'
7
- data.tar.gz: 0f1eafdaf147330bc02f726b1346af937ab05eced950a6a1d6239ced6d4615110148256c7cbcb96611106fef96bdb5f67bcbd1adee26c99f5d1c95b01466bdec
6
+ metadata.gz: 84043a51c028bf6cd8e05cb07caa4639a0b8bc5c2acfae2889911561e5b221bb082cb77d9a7b1c12dc00acb286c5d5d96220e01212c9261d5c2f8169b848cd9c
7
+ data.tar.gz: 7bfa2f5d1d93f9aa244759acd064f4298392eb4b63763238e841fd9c607b51135d7482436f17a1c279e82d7985872f15dc1c4b8458e8d6e5c8f77a810eca75d6
data/bin/procodile CHANGED
@@ -40,6 +40,15 @@ begin
40
40
  opts.on("-r", "--root PATH", "The path to the root of your application") do |root|
41
41
  options[:root] = root
42
42
  end
43
+
44
+ opts.on("-e", "--environment NAME", "The config environment to use") do |name|
45
+ options[:environment] = name
46
+ end
47
+
48
+ opts.on("--procfile PATH", "The path to the Procfile (defaults to: Procfile)") do |path|
49
+ options[:procfile_path] = path
50
+ end
51
+
43
52
  if cli.class.commands[command.to_sym] && option_block = cli.class.commands[command.to_sym][:options]
44
53
  option_block.call(opts, cli)
45
54
  end
@@ -51,7 +60,7 @@ end
51
60
 
52
61
  begin
53
62
  if command != 'help'
54
- cli.config = Procodile::Config.new(options[:root] ? File.expand_path(options[:root]) : global_config['root'] || FileUtils.pwd)
63
+ cli.config = Procodile::Config.new(options[:root] ? File.expand_path(options[:root]) : global_config['root'] || FileUtils.pwd, options[:environment], options[:procfile_path])
55
64
  end
56
65
  cli.run(command)
57
66
  rescue Procodile::Error => e
data/lib/procodile/cli.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'fileutils'
2
2
  require 'procodile/version'
3
3
  require 'procodile/error'
4
+ require 'procodile/message'
4
5
  require 'procodile/supervisor'
5
6
  require 'procodile/signal_handler'
6
7
  require 'procodile/control_client'
@@ -45,12 +46,6 @@ module Procodile
45
46
  # Help
46
47
  #
47
48
 
48
- command def proxy
49
- require 'procodile/tcp_proxy'
50
- p = Procodile::TCPProxy.new(Supervisor.new(@config, {}))
51
- p.run
52
- end
53
-
54
49
  desc "Shows this help output"
55
50
  command def help
56
51
  puts "\e[45;37mWelcome to Procodile v#{Procodile::VERSION}\e[0m"
@@ -303,18 +298,34 @@ module Procodile
303
298
  opts.on("--json", "Return the status as a JSON hash") do
304
299
  cli.options[:json] = true
305
300
  end
301
+
302
+ opts.on("--simple", "Return overall status") do
303
+ cli.options[:simple] = true
304
+ end
306
305
  end
307
306
  command def status
308
307
  if supervisor_running?
309
308
  status = ControlClient.run(@config.sock_path, 'status')
310
309
  if @options[:json]
311
310
  puts status.to_json
311
+ elsif @options[:simple]
312
+ if status['messages'].empty?
313
+ message = status['instances'].map { |p,i| "#{p}[#{i.size}]" }
314
+ puts "OK || #{message.join(', ')}"
315
+ else
316
+ message = status['messages'].map { |p| Message.parse(p) }.join(', ')
317
+ puts "Issues || #{message}"
318
+ end
312
319
  else
313
320
  require 'procodile/status_cli_output'
314
321
  StatusCLIOutput.new(status).print_all
315
322
  end
316
323
  else
317
- raise Error, "Procodile supervisor isn't running"
324
+ if @options[:simple]
325
+ puts "NotRunning || Procodile supervisor isn't running"
326
+ else
327
+ raise Error, "Procodile supervisor isn't running"
328
+ end
318
329
  end
319
330
  end
320
331
 
@@ -8,9 +8,12 @@ module Procodile
8
8
  COLORS = [35, 31, 36, 32, 33, 34]
9
9
 
10
10
  attr_reader :root
11
+ attr_reader :environment
11
12
 
12
- def initialize(root)
13
+ def initialize(root, environment, procfile = nil)
13
14
  @root = root
15
+ @environment = environment || 'production'
16
+ @procfile = procfile
14
17
  unless File.exist?(procfile_path)
15
18
  raise Error, "Procfile not found at #{procfile_path}"
16
19
  end
@@ -56,7 +59,7 @@ module Procodile
56
59
  end
57
60
 
58
61
  def app_name
59
- @app_name ||= local_options['app_name'] || options['app_name'] || 'Procodile'
62
+ @app_name ||= fetch(local_options['app_name']) || fetch(options['app_name']) || 'Procodile'
60
63
  end
61
64
 
62
65
  def processes
@@ -88,19 +91,15 @@ module Procodile
88
91
  end
89
92
 
90
93
  def environment_variables
91
- (options['env'] || {}).merge(local_options['env'] || {})
92
- end
93
-
94
- def local_environment_variables
95
- @local_environment_variables ||= local_options['env'] || {}
94
+ fetch_hash_values(options['env'] || {}).merge(fetch_hash_values(local_options['env'] || {}))
96
95
  end
97
96
 
98
97
  def pid_root
99
- @pid_root ||= File.expand_path(local_options['pid_root'] || options['pid_root'] || 'pids', @root)
98
+ @pid_root ||= File.expand_path(fetch(local_options['pid_root']) || fetch(options['pid_root']) || 'pids', @root)
100
99
  end
101
100
 
102
101
  def log_path
103
- @log_path ||= File.expand_path(local_options['log_path'] || options['log_path'] || 'procodile.log', @root)
102
+ @log_path ||= File.expand_path(fetch(local_options['log_path']) || fetch(options['log_path']) || 'procodile.log', @root)
104
103
  end
105
104
 
106
105
  def sock_path
@@ -110,15 +109,15 @@ module Procodile
110
109
  private
111
110
 
112
111
  def procfile_path
113
- File.join(@root, 'Procfile')
112
+ @procfile_path || File.join(@root, 'Procfile')
114
113
  end
115
114
 
116
115
  def options_path
117
- File.join(@root, 'Procfile.options')
116
+ procfile_path + ".options"
118
117
  end
119
118
 
120
119
  def local_options_path
121
- File.join(@root, 'Procfile.local')
120
+ procfile_path + ".local"
122
121
  end
123
122
 
124
123
  def create_process(name, command, log_color)
@@ -127,5 +126,21 @@ module Procodile
127
126
  process
128
127
  end
129
128
 
129
+ def fetch(value, default = nil)
130
+ if value.is_a?(Hash)
131
+ value[@environment] || default
132
+ else
133
+ value || default
134
+ end
135
+ end
136
+
137
+ def fetch_hash_values(hash)
138
+ hash.each_with_object({}) do |(key, value), h|
139
+ if value = fetch(value)
140
+ h[key] = value
141
+ end
142
+ end
143
+ end
144
+
130
145
  end
131
146
  end
@@ -63,7 +63,9 @@ module Procodile
63
63
  processes = @supervisor.processes.keys.map(&:to_hash)
64
64
  result = {
65
65
  :version => Procodile::VERSION,
66
+ :messages => @supervisor.messages,
66
67
  :root => @supervisor.config.root,
68
+ :environment => @supervisor.config.environment,
67
69
  :app_name => @supervisor.config.app_name,
68
70
  :supervisor => @supervisor.to_hash,
69
71
  :instances => instances,
@@ -0,0 +1,13 @@
1
+ module Procodile
2
+ module Message
3
+ def self.parse(message)
4
+ case message['type']
5
+ when 'not_running'
6
+ "#{message['instance']} is not running (#{message['status']})"
7
+ when 'incorrect_quantity'
8
+ "#{message['process']} only has #{message['current']} instances (should have #{message['desired']})"
9
+ end
10
+ end
11
+ end
12
+ end
13
+
@@ -12,10 +12,11 @@ module Procodile
12
12
  attr_accessor :log_color
13
13
  attr_accessor :removed
14
14
 
15
- def initialize(config, name, command, options = {})
15
+ def initialize(config, name, command, environment, options = {})
16
16
  @config = config
17
17
  @name = name
18
18
  @command = command
19
+ @environment = environment
19
20
  @options = options
20
21
  @log_color = 0
21
22
  @instance_index = 0
@@ -1,3 +1,5 @@
1
+ require 'procodile/message'
2
+
1
3
  module Procodile
2
4
  class StatusCLIOutput
3
5
 
@@ -13,6 +15,7 @@ module Procodile
13
15
  def print_header
14
16
  puts "Procodile Version " + @status['version'].to_s.color(34)
15
17
  puts "Application Root " + "#{@status['root']}".color(34)
18
+ puts "Environment " + "#{@status['environment']}".color(34)
16
19
  puts "Supervisor PID " + "#{@status['supervisor']['pid']}".color(34)
17
20
  if time = @status['supervisor']['started_at']
18
21
  time = Time.at(time)
@@ -29,6 +32,12 @@ module Procodile
29
32
  puts " " + value.to_s
30
33
  end
31
34
  end
35
+ unless @status['messages'].empty?
36
+ puts
37
+ for message in @status['messages']
38
+ puts "\e[31m * #{Message.parse(message)}\e[0m"
39
+ end
40
+ end
32
41
  end
33
42
 
34
43
  def print_processes
@@ -29,6 +29,7 @@ module Procodile
29
29
 
30
30
  def start(&after_start)
31
31
  Procodile.log nil, "system", "Procodile supervisor started with PID #{::Process.pid}"
32
+ Procodile.log nil, "system", "Environment is #{@config.environment}"
32
33
  if @run_options[:respawn] == false
33
34
  Procodile.log nil, "system", "Automatic respawning is disabled"
34
35
  end
@@ -166,6 +167,21 @@ module Procodile
166
167
  }
167
168
  end
168
169
 
170
+ def messages
171
+ messages = []
172
+ processes.each do |process, process_instances|
173
+ if process.quantity != process_instances.size
174
+ messages << {:type => :incorrect_quantity, :process => process.name, :current => process_instances.size, :desired => process.quanaity}
175
+ end
176
+ for instance in process_instances
177
+ if instance.status != 'Running'
178
+ messages << {:type => :not_running, :instance => instance.description, :status => instance.status}
179
+ end
180
+ end
181
+ end
182
+ messages
183
+ end
184
+
169
185
  def add_reader(instance, io)
170
186
  @readers[io] = instance
171
187
  @signal_handler.notice
@@ -1,3 +1,3 @@
1
1
  module Procodile
2
- VERSION = '1.0.6'
2
+ VERSION = '1.0.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: procodile
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-27 00:00:00.000000000 Z
11
+ date: 2017-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -42,6 +42,7 @@ files:
42
42
  - lib/procodile/error.rb
43
43
  - lib/procodile/instance.rb
44
44
  - lib/procodile/logger.rb
45
+ - lib/procodile/message.rb
45
46
  - lib/procodile/process.rb
46
47
  - lib/procodile/signal_handler.rb
47
48
  - lib/procodile/status_cli_output.rb
@@ -68,9 +69,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
69
  version: '0'
69
70
  requirements: []
70
71
  rubyforge_project:
71
- rubygems_version: 2.5.2
72
+ rubygems_version: 2.5.1
72
73
  signing_key:
73
74
  specification_version: 4
74
75
  summary: This gem will help you run Ruby processes from a Procfile on Linux servers
75
76
  in the background.
76
77
  test_files: []
78
+ has_rdoc: