summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2015-12-10 16:15:02 +0100
committerYorick Peterse <yorickpeterse@gmail.com>2015-12-17 17:25:48 +0100
commitad69ba57d6e7d52b2a44a20393c072538c299653 (patch)
treed1ae70960227b8e9dbe3df872ce70efc485c1a08
parent1b077d2d81bd25fe37492ea56c8bd884f944ce52 (diff)
downloadgitlab-ce-ad69ba57d6e7d52b2a44a20393c072538c299653.tar.gz
Proper method instrumentation for special symbols
This ensures that methods such as "==" can be instrumented without producing syntax errors.
-rw-r--r--lib/gitlab/metrics/instrumentation.rb9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/gitlab/metrics/instrumentation.rb b/lib/gitlab/metrics/instrumentation.rb
index 5b56f2e8513..2ed75495650 100644
--- a/lib/gitlab/metrics/instrumentation.rb
+++ b/lib/gitlab/metrics/instrumentation.rb
@@ -30,7 +30,8 @@ module Gitlab
def self.instrument(type, mod, name)
return unless Metrics.enabled?
- alias_name = "_original_#{name}"
+ name = name.to_sym
+ alias_name = :"_original_#{name}"
target = type == :instance ? mod : mod.singleton_class
if type == :instance
@@ -42,14 +43,14 @@ module Gitlab
end
target.class_eval <<-EOF, __FILE__, __LINE__ + 1
- alias_method :#{alias_name}, :#{name}
+ alias_method #{alias_name.inspect}, #{name.inspect}
def #{name}(*args, &block)
trans = Gitlab::Metrics::Instrumentation.transaction
if trans
start = Time.now
- retval = #{alias_name}(*args, &block)
+ retval =
duration = (Time.now - start) * 1000.0
trans.add_metric(Gitlab::Metrics::Instrumentation::SERIES,
@@ -58,7 +59,7 @@ module Gitlab
retval
else
- #{alias_name}(*args, &block)
+ __send__(#{alias_name.inspect}, *args, &block)
end
end
EOF