summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2015-12-10 13:38:45 +0100
committerYorick Peterse <yorickpeterse@gmail.com>2015-12-17 17:25:48 +0100
commitb66a16c8384b64eabeb04f3f32017581e4711eb8 (patch)
tree4423e0a84adb85a51ab7827f470e93cbb2f45f26 /lib
parent60a6a240ea21cbfa564b9373b1c3bb57316aae46 (diff)
downloadgitlab-ce-b66a16c8384b64eabeb04f3f32017581e4711eb8.tar.gz
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')
-rw-r--r--lib/gitlab/metrics/instrumentation.rb16
-rw-r--r--lib/gitlab/metrics/subscribers/method_call.rb4
2 files changed, 11 insertions, 9 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
diff --git a/lib/gitlab/metrics/subscribers/method_call.rb b/lib/gitlab/metrics/subscribers/method_call.rb
index 1606134b7e5..0094ed0dc6a 100644
--- a/lib/gitlab/metrics/subscribers/method_call.rb
+++ b/lib/gitlab/metrics/subscribers/method_call.rb
@@ -10,7 +10,7 @@ module Gitlab
def instance_method(event)
return unless current_transaction
- label = "#{event.payload[:module].name}##{event.payload[:name]}"
+ label = "#{event.payload[:module]}##{event.payload[:name]}"
add_metric(label, event.duration)
end
@@ -18,7 +18,7 @@ module Gitlab
def class_method(event)
return unless current_transaction
- label = "#{event.payload[:module].name}.#{event.payload[:name]}"
+ label = "#{event.payload[:module]}.#{event.payload[:name]}"
add_metric(label, event.duration)
end