def self.trace(clazz, method_name, product, operation = method_name)
clazz.class_eval do
method_name_without_newrelic = "#{method_name}_without_newrelic"
if NewRelic::Helper.instance_methods_include?(clazz, method_name) &&
!NewRelic::Helper.instance_methods_include?(clazz, method_name_without_newrelic)
visibility = NewRelic::Helper.instance_method_visibility(clazz, method_name)
alias_method method_name_without_newrelic, method_name
define_method(method_name) do |*args, &blk|
segment = NewRelic::Agent::Transaction.start_datastore_segment(product, operation)
begin
send(method_name_without_newrelic, *args, &blk)
ensure
segment.finish
end
end
send visibility, method_name
send visibility, method_name_without_newrelic
end
end
end