Sha256: 73ba006526b2f6fff8e71271852ef349158f13fb3664b5e6650b4c3484310d38

Contents?: true

Size: 991 Bytes

Versions: 2

Compression:

Stored size: 991 Bytes

Contents

require 'a_r_q_logger/initializer'

module ARQLogger
  class << self
    attr_accessor :store, :instantiating

    def pass(event)
      return unless store

      payload = event.payload
      if payload[:name] && !ActiveRecord::LogSubscriber::IGNORE_PAYLOAD_NAMES.include?(payload[:name])
        store.push(event.duration)
      end
    end

    def instantiate
      self.instantiating += 1 if instantiating
    end

    def log(&block)
      start
      block.call
      finish
    end

    private

    def start
      self.store = []
      self.instantiating = 0
    end

    def finish
      logged = store
      instances = instantiating

      self.store = nil
      self.instantiating = nil

      Result.new(
        count: logged.size,
        msec: logged.sum.round(1),
        instances: instances
      )
    end
  end

  class Result < Struct.new(:count, :msec, :instances)
    def initialize(count:, msec:, instances:)
      super(count, msec, instances)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
a_r_q_logger-0.0.8 lib/a_r_q_logger.rb
a_r_q_logger-0.0.7 lib/a_r_q_logger.rb