Class: SidekiqProcessKiller::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq_process_killer/middleware.rb

Constant Summary collapse

LOG_PREFIX =
self.name
METRIC_PREFIX =
"sidekiq_process_killer".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#jidObject

Returns the value of attribute jid.



6
7
8
# File 'lib/sidekiq_process_killer/middleware.rb', line 6

def jid
  @jid
end

#memoryObject

Returns the value of attribute memory.



6
7
8
# File 'lib/sidekiq_process_killer/middleware.rb', line 6

def memory
  @memory
end

#pidObject

Returns the value of attribute pid.



6
7
8
# File 'lib/sidekiq_process_killer/middleware.rb', line 6

def pid
  @pid
end

#queueObject

Returns the value of attribute queue.



6
7
8
# File 'lib/sidekiq_process_killer/middleware.rb', line 6

def queue
  @queue
end

#workerObject

Returns the value of attribute worker.



6
7
8
# File 'lib/sidekiq_process_killer/middleware.rb', line 6

def worker
  @worker
end

Instance Method Details

#call(worker, job, queue) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/sidekiq_process_killer/middleware.rb', line 8

def call(worker, job, queue)
  yield

  @pid        = ::Process.pid
  @worker     = worker.class
  @queue      = queue
  @memory     = process_memory.mb
  @jid        = job['jid']

  memory_threshold = SidekiqProcessKiller.memory_threshold
  return if memory_threshold > memory

  send_signal("SIGTERM", pid)
  sleep 2
  log_warn("Breached RSS threshold at #{memory_threshold}. Sending TERM Signal.")
  increment_statsd({
    metric_name: "process.term.signal.sent",
    worker_name: worker.class,
    current_memory_usage: memory
  })
end