Skip to content

custom_tags unsupported inside of active job #40

@neeko99

Description

@neeko99

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions