Sha256: 6d9d9f70429f8d576519235b3cb14bba11a7afccf67a284bf2172150e301699e

Contents?: true

Size: 1.6 KB

Versions: 6

Compression:

Stored size: 1.6 KB

Contents

module Skylight
  module Probes
    module Redis
      # Unfortunately, because of the nature of pipelining, there's no way for us to
      # give a time breakdown on the individual items.

      PIPELINED_OPTS = {
        category: "db.redis.pipelined".freeze,
        title:    "PIPELINE".freeze,
        internal: true
      }.freeze

      MULTI_OPTS = {
        category: "db.redis.multi".freeze,
        title:    "MULTI".freeze,
        internal: true
      }.freeze

      module ClientInstrumentation
        def call(command, *)
          command_name = command[0]

          return super if command_name == :auth

          opts = {
            category: "db.redis.command",
            title:    command_name.upcase.to_s,
            internal: true
          }

          Skylight.instrument(opts) { super }
        end
      end

      module Instrumentation
        def pipelined(*)
          Skylight.instrument(PIPELINED_OPTS) { super }
        end

        def multi(*)
          Skylight.instrument(MULTI_OPTS) { super }
        end
      end

      class Probe
        def install
          version = defined?(::Redis::VERSION) ? Gem::Version.new(::Redis::VERSION) : nil

          if !version || version < Gem::Version.new("3.0.0")
            Skylight.error "The installed version of Redis doesn't support Middlewares. " \
                           "At least version 3.0.0 is required."
            return
          end

          ::Redis::Client.prepend(ClientInstrumentation)
          ::Redis.prepend(Instrumentation)
        end
      end
    end

    register(:redis, "Redis", "redis", Redis::Probe.new)
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
skylight-5.1.0.beta lib/skylight/probes/redis.rb
skylight-5.0.1 lib/skylight/probes/redis.rb
skylight-5.0.0 lib/skylight/probes/redis.rb
skylight-5.0.0.beta5 lib/skylight/probes/redis.rb
skylight-5.0.0.beta4 lib/skylight/probes/redis.rb
skylight-5.0.0.beta3 lib/skylight/probes/redis.rb