Sha256: 9b8165033390a43fa082de0e3574a0fd4b9f5f2a99b16489245a8bb6c53bab00
Contents?: true
Size: 1.21 KB
Versions: 4
Compression:
Stored size: 1.21 KB
Contents
require 'worker_killer/memory_limiter' require 'worker_killer/count_limiter' module WorkerKiller class DelayedJobPlugin attr_reader :limiter, :killer, :reaction def initialize(klass:, killer:, reaction: nil, **opts) @killer = killer @reaction = reaction || proc do |l, k, dj| k.kill(l.started_at, dj: dj) end @limiter = klass.new(**opts) @time_to_burn = false end def new(lifecycle = Delayed::Worker.lifecycle, *_args) configure_lifecycle(lifecycle) end def configure_lifecycle(lifecycle) # Count condition after every job lifecycle.after(:perform) do |worker, *_args| @time_to_burn = limiter.check end # Stop execution only after whole loop completed lifecycle.after(:loop) do |worker, *_args| reaction.call(limiter, killer, worker) if @time_to_burn end end class JobsLimiter < ::WorkerKiller::DelayedJobPlugin def initialize(**opts) super(klass: ::WorkerKiller::CountLimiter, **opts) end end class OOMLimiter < ::WorkerKiller::DelayedJobPlugin def initialize(**opts) super(klass: ::WorkerKiller::MemoryLimiter, **opts) end end end end
Version data entries
4 entries across 4 versions & 1 rubygems