puma-metrics 1.0.3 → 1.2.3

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.
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