puma_worker_killer 0.3.0 → 1.0.0

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: 57d35810e8f71f67c6c6a964e53a9d0880b9d6a8cfd03b06f736aee29dae9494
4
- data.tar.gz: 6b403245794f280c4c11e2ab9ef5ba7074055022da058599759f419394fb12b1
3
+ metadata.gz: 7cc84b48c93491e0384e8e3da30ec2c088dc432bdc12c95674774dbf98b4ed31
4
+ data.tar.gz: 3cff15a9511c75c29a37d5337af0a7dffd1b3a994d4b82cc64ccdee7d492542d
5
5
  SHA512:
6
- metadata.gz: 1a3d072a748058b192a0320cd17bd401a289a4ea0be1df2d0f7946eaaecaf97747b3b920cd502650bf6a55d4fe7457720888a6132155b02a0e30bb708e9bd5d7
7
- data.tar.gz: 9adfab59ed940a36eba60c123f3bbb25de11dd1717520df433671da45bb88ddbc6a12b4b1e7e3620e83acb5189399980accc27600f7c668e9fda438a5ae033cd
6
+ metadata.gz: ba1c2b5ee20e0d5f9c9e4b632b87d21cc2b484fe7efc2579ebe9220c6f231588f66361a2394495aa6898151e186ccb84ae740fe6835c108c6c35daed29e52acf
7
+ data.tar.gz: f9ba9f2249702222cef094be88022dc45382cc5361e18ebdf723ed361520b181c5669b879aef8fb2aaf1993d325a696d7c25d265f9e483d49bde14dcb9f29dfe
@@ -6,7 +6,9 @@ jobs:
6
6
  build:
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
- - uses: actions/checkout@v1
9
+ - uses: actions/checkout@v4
10
+ with:
11
+ fetch-depth: 0
10
12
  - name: Check that CHANGELOG is touched
11
13
  run: |
12
14
  cat $GITHUB_EVENT_PATH | jq .pull_request.title | grep -i '\[\(\(changelog skip\)\|\(ci skip\)\)\]' || git diff remotes/origin/${{ github.base_ref }} --name-only | grep CHANGELOG.md
@@ -0,0 +1,30 @@
1
+ name: CI
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ ruby:
14
+ - 3.1
15
+ - 3.2
16
+ - 3.3
17
+ - head
18
+ steps:
19
+ - name: Checkout code
20
+ uses: actions/checkout@v4
21
+ - name: Set up Ruby
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby }}
25
+ bundler-cache: true
26
+ - name: Ruby linting
27
+ run: bundle exec standardrb
28
+ - name: test
29
+ run: bundle exec rake test
30
+ continue-on-error: ${{ matrix.ruby == 'head' }}
data/.standard.yml ADDED
@@ -0,0 +1 @@
1
+ ruby_version: 3.1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## Main
2
2
 
