diff options
Diffstat (limited to 'spec/lib/gitlab/metrics/web_transaction_spec.rb')
-rw-r--r-- | spec/lib/gitlab/metrics/web_transaction_spec.rb | 144 |
1 files changed, 12 insertions, 132 deletions
diff --git a/spec/lib/gitlab/metrics/web_transaction_spec.rb b/spec/lib/gitlab/metrics/web_transaction_spec.rb index 21a762dbf25..47f1bd3bd10 100644 --- a/spec/lib/gitlab/metrics/web_transaction_spec.rb +++ b/spec/lib/gitlab/metrics/web_transaction_spec.rb @@ -5,6 +5,11 @@ require 'spec_helper' describe Gitlab::Metrics::WebTransaction do let(:env) { {} } let(:transaction) { described_class.new(env) } + let(:prometheus_metric) { double("prometheus metric") } + + before do + allow(described_class).to receive(:transaction_metric).and_return(prometheus_metric) + end describe '#duration' do it 'returns the duration of a transaction in seconds' do @@ -40,15 +45,6 @@ describe Gitlab::Metrics::WebTransaction do end end - describe '#add_metric' do - it 'adds a metric to the transaction' do - expect(Gitlab::Metrics::Metric).to receive(:new) - .with('rails_foo', { number: 10 }, {}) - - transaction.add_metric('foo', number: 10) - end - end - describe '#method_call_for' do it 'returns a MethodCall' do method = transaction.method_call_for('Foo#bar', :Foo, '#bar') @@ -59,101 +55,17 @@ describe Gitlab::Metrics::WebTransaction do describe '#increment' do it 'increments a counter' do - transaction.increment(:time, 1) - transaction.increment(:time, 2) - - values = { duration: 0.0, time: 3, allocated_memory: a_kind_of(Numeric) } + expect(prometheus_metric).to receive(:increment).with({}, 1) - expect(transaction).to receive(:add_metric) - .with('transactions', values, {}) - - transaction.track_self + transaction.increment(:time, 1) end end describe '#set' do it 'sets a value' do - transaction.set(:number, 10) - - values = { - duration: 0.0, - number: 10, - allocated_memory: a_kind_of(Numeric) - } - - expect(transaction).to receive(:add_metric) - .with('transactions', values, {}) - - transaction.track_self - end - end - - describe '#finish' do - it 'tracks the transaction details and submits them to Sidekiq' do - expect(transaction).to receive(:track_self) - expect(transaction).to receive(:submit) - - transaction.finish - end - end - - describe '#track_self' do - it 'adds a metric for the transaction itself' do - values = { - duration: transaction.duration, - allocated_memory: a_kind_of(Numeric) - } - - expect(transaction).to receive(:add_metric) - .with('transactions', values, {}) - - transaction.track_self - end - end - - describe '#submit' do - it 'submits the metrics to Sidekiq' do - transaction.track_self - - expect(Gitlab::Metrics).to receive(:submit_metrics) - .with([an_instance_of(Hash)]) - - transaction.submit - end + expect(prometheus_metric).to receive(:set).with({}, 10) - it 'adds the action as a tag for every metric' do - allow(transaction).to receive(:labels).and_return(controller: 'Foo', action: 'bar') - transaction.track_self - - hash = { - series: 'rails_transactions', - tags: { action: 'Foo#bar' }, - values: { duration: 0.0, allocated_memory: a_kind_of(Numeric) }, - timestamp: a_kind_of(Integer) - } - - expect(Gitlab::Metrics).to receive(:submit_metrics) - .with([hash]) - - transaction.submit - end - - it 'does not add an action tag for events' do - allow(transaction).to receive(:labels).and_return(controller: 'Foo', action: 'bar') - - transaction.add_event(:meow) - - hash = { - series: 'events', - tags: { event: :meow }, - values: { count: 1 }, - timestamp: a_kind_of(Integer) - } - - expect(Gitlab::Metrics).to receive(:submit_metrics) - .with([hash]) - - transaction.submit + transaction.set(:number, 10) end end @@ -167,7 +79,6 @@ describe Gitlab::Metrics::WebTransaction do end it 'provides labels with the method and path of the route in the grape endpoint' do expect(transaction.labels).to eq({ controller: 'Grape', action: 'GET /projects/:id/archive' }) - expect(transaction.action).to eq('Grape#GET /projects/:id/archive') end it 'does not provide labels if route infos are missing' do @@ -177,7 +88,6 @@ describe Gitlab::Metrics::WebTransaction do env['api.endpoint'] = endpoint expect(transaction.labels).to eq({}) - expect(transaction.action).to be_nil end end @@ -193,7 +103,6 @@ describe Gitlab::Metrics::WebTransaction do it 'tags a transaction with the name and action of a controller' do expect(transaction.labels).to eq({ controller: 'TestController', action: 'show' }) - expect(transaction.action).to eq('TestController#show') end context 'when the request content type is not :html' do @@ -201,7 +110,6 @@ describe Gitlab::Metrics::WebTransaction do it 'appends the mime type to the transaction action' do expect(transaction.labels).to eq({ controller: 'TestController', action: 'show.json' }) - expect(transaction.action).to eq('TestController#show.json') end end @@ -210,54 +118,26 @@ describe Gitlab::Metrics::WebTransaction do it 'does not append the MIME type to the transaction action' do expect(transaction.labels).to eq({ controller: 'TestController', action: 'show' }) - expect(transaction.action).to eq('TestController#show') end end end it 'returns no labels when no route information is present in env' do expect(transaction.labels).to eq({}) - expect(transaction.action).to eq(nil) end end describe '#add_event' do it 'adds a metric' do - transaction.add_event(:meow) + expect(prometheus_metric).to receive(:increment) - expect(transaction.metrics[0]).to be_an_instance_of(Gitlab::Metrics::Metric) - end - - it "does not prefix the metric's series name" do transaction.add_event(:meow) - - metric = transaction.metrics[0] - - expect(metric.series).to eq(described_class::EVENT_SERIES) - end - - it 'tracks a counter for every event' do - transaction.add_event(:meow) - - metric = transaction.metrics[0] - - expect(metric.values).to eq(count: 1) - end - - it 'tracks the event name' do - transaction.add_event(:meow) - - metric = transaction.metrics[0] - - expect(metric.tags).to eq(event: :meow) end it 'allows tracking of custom tags' do - transaction.add_event(:bau, animal: 'dog') - - metric = transaction.metrics[0] + expect(prometheus_metric).to receive(:increment).with(animal: "dog") - expect(metric.tags).to eq(event: :bau, animal: 'dog') + transaction.add_event(:bau, animal: 'dog') end end end |