-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
Hi team.
As far as i can tell the logic inside of the Yabeda::Sidekiq::ServerMiddleware of setting the custom tags won't work with ActiveJob because the worker is of type ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper rather than lower level class.
# frozen_string_literal: true
module Yabeda
module Sidekiq
# Sidekiq worker middleware
class ServerMiddleware
# See https://github.com/mperham/sidekiq/discussions/4971
JOB_RECORD_CLASS = defined?(::Sidekiq::JobRecord) ? ::Sidekiq::JobRecord : ::Sidekiq::Job
# rubocop: disable Metrics/AbcSize, Metrics/MethodLength:
def call(worker, job, queue)
custom_tags = Yabeda::Sidekiq.custom_tags(worker, job).to_h
labels = Yabeda::Sidekiq.labelize(worker, job, queue).merge(custom_tags)
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
begin
job_instance = JOB_RECORD_CLASS.new(job)
Yabeda.sidekiq_job_latency.measure(labels, job_instance.latency)
Yabeda::Sidekiq.jobs_started_at[labels][job["jid"]] = start
Yabeda.with_tags(**custom_tags) do
yield
end
Yabeda.sidekiq_jobs_success_total.increment(labels)
rescue Exception => e # rubocop: disable Lint/RescueException
jobs_failed_labels = labels.dup
jobs_failed_labels[:error] = e.class.name if Yabeda::Sidekiq.config.label_for_error_class_on_sidekiq_jobs_failed
Yabeda.sidekiq_jobs_failed_total.increment(jobs_failed_labels)
raise
ensure
Yabeda.sidekiq_job_runtime.measure(labels, elapsed(start))
Yabeda.sidekiq_jobs_executed_total.increment(labels)
Yabeda::Sidekiq.jobs_started_at[labels].delete(job["jid"])
end
end
# rubocop: enable Metrics/AbcSize, Metrics/MethodLength:
private
def elapsed(start)
(Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).round(3)
end
end
end
end
I'm assuming this is by design since this is a sidekiq specific project but wanted to clarify since the yabeda promethus example project makes use of ActiveJob::Base. I believe i can make use of with_tags instead but wanted to verify first.
lain0
Metadata
Metadata
Assignees
Labels
No labels