3
+ ## 1.0.0
4
+
5
+ - Add `bigdecimal` as a dependency (https://github.com/zombocom/puma_worker_killer/pull/109)
6
+ - Ruby versions prior to 3.1 may no longer work (https://github.com/zombocom/puma_worker_killer/pull/109)
7
+
8
+ ## 0.3.1
9
+
10
+ - Relax puma dependency (#94)
11
+
3
12
  ## 0.3.0
4
13
 
5
14
  - Test on recent ruby versions #84
@@ -26,7 +35,7 @@
26
35
 
27
36
  ## 0.0.6
28
37
 
29
- - Log PID of worker insead of inspecting the worker #33
38
+ - Log PID of worker instead of inspecting the worker #33
30
39
 
31
40
  ## 0.0.5
32
41
 
data/Gemfile CHANGED
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'https://rubygems.org'
3
+ source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
6
 
7
- gem 'rubocop', require: false
7
+ # This is the last version which supports Ruby 2.3
8
+ gem "standard"
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Puma Worker Killer
2
2
 
3
- [![Build Status](https://travis-ci.org/schneems/puma_worker_killer.png?branch=master)](https://travis-ci.org/schneems/puma_worker_killer)
4
- [![Help Contribute to Open Source](https://www.codetriage.com/schneems/puma_worker_killer/badges/users.svg)](https://www.codetriage.com/schneems/puma_worker_killer)
3
+ [![CI](https://github.com/schneems/puma_worker_killer/actions/workflows/ci.yml/badge.svg)](https://github.com/schneems/puma_worker_killer/actions/workflows/ci.yml)
4
+ [![Help Contribute to Open Source](https://www.codetriage.com/zombocom/puma_worker_killer/badges/users.svg)](https://www.codetriage.com/zombocom/puma_worker_killer)
5
5
 
6
6
  ## !!!!!!!!!!!!!!!! STOP !!!!!!!!!!!!!!!!
7
7
 
@@ -9,7 +9,7 @@ Before you use this gem, know that it is dangerous. If you have a memory issue,
9
9
 
10
10
  This gem can also make your performance WORSE. When a worker is killed, and comes back it takes CPU cycles and time. If you are frequently restarting your workers then you're killing your performance.
11
11
 
12
- Here are some places to start improving your understanding of memory behvior in Ruby:
12
+ Here are some places to start improving your understanding of memory behavior in Ruby:
13
13
 
14
14
  - [Complete Guide to Rails Performance (Book)](https://www.railsspeed.com)
15
15
  - [How Ruby uses Memory](https://www.sitepoint.com/ruby-uses-memory/)
@@ -41,7 +41,7 @@ Then run `$ bundle install`
41
41
 
42
42
  ## Turn on Rolling Restarts - Heroku Mode
43
43
 
44
- A rolling restart will kill each of your workers on a rolling basis. You set the frequency which it conducts the restart. This is a simple way to keep memory down as Ruby web programs generally increase memory usage over time. If you're using Heroku [it is difficult to measure RAM from inside of a container accurately](https://github.com/schneems/get_process_mem/issues/7), so it is recommended to use this feature or use a [log-drain-based worker killer](https://github.com/arches/whacamole). You can enable roling restarts by running:
44
+ A rolling restart will kill each of your workers on a rolling basis. You set the frequency which it conducts the restart. This is a simple way to keep memory down as Ruby web programs generally increase memory usage over time. If you're using Heroku [it is difficult to measure RAM from inside of a container accurately](https://github.com/schneems/get_process_mem/issues/7), so it is recommended to use this feature or use a [log-drain-based worker killer](https://github.com/arches/whacamole). You can enable rolling restarts by running:
45
45
 
46
46
  ```ruby
47
47
  # config/puma.rb
data/Rakefile CHANGED
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler/gem_tasks'
3
+ require "bundler/gem_tasks"
4
4
 
5
- require 'rake'
6
- require 'rake/testtask'
5
+ require "rake"
6
+ require "rake/testtask"
7
7
 
8
- task :default => [:test]
8
+ task default: [:test]
9
9
 
10
10
  Rake::TestTask.new(:test) do |t|
11
- t.libs << 'lib'
12
- t.libs << 'test'
13
- t.pattern = 'test/**/*_test.rb'
11
+ t.libs << "lib"
12
+ t.libs << "test"
13
+ t.pattern = "test/**/*_test.rb"
14
14
  t.verbose = false
15
15
  end
@@ -4,7 +4,7 @@ module PumaWorkerKiller
4
4
  class AutoReap
5
5
  def initialize(timeout, reaper = Reaper.new)
6
6
  @timeout = timeout # seconds
7
- @reaper = reaper
7
+ @reaper = reaper
8
8
  @running = false
9
9
  end
10
10
 
@@ -3,7 +3,7 @@
3
3
  module PumaWorkerKiller
4
4
  class PumaMemory
5
5
  def initialize(master = nil)
6
- @master = master || get_master
6
+ @master = master || get_master
7
7
  @workers = nil
8
8
  end
9
9
 
@@ -55,7 +55,7 @@ module PumaWorkerKiller
55
55
  worker_memory = workers.values.inject(:+) || 0
56
56
  worker_memory + master_memory
57
57
  end
58
- alias get_total_memory get_total
58
+ alias_method :get_total_memory, :get_total
59
59
 
60
60
  def workers
61
61
  @workers || set_workers
@@ -71,11 +71,11 @@ module PumaWorkerKiller
71
71
  # sorted by memory ascending (smallest first, largest last)
72
72
  def set_workers
73
73
  workers = {}
74
- @master.instance_variable_get('@workers').each do |worker|
74
+ @master.instance_variable_get(:@workers).each do |worker|
75
75
  workers[worker] = GetProcessMem.new(worker.pid).mb
76
76
  end
77
77
  if workers.any?
78
- @workers = Hash[workers.sort_by { |_, mem| mem }]
78
+ @workers = workers.sort_by { |_, mem| mem }.to_h
79
79
  else
80
80
  {}
81
81
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PumaWorkerKiller
4
- VERSION = '0.3.0'
4
+ VERSION = "1.0.0"
5
5
  end
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'get_process_mem'
3
+ require "get_process_mem"
4
4
 
5
5
  module PumaWorkerKiller
6
6
  extend self
7
7
 
8
8
  attr_accessor :ram, :frequency, :percent_usage, :rolling_restart_frequency,
9
- :rolling_restart_splay_seconds,
10
- :reaper_status_logs, :pre_term, :rolling_pre_term, :on_calculation
9
+ :rolling_restart_splay_seconds,
10
+ :reaper_status_logs, :pre_term, :rolling_pre_term, :on_calculation
11
11
 
12
- self.ram = 512 # mb
13
- self.frequency = 10 # seconds
12
+ self.ram = 512 # mb
13
+ self.frequency = 10 # seconds
14
14
  self.percent_usage = 0.99 # percent of RAM to use
15
15
  self.rolling_restart_frequency = 6 * 3600 # 6 hours in seconds
16
16
  self.rolling_restart_splay_seconds = 0.0..300.0 # 0 to 5 minutes in seconds
@@ -33,15 +33,15 @@ module PumaWorkerKiller
33
33
  end
34
34
 
35
35
  def enable_rolling_restart(frequency = rolling_restart_frequency,
36
- splay_seconds = rolling_restart_splay_seconds)
36
+ splay_seconds = rolling_restart_splay_seconds)
37
37
  # Randomize so all workers don't restart at the exact same time across multiple machines.
38
38
  frequency += rand(splay_seconds)
39
39
  AutoReap.new(frequency, RollingRestart.new(nil, rolling_pre_term)).start
40
40
  end
41
41
  end
42
42
 
43
- require 'puma_worker_killer/puma_memory'
44
- require 'puma_worker_killer/reaper'
45
- require 'puma_worker_killer/rolling_restart'
46
- require 'puma_worker_killer/auto_reap'
47
- require 'puma_worker_killer/version'
43
+ require "puma_worker_killer/puma_memory"
44
+ require "puma_worker_killer/reaper"
45
+ require "puma_worker_killer/rolling_restart"
46
+ require "puma_worker_killer/auto_reap"
47
+ require "puma_worker_killer/version"
@@ -1,28 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('lib', __dir__)
3
+ lib = File.expand_path("lib", __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'puma_worker_killer/version'
5
+ require "puma_worker_killer/version"
6
6
 
7
7
  Gem::Specification.new do |gem|
8
- gem.name = 'puma_worker_killer'
9
- gem.version = PumaWorkerKiller::VERSION
10
- gem.authors = ['Richard Schneeman']
11
- gem.email = ['richard.schneeman+rubygems@gmail.com']
12
- gem.description = ' Kills pumas, the code kind '
13
- gem.summary = ' If you have a memory leak in your web code puma_worker_killer can keep it in check. '
14
- gem.homepage = 'https://github.com/schneems/puma_worker_killer'
15
- gem.license = 'MIT'
8
+ gem.name = "puma_worker_killer"
9
+ gem.version = PumaWorkerKiller::VERSION
10
+ gem.authors = ["Richard Schneeman"]
11
+ gem.email = ["richard.schneeman+rubygems@gmail.com"]
12
+ gem.description = " Kills pumas, the code kind "
13
+ gem.summary = " If you have a memory leak in your web code puma_worker_killer can keep it in check. "
14
+ gem.homepage = "https://github.com/schneems/puma_worker_killer"
15
+ gem.license = "MIT"
16
16
 
17
- gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
- gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
19
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
- gem.require_paths = ['lib']
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
19
+ gem.require_paths = ["lib"]
21
20
 
22
- gem.add_dependency 'get_process_mem', '~> 0.2'
23
- gem.add_dependency 'puma', '>= 2.7', '< 5'
24
- gem.add_development_dependency 'rack', '~> 2.0'
25
- gem.add_development_dependency 'rake', '~> 13.0'
26
- gem.add_development_dependency 'test-unit', '>= 0'
27
- gem.add_development_dependency 'wait_for_it', '~> 0.1'
21
+ gem.add_dependency "puma", ">= 2.7"
22
+ gem.add_dependency "bigdecimal", ">= 2.0"
23
+ gem.add_dependency "get_process_mem", ">= 0.2"
24
+
25
+ gem.add_development_dependency "rack", ">= 3.0"
26
+ gem.add_development_dependency "rake", ">= 13.0"
27
+ gem.add_development_dependency "rackup", ">= 2.1"
28
+ gem.add_development_dependency "test-unit", ">= 0"
29
+ gem.add_development_dependency "wait_for_it", ">= 0.1"
28
30
  end
data/test/fixtures/big.ru CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- load File.expand_path('fixture_helper.rb', __dir__)
3
+ load File.expand_path("fixture_helper.rb", __dir__)
4
4
 
5
5
  PumaWorkerKiller.start
6
6
 
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- load File.expand_path('../fixture_helper.rb', __dir__)
3
+ load File.expand_path("../fixture_helper.rb", __dir__)
4
4
 
5
5
  before_fork do
6
- require 'puma_worker_killer'
6
+ require "puma_worker_killer"
7
7
  PumaWorkerKiller.start
8
8
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- load File.expand_path('fixture_helper.rb', __dir__)
3
+ load File.expand_path("fixture_helper.rb", __dir__)
4
4
 
5
5
  PumaWorkerKiller.start
6
6
 
@@ -1,22 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'securerandom'
3
+ require "securerandom"
4
4
 
5
- require 'rack'
6
- require 'rack/server'
5
+ require "rack"
6
+ require "rackup/server"
7
7
 
8
- require 'puma_worker_killer'
8
+ require "puma_worker_killer"
9
9
 
10
10
  PumaWorkerKiller.config do |config|
11
- config.ram = Integer(ENV['PUMA_RAM']) if ENV['PUMA_RAM']
12
- config.frequency = Integer(ENV['PUMA_FREQUENCY']) if ENV['PUMA_FREQUENCY']
11
+ config.ram = Integer(ENV["PUMA_RAM"]) if ENV["PUMA_RAM"]
12
+ config.frequency = Integer(ENV["PUMA_FREQUENCY"]) if ENV["PUMA_FREQUENCY"]
13
13
  end
14
14
 
15
- puts "Frequency: #{PumaWorkerKiller.frequency}" if ENV['PUMA_FREQUENCY']
15
+ puts "Frequency: #{PumaWorkerKiller.frequency}" if ENV["PUMA_FREQUENCY"]
16
16
 
17
17
  class HelloWorld
18
18
  def response(_env)
19
- [200, {}, ['Hello World']]
19
+ [200, {}, ["Hello World"]]
20
20
  end
21
21
  end
22
22
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- load File.expand_path('fixture_helper.rb', __dir__)
3
+ load File.expand_path("fixture_helper.rb", __dir__)
4
4
 
5
5
  PumaWorkerKiller.config do |config|
6
6
  config.on_calculation = ->(usage) { puts("Current memory footprint: #{usage} mb") }
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- load File.expand_path('fixture_helper.rb', __dir__)
3
+ load File.expand_path("fixture_helper.rb", __dir__)
4
4
 
5
5
  PumaWorkerKiller.config do |config|
6
6
  config.pre_term = ->(worker) { puts("About to terminate worker: #{worker.inspect}") }
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- load File.expand_path('fixture_helper.rb', __dir__)
3
+ load File.expand_path("fixture_helper.rb", __dir__)
4
4
 
5
5
  PumaWorkerKiller.config do |config|
6
6
  config.rolling_pre_term = ->(worker) { puts("About to terminate (rolling) worker: #{worker.pid}") }
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- load File.expand_path('fixture_helper.rb', __dir__)
3
+ load File.expand_path("fixture_helper.rb", __dir__)
4
4
 
5
5
  PumaWorkerKiller.enable_rolling_restart(1, 0..5.0) # 1 second, short 1-5s splay.
6
6
 
@@ -1,60 +1,60 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'test_helper'
3
+ require "test_helper"
4
4
 
5
5
  class PumaWorkerKillerTest < Test::Unit::TestCase
6
6
  def test_starts
7
- port = 0 # http://stackoverflow.com/questions/200484/how-do-you-find-a-free-tcp-server-port-using-ruby
8
- command = "bundle exec puma #{fixture_path.join("default.ru")} -t 1:1 -w 2 --preload --debug -p #{port}"
9
- options = { wait_for: 'booted', timeout: 5, env: { 'PUMA_FREQUENCY' => 1 } }
7
+ port = 0 # http://stackoverflow.com/questions/200484/how-do-you-find-a-free-tcp-server-port-using-ruby
8
+ command = "bundle exec puma #{fixture_path.join("default.ru")} -t 1:1 -w 2 --preload --debug -p #{port}"
9
+ options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1}}
10
10
 
11
11
  WaitForIt.new(command, options) do |spawn|
12
- assert_contains(spawn, 'PumaWorkerKiller')
12
+ assert_contains(spawn, "PumaWorkerKiller")
13
13
  end
14
14
  end
15
15
 
16
16
  def test_without_preload
17
- port = 0 # http://stackoverflow.com/questions/200484/how-do-you-find-a-free-tcp-server-port-using-ruby
18
- command = "bundle exec puma #{fixture_path.join("default.ru")} -t 1:1 -w 2 --debug -p #{port} -C #{fixture_path.join("config/puma_worker_killer_start.rb")}"
19
- options = { wait_for: 'booted', timeout: 10, env: { 'PUMA_FREQUENCY' => 1 } }
17
+ port = 0 # http://stackoverflow.com/questions/200484/how-do-you-find-a-free-tcp-server-port-using-ruby
18
+ command = "bundle exec puma #{fixture_path.join("default.ru")} -t 1:1 -w 2 --debug -p #{port} -C #{fixture_path.join("config/puma_worker_killer_start.rb")}"
19
+ options = {wait_for: "booted", timeout: 10, env: {"PUMA_FREQUENCY" => 1}}
20
20
 
21
21
  WaitForIt.new(command, options) do |spawn|
22
- assert_contains(spawn, 'PumaWorkerKiller')
22
+ assert_contains(spawn, "PumaWorkerKiller")
23
23
  end
24
24
  end
25
25
 
26
26
  def test_kills_large_app
27
- file = fixture_path.join('big.ru')
28
- port = 0
29
- command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
30
- options = { wait_for: 'booted', timeout: 5, env: { 'PUMA_FREQUENCY' => 1, 'PUMA_RAM' => 1 } }
27
+ file = fixture_path.join("big.ru")
28
+ port = 0
29
+ command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
30
+ options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1, "PUMA_RAM" => 1}}
31
31
 
32
32
  WaitForIt.new(command, options) do |spawn|
33
- assert_contains(spawn, 'Out of memory')
33
+ assert_contains(spawn, "Out of memory")
34
34
  end
35
35
  end
36
36
 
37
37
  def test_pre_term
38
- file = fixture_path.join('pre_term.ru')
39
- port = 0
40
- command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
41
- options = { wait_for: 'booted', timeout: 5, env: { 'PUMA_FREQUENCY' => 1, 'PUMA_RAM' => 1 } }
38
+ file = fixture_path.join("pre_term.ru")
39
+ port = 0
40
+ command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
41
+ options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1, "PUMA_RAM" => 1}}
42
42
 
43
43
  WaitForIt.new(command, options) do |spawn|
44
- assert_contains(spawn, 'Out of memory')
45
- assert_contains(spawn, 'About to terminate worker:') # defined in pre_term.ru
44
+ assert_contains(spawn, "Out of memory")
45
+ assert_contains(spawn, "About to terminate worker:") # defined in pre_term.ru
46
46
  end
47
47
  end
48
48
 
49
49
  def test_on_calculation
50
- file = fixture_path.join('on_calculation.ru')
51
- port = 0
52
- command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
53
- options = { wait_for: 'booted', timeout: 5, env: { 'PUMA_FREQUENCY' => 1, 'PUMA_RAM' => 1 } }
50
+ file = fixture_path.join("on_calculation.ru")
51
+ port = 0
52
+ command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
53
+ options = {wait_for: "booted", timeout: 5, env: {"PUMA_FREQUENCY" => 1, "PUMA_RAM" => 1}}
54
54
 
55
55
  WaitForIt.new(command, options) do |spawn|
56
- assert_contains(spawn, 'Out of memory')
57
- assert_contains(spawn, 'Current memory footprint:') # defined in on_calculate.ru
56
+ assert_contains(spawn, "Out of memory")
57
+ assert_contains(spawn, "Current memory footprint:") # defined in on_calculate.ru
58
58
  end
59
59
  end
60
60
 
@@ -63,23 +63,23 @@ class PumaWorkerKillerTest < Test::Unit::TestCase
63
63
  end
64
64
 
65
65
  def test_rolling_restart
66
- file = fixture_path.join('rolling_restart.ru')
67
- port = 0
68
- command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
66
+ file = fixture_path.join("rolling_restart.ru")
67
+ port = 0
68
+ command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
69
69
  puts command.inspect
70
- options = { wait_for: 'booted', timeout: 15, env: {} }
70
+ options = {wait_for: "booted", timeout: 15, env: {}}
71
71
 
72
72
  WaitForIt.new(command, options) do |spawn|
73
- assert_contains(spawn, 'Rolling Restart')
73
+ assert_contains(spawn, "Rolling Restart")
74
74
  end
75
75
  end
76
76
 
77
77
  def test_rolling_restart_worker_kill_check
78
- file = fixture_path.join('rolling_restart.ru')
79
- port = 0
80
- command = "bundle exec puma #{file} -t 1:1 -w 1 --preload --debug -p #{port}"
78
+ file = fixture_path.join("rolling_restart.ru")
79
+ port = 0
80
+ command = "bundle exec puma #{file} -t 1:1 -w 1 --preload --debug -p #{port}"
81
81
  puts command.inspect
82
- options = { wait_for: 'booted', timeout: 120, env: {} }
82
+ options = {wait_for: "booted", timeout: 120, env: {}}
83
83
 
84
84
  WaitForIt.new(command, options) do |spawn|
85
85
  # at least 2 matches for TERM (so we set a timeout value longer - 120sec)
@@ -90,15 +90,15 @@ class PumaWorkerKillerTest < Test::Unit::TestCase
90
90
  end
91
91
 
92
92
  def test_rolling_pre_term
93
- file = fixture_path.join('rolling_pre_term.ru')
94
- port = 0
95
- command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
93
+ file = fixture_path.join("rolling_pre_term.ru")
94
+ port = 0
95
+ command = "bundle exec puma #{file} -t 1:1 -w 2 --preload --debug -p #{port}"
96
96
  puts command.inspect
97
- options = { wait_for: 'booted', timeout: 15, env: {} }
97
+ options = {wait_for: "booted", timeout: 15, env: {}}
98
98
 
99
99
  WaitForIt.new(command, options) do |spawn|
100
- assert_contains(spawn, 'Rolling Restart')
101
- assert_contains(spawn, 'About to terminate (rolling) worker:') # defined in rolling_pre_term.ru
100
+ assert_contains(spawn, "Rolling Restart")
101
+ assert_contains(spawn, "About to terminate (rolling) worker:") # defined in rolling_pre_term.ru
102
102
  end
103
103
  end
104
104
  end
data/test/test_helper.rb CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  Bundler.require
4
4
 
5
- require 'puma_worker_killer'
6
- require 'test/unit'
7
- require 'wait_for_it'
5
+ require "puma_worker_killer"
6
+ require "test/unit"
7
+ require "wait_for_it"
8
8
 
9
9
  def fixture_path
10
- Pathname.new(File.expand_path('fixtures', __dir__))
10
+ Pathname.new(File.expand_path("fixtures", __dir__))
11
11
  end
metadata CHANGED
@@ -1,77 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma_worker_killer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Schneeman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-26 00:00:00.000000000 Z
11
+ date: 2024-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: get_process_mem
14
+ name: puma
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.2'
19
+ version: '2.7'
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.2'
26
+ version: '2.7'
27
27
  - !ruby/object:Gem::Dependency
28
- name: puma
28
+ name: bigdecimal
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '2.7'
34
- - - "<"
35
- - !ruby/object:Gem::Version
36
- version: '5'
33
+ version: '2.0'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
38
  - - ">="
42
39
  - !ruby/object:Gem::Version
43
- version: '2.7'
44
- - - "<"
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: get_process_mem
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
45
53
  - !ruby/object:Gem::Version
46
- version: '5'
54
+ version: '0.2'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: rack
49
57
  requirement: !ruby/object:Gem::Requirement
50
58
  requirements:
51
- - - "~>"
59
+ - - ">="
52
60
  - !ruby/object:Gem::Version
53
- version: '2.0'
61
+ version: '3.0'
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
65
  requirements:
58
- - - "~>"
66
+ - - ">="
59
67
  - !ruby/object:Gem::Version
60
- version: '2.0'
68
+ version: '3.0'
61
69
  - !ruby/object:Gem::Dependency
62
70
  name: rake
63
71
  requirement: !ruby/object:Gem::Requirement
64
72
  requirements:
65
- - - "~>"
73
+ - - ">="
66
74
  - !ruby/object:Gem::Version
67
75
  version: '13.0'
68
76
  type: :development
69
77
  prerelease: false
70
78
  version_requirements: !ruby/object:Gem::Requirement
71
79
  requirements:
72
- - - "~>"
80
+ - - ">="
73
81
  - !ruby/object:Gem::Version
74
82
  version: '13.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rackup
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '2.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '2.1'
75
97
  - !ruby/object:Gem::Dependency
76
98
  name: test-unit
77
99
  requirement: !ruby/object:Gem::Requirement
@@ -90,14 +112,14 @@ dependencies:
90
112
  name: wait_for_it
91
113
  requirement: !ruby/object:Gem::Requirement
92
114
  requirements:
93
- - - "~>"
115
+ - - ">="
94
116
  - !ruby/object:Gem::Version
95
117
  version: '0.1'
96
118
  type: :development
97
119
  prerelease: false
98
120
  version_requirements: !ruby/object:Gem::Requirement
99
121
  requirements:
100
- - - "~>"
122
+ - - ">="
101
123
  - !ruby/object:Gem::Version
102
124
  version: '0.1'
103
125
  description: " Kills pumas, the code kind "
@@ -108,10 +130,11 @@ extensions: []
108
130
  extra_rdoc_files: []
109
131
  files:
110
132
  - ".github/workflows/check_changelog.yml"
133
+ - ".github/workflows/ci.yml"
111
134
  - ".gitignore"
112
135
  - ".rubocop.yml"
113
136
  - ".rubocop_todo.yml"
114
- - ".travis.yml"
137
+ - ".standard.yml"
115
138
  - CHANGELOG.md
116
139
  - Gemfile
117
140
  - README.md
@@ -152,19 +175,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
175
  - !ruby/object:Gem::Version
153
176
  version: '0'
154
177
  requirements: []
155
- rubygems_version: 3.1.2
178
+ rubygems_version: 3.5.9
156
179
  signing_key:
157
180
  specification_version: 4
158
181
  summary: If you have a memory leak in your web code puma_worker_killer can keep it
159
182
  in check.
160
- test_files:
161
- - test/fixtures/big.ru
162
- - test/fixtures/config/puma_worker_killer_start.rb
163
- - test/fixtures/default.ru
164
- - test/fixtures/fixture_helper.rb
165
- - test/fixtures/on_calculation.ru
166
- - test/fixtures/pre_term.ru
167
- - test/fixtures/rolling_pre_term.ru
168
- - test/fixtures/rolling_restart.ru
169
- - test/puma_worker_killer_test.rb
170
- - test/test_helper.rb
183
+ test_files: []
data/.travis.yml DELETED
@@ -1,23 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3.8
4
- - 2.4.10
5
- - 2.5.8
6
- - 2.6.6
7
- - 2.7.1
8
- - ruby-head
9
- - rbx
10
- before_install:
11
- - gem install bundler -v 1.12.5
12
-
13
- matrix:
14
- allow_failures:
15
- - rvm: ruby-head
16
- - rvm: rbx
17
-
18
- install:
19
- - bundle install
20
-
21
- script:
22
- - bundle exec rubocop
23
- - bundle exec rake test