Sha256: 4ff44d1a226a6d23a3cd2cd51e1d4e577520a8ef6fc1f00f016ef68934c18660

Contents?: true

Size: 938 Bytes

Versions: 10

Compression:

Stored size: 938 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)
        if paused?
          yield
        else
          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

10 entries across 10 versions & 1 rubygems

Version Path
query_diet-0.7.2 lib/query_diet/logger.rb
query_diet-0.7.1 lib/query_diet/logger.rb
query_diet-0.7.0 lib/query_diet/logger.rb
query_diet-0.6.2 lib/query_diet/logger.rb
query_diet-0.6.1 lib/query_diet/logger.rb
query_diet-0.6.0 lib/query_diet/logger.rb
query_diet-0.5.4 lib/query_diet/logger.rb
query_diet-0.5.3 lib/query_diet/logger.rb
query_diet-0.5.2 lib/query_diet/logger.rb
query_diet-0.5.1 lib/query_diet/logger.rb