Skip to content
This repository has been archived by the owner on Mar 27, 2021. It is now read-only.

Commit

Permalink
fix bug with jobs not triggering the first time immediately after cre…
Browse files Browse the repository at this point in the history
…ation
  • Loading branch information
obi-a committed Nov 26, 2017
1 parent 3241d03 commit fd6e4eb
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
2 changes: 1 addition & 1 deletion lib/ragios/messages/email_resolved.erb
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
<%= key %>: <%= value %>
<% end %>

Created on: <%= Time.now.to_s %>
This message was created at <%= Time.now.to_s %>
12 changes: 11 additions & 1 deletion lib/ragios/recurring_jobs/scheduler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ class Scheduler
attr_reader :internal_scheduler, :work_pusher, :events_pusher

ACTIONS = %w(run_now_and_schedule schedule_and_run_later trigger_work reschedule unschedule).freeze

# interval jobs - trigger immediately and then triggers every time the set interval has elasped
# every jobs - don't trigger immediately, it triggers first when the set interval has elasped and keep recurring at that interval
TYPES = [:every, :interval].freeze

def initialize(skip_actor_creation = false)
Expand Down Expand Up @@ -36,7 +39,14 @@ def schedule(scheduler_type, options)
unless TYPES.include?(scheduler_type)
raise ArgumentError.new("Unrecognized scheduler_type #{scheduler_type}")
end
job_id = @internal_scheduler.send(scheduler_type, options[:interval].to_s, :tags => options[:monitor_id]) do

opts = {
tags: options[:monitor_id]
}

opts[:first] = :now if scheduler_type == :interval

job_id = @internal_scheduler.interval options[:interval].to_s, opts do
trigger_work(options)
end

Expand Down
2 changes: 1 addition & 1 deletion spec/lib/recurring_jobs/scheduler_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@
options = {interval: "9h"}
@scheduler.schedule(:every, options)
job = @scheduler.internal_scheduler.jobs.first
expect(job).to be_a(Rufus::Scheduler::EveryJob)
expect(job).to be_a(Rufus::Scheduler::IntervalJob)
expect(job.original).to eq(options[:interval])
expect(@scheduler).to receive(:trigger_work).with(options)
job.callable.call
Expand Down

0 comments on commit fd6e4eb

Please sign in to comment.