File: puma_worker_killer.rb

package info (click to toggle)
ruby-puma-worker-killer 0.3.1-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 228 kB
  • sloc: ruby: 283; makefile: 4
file content (47 lines) | stat: -rw-r--r-- 1,746 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# frozen_string_literal: true

require 'get_process_mem'

module PumaWorkerKiller
  extend self

  attr_accessor :ram, :frequency, :percent_usage, :rolling_restart_frequency,
                :rolling_restart_splay_seconds,
                :reaper_status_logs, :pre_term, :rolling_pre_term, :on_calculation

  self.ram           = 512  # mb
  self.frequency     = 10   # seconds
  self.percent_usage = 0.99 # percent of RAM to use
  self.rolling_restart_frequency = 6 * 3600 # 6 hours in seconds
  self.rolling_restart_splay_seconds = 0.0..300.0 # 0 to 5 minutes in seconds
  self.reaper_status_logs = true
  self.pre_term = nil
  self.rolling_pre_term = nil
  self.on_calculation = nil

  def config
    yield self
  end

  def reaper(ram = self.ram, percent_usage = self.percent_usage, reaper_status_logs = self.reaper_status_logs, pre_term = self.pre_term, on_calculation = self.on_calculation)
    Reaper.new(ram * percent_usage, nil, reaper_status_logs, pre_term, on_calculation)
  end

  def start(frequency = self.frequency, reaper = self.reaper)
    AutoReap.new(frequency, reaper).start
    enable_rolling_restart(rolling_restart_frequency) if rolling_restart_frequency
  end

  def enable_rolling_restart(frequency = rolling_restart_frequency,
                             splay_seconds = rolling_restart_splay_seconds)
    # Randomize so all workers don't restart at the exact same time across multiple machines.
    frequency += rand(splay_seconds)
    AutoReap.new(frequency, RollingRestart.new(nil, rolling_pre_term)).start
  end
end

require 'puma_worker_killer/puma_memory'
require 'puma_worker_killer/reaper'
require 'puma_worker_killer/rolling_restart'
require 'puma_worker_killer/auto_reap'
require 'puma_worker_killer/version'