demarches-normaliennes/app/jobs/api_entreprise/job.rb

40 lines
1.3 KiB
Ruby
Raw Normal View History

2020-06-02 20:13:38 +02:00
class ApiEntreprise::Job < ApplicationJob
2020-12-03 11:36:26 +01:00
DEFAULT_MAX_ATTEMPTS_API_ENTREPRISE_JOBS = 5
2020-09-22 17:14:31 +02:00
queue_as :api_entreprise
2020-12-03 11:36:26 +01:00
# BadGateway could mean
# - acoss: réessayer ultérieurement
# - bdf: erreur interne
# so we retry every day for 5 days
# same logic for ServiceUnavailable
2020-12-03 16:52:58 +01:00
retry_on ApiEntreprise::API::Error::ServiceUnavailable,
ApiEntreprise::API::Error::BadGateway,
wait: 1.day
2020-12-03 11:36:26 +01:00
# We guess the backend is slow but not broken
# and the information we are looking for is available
# so we retry few seconds later (exponentially to avoid overload)
2020-12-03 16:52:58 +01:00
retry_on ApiEntreprise::API::Error::TimedOut, wait: :exponentially_longer
# If by the time the job runs the Etablissement has been deleted
# (it can happen through EtablissementUpdateJob for instance), ignore the job
discard_on ActiveRecord::RecordNotFound
2020-12-03 16:52:58 +01:00
rescue_from(ApiEntreprise::API::Error::ResourceNotFound) do |exception|
error(self, exception)
end
2020-12-03 16:52:58 +01:00
rescue_from(ApiEntreprise::API::Error::BadFormatRequest) do |exception|
error(self, exception)
end
2020-07-07 16:56:13 +02:00
def error(job, exception)
# override ApplicationJob#error to avoid reporting to sentry
end
2020-06-02 20:13:38 +02:00
def max_attempts
2020-06-16 15:47:24 +02:00
ENV.fetch("MAX_ATTEMPTS_API_ENTREPRISE_JOBS", DEFAULT_MAX_ATTEMPTS_API_ENTREPRISE_JOBS).to_i
2020-06-02 20:13:38 +02:00
end
end