Commit d65e7aa9 authored by Yorick Peterse's avatar Yorick Peterse

Merge branch 'add-action-to-all-metrics' into 'master'

See merge request !2370
parents 701e9ee4 35b501f3
...@@ -40,9 +40,7 @@ module Gitlab ...@@ -40,9 +40,7 @@ module Gitlab
def tag_controller(trans, env) def tag_controller(trans, env)
controller = env[CONTROLLER_KEY] controller = env[CONTROLLER_KEY]
label = "#{controller.class.name}##{controller.action_name}" trans.action = "#{controller.class.name}##{controller.action_name}"
trans.add_tag(:action, label)
end end
end end
end end
......
...@@ -5,19 +5,14 @@ module Gitlab ...@@ -5,19 +5,14 @@ module Gitlab
# This middleware is intended to be used as a server-side middleware. # This middleware is intended to be used as a server-side middleware.
class SidekiqMiddleware class SidekiqMiddleware
def call(worker, message, queue) def call(worker, message, queue)
trans = Transaction.new trans = Transaction.new("#{worker.class.name}#perform")
begin begin
trans.run { yield } trans.run { yield }
ensure ensure
tag_worker(trans, worker)
trans.finish trans.finish
end end
end end
def tag_worker(trans, worker)
trans.add_tag(:action, "#{worker.class.name}#perform")
end
end end
end end
end end
...@@ -6,11 +6,15 @@ module Gitlab ...@@ -6,11 +6,15 @@ module Gitlab
attr_reader :tags, :values attr_reader :tags, :values
attr_accessor :action
def self.current def self.current
Thread.current[THREAD_KEY] Thread.current[THREAD_KEY]
end end
def initialize # action - A String describing the action performed, usually the class
# plus method name.
def initialize(action = nil)
@metrics = [] @metrics = []
@started_at = nil @started_at = nil
...@@ -18,6 +22,7 @@ module Gitlab ...@@ -18,6 +22,7 @@ module Gitlab
@values = Hash.new(0) @values = Hash.new(0)
@tags = {} @tags = {}
@action = action
end end
def duration def duration
...@@ -70,7 +75,15 @@ module Gitlab ...@@ -70,7 +75,15 @@ module Gitlab
end end
def submit def submit
Metrics.submit_metrics(@metrics.map(&:to_hash)) metrics = @metrics.map do |metric|
hash = metric.to_hash
hash[:tags][:action] ||= @action if @action
hash
end
Metrics.submit_metrics(metrics)
end end
def sidekiq? def sidekiq?
......
...@@ -57,7 +57,7 @@ describe Gitlab::Metrics::RackMiddleware do ...@@ -57,7 +57,7 @@ describe Gitlab::Metrics::RackMiddleware do
middleware.tag_controller(transaction, env) middleware.tag_controller(transaction, env)
expect(transaction.tags[:action]).to eq('TestController#show') expect(transaction.action).to eq('TestController#show')
end end
end end
end end
...@@ -5,22 +5,15 @@ describe Gitlab::Metrics::SidekiqMiddleware do ...@@ -5,22 +5,15 @@ describe Gitlab::Metrics::SidekiqMiddleware do
describe '#call' do describe '#call' do
it 'tracks the transaction' do it 'tracks the transaction' do
worker = Class.new.new worker = double(:worker, class: double(:class, name: 'TestWorker'))
expect(Gitlab::Metrics::Transaction).to receive(:new).
with('TestWorker#perform').
and_call_original
expect_any_instance_of(Gitlab::Metrics::Transaction).to receive(:finish) expect_any_instance_of(Gitlab::Metrics::Transaction).to receive(:finish)
middleware.call(worker, 'test', :test) { nil } middleware.call(worker, 'test', :test) { nil }
end end
end end
describe '#tag_worker' do
it 'adds the worker class and action to the transaction' do
trans = Gitlab::Metrics::Transaction.new
worker = double(:worker, class: double(:class, name: 'TestWorker'))
expect(trans).to receive(:add_tag).with(:action, 'TestWorker#perform')
middleware.tag_worker(trans, worker)
end
end
end end
...@@ -96,5 +96,22 @@ describe Gitlab::Metrics::Transaction do ...@@ -96,5 +96,22 @@ describe Gitlab::Metrics::Transaction do
transaction.submit transaction.submit
end end
it 'adds the action as a tag for every metric' do
transaction.action = 'Foo#bar'
transaction.track_self
hash = {
series: 'rails_transactions',
tags: { action: 'Foo#bar' },
values: { duration: 0.0 },
timestamp: an_instance_of(Fixnum)
}
expect(Gitlab::Metrics).to receive(:submit_metrics).
with([hash])
transaction.submit
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment