summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-01-04 11:37:46 +0100
committerYorick Peterse <yorickpeterse@gmail.com>2016-01-04 11:37:46 +0100
commit96075be6f4688a59335130dc796132ad4f232442 (patch)
tree0f747c8ae66f25a4865755c62960c99041220c7e
parentcafc784ee1d5d0a0279077272af8ee435bb110e4 (diff)
downloadgitlab-ce-96075be6f4688a59335130dc796132ad4f232442.tar.gz
Ability to increment custom transaction values
This will be used to store/increment the total query/view rendering timings on a per transaction basis. This in turn can greatly reduce the amount of metrics stored.
-rw-r--r--lib/gitlab/metrics/transaction.rb15
-rw-r--r--spec/lib/gitlab/metrics/transaction_spec.rb12
2 files changed, 25 insertions, 2 deletions
diff --git a/lib/gitlab/metrics/transaction.rb b/lib/gitlab/metrics/transaction.rb
index 43a7dab5323..0aaebf262d4 100644
--- a/lib/gitlab/metrics/transaction.rb
+++ b/lib/gitlab/metrics/transaction.rb
@@ -19,7 +19,8 @@ module Gitlab
@started_at = nil
@finished_at = nil
- @tags = {}
+ @values = Hash.new(0)
+ @tags = {}
end
def duration
@@ -44,6 +45,10 @@ module Gitlab
@metrics << Metric.new(series, values, tags)
end
+ def increment(name, value)
+ @values[name] += value
+ end
+
def add_tag(key, value)
@tags[key] = value
end
@@ -54,7 +59,13 @@ module Gitlab
end
def track_self
- add_metric(@series, { duration: duration }, @tags)
+ values = { duration: duration }
+
+ @values.each do |name, value|
+ values[name] = value
+ end
+
+ add_metric(@series, values, @tags)
end
def submit
diff --git a/spec/lib/gitlab/metrics/transaction_spec.rb b/spec/lib/gitlab/metrics/transaction_spec.rb
index 345163bfbea..18d63bdbdb9 100644
--- a/spec/lib/gitlab/metrics/transaction_spec.rb
+++ b/spec/lib/gitlab/metrics/transaction_spec.rb
@@ -38,6 +38,18 @@ describe Gitlab::Metrics::Transaction do
end
end
+ describe '#increment' do
+ it 'increments a counter' do
+ transaction.increment(:time, 1)
+ transaction.increment(:time, 2)
+
+ expect(transaction).to receive(:add_metric).
+ with('rspec', { duration: 0.0, time: 3 }, {})
+
+ transaction.track_self
+ end
+ end
+
describe '#add_tag' do
it 'adds a tag' do
transaction.add_tag(:foo, 'bar')