rocketjob 2.0.0.rc3 → 2.0.0
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/bin/rocketjob +1 -1
- data/bin/rocketjob_perf +2 -83
- data/lib/rocket_job/cli.rb +13 -3
- data/lib/rocket_job/dirmon_entry.rb +2 -2
- data/lib/rocket_job/extensions/mongo.rb +1 -1
- data/lib/rocket_job/performance.rb +82 -0
- data/lib/rocket_job/plugins/cron.rb +130 -0
- data/lib/rocket_job/plugins/job/logger.rb +1 -1
- data/lib/rocket_job/plugins/processing_window.rb +88 -0
- data/lib/rocket_job/plugins/rufus/cron_line.rb +492 -0
- data/lib/rocket_job/plugins/rufus/zo_time.rb +291 -0
- data/lib/rocket_job/version.rb +1 -1
- data/lib/rocket_job/worker.rb +1 -1
- data/lib/rocketjob.rb +26 -20
- data/test/plugins/cron_test.rb +78 -0
- data/test/plugins/job/logger_test.rb +4 -4
- data/test/plugins/processing_window_test.rb +111 -0
- data/test/test_helper.rb +1 -1
- metadata +33 -38
@@ -0,0 +1,111 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
# Unit Test for RocketJob::Job
|
4
|
+
module Plugins
|
5
|
+
class ProcessingWindowTest < Minitest::Test
|
6
|
+
class ProcessingWindowJob < RocketJob::Job
|
7
|
+
include RocketJob::Plugins::ProcessingWindow
|
8
|
+
|
9
|
+
def perform
|
10
|
+
'DONE'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe RocketJob::Plugins::ProcessingWindow do
|
15
|
+
before do
|
16
|
+
# destroy_all could create new instances
|
17
|
+
ProcessingWindowJob.delete_all
|
18
|
+
assert_equal 0, ProcessingWindowJob.count
|
19
|
+
end
|
20
|
+
|
21
|
+
after do
|
22
|
+
@job.destroy if @job && !@job.new_record?
|
23
|
+
ProcessingWindowJob.delete_all
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#create!' do
|
27
|
+
it 'queues a new job' do
|
28
|
+
@job = ProcessingWindowJob.create!(processing_schedule: '* 1 * * *', processing_duration: 1.hour)
|
29
|
+
assert @job.valid?
|
30
|
+
refute @job.new_record?
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'timezones are supported' do
|
34
|
+
it 'handles UTC' do
|
35
|
+
time = Time.parse('2015-12-09 17:50:05 +0000')
|
36
|
+
Time.stub(:now, time) do
|
37
|
+
@job = ProcessingWindowJob.create!(processing_schedule: '* 1 * * * UTC', processing_duration: 1.hour)
|
38
|
+
end
|
39
|
+
assert @job.valid?
|
40
|
+
refute @job.new_record?
|
41
|
+
assert_equal Time.parse('2015-12-10 01:00:00 UTC'), @job.run_at
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'handles Eastern' do
|
45
|
+
time = Time.parse('2015-12-09 17:50:05 +0000')
|
46
|
+
Time.stub(:now, time) do
|
47
|
+
@job = ProcessingWindowJob.create!(processing_schedule: '* 1 * * * America/New_York', processing_duration: 1.hour)
|
48
|
+
end
|
49
|
+
assert @job.valid?
|
50
|
+
refute @job.new_record?
|
51
|
+
assert_equal Time.parse('2015-12-10 06:00:00 UTC'), @job.run_at
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#rocket_job_processing_window_active?' do
|
57
|
+
it 'returns true when in the processing window' do
|
58
|
+
time = Time.parse('2015-12-09 17:50:05 +0000')
|
59
|
+
@job = ProcessingWindowJob.new(processing_schedule: '* 17 * * * UTC', processing_duration: 1.hour)
|
60
|
+
result = Time.stub(:now, time) do
|
61
|
+
@job.rocket_job_processing_window_active?
|
62
|
+
end
|
63
|
+
assert result, @job.attributes.ai
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'returns false when not in the processing window' do
|
67
|
+
time = Time.parse('2015-12-09 16:50:05 +0000')
|
68
|
+
@job = ProcessingWindowJob.new(processing_schedule: '* 17 * * * UTC', processing_duration: 1.hour)
|
69
|
+
result = Time.stub(:now, time) do
|
70
|
+
@job.rocket_job_processing_window_active?
|
71
|
+
end
|
72
|
+
refute result, @job.attributes.ai
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#valid?' do
|
77
|
+
it 'fails on missing processing_schedule' do
|
78
|
+
@job = ProcessingWindowJob.new
|
79
|
+
refute @job.valid?
|
80
|
+
assert_equal "can't be blank", @job.errors.messages[:processing_schedule].first
|
81
|
+
assert_equal "not a string: nil", @job.errors.messages[:processing_schedule].second
|
82
|
+
assert_equal "can't be blank", @job.errors.messages[:processing_duration].first
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'fails on bad cron schedule' do
|
86
|
+
@job = ProcessingWindowJob.new(processing_schedule: 'blah')
|
87
|
+
refute @job.valid?
|
88
|
+
assert_equal "not a valid cronline : 'blah'", @job.errors.messages[:processing_schedule].first
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'passes on valid cron schedule' do
|
92
|
+
@job = ProcessingWindowJob.new(processing_schedule: '* 1 * * *', processing_duration: 1.hour)
|
93
|
+
assert @job.valid?
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe 're-queue' do
|
98
|
+
it 'if outside processing window' do
|
99
|
+
time = Time.parse('2015-12-09 16:50:05 +0000')
|
100
|
+
Time.stub(:now, time) do
|
101
|
+
@job = ProcessingWindowJob.new(processing_schedule: '* 17 * * * UTC', processing_duration: 1.hour)
|
102
|
+
@job.perform_now
|
103
|
+
end
|
104
|
+
assert @job.queued?, @job.attributes.ai
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -14,7 +14,7 @@ require 'rocketjob'
|
|
14
14
|
|
15
15
|
MiniTest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
16
16
|
|
17
|
-
SemanticLogger.add_appender('test.log',
|
17
|
+
SemanticLogger.add_appender(file_name: 'test.log', formatter: :color)
|
18
18
|
SemanticLogger.default_level = :debug
|
19
19
|
|
20
20
|
RocketJob::Config.load!('test', 'test/config/mongo.yml')
|
metadata
CHANGED
@@ -1,43 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocketjob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '4.3'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '4.3'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: semantic_logger
|
14
|
+
name: concurrent-ruby
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - "~>"
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
19
|
+
version: '1.0'
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
26
|
+
version: '1.0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: mongo_ha
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,63 +39,63 @@ dependencies:
|
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '1.11'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: mongo_mapper
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
47
|
+
version: '0.13'
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
54
|
+
version: '0.13'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: semantic_logger
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
61
|
+
version: '3.1'
|
76
62
|
type: :runtime
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
68
|
+
version: '3.1'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: symmetric-encryption
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- - "
|
73
|
+
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
75
|
version: '3.0'
|
90
76
|
type: :runtime
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- - "
|
80
|
+
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '3.0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: aasm
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- - "
|
87
|
+
- - ">="
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
89
|
+
version: '4.3'
|
104
90
|
type: :runtime
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- - "
|
94
|
+
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
111
|
-
description:
|
112
|
-
|
96
|
+
version: '4.3'
|
97
|
+
description: Batch Processing System focused on performance, scalability, reliability,
|
98
|
+
and visibility of every job in the system.
|
113
99
|
email:
|
114
100
|
- reidmo@gmail.com
|
115
101
|
executables:
|
@@ -133,6 +119,8 @@ files:
|
|
133
119
|
- lib/rocket_job/job_exception.rb
|
134
120
|
- lib/rocket_job/jobs/dirmon_job.rb
|
135
121
|
- lib/rocket_job/jobs/simple_job.rb
|
122
|
+
- lib/rocket_job/performance.rb
|
123
|
+
- lib/rocket_job/plugins/cron.rb
|
136
124
|
- lib/rocket_job/plugins/document.rb
|
137
125
|
- lib/rocket_job/plugins/document/static.rb
|
138
126
|
- lib/rocket_job/plugins/job/callbacks.rb
|
@@ -142,7 +130,10 @@ files:
|
|
142
130
|
- lib/rocket_job/plugins/job/persistence.rb
|
143
131
|
- lib/rocket_job/plugins/job/state_machine.rb
|
144
132
|
- lib/rocket_job/plugins/job/worker.rb
|
133
|
+
- lib/rocket_job/plugins/processing_window.rb
|
145
134
|
- lib/rocket_job/plugins/restart.rb
|
135
|
+
- lib/rocket_job/plugins/rufus/cron_line.rb
|
136
|
+
- lib/rocket_job/plugins/rufus/zo_time.rb
|
146
137
|
- lib/rocket_job/plugins/singleton.rb
|
147
138
|
- lib/rocket_job/plugins/state_machine.rb
|
148
139
|
- lib/rocket_job/version.rb
|
@@ -154,6 +145,7 @@ files:
|
|
154
145
|
- test/dirmon_job_test.rb
|
155
146
|
- test/files/text.txt
|
156
147
|
- test/job_test.rb
|
148
|
+
- test/plugins/cron_test.rb
|
157
149
|
- test/plugins/job/callbacks_test.rb
|
158
150
|
- test/plugins/job/defaults_test.rb
|
159
151
|
- test/plugins/job/logger_test.rb
|
@@ -161,6 +153,7 @@ files:
|
|
161
153
|
- test/plugins/job/persistence_test.rb
|
162
154
|
- test/plugins/job/state_machine_test.rb
|
163
155
|
- test/plugins/job/worker_test.rb
|
156
|
+
- test/plugins/processing_window_test.rb
|
164
157
|
- test/plugins/restart_test.rb
|
165
158
|
- test/plugins/singleton_test.rb
|
166
159
|
- test/plugins/state_machine_event_callbacks_test.rb
|
@@ -168,7 +161,7 @@ files:
|
|
168
161
|
- test/test_helper.rb
|
169
162
|
homepage: http://rocketjob.io
|
170
163
|
licenses:
|
171
|
-
-
|
164
|
+
- Apache-2.0
|
172
165
|
metadata: {}
|
173
166
|
post_install_message:
|
174
167
|
rdoc_options: []
|
@@ -181,15 +174,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
181
174
|
version: '0'
|
182
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
176
|
requirements:
|
184
|
-
- - "
|
177
|
+
- - ">="
|
185
178
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
179
|
+
version: '0'
|
187
180
|
requirements: []
|
188
181
|
rubyforge_project:
|
189
182
|
rubygems_version: 2.4.8
|
190
183
|
signing_key:
|
191
184
|
specification_version: 4
|
192
|
-
summary:
|
185
|
+
summary: Batch Processing System for Ruby
|
193
186
|
test_files:
|
194
187
|
- test/config/mongo.yml
|
195
188
|
- test/config_test.rb
|
@@ -197,6 +190,7 @@ test_files:
|
|
197
190
|
- test/dirmon_job_test.rb
|
198
191
|
- test/files/text.txt
|
199
192
|
- test/job_test.rb
|
193
|
+
- test/plugins/cron_test.rb
|
200
194
|
- test/plugins/job/callbacks_test.rb
|
201
195
|
- test/plugins/job/defaults_test.rb
|
202
196
|
- test/plugins/job/logger_test.rb
|
@@ -204,6 +198,7 @@ test_files:
|
|
204
198
|
- test/plugins/job/persistence_test.rb
|
205
199
|
- test/plugins/job/state_machine_test.rb
|
206
200
|
- test/plugins/job/worker_test.rb
|
201
|
+
- test/plugins/processing_window_test.rb
|
207
202
|
- test/plugins/restart_test.rb
|
208
203
|
- test/plugins/singleton_test.rb
|
209
204
|
- test/plugins/state_machine_event_callbacks_test.rb
|