module Datadog::Annotation::Decorator

Adds tracer to annotated methods

Public Instance Methods

__trace(method:, service:, resource: " click to toggle source

Adds method to list of traced methods @param method [Symbol] name of the method to be traced @param service [String] the service name for span @param resource [String || Proc] the resource in which the current span refers @param metadata_proc [Proc] Block which sets tags into current trace.

It receives original args, result of the traced method and span

@see Datadog::Annotation::Tracer.trace

# File lib/ddtrace/annotation/decorator.rb, line 17
def __trace(method:, service:, resource: "#{self}##{method}", metadata_proc: nil)
  return unless datadog_enabled?

  validate_metadata_proc!(metadata_proc)

  @traced_methods[method.to_sym] = {
    service: service,
    resource: resource,
    metadata_proc: metadata_proc,
    defined?: false
  }
end
method_added(name) click to toggle source
Calls superclass method
# File lib/ddtrace/annotation/decorator.rb, line 30
def method_added(name)
  super

  return if !@traced_methods.key?(name) || @traced_methods.dig(name, :defined?)

  @traced_methods[name][:defined?] = true

  method = instance_method(name)
  trace_info = @traced_methods[name]

  define_method(name) do |*args, &block|
    Annotation::Tracer.trace(
      method: method.bind(self),
      trace_info: trace_info,
      args: args,
      &block
    )
  end
end

Private Instance Methods

datadog_enabled?() click to toggle source
# File lib/ddtrace/annotation/decorator.rb, line 52
def datadog_enabled?
  Datadog.respond_to?(:tracer) && Datadog.tracer.enabled
end
validate_metadata_proc!(metadata_proc) click to toggle source
# File lib/ddtrace/annotation/decorator.rb, line 56
def validate_metadata_proc!(metadata_proc)
  return if metadata_proc.nil?

  raise Errors::InvalidProc, "MetadataProc must be a Proc" unless metadata_proc.is_a?(Proc)
end