diff options
Diffstat (limited to 'lib/gitlab/metrics/sidekiq_middleware.rb')
-rw-r--r-- | lib/gitlab/metrics/sidekiq_middleware.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/gitlab/metrics/sidekiq_middleware.rb b/lib/gitlab/metrics/sidekiq_middleware.rb new file mode 100644 index 00000000000..ec10707d1fb --- /dev/null +++ b/lib/gitlab/metrics/sidekiq_middleware.rb @@ -0,0 +1,30 @@ +module Gitlab + module Metrics + # Sidekiq middleware for tracking jobs. + # + # This middleware is intended to be used as a server-side middleware. + class SidekiqMiddleware + def call(worker, message, queue) + # We don't want to track the MetricsWorker itself as otherwise we'll end + # up in an infinite loop. + if worker.class == MetricsWorker + yield + return + end + + trans = Transaction.new + + begin + trans.run { yield } + ensure + tag_worker(trans, worker) + trans.finish + end + end + + def tag_worker(trans, worker) + trans.add_tag(:action, "#{worker.class.name}#perform") + end + end + end +end |