canvas_sync 0.16.2 → 0.17.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +49 -137
- data/app/models/canvas_sync/sync_batch.rb +5 -0
- data/db/migrate/20170915210836_create_canvas_sync_job_log.rb +12 -31
- data/db/migrate/20180725155729_add_job_id_to_canvas_sync_job_logs.rb +4 -13
- data/db/migrate/20190916154829_add_fork_count_to_canvas_sync_job_logs.rb +3 -11
- data/db/migrate/20201018210836_create_canvas_sync_sync_batches.rb +11 -0
- data/lib/canvas_sync.rb +36 -118
- data/lib/canvas_sync/concerns/api_syncable.rb +27 -0
- data/lib/canvas_sync/job.rb +5 -5
- data/lib/canvas_sync/job_batches/batch.rb +399 -0
- data/lib/canvas_sync/job_batches/batch_aware_job.rb +62 -0
- data/lib/canvas_sync/job_batches/callback.rb +153 -0
- data/lib/canvas_sync/job_batches/chain_builder.rb +210 -0
- data/lib/canvas_sync/job_batches/context_hash.rb +147 -0
- data/lib/canvas_sync/job_batches/jobs/base_job.rb +7 -0
- data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +18 -0
- data/lib/canvas_sync/job_batches/jobs/serial_batch_job.rb +73 -0
- data/lib/canvas_sync/job_batches/sidekiq.rb +93 -0
- data/lib/canvas_sync/job_batches/status.rb +63 -0
- data/lib/canvas_sync/jobs/begin_sync_chain_job.rb +34 -0
- data/lib/canvas_sync/jobs/report_checker.rb +3 -6
- data/lib/canvas_sync/jobs/report_processor_job.rb +2 -5
- data/lib/canvas_sync/jobs/report_starter.rb +27 -19
- data/lib/canvas_sync/jobs/sync_accounts_job.rb +3 -5
- data/lib/canvas_sync/jobs/sync_admins_job.rb +2 -4
- data/lib/canvas_sync/jobs/sync_assignment_groups_job.rb +2 -4
- data/lib/canvas_sync/jobs/sync_assignments_job.rb +2 -4
- data/lib/canvas_sync/jobs/sync_context_module_items_job.rb +2 -4
- data/lib/canvas_sync/jobs/sync_context_modules_job.rb +2 -4
- data/lib/canvas_sync/jobs/sync_provisioning_report_job.rb +5 -35
- data/lib/canvas_sync/jobs/sync_roles_job.rb +2 -5
- data/lib/canvas_sync/jobs/sync_simple_table_job.rb +11 -32
- data/lib/canvas_sync/jobs/sync_submissions_job.rb +2 -4
- data/lib/canvas_sync/jobs/sync_terms_job.rb +25 -8
- data/lib/canvas_sync/misc_helper.rb +15 -0
- data/lib/canvas_sync/version.rb +1 -1
- data/spec/canvas_sync/canvas_sync_spec.rb +136 -153
- data/spec/canvas_sync/jobs/job_spec.rb +9 -17
- data/spec/canvas_sync/jobs/report_checker_spec.rb +1 -3
- data/spec/canvas_sync/jobs/report_processor_job_spec.rb +0 -3
- data/spec/canvas_sync/jobs/report_starter_spec.rb +19 -28
- data/spec/canvas_sync/jobs/sync_admins_job_spec.rb +1 -4
- data/spec/canvas_sync/jobs/sync_assignment_groups_job_spec.rb +2 -1
- data/spec/canvas_sync/jobs/sync_assignments_job_spec.rb +3 -2
- data/spec/canvas_sync/jobs/sync_context_module_items_job_spec.rb +3 -2
- data/spec/canvas_sync/jobs/sync_context_modules_job_spec.rb +3 -2
- data/spec/canvas_sync/jobs/sync_provisioning_report_job_spec.rb +3 -35
- data/spec/canvas_sync/jobs/sync_roles_job_spec.rb +1 -4
- data/spec/canvas_sync/jobs/sync_simple_table_job_spec.rb +5 -12
- data/spec/canvas_sync/jobs/sync_submissions_job_spec.rb +2 -1
- data/spec/canvas_sync/jobs/sync_terms_job_spec.rb +1 -4
- data/spec/dummy/app/models/account.rb +3 -0
- data/spec/dummy/app/models/pseudonym.rb +14 -0
- data/spec/dummy/app/models/submission.rb +1 -0
- data/spec/dummy/app/models/user.rb +1 -0
- data/spec/dummy/config/environments/test.rb +2 -0
- data/spec/dummy/db/migrate/20201016181346_create_pseudonyms.rb +24 -0
- data/spec/dummy/db/schema.rb +24 -4
- data/spec/job_batching/batch_aware_job_spec.rb +100 -0
- data/spec/job_batching/batch_spec.rb +363 -0
- data/spec/job_batching/callback_spec.rb +38 -0
- data/spec/job_batching/flow_spec.rb +91 -0
- data/spec/job_batching/integration/integration.rb +57 -0
- data/spec/job_batching/integration/nested.rb +88 -0
- data/spec/job_batching/integration/simple.rb +47 -0
- data/spec/job_batching/integration/workflow.rb +134 -0
- data/spec/job_batching/integration_helper.rb +48 -0
- data/spec/job_batching/sidekiq_spec.rb +124 -0
- data/spec/job_batching/status_spec.rb +92 -0
- data/spec/job_batching/support/base_job.rb +14 -0
- data/spec/job_batching/support/sample_callback.rb +2 -0
- data/spec/spec_helper.rb +17 -0
- metadata +90 -8
- data/lib/canvas_sync/job_chain.rb +0 -57
- data/lib/canvas_sync/jobs/fork_gather.rb +0 -59
- data/spec/canvas_sync/jobs/fork_gather_spec.rb +0 -73
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe CanvasSync::JobBatches::Batch::Callback::Worker do
|
4
|
+
describe '#perform' do
|
5
|
+
it 'does not do anything if it cannot find the callback class' do
|
6
|
+
subject.perform('SampleCallback', 'complete', {}, 'ABCD', 'EFGH')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'does not do anything if event is different from complete or success' do
|
10
|
+
expect(SampleCallback).not_to receive(:new)
|
11
|
+
subject.perform('SampleCallback', 'ups', {}, 'ABCD', 'EFGH')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'calls on_success if defined' do
|
15
|
+
callback_instance = double('SampleCallback', on_success: true)
|
16
|
+
expect(SampleCallback).to receive(:new).and_return(callback_instance)
|
17
|
+
expect(callback_instance).to receive(:on_success)
|
18
|
+
.with(instance_of(CanvasSync::JobBatches::Batch::Status), {})
|
19
|
+
subject.perform('SampleCallback', 'success', {}, 'ABCD', 'EFGH')
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'calls on_complete if defined' do
|
23
|
+
callback_instance = double('SampleCallback')
|
24
|
+
expect(SampleCallback).to receive(:new).and_return(callback_instance)
|
25
|
+
expect(callback_instance).to receive(:on_complete)
|
26
|
+
.with(instance_of(CanvasSync::JobBatches::Batch::Status), {})
|
27
|
+
subject.perform('SampleCallback', 'complete', {}, 'ABCD', 'EFGH')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'calls specific callback if defined' do
|
31
|
+
callback_instance = double('SampleCallback')
|
32
|
+
expect(SampleCallback).to receive(:new).and_return(callback_instance)
|
33
|
+
expect(callback_instance).to receive(:sample_method)
|
34
|
+
.with(instance_of(CanvasSync::JobBatches::Batch::Status), {})
|
35
|
+
subject.perform('SampleCallback#sample_method', 'complete', {}, 'ABCD', 'EFGH')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class WorkerA < BatchTestJobBase
|
4
|
+
def perform
|
5
|
+
puts 'A'
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class WorkerB < BatchTestJobBase
|
10
|
+
def perform
|
11
|
+
puts 'B'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class WorkerC < BatchTestJobBase
|
16
|
+
def perform
|
17
|
+
puts 'C'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
RSpec.describe 'Batch flow' do
|
22
|
+
context 'when handling a batch' do
|
23
|
+
let(:batch) { CanvasSync::JobBatches::Batch.new }
|
24
|
+
before { batch.on(:complete, SampleCallback, :id => 42) }
|
25
|
+
before { batch.description = 'describing the batch' }
|
26
|
+
let(:status) { CanvasSync::JobBatches::Batch::Status.new(batch.bid) }
|
27
|
+
let(:jids) { batch.jobs do 3.times do TestWorker.perform_async end end }
|
28
|
+
let(:queue) { Sidekiq::Queue.new }
|
29
|
+
|
30
|
+
it 'correctly initializes' do
|
31
|
+
expect(jids.size).to eq(3)
|
32
|
+
|
33
|
+
expect(batch.bid).not_to be_nil
|
34
|
+
expect(batch.description).to eq('describing the batch')
|
35
|
+
|
36
|
+
batch.jobs {}
|
37
|
+
|
38
|
+
expect(status.total).to eq(3)
|
39
|
+
expect(status.pending).to eq(3)
|
40
|
+
expect(status.failures).to eq(0)
|
41
|
+
expect(status.complete?).to be false
|
42
|
+
expect(status.created_at).not_to be_nil
|
43
|
+
expect(status.bid).to eq(batch.bid)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'handles an empty batch' do
|
47
|
+
batch = CanvasSync::JobBatches::Batch.new
|
48
|
+
jids = batch.jobs do nil end
|
49
|
+
expect(jids.size).to eq(0)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when handling a nested batch' do
|
54
|
+
let(:batchA) { CanvasSync::JobBatches::Batch.new }
|
55
|
+
let(:batchB) { CanvasSync::JobBatches::Batch.new }
|
56
|
+
let(:batchC) { CanvasSync::JobBatches::Batch.new(batchA.bid) }
|
57
|
+
let(:batchD) { CanvasSync::JobBatches::Batch.new }
|
58
|
+
let(:jids) { [] }
|
59
|
+
let(:parent) { batchA.bid }
|
60
|
+
let(:children) { [] }
|
61
|
+
|
62
|
+
it 'handles a basic nested batch' do
|
63
|
+
batchA.jobs do
|
64
|
+
jids << WorkerA.perform_async
|
65
|
+
batchB.jobs do
|
66
|
+
jids << WorkerB.perform_async
|
67
|
+
end
|
68
|
+
jids << WorkerA.perform_async
|
69
|
+
children << batchB.bid
|
70
|
+
end
|
71
|
+
|
72
|
+
batchC.jobs do
|
73
|
+
batchD.jobs do
|
74
|
+
jids << WorkerC.perform_async
|
75
|
+
end
|
76
|
+
children << batchD.bid
|
77
|
+
end
|
78
|
+
|
79
|
+
expect(jids.size).to eq(4)
|
80
|
+
expect(CanvasSync::JobBatches::Batch::Status.new(parent).child_count).to eq(2)
|
81
|
+
children.each do |kid|
|
82
|
+
status = CanvasSync::JobBatches::Batch::Status.new(kid)
|
83
|
+
expect(status.child_count).to eq(0)
|
84
|
+
expect(status.pending).to eq(1)
|
85
|
+
expect(status.parent_bid).to eq(parent)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'integration_helper'
|
2
|
+
|
3
|
+
# Simple test of adding jobs to the current batch
|
4
|
+
# Batches:
|
5
|
+
# - Overall (TestWoker) + Another worker
|
6
|
+
|
7
|
+
class AnotherWorker
|
8
|
+
include Sidekiq::Worker
|
9
|
+
|
10
|
+
def perform
|
11
|
+
Sidekiq.logger.info "Another Worker"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class TestWorker
|
16
|
+
include Sidekiq::Worker
|
17
|
+
|
18
|
+
def perform
|
19
|
+
Sidekiq.logger.info "Test Worker"
|
20
|
+
if bid
|
21
|
+
batch.jobs do
|
22
|
+
AnotherWorker.perform_async
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class MyCallback
|
29
|
+
def on_success(status, options)
|
30
|
+
Sidekiq.logger.info "Success #{options} #{status.data}"
|
31
|
+
end
|
32
|
+
alias_method :multi, :on_success
|
33
|
+
|
34
|
+
def on_complete(status, options)
|
35
|
+
Sidekiq.logger.info "Complete #{options} #{status.data}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
batch = CanvasSync::JobBatches::Batch.new
|
40
|
+
batch.description = 'Test batch'
|
41
|
+
batch.callback_queue = :default
|
42
|
+
batch.on(:success, 'MyCallback#on_success', to: 'success@gmail.com')
|
43
|
+
batch.on(:success, 'MyCallback#multi', to: 'success@gmail.com')
|
44
|
+
batch.on(:complete, MyCallback, to: 'complete@gmail.com')
|
45
|
+
|
46
|
+
batch.jobs do
|
47
|
+
10.times do
|
48
|
+
TestWorker.perform_async
|
49
|
+
end
|
50
|
+
end
|
51
|
+
puts CanvasSync::JobBatches::Batch::Status.new(batch.bid).data
|
52
|
+
|
53
|
+
dump_redis_keys
|
54
|
+
|
55
|
+
Sidekiq::Worker.drain_all
|
56
|
+
|
57
|
+
dump_redis_keys
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'integration_helper'
|
2
|
+
|
3
|
+
# Tests deep nesting of batches
|
4
|
+
# Batches:
|
5
|
+
# - Overall (Worker 1)
|
6
|
+
# - Worker 2
|
7
|
+
# - Worker 3
|
8
|
+
# - Worker 4
|
9
|
+
|
10
|
+
class Worker1
|
11
|
+
include Sidekiq::Worker
|
12
|
+
|
13
|
+
def perform
|
14
|
+
Sidekiq.logger.info "Work1"
|
15
|
+
batch = CanvasSync::JobBatches::Batch.new
|
16
|
+
batch.on(:success, Worker2)
|
17
|
+
batch.jobs do
|
18
|
+
Worker2.perform_async
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Worker2
|
24
|
+
include Sidekiq::Worker
|
25
|
+
|
26
|
+
def perform
|
27
|
+
Sidekiq.logger.info "Work2"
|
28
|
+
batch = CanvasSync::JobBatches::Batch.new
|
29
|
+
batch.on(:success, Worker3)
|
30
|
+
batch.jobs do
|
31
|
+
Worker3.perform_async
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def on_success status, opts
|
36
|
+
Sidekiq.logger.info "Worker 2 Success"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Worker3
|
41
|
+
include Sidekiq::Worker
|
42
|
+
|
43
|
+
def perform
|
44
|
+
Sidekiq.logger.info "Work3"
|
45
|
+
batch = CanvasSync::JobBatches::Batch.new
|
46
|
+
batch.on(:success, Worker4)
|
47
|
+
batch.jobs do
|
48
|
+
Worker4.perform_async
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def on_success status, opts
|
53
|
+
Sidekiq.logger.info "Worker 3 Success"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class Worker4
|
58
|
+
include Sidekiq::Worker
|
59
|
+
|
60
|
+
def perform
|
61
|
+
Sidekiq.logger.info "Work4"
|
62
|
+
end
|
63
|
+
|
64
|
+
def on_success status, opts
|
65
|
+
Sidekiq.logger.info "Worker 4 Success"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
class SomeClass
|
71
|
+
def on_complete(status, options)
|
72
|
+
Sidekiq.logger.info "Overall Complete #{options} #{status.data}"
|
73
|
+
end
|
74
|
+
def on_success(status, options)
|
75
|
+
Sidekiq.logger.info "Overall Success #{options} #{status.data}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
batch = CanvasSync::JobBatches::Batch.new
|
79
|
+
batch.on(:success, SomeClass, 'uid' => 3)
|
80
|
+
batch.on(:complete, SomeClass, 'uid' => 3)
|
81
|
+
batch.jobs do
|
82
|
+
Worker1.perform_async
|
83
|
+
end
|
84
|
+
|
85
|
+
puts "Overall bid #{batch.bid}"
|
86
|
+
|
87
|
+
output, keys = process_tests
|
88
|
+
overall_tests output, keys
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'integration_helper'
|
2
|
+
|
3
|
+
# Simple nested batch without callbacks
|
4
|
+
# Batches:
|
5
|
+
# - Overall (Worker1)
|
6
|
+
# - Worker2
|
7
|
+
|
8
|
+
class Worker1
|
9
|
+
include Sidekiq::Worker
|
10
|
+
|
11
|
+
def perform
|
12
|
+
Sidekiq.logger.info "Work1"
|
13
|
+
batch = CanvasSync::JobBatches::Batch.new
|
14
|
+
batch.jobs do
|
15
|
+
Worker2.perform_async
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Worker2
|
21
|
+
include Sidekiq::Worker
|
22
|
+
|
23
|
+
def perform
|
24
|
+
Sidekiq.logger.info "Work2"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class SomeClass
|
29
|
+
def on_complete(status, options)
|
30
|
+
Sidekiq.logger.info "Overall Complete #{options} #{status.data}"
|
31
|
+
end
|
32
|
+
def on_success(status, options)
|
33
|
+
Sidekiq.logger.info "Overall Success #{options} #{status.data}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
batch = CanvasSync::JobBatches::Batch.new
|
38
|
+
batch.on(:success, SomeClass)
|
39
|
+
batch.on(:complete, SomeClass)
|
40
|
+
batch.jobs do
|
41
|
+
Worker1.perform_async
|
42
|
+
end
|
43
|
+
|
44
|
+
puts "Overall bid #{batch.bid}"
|
45
|
+
|
46
|
+
output, keys = process_tests
|
47
|
+
overall_tests output, keys
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'integration_helper'
|
2
|
+
|
3
|
+
# Complex workflow with sequential and nested
|
4
|
+
# Also test sub batches without callbacks
|
5
|
+
# Batches:
|
6
|
+
# - Overall
|
7
|
+
# - Worker1
|
8
|
+
# - Worker3
|
9
|
+
# - Worker2 + Worker3
|
10
|
+
# - Worker1
|
11
|
+
# - Worker3
|
12
|
+
# - Worker4
|
13
|
+
# - Worker5
|
14
|
+
|
15
|
+
class Callbacks
|
16
|
+
def worker1 status, opts
|
17
|
+
Sidekiq.logger.info "Success 1 #{status.data}"
|
18
|
+
|
19
|
+
overall = CanvasSync::JobBatches::Batch.new status.parent_bid
|
20
|
+
overall.jobs do
|
21
|
+
batch = CanvasSync::JobBatches::Batch.new
|
22
|
+
batch.on(:success, "Callbacks#worker2")
|
23
|
+
batch.jobs do
|
24
|
+
Worker2.perform_async
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def worker2 status, opts
|
30
|
+
Sidekiq.logger.info "Success 2 #{status.data}"
|
31
|
+
overall = CanvasSync::JobBatches::Batch.new status.parent_bid
|
32
|
+
overall.jobs do
|
33
|
+
batch = CanvasSync::JobBatches::Batch.new
|
34
|
+
batch.on(:success, "Callbacks#worker4")
|
35
|
+
batch.jobs do
|
36
|
+
Worker4.perform_async
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def worker4 status, opts
|
43
|
+
Sidekiq.logger.info "Success 4 #{status.data}"
|
44
|
+
overall = CanvasSync::JobBatches::Batch.new status.parent_bid
|
45
|
+
overall.jobs do
|
46
|
+
batch = CanvasSync::JobBatches::Batch.new
|
47
|
+
batch.on(:success, "Callbacks#worker5")
|
48
|
+
batch.jobs do
|
49
|
+
Worker5.perform_async
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def worker5 status, opts
|
55
|
+
Sidekiq.logger.info "Success 5 #{status.data}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class Worker1
|
60
|
+
include Sidekiq::Worker
|
61
|
+
|
62
|
+
def perform
|
63
|
+
Sidekiq.logger.info "Work 1"
|
64
|
+
batch = CanvasSync::JobBatches::Batch.new
|
65
|
+
batch.jobs do
|
66
|
+
Worker3.perform_async
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Worker2
|
72
|
+
include Sidekiq::Worker
|
73
|
+
|
74
|
+
def perform
|
75
|
+
Sidekiq.logger.info "Work 2"
|
76
|
+
if bid
|
77
|
+
batch.jobs do
|
78
|
+
Worker3.perform_async
|
79
|
+
end
|
80
|
+
newb = CanvasSync::JobBatches::Batch.new
|
81
|
+
newb.jobs do
|
82
|
+
Worker1.perform_async
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class Worker3
|
89
|
+
include Sidekiq::Worker
|
90
|
+
def perform
|
91
|
+
Sidekiq.logger.info "Work 3"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class Worker4
|
96
|
+
include Sidekiq::Worker
|
97
|
+
def perform
|
98
|
+
Sidekiq.logger.info "Work 4"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class Worker5
|
103
|
+
include Sidekiq::Worker
|
104
|
+
def perform
|
105
|
+
Sidekiq.logger.info "Work 5"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
class MyCallback
|
110
|
+
def on_success(status, options)
|
111
|
+
Sidekiq.logger.info "Overall Success #{options} #{status.data}"
|
112
|
+
end
|
113
|
+
alias_method :multi, :on_success
|
114
|
+
|
115
|
+
def on_complete(status, options)
|
116
|
+
Sidekiq.logger.info "Overall Complete #{options} #{status.data}"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
overall = CanvasSync::JobBatches::Batch.new
|
121
|
+
overall.on(:success, MyCallback, to: 'success@gmail.com')
|
122
|
+
overall.on(:complete, MyCallback, to: 'success@gmail.com')
|
123
|
+
overall.jobs do
|
124
|
+
batch1 = CanvasSync::JobBatches::Batch.new
|
125
|
+
batch1.on(:success, "Callbacks#worker1")
|
126
|
+
batch1.jobs do
|
127
|
+
Worker1.perform_async
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
puts "Overall bid #{overall.bid}"
|
132
|
+
|
133
|
+
output, keys = process_tests
|
134
|
+
overall_tests output, keys
|