Class: SolidQueue::Scheduler::RecurringSchedule

Inherits:
Object
  • Object
show all
Includes:
AppExecutor
Defined in:
lib/solid_queue/scheduler/recurring_schedule.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from AppExecutor

#create_thread, #handle_thread_error, #wrap_in_app_executor

Constructor Details

#initialize(static_tasks, dynamic_tasks_enabled: false) ⇒ RecurringSchedule

Returns a new instance of RecurringSchedule.



9
10
11
12
13
14
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 9

def initialize(static_tasks, dynamic_tasks_enabled: false)
  @static_tasks = Array(static_tasks).map { |task| RecurringTask.wrap(task) }.select(&:valid?)
  @dynamic_tasks_enabled = dynamic_tasks_enabled

  @scheduled_tasks = Concurrent::Hash.new
end

Instance Attribute Details

#scheduled_tasksObject (readonly)

Returns the value of attribute scheduled_tasks.



7
8
9
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 7

def scheduled_tasks
  @scheduled_tasks
end

Instance Method Details

#configured_tasksObject



16
17
18
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 16

def configured_tasks
  static_tasks + dynamic_tasks
end

#empty?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 20

def empty?
  scheduled_tasks.empty? && dynamic_tasks.empty?
end

#reschedule_dynamic_tasksObject



49
50
51
52
53
54
55
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 49

def reschedule_dynamic_tasks
  wrap_in_app_executor do
    reload_dynamic_tasks
    schedule_created_dynamic_tasks
    unschedule_deleted_dynamic_tasks
  end
end

#schedule_task(task, run_at: task.next_time) ⇒ Object



36
37
38
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 36

def schedule_task(task, run_at: task.next_time)
  scheduled_tasks[task.key] = schedule(task, run_at: run_at)
end

#schedule_tasksObject



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 24

def schedule_tasks
  wrap_in_app_executor do
    persist_static_tasks
    reload_static_tasks
    reload_dynamic_tasks
  end

  configured_tasks.each do |task|
    schedule_task(task)
  end
end

#task_keysObject



45
46
47
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 45

def task_keys
  configured_tasks.map(&:key)
end

#unschedule_tasksObject



40
41
42
43
# File 'lib/solid_queue/scheduler/recurring_schedule.rb', line 40

def unschedule_tasks
  scheduled_tasks.values.each(&:cancel)
  scheduled_tasks.clear
end