Выполнение кода при неудачном завершении задачи
Есть задача, приложение, которое принимает POST запросом json строку и перенаправляет его по другие адресам. Для решения данной задачи решил использловать гем delayed_job. Получаю из запроса строку, из базы список адресов и для каждого адреса создаю следующую задачу:
class JsonJob < ApplicationJob
require 'httparty'
def perform(destination_url, data_json)
attempts = 5
response_code = nil
while attempts > 0 && response_code != 200
# Выполнение запроса
response = HTTParty.post(destination_url, body: data_json.to_json, headers: { 'Content-Type' => 'application/json' })
response_code = response.code
# Уменьшение количества попыток
attempts -= 1
# Если ответ не 200, ждем некоторое время перед повторной попыткой
sleep(5) if response_code != 200
end
if response_code != 200
raise StandardError, "Ошибка: попытки исчерпаны и ответ не 200"
end
end
end
На каждый адрес в базе успешно создается запись. Согласно настройкам в файле delayed_job_config, максимально количество попыток выполнения данной задачи 5. Мне нужно, чтобы после этих неудачных попыток, когда не получилось отправить строку получателям, было сформировано сообщение об ошибке, но не могу разобраться куда прописать данный код, и как вообще отловить что все попытки закончились.
Условно, могу получить значение переменной Delayed::Worker.max_attempts, но вот как получить значение текущей попытки я найти не могу.
Или может существует какой-то другой способ?