module Sentry::Rails::ActiveJobExtensions

def already_supported_by_sentry_integration?

def already_supported_by_sentry_integration?
  Sentry.configuration.rails.skippable_job_adapters.include?(self.class.queue_adapter.class.to_s)
end

def capture_and_reraise_with_sentry(scope, &block)

def capture_and_reraise_with_sentry(scope, &block)
  scope.set_transaction_name(self.class.name)
  transaction =
    if is_a?(::Sentry::SendEventJob)
      nil
    else
      Sentry.start_transaction(name: scope.transaction_name, op: "active_job")
    end
  scope.set_span(transaction) if transaction
  return_value = block.call
  finish_sentry_transaction(transaction, 200)
  return_value
rescue Exception => e # rubocop:disable Lint/RescueException
  finish_sentry_transaction(transaction, 500)
  Sentry::Rails.capture_exception(
    e,
    extra: sentry_context,
    tags: {
      job_id: job_id,
      provider_job_id:provider_job_id
    }
  )
  raise e
end

def finish_sentry_transaction(transaction, status)

def finish_sentry_transaction(transaction, status)
  return unless transaction
  transaction.set_http_status(status)
  transaction.finish
end

def perform_now

def perform_now
  if !Sentry.initialized? || already_supported_by_sentry_integration?
    super
  else
    Sentry.with_scope do |scope|
      capture_and_reraise_with_sentry(scope) do
        super
      end
    end
  end
end

def sentry_context

def sentry_context
  {
    active_job: self.class.name,
    arguments: arguments,
    scheduled_at: scheduled_at,
    job_id: job_id,
    provider_job_id: provider_job_id,
    locale: locale
  }
end