Store request methods/URIs as values

Since filtering by these values is very rare (they're mostly just
displayed as-is) we don't need to waste any index space by saving them
as tags. By storing them as values we also greatly reduce the number of
series in InfluxDB.
This commit is contained in:
Yorick Peterse 2016-01-07 13:05:00 +01:00
parent 364b07cff0
commit 7b10cb6f0f
4 changed files with 21 additions and 6 deletions

View file

@ -32,8 +32,8 @@ module Gitlab
def transaction_from_env(env)
trans = Transaction.new
trans.add_tag(:request_method, env['REQUEST_METHOD'])
trans.add_tag(:request_uri, env['REQUEST_URI'])
trans.set(:request_uri, env['REQUEST_URI'])
trans.set(:request_method, env['REQUEST_METHOD'])
trans
end

View file

@ -4,7 +4,7 @@ module Gitlab
class Transaction
THREAD_KEY = :_gitlab_metrics_transaction
attr_reader :tags
attr_reader :tags, :values
def self.current
Thread.current[THREAD_KEY]
@ -46,6 +46,10 @@ module Gitlab
@values[name] += value
end
def set(name, value)
@values[name] = value
end
def add_tag(key, value)
@tags[key] = value
end

View file

@ -40,9 +40,9 @@ describe Gitlab::Metrics::RackMiddleware do
expect(transaction).to be_an_instance_of(Gitlab::Metrics::Transaction)
end
it 'tags the transaction with the request method and URI' do
expect(transaction.tags[:request_method]).to eq('GET')
expect(transaction.tags[:request_uri]).to eq('/foo')
it 'stores the request method and URI in the transaction as values' do
expect(transaction.values[:request_method]).to eq('GET')
expect(transaction.values[:request_uri]).to eq('/foo')
end
end

View file

@ -50,6 +50,17 @@ describe Gitlab::Metrics::Transaction do
end
end
describe '#set' do
it 'sets a value' do
transaction.set(:number, 10)
expect(transaction).to receive(:add_metric).
with('transactions', { duration: 0.0, number: 10 }, {})
transaction.track_self
end
end
describe '#add_tag' do
it 'adds a tag' do
transaction.add_tag(:foo, 'bar')