Class: Sidekiq::MemoryLogger::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq/memory_logger.rb

Instance Method Summary collapse

Constructor Details

#initialize(config = nil) ⇒ Middleware

Returns a new instance of Middleware.



50
51
52
# File 'lib/sidekiq/memory_logger.rb', line 50

def initialize(config = nil)
  @memory_logger_config = config || MemoryLogger.configuration
end

Instance Method Details

#call(worker_instance, job, queue) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/sidekiq/memory_logger.rb', line 54

def call(worker_instance, job, queue)
  return yield if should_skip_queue?(queue)

  start_mem = GetProcessMem.new.mb
  start_objects = GC.stat[:total_allocated_objects]

  begin
    yield
  ensure
    end_mem = GetProcessMem.new.mb
    end_objects = GC.stat[:total_allocated_objects]
    memory_diff = end_mem - start_mem
    objects_diff = end_objects - start_objects

    begin
      @memory_logger_config.callback.call(job["wrapped"] || job["class"], queue, memory_diff, objects_diff, job["args"])
    rescue => e
      @memory_logger_config.logger.error("Sidekiq memory logger callback failed: #{e.message}")
    end
  end
end