Как получить отложенное время обработки задания?

Я запускаю некоторые фоновые задания, используя delayed_job, и мне интересно, как я могу узнать, сколько времени потребовалось для обработки задания.

информация отображается на сервере, но я не знаю, как ее сохранить, чтобы использовать в своих контроллерах/представлениях

Delayed::Backend::ActiveRecord::Job Load (0.8ms)  SELECT "delayed_jobs".* FROM "delayed_jobs" WHERE ("delayed_jobs"."id" = 83) LIMIT 1
Completed 200 OK in 9ms (Views: 6.8ms | ActiveRecord: 0.8ms)
  AREL (0.4ms)  DELETE FROM "delayed_jobs" WHERE ("delayed_jobs"."id" = 83)

person ddayan    schedule 26.01.2011    source источник


Ответы (2)


Поскольку отложенное задание удаляется из вашей базы данных после завершения, самый простой способ сделать это — сделать запись в вашей базе данных при запуске, а затем установить время завершения в обратном вызове, когда задание будет завершено. Это неэлегантно, но легко реализуется с помощью существующей системы.

person Dominic    schedule 26.01.2011
comment
Как передать идентификатор задания функции обратного вызова? Мне нужно, чтобы идентификатор delayed_job был в новой таблице, которую я создал. Проблема в том, что объект delayed_job возвращается после того, как я вызываю Delayed::job.enqueue, поэтому я не могу передать то, чего у меня еще нет. - person ddayan; 27.01.2011
comment
ваша идея временных меток вокруг работы сработала, я мог бы добавить еще некоторые данные, которые мне нужны. - person ddayan; 19.02.2011

В DJ 2.1 задания могут определять до и после хуков. Вы можете использовать их для записи времени начала и окончания в базе данных.

class ParanoidNewsletterJob < NewsletterJob
  def before(job)
    record_start job
  end

  def after(job)
    record_finish job
  end
...
end
person betamatt    schedule 16.02.2011