You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.4 KiB
38 lines
1.4 KiB
# app/jobs/training_watch_job.rb
|
|
class TrainingWatchJob < ApplicationJob
|
|
queue_as :training_watch
|
|
include GoodJob::ActiveJobExtensions::Concurrency
|
|
|
|
good_job_control_concurrency_with(
|
|
# Maximum number of unfinished jobs to allow with the concurrency key
|
|
total_limit: 1,
|
|
|
|
# Or, if more control is needed:
|
|
# Maximum number of jobs with the concurrency key to be
|
|
# concurrently enqueued (excludes performing jobs)
|
|
enqueue_limit: 1,
|
|
|
|
# Maximum number of jobs with the concurrency key to be
|
|
# concurrently performed (excludes enqueued jobs)
|
|
perform_limit: 1,
|
|
|
|
# Note: Under heavy load, the total number of jobs may exceed the
|
|
# sum of `enqueue_limit` and `perform_limit` because of race conditions
|
|
# caused by imperfectly disjunctive states. If you need to constrain
|
|
# the total number of jobs, use `total_limit` instead. See #378.
|
|
|
|
# A unique key to be globally locked against.
|
|
# Can be String or Lambda/Proc that is invoked in the context of the job.
|
|
# Note: Arguments passed to #perform_later must be accessed through `arguments` method.
|
|
key: -> { "Unique-TrainingWatchJob" }
|
|
)
|
|
def perform
|
|
results = TrainingWatch::Checker.new.run!
|
|
return if results.empty?
|
|
|
|
email = ENV.fetch("TRAINING_WATCH_NOTIFY_EMAIL", "christoph@marzell.net")
|
|
return if email.blank?
|
|
|
|
TrainingWatchMailer.notify(email: email, results: results).deliver_now
|
|
end
|
|
end
|