puma_worker_killer 0.3.1 → 1.0.0

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: 0152a1c3c914cc4c71b9244e52704e89d6c3b92eb501f995b3237510a7baccad
4
- data.tar.gz: a4c5a47dfd0bda390ffe32789e300bf04ebb98edcecd958a6e95742af8ae1bd1
3
+ metadata.gz: 7cc84b48c93491e0384e8e3da30ec2c088dc432bdc12c95674774dbf98b4ed31
4
+ data.tar.gz: 3cff15a9511c75c29a37d5337af0a7dffd1b3a994d4b82cc64ccdee7d492542d
5
5
  SHA512:
6
- metadata.gz: '049daa690327dcba057bd6e73cbf2834331017caac7d89b42fa92d391fe66e5207cbaed8662482d831f47a44abc78148866e1a9c257ebc19b013b9debb759ed0'
7
- data.tar.gz: cada28b7b006572aece408d384c9dc744167d8a03b9d5567097eb1521c37e307fa38d9416896304afbcefb273b8ccf3057230bb275ef975fb8797d7b438f802d
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,10 @@
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
+
3
8
  ## 0.3.1
4
9
 
5
10
  - Relax puma dependency (#94)
@@ -30,7 +35,7 @@
30
35
 
31
36
  ## 0.0.6
32
37
 
33
- - Log PID of worker insead of inspecting the worker #33
38
+ - Log PID of worker instead of inspecting the worker #33
34
39
 
35
40
  ## 0.0.5
36
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.1'
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'
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,71 +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.1
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-09-22 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'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '2.7'
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
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rack
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '2.0'
61
+ version: '3.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '2.0'
68
+ version: '3.0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '13.0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
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'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: test-unit
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -84,14 +112,14 @@ dependencies:
84
112
  name: wait_for_it
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - "~>"
115
+ - - ">="
88
116
  - !ruby/object:Gem::Version
89
117
  version: '0.1'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
- - - "~>"
122
+ - - ">="
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0.1'
97
125
  description: " Kills pumas, the code kind "
@@ -102,10 +130,11 @@ extensions: []
102
130
  extra_rdoc_files: []
103
131
  files:
104
132
  - ".github/workflows/check_changelog.yml"
133
+ - ".github/workflows/ci.yml"
105
134
  - ".gitignore"
106
135
  - ".rubocop.yml"
107
136
  - ".rubocop_todo.yml"
108
- - ".travis.yml"
137
+ - ".standard.yml"
109
138
  - CHANGELOG.md
110
139
  - Gemfile
111
140
  - README.md
@@ -146,19 +175,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
175
  - !ruby/object:Gem::Version
147
176
  version: '0'
148
177
  requirements: []
149
- rubygems_version: 3.1.2
178
+ rubygems_version: 3.5.9
150
179
  signing_key:
151
180
  specification_version: 4
152
181
  summary: If you have a memory leak in your web code puma_worker_killer can keep it
153
182
  in check.
154
- test_files:
155
- - test/fixtures/big.ru
156
- - test/fixtures/config/puma_worker_killer_start.rb
157
- - test/fixtures/default.ru
158
- - test/fixtures/fixture_helper.rb
159
- - test/fixtures/on_calculation.ru
160
- - test/fixtures/pre_term.ru
161
- - test/fixtures/rolling_pre_term.ru
162
- - test/fixtures/rolling_restart.ru
163
- - test/puma_worker_killer_test.rb
164
- - 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