Last active
March 23, 2022 09:40
-
-
Save kares/e36a4d992e978059eb5f4f470cface41 to your computer and use it in GitHub Desktop.
Revisions
-
kares revised this gist
Nov 21, 2016 . 1 changed file with 7 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -2,8 +2,13 @@ class SlowQueryLog < ActiveSupport::LogSubscriber if Rails.configuration.respond_to?(:slow_query_log_threshold_in_ms) if @@threshold = Rails.configuration.slow_query_log_threshold_in_ms @@threshold = @@threshold.to_i == 0 ? nil : @@threshold.to_i end else @@threshold = nil end def sql(event) return unless duration_ms = event.duration -
kares revised this gist
Nov 21, 2016 . No changes.There are no files selected for viewing
-
kares created this gist
Nov 21, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,41 @@ require 'active_record/log_subscriber' class SlowQueryLog < ActiveSupport::LogSubscriber @@threshold = Rails.configuration.slow_query_log_threshold_in_ms @@threshold = @@threshold.to_i == 0 ? nil : @@threshold.to_i if @@threshold def sql(event) return unless duration_ms = event.duration return if ! @@threshold || @@threshold > duration_ms payload = event.payload; name = payload[:name] return if name.eql? 'EXPLAIN'; return if name.eql? 'SCHEMA' if ( binds = payload[:binds] ) && ! binds.empty? binds = " #{binds.map { |col,v| render_bind(col, v) }.inspect}" end log "#{name} (#{event.duration.round(1)}ms) #{payload[:sql]}#{binds}" end def log(msg) logger = ActiveRecord::Base.logger logger && logger.warn("[slow-query] #{msg}") end private def render_bind(column, value) # from ActiveRecord::LogSubscriber return [nil, value] unless column if column.binary? value = value[:value] if value.is_a?(Hash) value = value ? "<#{value.bytesize} bytes of binary data>" : "<NULL binary data>" end [column.name, value] end end SlowQueryLog.attach_to :active_record