rocketjob 1.3.0 → 2.0.0.rc1
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/LICENSE.txt +201 -0
- data/README.md +15 -10
- data/bin/rocketjob +3 -1
- data/bin/rocketjob_perf +92 -0
- data/lib/rocket_job/cli.rb +71 -31
- data/lib/rocket_job/config.rb +21 -23
- data/lib/rocket_job/dirmon_entry.rb +63 -45
- data/lib/rocket_job/extensions/aasm.rb +56 -0
- data/lib/rocket_job/extensions/mongo.rb +23 -0
- data/lib/rocket_job/job.rb +9 -433
- data/lib/rocket_job/jobs/dirmon_job.rb +20 -20
- data/lib/rocket_job/jobs/simple_job.rb +12 -0
- data/lib/rocket_job/plugins/document.rb +69 -0
- data/lib/rocket_job/plugins/job/callbacks.rb +92 -0
- data/lib/rocket_job/plugins/job/defaults.rb +40 -0
- data/lib/rocket_job/plugins/job/logger.rb +36 -0
- data/lib/rocket_job/plugins/job/model.rb +288 -0
- data/lib/rocket_job/plugins/job/persistence.rb +167 -0
- data/lib/rocket_job/plugins/job/state_machine.rb +166 -0
- data/lib/rocket_job/plugins/job/worker.rb +167 -0
- data/lib/rocket_job/plugins/restart.rb +54 -0
- data/lib/rocket_job/plugins/singleton.rb +26 -0
- data/lib/rocket_job/plugins/state_machine.rb +105 -0
- data/lib/rocket_job/version.rb +1 -1
- data/lib/rocket_job/worker.rb +150 -119
- data/lib/rocketjob.rb +43 -21
- data/test/config_test.rb +12 -0
- data/test/dirmon_entry_test.rb +81 -85
- data/test/dirmon_job_test.rb +40 -28
- data/test/job_test.rb +14 -257
- data/test/plugins/job/callbacks_test.rb +163 -0
- data/test/plugins/job/defaults_test.rb +52 -0
- data/test/plugins/job/logger_test.rb +58 -0
- data/test/plugins/job/model_test.rb +97 -0
- data/test/plugins/job/persistence_test.rb +81 -0
- data/test/plugins/job/state_machine_test.rb +118 -0
- data/test/plugins/job/worker_test.rb +183 -0
- data/test/plugins/restart_test.rb +185 -0
- data/test/plugins/singleton_test.rb +94 -0
- data/test/plugins/state_machine_event_callbacks_test.rb +101 -0
- data/test/plugins/state_machine_test.rb +64 -0
- data/test/test_helper.rb +3 -36
- metadata +64 -19
- data/lib/rocket_job/concerns/singleton.rb +0 -33
- data/lib/rocket_job/concerns/worker.rb +0 -214
- data/test/files/_archive/archived.txt +0 -3
- data/test/job_worker_test.rb +0 -86
- data/test/jobs/test_job.rb +0 -46
- data/test/worker_test.rb +0 -97
data/test/job_worker_test.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
require_relative 'jobs/test_job'
|
3
|
-
|
4
|
-
# Unit Test for RocketJob::Job
|
5
|
-
class WorkerTest < Minitest::Test
|
6
|
-
describe RocketJob::Job do
|
7
|
-
[true, false].each do |inline_mode|
|
8
|
-
before do
|
9
|
-
RocketJob::Config.inline_mode = inline_mode
|
10
|
-
|
11
|
-
@worker = RocketJob::Worker.new
|
12
|
-
@worker.started
|
13
|
-
end
|
14
|
-
|
15
|
-
after do
|
16
|
-
@job.destroy if @job && !@job.new_record?
|
17
|
-
RocketJob::Config.inline_mode = false
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '.perform_later' do
|
21
|
-
it "process single request (inline_mode=#{inline_mode})" do
|
22
|
-
@job = Jobs::TestJob.perform_later(1) do |job|
|
23
|
-
job.destroy_on_complete = false
|
24
|
-
end
|
25
|
-
assert_nil @job.worker_name
|
26
|
-
assert_nil @job.completed_at
|
27
|
-
assert @job.created_at
|
28
|
-
assert_nil @job.description
|
29
|
-
assert_equal false, @job.destroy_on_complete
|
30
|
-
assert_nil @job.expires_at
|
31
|
-
assert_equal 0, @job.percent_complete
|
32
|
-
assert_equal 51, @job.priority
|
33
|
-
assert_equal 0, @job.failure_count
|
34
|
-
assert_nil @job.run_at
|
35
|
-
assert_nil @job.started_at
|
36
|
-
assert_equal :queued, @job.state
|
37
|
-
|
38
|
-
@job.worker_name = 'me'
|
39
|
-
@job.start
|
40
|
-
assert_equal false, @job.work(@worker), @job.exception.inspect
|
41
|
-
assert_equal true, @job.completed?
|
42
|
-
assert_equal 2, Jobs::TestJob.result
|
43
|
-
|
44
|
-
assert_nil @job.worker_name
|
45
|
-
assert @job.completed_at
|
46
|
-
assert @job.created_at
|
47
|
-
assert_nil @job.description
|
48
|
-
assert_equal false, @job.destroy_on_complete
|
49
|
-
assert_nil @job.expires_at
|
50
|
-
assert_equal 100, @job.percent_complete
|
51
|
-
assert_equal 51, @job.priority
|
52
|
-
assert_equal 0, @job.failure_count
|
53
|
-
assert_nil @job.run_at
|
54
|
-
assert @job.started_at
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '.later' do
|
59
|
-
it "process non default method (inline_mode=#{inline_mode})" do
|
60
|
-
@job = Jobs::TestJob.later(:sum, 23, 45)
|
61
|
-
@job.start
|
62
|
-
assert_equal false, @job.work(@worker), @job.exception.inspect
|
63
|
-
assert_equal true, @job.completed?
|
64
|
-
assert_equal 68, Jobs::TestJob.result
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe '.perform_now' do
|
69
|
-
it "process perform (inline_mode=#{inline_mode})" do
|
70
|
-
@job = Jobs::TestJob.perform_now(5)
|
71
|
-
assert_equal true, @job.completed?
|
72
|
-
assert_equal 6, Jobs::TestJob.result
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe '.now' do
|
77
|
-
it "process non default method (inline_mode=#{inline_mode})" do
|
78
|
-
@job = Jobs::TestJob.now(:sum, 23, 45)
|
79
|
-
assert_equal true, @job.completed?, @job.inspect
|
80
|
-
assert_equal 68, Jobs::TestJob.result
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
data/test/jobs/test_job.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'rocketjob'
|
2
|
-
module Jobs
|
3
|
-
class TestJob < RocketJob::Job
|
4
|
-
rocket_job do |job|
|
5
|
-
job.priority = 51
|
6
|
-
end
|
7
|
-
|
8
|
-
@@result = nil
|
9
|
-
|
10
|
-
# For holding test results
|
11
|
-
def self.result
|
12
|
-
@@result
|
13
|
-
end
|
14
|
-
|
15
|
-
def perform(first)
|
16
|
-
@@result = first + 1
|
17
|
-
end
|
18
|
-
|
19
|
-
def sum(a, b)
|
20
|
-
@@result = a + b
|
21
|
-
end
|
22
|
-
|
23
|
-
# Test silencing noisy logging
|
24
|
-
def noisy_logger
|
25
|
-
logger.info 'some very noisy logging'
|
26
|
-
end
|
27
|
-
|
28
|
-
# Test increasing log level for debugging purposes
|
29
|
-
def debug_logging
|
30
|
-
logger.trace 'enable tracing level for just the job instance'
|
31
|
-
end
|
32
|
-
|
33
|
-
def before_event(hash)
|
34
|
-
hash['before_event'] = true
|
35
|
-
end
|
36
|
-
|
37
|
-
def event(hash)
|
38
|
-
hash['event'] = true
|
39
|
-
end
|
40
|
-
|
41
|
-
def after_event(hash)
|
42
|
-
hash['after_event'] = true
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
data/test/worker_test.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
require_relative 'jobs/test_job'
|
3
|
-
|
4
|
-
# Unit Test for RocketJob::Worker
|
5
|
-
class WorkerTest < Minitest::Test
|
6
|
-
describe RocketJob::Worker do
|
7
|
-
before do
|
8
|
-
RocketJob::Config.instance.heartbeat_seconds = 0.1
|
9
|
-
RocketJob::Config.instance.max_poll_seconds = 0.1
|
10
|
-
|
11
|
-
@worker = RocketJob::Worker.new
|
12
|
-
@description = 'Hello World'
|
13
|
-
@arguments = [1]
|
14
|
-
@job = Jobs::TestJob.new(
|
15
|
-
description: @description,
|
16
|
-
arguments: @arguments,
|
17
|
-
destroy_on_complete: false
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
after do
|
22
|
-
@job.destroy if @job && !@job.new_record?
|
23
|
-
@worker.destroy if @worker && !@worker.new_record?
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '.config' do
|
27
|
-
it 'support multiple databases' do
|
28
|
-
assert_equal 'test_rocketjob', RocketJob::Job.collection.db.name
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#run' do
|
33
|
-
it 'run a worker' do
|
34
|
-
Thread.new do
|
35
|
-
sleep 1
|
36
|
-
@worker.stop!
|
37
|
-
end
|
38
|
-
@worker.run
|
39
|
-
assert_equal :stopping, @worker.state, @worker.inspect
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '#zombie?' do
|
44
|
-
before do
|
45
|
-
RocketJob::Config.instance.heartbeat_seconds = 1
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'when not a zombie' do
|
49
|
-
@worker.build_heartbeat(
|
50
|
-
updated_at: 2.seconds.ago,
|
51
|
-
current_threads: 3
|
52
|
-
)
|
53
|
-
@worker.started!
|
54
|
-
assert_equal false, @worker.zombie?
|
55
|
-
assert_equal false, @worker.zombie?(4)
|
56
|
-
assert_equal true, @worker.zombie?(1)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'when a zombie' do
|
60
|
-
@worker.build_heartbeat(
|
61
|
-
updated_at: 1.hour.ago,
|
62
|
-
current_threads: 5
|
63
|
-
)
|
64
|
-
@worker.started!
|
65
|
-
assert_equal true, @worker.zombie?
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe '.destroy_zombies' do
|
70
|
-
before do
|
71
|
-
RocketJob::Config.instance.heartbeat_seconds = 1
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'when not a zombie' do
|
75
|
-
@worker.build_heartbeat(
|
76
|
-
updated_at: 2.seconds.ago,
|
77
|
-
current_threads: 3
|
78
|
-
)
|
79
|
-
@worker.started!
|
80
|
-
assert_equal 0, RocketJob::Worker.destroy_zombies
|
81
|
-
assert_equal true, RocketJob::Worker.where(id: @worker.id).exist?
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'when a zombie' do
|
85
|
-
@worker.build_heartbeat(
|
86
|
-
updated_at: 10.seconds.ago,
|
87
|
-
current_threads: 3
|
88
|
-
)
|
89
|
-
@worker.started!
|
90
|
-
assert_equal 1, RocketJob::Worker.destroy_zombies
|
91
|
-
assert_equal false, RocketJob::Worker.where(id: @worker.id).exist?
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
97
|
-
end
|