puma-status 0.1.5 → 0.2

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/lib/core.rb +5 -6
  3. data/lib/helpers.rb +14 -3
  4. data/lib/puma-status.rb +24 -3
  5. metadata +17 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64511132fd67f2ec94455b13dd573b45e0bb7983efcd3f6dbcb12cf9dcddc8dd
4
- data.tar.gz: e8922a9d6e9ce2e47fc79cb50d835cc503053683f84f64e7c54656d3952b7944
3
+ metadata.gz: 46a19b27c114c23f83f652c395c9157d2581a0c688a42c2784c3660bef0f3277
4
+ data.tar.gz: 94a7a2cbee9aa0a082ddc38b61a32a4d2db3c3f8ad44a70b546a67b4a884dde8
5
5
  SHA512:
6
- metadata.gz: fc719fab589f2ce0ebb79dfad1b071256fa258b8633d61033f867843169e27c500442c62208bcda7aafe05017f7d95bddf818eb16442101aa90048317abdf867
7
- data.tar.gz: c77a65f3a8dd2381cb788b8e695938cc34c0a96b9b3a6829ac382eddf43ca090fe228660ab07b6d9d84a2cdf804eb77fa78e2611d8f7b0af3e048a1eb360c9f4
6
+ metadata.gz: f3b70ede2ef3c33c2436efe7da75faa5e858c5042572d07d26204487ea61a60d31cd2f9497502a5f8ae00bf00ecbdae0ac5ea6bceba1bfeec28036e9e18dc39c
7
+ data.tar.gz: f930e67b9deff2945d5f3a02c5635caf808b17a927527e533a3b7894e7b91ac59670c114c6fbb066a3be325fc9a78dc62cbfad12d26020a8e588b2a152d5e436
data/lib/core.rb CHANGED
@@ -42,19 +42,18 @@ def hydrate_stats(stats, puma_state, state_file_path)
42
42
  end
43
43
  end
44
44
 
45
- def display_stats(stats)
45
+ def format_stats(stats)
46
46
  master_line = "#{stats.pid} (#{stats.state_file_path}) Uptime: #{seconds_to_human(stats.uptime)} "
47
47
  master_line += "| Phase: #{stats.phase} " if stats.phase
48
48
  master_line += "| Load: #{color(75, 50, stats.load, asciiThreadLoad(stats.running_threads, stats.max_threads))}"
49
49
 
50
- puts master_line
51
-
52
- stats.workers.each do |wstats|
50
+ output = [master_line] + stats.workers.map do |wstats|
53
51
  worker_line = " └ #{wstats.pid.to_s.rjust(5, ' ')} CPU: #{color(75, 50, wstats.pcpu, wstats.pcpu.to_s.rjust(5, ' '))}% Mem: #{color(1000, 750, wstats.mem, wstats.mem.to_s.rjust(4, ' '))} MB Uptime: #{seconds_to_human(wstats.uptime)} | Load: #{color(75, 50, wstats.load, asciiThreadLoad(wstats.running_threads, wstats.max_threads))}"
54
52
  worker_line += " #{("Queue: " + wstats.backlog.to_s).colorize(:red)}" if wstats.backlog > 0
55
53
  worker_line += " Last checkin: #{wstats.last_checkin}" if wstats.last_checkin >= 10
56
54
  worker_line += " Phase: #{wstats.phase}" if wstats.phase != stats.phase
57
-
58
- puts worker_line
55
+ worker_line
59
56
  end
57
+
58
+ output.join("\n")
60
59
  end
data/lib/helpers.rb CHANGED
@@ -4,17 +4,28 @@ def debug(str)
4
4
  puts str if ENV.key?('DEBUG')
5
5
  end
6
6
 
7
- def color(critical, warn, value, str)
7
+ def warn(str)
8
+ colorize(str, :yellow)
9
+ end
10
+
11
+ def error(str)
12
+ colorize(str, :red)
13
+ end
14
+
15
+ def colorize(str, color_name)
8
16
  return str if ENV.key?('NO_COLOR')
17
+ str.to_s.colorize(color_name)
18
+ end
9
19
 
10
- color = if value >= critical
20
+ def color(critical, warn, value, str)
21
+ color_level = if value >= critical
11
22
  :red
12
23
  elsif value < critical && value >= warn
13
24
  :yellow
14
25
  else
15
26
  :green
16
27
  end
17
- str.to_s.colorize(color)
28
+ colorize(str, color_level)
18
29
  end
19
30
 
20
31
  def asciiThreadLoad(idx, total)
data/lib/puma-status.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require_relative './helpers'
2
2
  require_relative './core.rb'
3
+ require 'parallel'
3
4
 
4
5
  def run
5
6
  debug "puma-status"
@@ -10,8 +11,28 @@ def run
10
11
  exit -1
11
12
  end
12
13
 
13
- ARGV.each do |state_file_path|
14
- debug "State file: #{state_file_path}"
15
- display_stats(get_stats(state_file_path))
14
+ errors = []
15
+
16
+ outputs = Parallel.map(ARGV, in_threads: ARGV.count) do |state_file_path|
17
+ begin
18
+ debug "State file: #{state_file_path}"
19
+ format_stats(get_stats(state_file_path))
20
+ rescue Errno::ENOENT
21
+ errors << "#{warn(state_file_path)} doesn't exists"
22
+ nil
23
+ rescue Errno::EISDIR
24
+ errors << "#{warn(state_file_path)} isn't a state file"
25
+ nil
26
+ rescue => e
27
+ errors << "#{error(state_file_path)} an unhandled error occured: #{e.inspect}"
28
+ nil
29
+ end
30
+ end
31
+
32
+ outputs.compact.each { |output| puts output }
33
+
34
+ if errors.any?
35
+ puts ""
36
+ errors.each { |error| puts error }
16
37
  end
17
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma-status
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoann Lecuyer
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: parallel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -105,15 +119,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
119
  requirements:
106
120
  - - ">="
107
121
  - !ruby/object:Gem::Version
108
- version: '0'
122
+ version: 2.3.0
109
123
  required_rubygems_version: !ruby/object:Gem::Requirement
110
124
  requirements:
111
125
  - - ">="
112
126
  - !ruby/object:Gem::Version
113
127
  version: '0'
114
128
  requirements: []
115
- rubyforge_project:
116
- rubygems_version: 2.7.6
129
+ rubygems_version: 3.1.2
117
130
  signing_key:
118
131
  specification_version: 4
119
132
  summary: Command-line tool for puma to display information about running request/process