2020-01-16 18:08:46 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module SidekiqMiddleware
|
2020-11-26 15:09:30 +00:00
|
|
|
class ClientMetrics
|
|
|
|
include ::Gitlab::SidekiqMiddleware::MetricsHelper
|
|
|
|
|
2020-01-16 18:08:46 +00:00
|
|
|
ENQUEUED = :sidekiq_enqueued_jobs_total
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
@metrics = init_metrics
|
|
|
|
end
|
|
|
|
|
2021-02-05 09:09:10 +00:00
|
|
|
def call(worker_class, job, queue, _redis_pool)
|
2020-01-23 15:08:46 +00:00
|
|
|
# worker_class can either be the string or class of the worker being enqueued.
|
2021-10-04 12:11:58 +00:00
|
|
|
worker_class = worker_class.to_s.safe_constantize
|
2021-09-21 00:09:28 +00:00
|
|
|
|
2021-02-05 09:09:10 +00:00
|
|
|
labels = create_labels(worker_class, queue, job)
|
2021-10-06 00:11:56 +00:00
|
|
|
if job.key?('at')
|
|
|
|
labels[:scheduling] = 'delayed'
|
|
|
|
job[:scheduled_at] = job['at']
|
|
|
|
else
|
|
|
|
labels[:scheduling] = 'immediate'
|
|
|
|
end
|
2020-01-16 18:08:46 +00:00
|
|
|
|
|
|
|
@metrics.fetch(ENQUEUED).increment(labels, 1)
|
|
|
|
|
|
|
|
yield
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def init_metrics
|
|
|
|
{
|
|
|
|
ENQUEUED => ::Gitlab::Metrics.counter(ENQUEUED, 'Sidekiq jobs enqueued')
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|