Sha256: 695dcd56916129340ad5eedb70c8f6b3967276485d4d8ec77b2a2d231502d344
Contents?: true
Size: 1.54 KB
Versions: 2
Compression:
Stored size: 1.54 KB
Contents
# frozen_string_literal: true class SidekiqPrometheus::JobMetrics def call(worker, job, queue) before = GC.stat(:total_allocated_objects) if SidekiqPrometheus.gc_metrics_enabled? # If we're using a wrapper class, like ActiveJob, use the "wrapped" # attribute to expose the underlying thing. labels = { class: job["wrapped"] || worker.class.to_s, queue: queue } begin labels.merge!(custom_labels(worker)) result = nil duration = Benchmark.realtime { result = yield } # In case the labels have changed after the worker perform method has been called labels.merge!(custom_labels(worker)) registry[:sidekiq_job_duration].observe(duration, labels: labels) registry[:sidekiq_job_success].increment(labels: labels) if SidekiqPrometheus.gc_metrics_enabled? allocated = GC.stat(:total_allocated_objects) - before registry[:sidekiq_job_allocated_objects].observe(allocated, labels: labels) end result rescue => e if e.instance_of?(::Sidekiq::Limiter::OverLimit) registry[:sidekiq_job_over_limit].increment(labels: labels) else err_label = {error_class: e.class.to_s} registry[:sidekiq_job_failed].increment(labels: err_label.merge(labels)) end raise e ensure registry[:sidekiq_job_count].increment(labels: labels) end end private def registry SidekiqPrometheus end def custom_labels(worker) worker.respond_to?(:prometheus_labels) ? worker.prometheus_labels : {} end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sidekiq_prometheus-2.0.0 | lib/sidekiq_prometheus/job_metrics.rb |
sidekiq_prometheus-1.9.0 | lib/sidekiq_prometheus/job_metrics.rb |