Sha256: dcc85f3ca89d2b7a4f0706b951f25f280a783f23b89c97d5a9e8ccb845ae61dc

Contents?: true

Size: 913 Bytes

Versions: 1

Compression:

Stored size: 913 Bytes

Contents

module QueryDiet
  class Logger
    DEFAULT_OPTIONS = { :bad_count => 8, :bad_time => 5000 }

    class << self
      attr_accessor :queries, :paused

      def reset
        self.queries = []
      end

      def log(query)
        unless paused?
          result = nil
          time = Benchmark.realtime do
            result = yield
          end
          queries << [query, time] if log_query?(query)
          result
        end
      end

      def time
        (queries.sum(&:last) * 1000).to_i
      end

      def count
        queries.size
      end

      def bad?(options = {})
        options = options.reverse_merge(DEFAULT_OPTIONS)
        count >= options[:bad_count] or time >= options[:bad_time]
      end

      def paused?
        paused
      end

      private

      def log_query?(query)
        query =~ /^(select|create|update|delete|insert)\b/i
      end
    end

    reset
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
query_diet-0.5.0 lib/query_diet/logger.rb