Sha256: 7a985913a92d5dc40b9feeabe3267fc85340f042c851e852b1e7e503cfc4078a

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

require 'dry-configurable'
require 'dry/core/extensions'
require 'dry/monitor/notifications'

module Dry
  module Monitor
    Notifications.register_event(:sql)

    module SQL
      class Logger
        extend Dry::Core::Extensions
        extend Dry::Configurable

        register_extension(:default_colorizer) do
          require_relative './colorizers/default'

          def colorizer
            @colorizer ||= Colorizers::Default.new(config.theme)
          end
        end

        register_extension(:rouge_colorizer) do
          require_relative './colorizers/rouge'

          def colorizer
            @colorizer ||= Colorizers::Rouge.new(config.theme)
          end
        end

        setting :theme, nil
        setting :message_template, %(  Loaded %s in %sms %s).freeze

        attr_reader :config
        attr_reader :logger
        attr_reader :template

        load_extensions(:default_colorizer)

        def initialize(logger, config = self.class.config)
          @logger = logger
          @config = config
          @template = config.message_template
        end

        def subscribe(notifications)
          notifications.subscribe(:sql) do |time:, name:, query:|
            log_query(time, name, query)
          end
        end

        def log_query(time, name, query)
          logger.info template % [name.inspect, time, colorizer.call(query)]
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-monitor-0.3.0 lib/dry/monitor/sql/logger.rb
dry-monitor-0.2.0 lib/dry/monitor/sql/logger.rb