diff options
Diffstat (limited to 'lib/gitlab/sidekiq_middleware/metrics.rb')
-rw-r--r-- | lib/gitlab/sidekiq_middleware/metrics.rb | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/lib/gitlab/sidekiq_middleware/metrics.rb b/lib/gitlab/sidekiq_middleware/metrics.rb index bd819843bd4..7bfb0d54d80 100644 --- a/lib/gitlab/sidekiq_middleware/metrics.rb +++ b/lib/gitlab/sidekiq_middleware/metrics.rb @@ -7,14 +7,17 @@ module Gitlab # timeframes than the DEFAULT_BUCKET definition. Defined in seconds. SIDEKIQ_LATENCY_BUCKETS = [0.1, 0.25, 0.5, 1, 2.5, 5, 10, 60, 300, 600].freeze + TRUE_LABEL = "yes" + FALSE_LABEL = "no" + def initialize @metrics = init_metrics @metrics[:sidekiq_concurrency].set({}, Sidekiq.options[:concurrency].to_i) end - def call(_worker, job, queue) - labels = create_labels(queue) + def call(worker, job, queue) + labels = create_labels(worker.class, queue) queue_duration = ::Gitlab::InstrumentationHelper.queue_duration_for_job(job) @metrics[:sidekiq_jobs_queue_duration_seconds].observe(labels, queue_duration) if queue_duration @@ -42,7 +45,7 @@ module Gitlab @metrics[:sidekiq_jobs_failed_total].increment(labels, 1) unless job_succeeded # job_status: done, fail match the job_status attribute in structured logging - labels[:job_status] = job_succeeded ? :done : :fail + labels[:job_status] = job_succeeded ? "done" : "fail" @metrics[:sidekiq_jobs_cpu_seconds].observe(labels, job_thread_cputime) @metrics[:sidekiq_jobs_completion_seconds].observe(labels, monotonic_time) end @@ -62,10 +65,24 @@ module Gitlab } end - def create_labels(queue) - { - queue: queue - } + def create_labels(worker_class, queue) + labels = { queue: queue.to_s, latency_sensitive: FALSE_LABEL, external_dependencies: FALSE_LABEL, feature_category: "", boundary: "" } + return labels unless worker_class.include? WorkerAttributes + + labels[:latency_sensitive] = bool_as_label(worker_class.latency_sensitive_worker?) + labels[:external_dependencies] = bool_as_label(worker_class.worker_has_external_dependencies?) + + feature_category = worker_class.get_feature_category + labels[:feature_category] = feature_category.to_s + + resource_boundary = worker_class.get_worker_resource_boundary + labels[:boundary] = resource_boundary == :unknown ? "" : resource_boundary.to_s + + labels + end + + def bool_as_label(value) + value ? TRUE_LABEL : FALSE_LABEL end def get_thread_cputime |