53 lines
1.1 KiB
Ruby
53 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ApplicationJob < ActiveJob::Base
|
|
include ActiveJob::RetryOnTransientErrors
|
|
|
|
DEFAULT_MAX_ATTEMPTS_JOBS = 25
|
|
|
|
attr_writer :request_id
|
|
|
|
before_perform do |job|
|
|
arg = job.arguments.first
|
|
|
|
case arg
|
|
when Dossier
|
|
Sentry.set_tags(dossier: arg.id, procedure: arg.procedure.id)
|
|
when Procedure
|
|
Sentry.set_tags(procedure: arg.id)
|
|
end
|
|
end
|
|
|
|
around_perform do |job, block|
|
|
Rails.logger.info("#{job.class.name} started at #{Time.zone.now}")
|
|
Current.set(request_id: job.request_id) do
|
|
block.call
|
|
end
|
|
Rails.logger.info("#{job.class.name} ended at #{Time.zone.now}")
|
|
end
|
|
|
|
def error(job, exception)
|
|
Sentry.capture_exception(exception)
|
|
end
|
|
|
|
def max_attempts
|
|
ENV.fetch("MAX_ATTEMPTS_JOBS", DEFAULT_MAX_ATTEMPTS_JOBS).to_i
|
|
end
|
|
|
|
def max_run_time
|
|
4.hours # decrease run time by default
|
|
end
|
|
|
|
def request_id
|
|
@request_id ||= Current.request_id
|
|
end
|
|
|
|
def serialize
|
|
super.merge('request_id' => request_id)
|
|
end
|
|
|
|
def deserialize(job_data)
|
|
super
|
|
self.request_id = job_data['request_id']
|
|
end
|
|
end
|