puma-metrics 1.0.3 → 1.2.3

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
  SHA256:
3
- metadata.gz: 928e9a269150ae5bbdb5ab3932a809f31cbc5a3253d8ecf967d2e6b1ccd631ad
4
- data.tar.gz: 192cf711eb4eb79fa7eefc12828e7efa931994d733fb3d1debc3868f9a094117
3
+ metadata.gz: 6fb1638f837f58cc7271c53a1e90edbd39fbf377ea91ef82998f022b17e2131c
4
+ data.tar.gz: 79ebbb921b0f216a2e6109bc528970fc75a7d96e30e168558c19f3c99f4f28c9
5
5
  SHA512:
6
- metadata.gz: cae027e4e8ea4c942ad05190fd6ba1d331f02aa095d090f179ea47b1d2353c9a13015776c2fee6b8200d2298b4349efc047577418b0df4cdd86ecb0debd4dcfc
7
- data.tar.gz: c794a3c58ab4fee5c7a33060906ea75c597767adaaeea81da7379fda4dd667f9e3e3bf479c30f284b1bfcf5ae7cf7e1fdc0383d651dbfdb3eb8386d07892ad20
6
+ metadata.gz: cd3859499c8aa7e330dd709c23c44c94d64e72cb6d757a41400158f1762c510e023538b891572748129a495bacf84934e98c565ac5a4ad216485f42e06451168
7
+ data.tar.gz: b1bf8d06cbb8b0d2770e49694b2c9e03d875c43b3040a3a7f8dd5788def3bca0759313d59f24836b9ab0acd4534dc33c4c468d3eefc1e9b57eedd6af7ae5d263
data/.editorconfig ADDED
@@ -0,0 +1,10 @@
1
+ # editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ charset = utf-8
6
+ end_of_line = lf
7
+ indent_size = 2
8
+ indent_style = space
9
+ insert_final_newline = true
10
+ trim_trailing_whitespace = true
@@ -0,0 +1,41 @@
1
+ name: steps
2
+ on: [push]
3
+ jobs:
4
+ test:
5
+ name: test on ruby ${{ matrix.ruby }}
6
+ runs-on: ubuntu-latest
7
+ steps:
8
+ - uses: actions/checkout@master
9
+ - uses: actions/setup-ruby@master
10
+ with:
11
+ ruby-version: ${{ matrix.ruby }}
12
+ - run: gem install bundler
13
+ - run: bundle install
14
+ - run: bundle exec rake
15
+ - run: bundle exec overcommit --sign
16
+ - env:
17
+ GIT_AUTHOR_NAME: John Doe
18
+ GIT_AUTHOR_EMAIL: johndoe@example.com
19
+ run: bundle exec overcommit --run
20
+ strategy:
21
+ matrix:
22
+ ruby: ['2.6', '2.7', '3.0']
23
+ deploy:
24
+ if: github.ref == 'refs/heads/master'
25
+ name: to rubygems
26
+ needs: test
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - uses: actions/checkout@master
30
+ - uses: actions/setup-ruby@master
31
+ with:
32
+ ruby-version: 3.0
33
+ - env:
34
+ RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
35
+ run: |
36
+ mkdir -p $HOME/.gem
37
+ touch $HOME/.gem/credentials
38
+ chmod 0600 $HOME/.gem/credentials
39
+ printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials
40
+ gem build *.gemspec
41
+ gem push *.gem
data/.rubocop.yml CHANGED
@@ -1,18 +1,22 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.2
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.6
3
4
 
4
5
  Naming/FileName:
5
6
  Exclude:
6
7
  - puma-metrics.gemspec
7
8
 
8
- Metrics/LineLength:
9
+ Layout/LineLength:
9
10
  Max: 120
10
11
 
11
- Style/Documentation:
12
- Enabled: false
13
- Style/MethodMissingSuper:
12
+ Lint/MissingSuper:
14
13
  Exclude:
15
14
  - lib/puma/metrics/parser.rb
15
+
16
+ Style/Documentation:
17
+ Enabled: false
18
+ Style/NumericPredicate:
19
+ Enabled: false
16
20
  Style/MissingRespondToMissing:
17
21
  Exclude:
18
22
  - lib/puma/metrics/parser.rb
