Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2015-12-10 15:38:45 +0300
committerYorick Peterse <yorickpeterse@gmail.com>2015-12-17 19:25:48 +0300
commitb66a16c8384b64eabeb04f3f32017581e4711eb8 (patch)
tree4423e0a84adb85a51ab7827f470e93cbb2f45f26 /lib/gitlab/metrics/instrumentation.rb
parent60a6a240ea21cbfa564b9373b1c3bb57316aae46 (diff)
Use string evaluation for method instrumentation
This is faster than using define_method since we don't have to keep block bindings around.
Diffstat (limited to 'lib/gitlab/metrics/instrumentation.rb')
-rw-r--r--lib/gitlab/metrics/instrumentation.rb16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/gitlab/metrics/instrumentation.rb b/lib/gitlab/metrics/instrumentation.rb
index 1c2f84fb09a..982e35adfc9 100644
--- a/lib/gitlab/metrics/instrumentation.rb
+++ b/lib/gitlab/metrics/instrumentation.rb
@@ -31,16 +31,18 @@ module Gitlab
alias_name = "_original_#{name}"
target = type == :instance ? mod : mod.singleton_class
- target.class_eval do
- alias_method(alias_name, name)
+ target.class_eval <<-EOF, __FILE__, __LINE__ + 1
+ alias_method :#{alias_name}, :#{name}
- define_method(name) do |*args, &block|
- ActiveSupport::Notifications.
- instrument("#{type}_method.method_call", module: mod, name: name) do
- __send__(alias_name, *args, &block)
+ def #{name}(*args, &block)
+ ActiveSupport::Notifications
+ .instrument("#{type}_method.method_call",
+ module: #{mod.name.inspect},
+ name: #{name.inspect}) do
+ #{alias_name}(*args, &block)
end
end
- end
+ EOF
end
end
end