Class: CanvasSync::Jobs::BeginSyncChainJob
Instance Attribute Summary collapse
#job_log
Class Method Summary
collapse
Instance Method Summary
collapse
#create_job_log, #report_checker_wait_time, #update_or_create_model
Instance Attribute Details
#globals ⇒ Object
Returns the value of attribute globals.
4
5
6
|
# File 'lib/canvas_sync/jobs/begin_sync_chain_job.rb', line 4
def globals
@globals
end
|
Class Method Details
.batch_completed(status, options) ⇒ Object
90
91
92
93
94
95
96
|
# File 'lib/canvas_sync/jobs/begin_sync_chain_job.rb', line 90
def self.batch_completed(status, options)
sbatch = SyncBatch.find(options['sync_batch_id'])
sbatch.update!(
status: status.success? ? 'completed' : 'failed',
completed_at: DateTime.now,
)
end
|
Instance Method Details
#genre ⇒ Object
86
87
88
|
# File 'lib/canvas_sync/jobs/begin_sync_chain_job.rb', line 86
def genre
globals[:batch_genre] || "default"
end
|
#last_full_sync ⇒ Object
82
83
84
|
# File 'lib/canvas_sync/jobs/begin_sync_chain_job.rb', line 82
def last_full_sync
last_full_sync_record&.started_at
end
|
#last_full_sync_record ⇒ Object
78
79
80
|
# File 'lib/canvas_sync/jobs/begin_sync_chain_job.rb', line 78
def last_full_sync_record
@last_full_sync_record ||= SyncBatch.where(status: ['completed', 'processing'], full_sync: true, batch_genre: genre).last
end
|
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/canvas_sync/jobs/begin_sync_chain_job.rb', line 6
def perform(chain_definition, globals = {})
@globals = globals
if globals[:updated_after] == nil && Rails.env.development?
globals[:updated_after] = false
end
if globals[:updated_after] == false
globals[:updated_after] = nil
elsif !globals[:updated_after].present? || globals[:updated_after] == true
last_batch = SyncBatch.where(status: 'completed', batch_genre: genre).last
globals[:full_sync_every] ||= "sunday/2"
globals[:updated_after] = ((last_batch.started_at - 1.day).iso8601 rescue nil)
end
if last_full_sync_record&.status == 'processing' && last_full_sync > 12.hours.ago
Rails.logger.warn("Attempted to start a '#{genre}' sync while a full-sync is still processing.")
return
end
if should_full_sync?(globals[:full_sync_every])
globals[:updated_after] = nil
end
sync_batch = SyncBatch.create!(
started_at: DateTime.now,
full_sync: globals[:updated_after] == nil,
batch_genre: genre,
status: 'processing',
)
globals[:batch_genre] = genre
globals[:batch_start_time] = sync_batch.started_at.iso8601
globals[:sync_batch_id] = sync_batch.id
JobBatches::Batch.new.tap do |b|
b.description = "CanvasSync Root Batch (SyncBatch##{sync_batch.id})"
b.on(:complete, "#{self.class.to_s}.batch_completed", sync_batch_id: sync_batch.id)
b.on(:success, "#{self.class.to_s}.batch_completed", sync_batch_id: sync_batch.id)
b.context = globals
b.jobs do
JobBatches::SerialBatchJob.perform_now(chain_definition)
end
sync_batch.update(batch_bid: b.bid)
end
end
|
#should_full_sync?(opt) ⇒ Boolean
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/canvas_sync/jobs/begin_sync_chain_job.rb', line 54
def should_full_sync?(opt)
return true unless last_full_sync.present?
return false unless opt.is_a?(String)
case opt.strip
when %r{^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)(?:/(\d+))?$}
m = Regexp.last_match
day = m[1]
skip = m[2] || "1"
DateTime.now.send(:"#{day}?") && last_full_sync.end_of_day <= (skip.to_i.weeks.ago.end_of_day)
when %r{^(\d+)\%$}
m = Regexp.last_match
rand(100) < m[1].to_i
when %r{^(\d+) ?days$}
m = Regexp.last_match
last_full_sync.end_of_day <= m[1].to_i.days.ago.end_of_day
when %r{^(\d+)$} m = Regexp.last_match
last_full_sync.end_of_day <= m[1].to_i.seconds.ago.end_of_day
else
false
end
end
|