module Datadog::Contrib::Redis::Patcher
Patcher
enables patching of 'redis' module.
Public Instance Methods
call(*args, &block)
click to toggle source
# File lib/ddtrace/contrib/redis/patcher.rb, line 35 def call(*args, &block) pin = Datadog::Pin.get_from(self) return call_without_datadog(*args, &block) unless pin && pin.tracer response = nil pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span| span.service = pin.service span.span_type = Datadog::Contrib::Redis::Ext::TYPE span.resource = Datadog::Contrib::Redis::Quantize.format_command_args(*args) Datadog::Contrib::Redis::Tags.set_common_tags(self, span) response = call_without_datadog(*args, &block) end response end
call_pipeline(*args, &block)
click to toggle source
# File lib/ddtrace/contrib/redis/patcher.rb, line 54 def call_pipeline(*args, &block) pin = Datadog::Pin.get_from(self) return call_pipeline_without_datadog(*args, &block) unless pin && pin.tracer response = nil pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span| span.service = pin.service span.span_type = Datadog::Contrib::Redis::Ext::TYPE commands = args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.format_command_args(c) } span.resource = commands.join("\n") Datadog::Contrib::Redis::Tags.set_common_tags(self, span) span.set_metric Datadog::Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length response = call_pipeline_without_datadog(*args, &block) end response end
datadog_configuration()
click to toggle source
# File lib/ddtrace/contrib/redis/patcher.rb, line 87 def datadog_configuration Datadog.configuration[:redis, options] end
datadog_pin()
click to toggle source
# File lib/ddtrace/contrib/redis/patcher.rb, line 73 def datadog_pin @datadog_pin ||= begin pin = Datadog::Pin.new( datadog_configuration[:service_name], app: Ext::APP, app_type: Datadog::Ext::AppTypes::DB, tracer: -> { datadog_configuration[:tracer] } ) pin.onto(self) end end
patch()
click to toggle source
patch applies our patch if needed
# File lib/ddtrace/contrib/redis/patcher.rb, line 19 def patch # do not require these by default, but only when actually patching require 'redis' require 'ddtrace/ext/app_types' require 'ddtrace/contrib/redis/tags' require 'ddtrace/contrib/redis/quantize' patch_redis_client end
patch_redis_client()
click to toggle source
rubocop:disable Metrics/MethodLength rubocop:disable Metrics/BlockLength
# File lib/ddtrace/contrib/redis/patcher.rb, line 31 def patch_redis_client ::Redis::Client.class_eval do alias_method :call_without_datadog, :call remove_method :call def call(*args, &block) pin = Datadog::Pin.get_from(self) return call_without_datadog(*args, &block) unless pin && pin.tracer response = nil pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span| span.service = pin.service span.span_type = Datadog::Contrib::Redis::Ext::TYPE span.resource = Datadog::Contrib::Redis::Quantize.format_command_args(*args) Datadog::Contrib::Redis::Tags.set_common_tags(self, span) response = call_without_datadog(*args, &block) end response end alias_method :call_pipeline_without_datadog, :call_pipeline remove_method :call_pipeline def call_pipeline(*args, &block) pin = Datadog::Pin.get_from(self) return call_pipeline_without_datadog(*args, &block) unless pin && pin.tracer response = nil pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span| span.service = pin.service span.span_type = Datadog::Contrib::Redis::Ext::TYPE commands = args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.format_command_args(c) } span.resource = commands.join("\n") Datadog::Contrib::Redis::Tags.set_common_tags(self, span) span.set_metric Datadog::Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length response = call_pipeline_without_datadog(*args, &block) end response end def datadog_pin @datadog_pin ||= begin pin = Datadog::Pin.new( datadog_configuration[:service_name], app: Ext::APP, app_type: Datadog::Ext::AppTypes::DB, tracer: -> { datadog_configuration[:tracer] } ) pin.onto(self) end end private def datadog_configuration Datadog.configuration[:redis, options] end end end
target_version()
click to toggle source
# File lib/ddtrace/contrib/redis/patcher.rb, line 14 def target_version Integration.version end