Module: ApmTraceable::Tracer::ClassMethods

Defined in:
lib/apm_traceable/tracer.rb

Overview

include先クラスで利用可能にするクラスメソッド群のモジュール

Instance Method Summary collapse

Instance Method Details

#trace_methods(*method_names) ⇒ Object

指定したメソッド群をトレース対象にする. 引数を複数指定すると、すべてのメソッドがそれぞれトレース対象になる.

fg. class Test

include DatadogTraceable
trace_methods :method_a, :method_b

end



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/apm_traceable/tracer.rb', line 23

def trace_methods(*method_names)
  # 計測対象をラップする必要があるため、計測対象メソッドと同名で計測用メソッドを定義したモジュールを生成する
  wrapper = Module.new do
    method_names.each do |method_name|
      define_method method_name do |*args, **options, &block|
        trace_span(method_name.to_s) { super(*args, **options, &block) }
      end
    end
  end

  # 計測対象メソッドより先に計測用メソッドが呼び出されないといけないため、
  # prependして継承チェインの先頭側に追加する
  prepend(wrapper)
end