data/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 1.2.3
6
+
7
+ Housekeeping:
8
+ - Update dependencies
9
+
10
+ ## 1.2.2
11
+
12
+ Changes:
13
+ - Expose new metric `puma_requests_count` when using Puma 5
14
+
15
+ ## 1.2.1
16
+
17
+ Changes:
18
+ - Drop support for ruby 2.5
19
+
20
+ Housekeeping:
21
+ - Update dependencies
22
+ - Updates for Puma 5
23
+
24
+ ## 1.2.0
25
+
26
+ Changes:
27
+ - Drop support for ruby 2.4
28
+ - Relax prometheus-client to '>= 0.10'
29
+
30
+ Housekeeping:
31
+ - Update development dependencies
32
+
33
+ ## 1.1.0
34
+
35
+ Changes:
36
+ - Upgrade prometheus-client to '~> 0.10'
37
+
38
+ Housekeeping:
39
+ - Set target version to 2.6
40
+ - Added editorconfig
41
+
3
42
  ## 1.0.3
4
43
 
5
44
  Features:
data/Gemfile.lock CHANGED
@@ -1,45 +1,44 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- puma-metrics (1.0.3)
5
- prometheus-client (~> 0.8)
4
+ puma-metrics (1.2.2)
5
+ prometheus-client (>= 0.10)
6
6
  puma (>= 3.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- ast (2.4.0)
12
- childprocess (0.9.0)
13
- ffi (~> 1.0, >= 1.0.11)
14
- ffi (1.10.0)
15
- iniparse (1.4.4)
16
- jaro_winkler (1.5.2)
17
- minitest (5.11.3)
18
- nio4r (2.5.1)
19
- overcommit (0.47.0)
20
- childprocess (~> 0.6, >= 0.6.3)
11
+ ast (2.4.2)
12
+ childprocess (4.0.0)
13
+ iniparse (1.5.0)
14
+ minitest (5.14.4)
15
+ nio4r (2.5.7)
16
+ overcommit (0.57.0)
17
+ childprocess (>= 0.6.3, < 5)
21
18
  iniparse (~> 1.4)
22
- parallel (1.17.0)
23
- parser (2.6.2.1)
24
- ast (~> 2.4.0)
25
- prometheus-client (0.9.0)
26
- quantile (~> 0.2.1)
27
- psych (3.1.0)
28
- puma (4.1.1)
19
+ parallel (1.20.1)
20
+ parser (3.0.1.1)
21
+ ast (~> 2.4.1)
22
+ prometheus-client (2.1.0)
23
+ puma (5.3.1)
29
24
  nio4r (~> 2.0)
30
- quantile (0.2.1)
31
25
  rainbow (3.0.0)
32
- rake (12.3.2)
33
- rubocop (0.67.2)
34
- jaro_winkler (~> 1.5.1)
26
+ rake (13.0.3)
27
+ regexp_parser (2.1.1)
28
+ rexml (3.2.5)
29
+ rubocop (1.15.0)
35
30
  parallel (~> 1.10)
36
- parser (>= 2.5, != 2.5.1.1)
37
- psych (>= 3.1.0)
31
+ parser (>= 3.0.0.0)
38
32
  rainbow (>= 2.2.2, < 4.0)
33
+ regexp_parser (>= 1.8, < 3.0)
34
+ rexml
35
+ rubocop-ast (>= 1.5.0, < 2.0)
39
36
  ruby-progressbar (~> 1.7)
40
- unicode-display_width (>= 1.4.0, < 1.6)
41
- ruby-progressbar (1.10.0)
42
- unicode-display_width (1.5.0)
37
+ unicode-display_width (>= 1.4.0, < 3.0)
38
+ rubocop-ast (1.5.0)
39
+ parser (>= 3.0.1.1)
40
+ ruby-progressbar (1.11.0)
41
+ unicode-display_width (2.0.0)
43
42
 
44
43
  PLATFORMS
45
44
  ruby
@@ -53,4 +52,4 @@ DEPENDENCIES
53
52
  rubocop
54
53
 
55
54
  BUNDLED WITH
56
- 2.0.2
55
+ 2.2.15
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rake/testtask'
3
5
 
@@ -11,7 +13,7 @@ task :server do
11
13
  require 'puma'
12
14
  require 'puma/configuration'
13
15
  require 'puma/events'
14
- require 'puma/plugin/metrics.rb'
16
+ require 'puma/plugin/metrics'
15
17
 
16
18
  configuration = Puma::Configuration.new do |config|
17
19
  config.bind 'tcp://127.0.0.1:0'
@@ -23,7 +25,7 @@ task :server do
23
25
  end
24
26
  end
25
27
 
26
- events = Puma::Events.new STDOUT, STDERR
28
+ events = Puma::Events.new $stdout, $stderr
27
29
  launcher = Puma::Launcher.new(configuration, events: events)
28
30
  launcher.run
29
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'prometheus/client/formats/text'
3
5
  require 'puma/metrics/parser'
@@ -8,17 +10,26 @@ module Puma
8
10
  def initialize(launcher)
9
11
  @launcher = launcher
10
12
  clustered = (@launcher.options[:workers] || 0) > 0
11
- @parser = Parser.new clustered
13
+ @parser = Parser.new(clustered: clustered)
12
14
  end
13
15
 
14
16
  def call(_env)
15
- @parser.parse JSON.parse(@launcher.stats)
17
+ retrieve_and_parse_stats!
16
18
  [
17
19
  200,
18
20
  { 'Content-Type' => 'text/plain' },
19
21
  [Prometheus::Client::Formats::Text.marshal(Prometheus::Client.registry)]
20
22
  ]
21
23
  end
24
+
25
+ def retrieve_and_parse_stats!
26
+ puma_stats = @launcher.stats
27
+ if puma_stats.is_a?(Hash) # Modern Puma outputs stats as a Symbol-keyed Hash
28
+ @parser.parse(puma_stats)
29
+ else
30
+ @parser.parse(JSON.parse(puma_stats, symbolize_names: true))
31
+ end
32
+ end
22
33
  end
23
34
  end
24
35
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Puma
2
4
  class DSL
3
5
  def metrics_url(url)
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'prometheus/client'
2
4
 
3
5
  module Puma
4
6
  module Metrics
5
7
  class Parser
6
- def initialize(clustered = false)
8
+ def initialize(clustered: false)
7
9
  register_default_metrics
8
10
  register_clustered_metrics if clustered
9
11
  end
10
12
 
11
- def parse(stats, labels = {})
12
- stats.each do |key, value|
13
- value.each { |s| parse(s, labels.merge(index: s['index'])) } if key == 'worker_status'
14
- parse(value, labels) if key == 'last_status'
13
+ def parse(symbol_keyed_stats, labels = {})
14
+ symbol_keyed_stats.each do |key, value|
15
+ value.each { |s| parse(s, labels.merge(index: s[:index])) } if key == :worker_status
16
+ parse(value, labels) if key == :last_status
15
17
  update_metric(key, value, labels)
16
18
  end
17
19
  end
@@ -19,16 +21,38 @@ module Puma
19
21
  private
20
22
 
21
23
  def register_clustered_metrics
22
- registry.gauge(:puma_booted_workers, 'Number of booted workers').set({}, 1)
23
- registry.gauge(:puma_old_workers, 'Number of old workers').set({}, 0)
24
+ registry.gauge(:puma_booted_workers,
25
+ docstring: 'Number of booted workers')
26
+ .set(1)
27
+ registry.gauge(:puma_old_workers,
28
+ docstring: 'Number of old workers')
29
+ .set(0)
24
30
  end
25
31
 
26
- def register_default_metrics
27
- registry.gauge(:puma_backlog, 'Number of established but unaccepted connections in the backlog', index: 0)
28
- registry.gauge(:puma_running, 'Number of running worker threads', index: 0)
29
- registry.gauge(:puma_pool_capacity, 'Number of allocatable worker threads', index: 0)
30
- registry.gauge(:puma_max_threads, 'Maximum number of worker threads', index: 0)
31
- registry.gauge(:puma_workers, 'Number of configured workers').set({}, 1)
32
+ def register_default_metrics # rubocop:disable Metrics/MethodLength
33
+ registry.gauge(:puma_backlog,
34
+ docstring: 'Number of established but unaccepted connections in the backlog',
35
+ labels: [:index],
36
+ preset_labels: { index: 0 })
37
+ registry.gauge(:puma_running,
38
+ docstring: 'Number of running worker threads',
39
+ labels: [:index],
40
+ preset_labels: { index: 0 })
41
+ registry.gauge(:puma_pool_capacity,
42
+ docstring: 'Number of allocatable worker threads',
43
+ labels: [:index],
44
+ preset_labels: { index: 0 })
45
+ registry.gauge(:puma_max_threads,
46
+ docstring: 'Maximum number of worker threads',
47
+ labels: [:index],
48
+ preset_labels: { index: 0 })
49
+ registry.gauge(:puma_requests_count,
50
+ docstring: 'Number of processed requests',
51
+ labels: [:index],
52
+ preset_labels: { index: 0 })
53
+ registry.gauge(:puma_workers,
54
+ docstring: 'Number of configured workers')
55
+ .set(1)
32
56
  end
33
57
 
34
58
  def registry
@@ -38,7 +62,7 @@ module Puma
38
62
  def update_metric(key, value, labels)
39
63
  return if registry.get("puma_#{key}").nil?
40
64
 
41
- registry.get("puma_#{key}").set(labels, value)
65
+ registry.get("puma_#{key}").set(value, labels: labels)
42
66
  end
43
67
  end
44
68
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Puma
2
4
  module Metrics
3
- VERSION = '1.0.3'.freeze
5
+ VERSION = '1.2.3'
4
6
  end
5
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'puma/metrics/dsl'
2
4
 
3
5
  Puma::Plugin.create do
@@ -24,7 +26,9 @@ Puma::Plugin.create do
24
26
 
25
27
  launcher.events.register(:state) do |state|
26
28
  if %i[halt restart stop].include?(state)
29
+ # rubocop:disable Style/SoleNestedConditional
27
30
  metrics.stop(true) unless metrics.shutting_down?
31
+ # rubocop:enable Style/SoleNestedConditional
28
32
  end
29
33
  end
30
34
 
data/puma-metrics.gemspec CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
 
@@ -15,7 +17,9 @@ Gem::Specification.new do |spec|
15
17
 
16
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
19
 
18
- spec.add_runtime_dependency 'prometheus-client', '~> 0.8'
20
+ spec.required_ruby_version = '>= 2.6'
21
+
22
+ spec.add_runtime_dependency 'prometheus-client', '>= 0.10'
19
23
  spec.add_runtime_dependency 'puma', '>= 3.0'
20
24
 
21
25
  spec.add_development_dependency 'bundler'
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harm-Jan Blok
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-20 00:00:00.000000000 Z
11
+ date: 2021-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prometheus-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.8'
19
+ version: '0.10'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0.8'
26
+ version: '0.10'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: puma
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -114,9 +114,10 @@ executables: []
114
114
  extensions: []
115
115
  extra_rdoc_files: []
116
116
  files:
117
+ - ".editorconfig"
118
+ - ".github/workflows/workflow.yml"
117
119
  - ".overcommit.yml"
118
120
  - ".rubocop.yml"
119
- - ".travis.yml"
120
121
  - CHANGELOG.md
121
122
  - Gemfile
122
123
  - Gemfile.lock
@@ -141,15 +142,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
142
  requirements:
142
143
  - - ">="
143
144
  - !ruby/object:Gem::Version
144
- version: '0'
145
+ version: '2.6'
145
146
  required_rubygems_version: !ruby/object:Gem::Requirement
146
147
  requirements:
147
148
  - - ">="
148
149
  - !ruby/object:Gem::Version
149
150
  version: '0'
150
151
  requirements: []
151
- rubyforge_project:
152
- rubygems_version: 2.7.7
152
+ rubygems_version: 3.2.15
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: Puma plugin to export puma stats as prometheus metrics
data/.travis.yml DELETED
@@ -1,23 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4
4
- - 2.5
5
- - 2.6
6
- script:
7
- - bundle exec rake
8
- - bundle exec overcommit --sign
9
- - bundle exec overcommit --run
10
- before_install:
11
- - gem update --system
12
- - gem install bundler
13
- branches:
14
- only:
15
- - master
16
- deploy:
17
- provider: rubygems
18
- api_key:
19
- secure: WxQuGnHli0eOu/xYcO8fh8eK5sWxBQHwo5MaGhlZpdCvzELJ943gbfzhaZ7sK9okfLHPiY1uXYYA657KhlnDcrSLg16uI+HmPTi1RoKqQ3VmqQ6YoGhdl2GROlctCfHRO2iRuu7ujz9gf80OBH5ojHOwV+IrNsl911s6/4zhBY8uhFmdVb87zq1ZCPABNxanhlr0x51T6Q+JpdDW8c6FDGqUNtzqxEVMxS81tPhXnpDcUf/H0M8LOIQMyI21WyqUdo2vNqF6hCmRDogpZceJHtECboxgKoGJNEnOZdvAeX48Ysiu4O83Rq/mgBq30JBAgUe4TZPNwDjND+NJQktkzx/+IOJ+52G90VsJiUuBWsyh4IQKK+HqQr2CZyiEBybWU6FHCLifhuXfnOFA/VS2JNme16NiROrgrxoqtezbQ8yO8pgZ0PdtmL6hjBUknmZCyVDCdB1SPQGvo+b4AqkzY/SLuNCuJmOBBE5sMT6xFAiHU94rJViXMeJvF1pSQXIRFSuAQZ7ILOUC/GwqxIUmPk80p893itoFs3ExBPe2tBmzBVWyr+Dvu1SS2of+4JbBNbtOZr+nOT5pl7s4Zk4GG3b9UuozJn5yWi0Aj9iAju8T1r2tMpZ9zQtjrXtZJRi8ri8rQ2lC5ha63XLGGbDQon0bXs656GKKupaUS/BUboI=
20
- gem: puma-metrics
21
- on:
22
- repo: harmjanblok/puma-metrics
23
- rvm: 2.5