Rails engine to register jobs history, adding: job state, error feedback, duration, etc.
Add to your Gemfile:
gem "active_job_log"bundle installThen, run the installer:
rails generate active_job_log:installSuppose you have defined the following job:
class MyJob < ActiveJob::Base
def perform(param1, param2)
# ...
end
endInstalling this gem, after executing the job, if you execute like this:
MyJob.perform_later("p1", "p2")you will get:
job = ActiveJobLog::Job.last
job.job_id #=> "0ca5075e-c601-45a1-9bbe-147b4d3d5391"
job.params #=> ["p1", "p2"]
job.status #=> "finished"
job.job_class #=> "MyJob"
job.error #=> nil
job.stack_trace #=> nil
job.queued_at #=> Sat, 12 May 2018 20:25:00 UTC +00:00
job.started_at #=> Sat, 12 May 2018 20:30:00 UTC +00:00
job.ended_at #=> Sat, 12 May 2018 20:30:00 UTC +00:00
job.queued_duration #=> 5
job.execution_duration #=> 10
job.total_duration #=> 15
job.queue_name #=> "default"
job.executions #=> 0-
job_id: ActiveJob's job_id. -
params: parameters used to call your job.
queued pending finished failed
-
status:queued: the job is queued but not executed yet.pending: the job is being executed.finished: the job ended satisfactorily.failed: the job ended with errors.
-
job_class: a string containing your job class name. -
error: the exception message if your job ends with errors. -
stack_trace: the exception backtrace if your job ends with errors. -
queued_at: datetime when job was queued. -
started_at: datetime when job was executed. -
ended_at: datetime when job finished regardless of whether it ended or not with errors. -
queued_duration: seconds that lasted in queue (not registered if it is executed withperform_now). -
execution_duration: seconds that the execution lasted. -
total_duration: queued_duration + execution_duration. -
queue_name: job's queue name. -
executions: number of times this job has been executed (which increments on every retry, like after an exception.
If you want to avoid logging a specific job you have to add disable_job_logs config option on that job. For example:
class MyJob < ActiveJob::Base
disable_job_logs
def perform(param1, param2)
# ...
end
endIf your job calls the rescue_from method, you will need to call the fail_job method explicitly to log the job completion. For example:
class MyJob < ActiveJob::Base
def perform(param1, param2)
# ...
end
rescue_from(Exception) do |exception|
# ...
fail_job(exception) #=> you need to call this method.
end
endTo run the specs you need to execute, in the root path of the gem, the following command:
bundle exec guardYou need to put all your tests in the /active_job_log/spec/dummy/spec/ directory.
On master/main branch...
- Change
VERSIONinlib/gemaker/version.rb. - Change
Unreleasedtitle to current version inCHANGELOG.md. - Run
bundle install. - Commit new release. For example:
Releasing v0.1.0. - Create tag. For example:
git tag v0.1.0. - Push tag. For example:
git push origin v0.1.0.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
Thank you contributors!
Active Job Log is maintained by platanus.
Active Job Log is © 2021 platanus, spa. It is free software and may be redistributed under the terms specified in the LICENSE file.