Class: SolidQueue::RecurringTask
- Inherits:
-
Record
- Object
- Record
- SolidQueue::RecurringTask
show all
- Defined in:
- lib/solid_queue_mongoid/models/classes.rb,
lib/solid_queue_mongoid/models/recurring_task.rb,
lib/solid_queue_mongoid/models/recurring_task/arguments.rb
Defined Under Namespace
Modules: Arguments
Constant Summary
Constants inherited
from Record
SolidQueue::Record::INDEX_HINTS
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Record
create_or_find_by!, find_by!, index, index_specifications, index_specifications=, inherited, non_blocking_lock, supports_insert_conflict_target?, transaction, use_index
Class Method Details
.create_dynamic_task(key, **options) ⇒ Object
53
54
55
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 53
def create_dynamic_task(key, **options)
from_configuration(key, **options.merge(static: false)).save!
end
|
.create_or_update_all(tasks) ⇒ Object
Upsert all static tasks; used by Scheduler::RecurringSchedule#persist_tasks.
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 62
def create_or_update_all(tasks)
tasks.each do |task|
existing = where(key: task.key).first
if existing
existing.update!(task.attributes_for_upsert)
else
create!(task.attributes_for_upsert.merge(key: task.key))
end
end
end
|
.delete_dynamic_task(key) ⇒ Object
57
58
59
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 57
def delete_dynamic_task(key)
RecurringTask.dynamic.find_by!(key: key).destroy
end
|
.from_configuration(key, **options) ⇒ Object
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 39
def from_configuration(key, **options)
new(
key: key,
class_name: options[:class],
command: options[:command],
arguments: Array(options[:args]),
schedule: options[:schedule],
queue_name: options[:queue].presence,
priority: options[:priority].presence,
description: options[:description],
static: options.fetch(:static, true)
)
end
|
.wrap(args) ⇒ Object
35
36
37
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 35
def wrap(args)
args.is_a?(self) ? args : from_configuration(args.first, **args.second)
end
|
Instance Method Details
#attributes_for_upsert ⇒ Object
117
118
119
120
121
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 117
def attributes_for_upsert
attrs = attributes.except("_id", "id", "created_at", "updated_at")
attrs.delete("key")
attrs
end
|
#delay_from_now ⇒ Object
74
75
76
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 74
def delay_from_now
[(next_time - Time.current).to_f, 0.1].max
end
|
#enqueue(at:) ⇒ Object
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 90
def enqueue(at:)
SolidQueue.instrument(:enqueue_recurring_task, task: key, at: at) do |payload|
active_job = if using_solid_queue_adapter?
enqueue_and_record(run_at: at)
else
payload[:other_adapter] = true
perform_later.tap do |job|
payload[:enqueue_error] = job.enqueue_error&.message unless job.successfully_enqueued?
end
end
active_job.tap do |enqueued_job|
payload[:active_job_id] = enqueued_job.job_id if enqueued_job
end
rescue RecurringExecution::AlreadyRecorded
payload[:skipped] = true
false
rescue Job::EnqueueError => e
payload[:enqueue_error] = e.message
false
end
end
|
#last_enqueued_time ⇒ Object
86
87
88
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 86
def last_enqueued_time
recurring_executions.maximum(:run_at)
end
|
#next_time ⇒ Object
78
79
80
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 78
def next_time
parsed_schedule.next_time.utc
end
|
#previous_time ⇒ Object
82
83
84
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 82
def previous_time
parsed_schedule.previous_time.utc
end
|
#to_s ⇒ Object
113
114
115
|
# File 'lib/solid_queue_mongoid/models/recurring_task.rb', line 113
def to_s
"#{class_name}.perform_later(#{arguments.map(&:inspect).join(",")}) [ #{parsed_schedule.original} ]"
end
|