Sha256: ff9239d23f65b052bf3d6dd79d856fe7c5b5a151c7fdcd4edfa0180ca72f9b18

Contents?: true

Size: 852 Bytes

Versions: 4

Compression:

Stored size: 852 Bytes

Contents

require 'active_record_stats'

module ActiveRecordStats
  class SidekiqServerMiddleware
    def call(worker, job, queue)
      totals = {}

      gather_sql = ->(_name, _started_at, _finished_at, _unique_id, payload) {
        return if payload[:name] == 'SCHEMA' || payload[:sql].blank?
        return unless type = ActiveRecordStats.statement_type(payload[:sql])
        totals[type] ||= 0
        totals[type] += 1
      }

      sub = ActiveSupport::Notifications.subscribe('sql.active_record', &gather_sql)
      yield

    ensure
      ActiveSupport::Notifications.unsubscribe(sub)
      emit(worker.class.to_s, totals.dup)
    end

    private

    def emit(worker_name, totals)
      job = worker_name.underscore.gsub('/', '__')
      totals.each do |verb, count|
        StatsD.gauge "db.job.#{job}.#{verb}", count
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active_record_stats-0.1.6 lib/active_record_stats/sidekiq_server_middleware.rb
active_record_stats-0.1.5 lib/active_record_stats/sidekiq_server_middleware.rb
active_record_stats-0.1.4 lib/active_record_stats/sidekiq_server_middleware.rb
active_record_stats-0.1.3 lib/active_record_stats/sidekiq_server_middleware.rb