rocketjob 1.2.1 → 1.3.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/README.md +5 -1
- data/lib/rocket_job/concerns/worker.rb +26 -15
- data/lib/rocket_job/config.rb +3 -5
- data/lib/rocket_job/dirmon_entry.rb +18 -10
- data/lib/rocket_job/job.rb +14 -0
- data/lib/rocket_job/jobs/dirmon_job.rb +11 -9
- data/lib/rocket_job/version.rb +1 -1
- data/lib/rocket_job/worker.rb +7 -7
- data/test/dirmon_entry_test.rb +39 -3
- data/test/dirmon_job_test.rb +34 -29
- data/test/job_test.rb +5 -3
- data/test/test_helper.rb +7 -1
- metadata +5 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 538bb39f185138c3fc5c4e007ef33470da129cfd
|
4
|
+
data.tar.gz: d0edc858039527f0fb33707bd563c3dacce0a968
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73581f734996afa564614e434015ed6400461e755607b8af6652a29eee120d318415110058b9014e6224b15b594933a12d79ee023ec8feaf8c59b6335f173392
|
7
|
+
data.tar.gz: 896bc0dbfece93ff239aa56475a733bf1b310792e47d89be8bc17dce4c00e04ab426ba3532ad7cc1a864dc0f4a0eb280f8a177899a0ff1ec77f33d160adb0b3d
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# rocketjob [](http://badge.fury.io/rb/rocketjob) [](http://travis-ci.org/rocketjob/rocketjob) 
|
2
2
|
|
3
|
-
|
3
|
+
Enterprise Batch Processing System focused on performance, scalability, reliability, and visibility of every job in the system.
|
4
|
+
|
5
|
+
Outgrown existing solutions? Or, start small and scale up later.
|
6
|
+
|
7
|
+
Works with or without Rails.
|
4
8
|
|
5
9
|
## Status
|
6
10
|
|
@@ -22,19 +22,7 @@ module RocketJob
|
|
22
22
|
|
23
23
|
# Create a job and process it immediately in-line by this thread
|
24
24
|
def now(method, *args, &block)
|
25
|
-
|
26
|
-
# Call validations
|
27
|
-
if job.respond_to?(:validate!)
|
28
|
-
job.validate!
|
29
|
-
elsif job.invalid?
|
30
|
-
raise(MongoMapper::DocumentNotValid, "Validation failed: #{job.errors.messages.join(', ')}")
|
31
|
-
end
|
32
|
-
worker = RocketJob::Worker.new(name: 'inline')
|
33
|
-
worker.started
|
34
|
-
job.start
|
35
|
-
while job.running? && !job.work(worker)
|
36
|
-
end
|
37
|
-
job
|
25
|
+
build(method, *args, &block).work_now
|
38
26
|
end
|
39
27
|
|
40
28
|
# Build a Rocket Job instance
|
@@ -134,6 +122,8 @@ module RocketJob
|
|
134
122
|
begin
|
135
123
|
# before_perform
|
136
124
|
call_method(perform_method, arguments, event: :before, log_level: log_level)
|
125
|
+
# Allow before perform to explicitly fail this job
|
126
|
+
return unless running?
|
137
127
|
|
138
128
|
# perform
|
139
129
|
ret = call_method(perform_method, arguments, log_level: log_level)
|
@@ -141,18 +131,39 @@ module RocketJob
|
|
141
131
|
self.result = (ret.is_a?(Hash) || ret.is_a?(BSON::OrderedHash)) ? ret : {result: ret}
|
142
132
|
end
|
143
133
|
|
134
|
+
# Only run after perform if perform did not explicitly fail the job
|
135
|
+
return unless running?
|
136
|
+
|
144
137
|
# after_perform
|
145
138
|
call_method(perform_method, arguments, event: :after, log_level: log_level)
|
146
139
|
|
147
|
-
complete!
|
140
|
+
new_record? ? complete : complete!
|
148
141
|
rescue StandardError => exc
|
149
|
-
fail
|
142
|
+
fail(worker.name, exc) if may_fail?
|
150
143
|
logger.error("Exception running #{self.class.name}##{perform_method}", exc)
|
144
|
+
save! unless new_record?
|
151
145
|
raise exc if RocketJob::Config.inline_mode
|
152
146
|
end
|
153
147
|
false
|
154
148
|
end
|
155
149
|
|
150
|
+
# Validates and runs the work on this job now in the current thread
|
151
|
+
# Returns this job once it has finished running
|
152
|
+
def work_now
|
153
|
+
# Call validations
|
154
|
+
if respond_to?(:validate!)
|
155
|
+
validate!
|
156
|
+
elsif invalid?
|
157
|
+
raise(MongoMapper::DocumentNotValid, "Validation failed: #{errors.messages.join(', ')}")
|
158
|
+
end
|
159
|
+
worker = RocketJob::Worker.new(name: 'inline')
|
160
|
+
worker.started
|
161
|
+
start if may_start?
|
162
|
+
while running? && !work(worker)
|
163
|
+
end
|
164
|
+
self
|
165
|
+
end
|
166
|
+
|
156
167
|
protected
|
157
168
|
|
158
169
|
# Calls a method on this job, if it is defined
|
data/lib/rocket_job/config.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
require 'sync_attr'
|
3
2
|
module RocketJob
|
4
3
|
# Centralized Configuration for Rocket Jobs
|
5
4
|
class Config
|
6
5
|
include MongoMapper::Document
|
7
|
-
include SyncAttr
|
8
6
|
|
9
7
|
# Prevent data in MongoDB from re-defining the model behavior
|
10
8
|
#self.static_keys = true
|
11
9
|
|
12
10
|
# Returns the single instance of the Rocket Job Configuration for this site
|
13
11
|
# in a thread-safe way
|
14
|
-
|
15
|
-
begin
|
12
|
+
def self.instance
|
13
|
+
@@instance ||= begin
|
16
14
|
first || create
|
17
15
|
rescue StandardError
|
18
16
|
# In case another process has already created the first document
|
@@ -22,7 +20,7 @@ module RocketJob
|
|
22
20
|
|
23
21
|
# By enabling inline_mode jobs will be called in-line
|
24
22
|
# No worker processes will be created, nor threads created
|
25
|
-
|
23
|
+
cattr_accessor(:inline_mode) { false }
|
26
24
|
|
27
25
|
# @formatter:off
|
28
26
|
# The maximum number of worker threads to create on any one worker
|
@@ -280,13 +280,16 @@ module RocketJob
|
|
280
280
|
|
281
281
|
# Queues the job for the supplied pathname
|
282
282
|
def later(pathname)
|
283
|
-
job_class.
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
283
|
+
job = job_class.new(
|
284
|
+
properties.merge(
|
285
|
+
arguments: arguments,
|
286
|
+
properties: properties,
|
287
|
+
perform_method: perform_method
|
288
|
+
)
|
289
|
+
)
|
290
|
+
upload_file(job, pathname)
|
291
|
+
job.save!
|
292
|
+
job
|
290
293
|
end
|
291
294
|
|
292
295
|
protected
|
@@ -315,9 +318,14 @@ module RocketJob
|
|
315
318
|
|
316
319
|
# Archives the file for a job where there was no #file_store_upload or #upload method
|
317
320
|
def upload_default(job, pathname)
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
+
full_file_name = archive_file(job, pathname)
|
322
|
+
if job.respond_to?(:full_file_name=)
|
323
|
+
job.full_file_name = full_file_name
|
324
|
+
elsif job.arguments.first.is_a?(Hash)
|
325
|
+
job.arguments.first[:full_file_name] = full_file_name
|
326
|
+
else
|
327
|
+
raise(ArgumentError, "#{job_class_name} must either have attribute 'full_file_name' or the first argument must be a Hash")
|
328
|
+
end
|
321
329
|
end
|
322
330
|
|
323
331
|
# Move the file to the archive directory
|
data/lib/rocket_job/job.rb
CHANGED
@@ -120,6 +120,20 @@ module RocketJob
|
|
120
120
|
|
121
121
|
validates_presence_of :state, :failure_count, :created_at, :perform_method
|
122
122
|
validates :priority, inclusion: 1..100
|
123
|
+
validates :log_level, inclusion: SemanticLogger::LEVELS + [nil]
|
124
|
+
|
125
|
+
# User definable properties in Dirmon Entry
|
126
|
+
def self.rocket_job_properties
|
127
|
+
@rocket_job_properties ||= (self == RocketJob::Job ? [] : superclass.rocket_job_properties)
|
128
|
+
end
|
129
|
+
|
130
|
+
# Add to user definable properties in Dirmon Entry
|
131
|
+
def self.public_rocket_job_properties(*properties)
|
132
|
+
rocket_job_properties.concat(properties).uniq!
|
133
|
+
end
|
134
|
+
|
135
|
+
# User definable properties in Dirmon Entry
|
136
|
+
public_rocket_job_properties :description, :priority, :perform_method, :log_level, :arguments
|
123
137
|
|
124
138
|
# State Machine events and transitions
|
125
139
|
#
|
@@ -41,27 +41,29 @@ module RocketJob
|
|
41
41
|
|
42
42
|
# Number of seconds between directory scans. Default 5 mins
|
43
43
|
key :check_seconds, Float, default: 300.0
|
44
|
+
key :previous_file_names, Hash # Hash[file_name, size]
|
44
45
|
|
45
46
|
# Iterate over each Dirmon entry looking for new files
|
46
47
|
# If a new file is found, it is not processed immediately, instead
|
47
48
|
# it is passed to the next run of this job along with the file size.
|
48
49
|
# If the file size has not changed, the Job is kicked off.
|
49
|
-
def perform
|
50
|
-
|
50
|
+
def perform
|
51
|
+
check_directories
|
51
52
|
ensure
|
52
53
|
# Run again in the future, even if this run fails with an exception
|
53
|
-
self.class.
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
self.class.create!(
|
55
|
+
previous_file_names: previous_file_names,
|
56
|
+
priority: priority,
|
57
|
+
check_seconds: check_seconds,
|
58
|
+
run_at: Time.now + check_seconds
|
59
|
+
)
|
58
60
|
end
|
59
61
|
|
60
62
|
protected
|
61
63
|
|
62
64
|
# Checks the directories for new files, starting jobs if files have not changed
|
63
65
|
# since the last run
|
64
|
-
def check_directories
|
66
|
+
def check_directories
|
65
67
|
new_file_names = {}
|
66
68
|
DirmonEntry.where(state: :enabled).each do |entry|
|
67
69
|
entry.each do |pathname|
|
@@ -73,7 +75,7 @@ module RocketJob
|
|
73
75
|
end
|
74
76
|
end
|
75
77
|
end
|
76
|
-
new_file_names
|
78
|
+
self.previous_file_names = new_file_names
|
77
79
|
end
|
78
80
|
|
79
81
|
# Checks if a file should result in starting a job
|
data/lib/rocket_job/version.rb
CHANGED
data/lib/rocket_job/worker.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require 'socket'
|
3
|
-
require 'sync_attr'
|
4
3
|
require 'aasm'
|
5
4
|
module RocketJob
|
6
5
|
# Worker
|
@@ -30,7 +29,6 @@ module RocketJob
|
|
30
29
|
class Worker
|
31
30
|
include MongoMapper::Document
|
32
31
|
include AASM
|
33
|
-
include SyncAttr
|
34
32
|
include SemanticLogger::Loggable
|
35
33
|
|
36
34
|
# Prevent data in MongoDB from re-defining the model behavior
|
@@ -164,7 +162,7 @@ module RocketJob
|
|
164
162
|
@thread_pool ||= []
|
165
163
|
end
|
166
164
|
|
167
|
-
#
|
165
|
+
# Management Thread
|
168
166
|
def run
|
169
167
|
Thread.current.name = 'rocketjob main'
|
170
168
|
build_heartbeat unless heartbeat
|
@@ -182,7 +180,7 @@ module RocketJob
|
|
182
180
|
'heartbeat.current_threads' => thread_pool_count
|
183
181
|
)
|
184
182
|
|
185
|
-
# Reload the worker model every
|
183
|
+
# Reload the worker model every few heartbeats in case its config was changed
|
186
184
|
# TODO make 3 configurable
|
187
185
|
if count >= 3
|
188
186
|
reload
|
@@ -316,11 +314,13 @@ module RocketJob
|
|
316
314
|
RocketJob::Job.requeue_dead_worker(name)
|
317
315
|
end
|
318
316
|
|
319
|
-
#
|
320
|
-
|
321
|
-
|
317
|
+
# Shutdown indicator
|
318
|
+
def self.shutdown
|
319
|
+
@@shutdown
|
322
320
|
end
|
323
321
|
|
322
|
+
@@shutdown = false
|
323
|
+
|
324
324
|
# Register handlers for the various signals
|
325
325
|
# Term:
|
326
326
|
# Perform clean shutdown
|
data/test/dirmon_entry_test.rb
CHANGED
@@ -3,6 +3,16 @@ require_relative 'jobs/test_job'
|
|
3
3
|
|
4
4
|
# Unit Test for RocketJob::Job
|
5
5
|
class DirmonEntryTest < Minitest::Test
|
6
|
+
class WithFullFileNameJob < RocketJob::Job
|
7
|
+
# Dirmon will store the filename in this property when starting the job
|
8
|
+
key :full_file_name, String
|
9
|
+
|
10
|
+
def perform
|
11
|
+
# Do something with the file name stored in :full_file_name
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
6
16
|
describe RocketJob::DirmonEntry do
|
7
17
|
describe '.config' do
|
8
18
|
it 'support multiple databases' do
|
@@ -186,11 +196,17 @@ class DirmonEntryTest < Minitest::Test
|
|
186
196
|
@entry = RocketJob::DirmonEntry.new(
|
187
197
|
pattern: 'test/files/**/*',
|
188
198
|
job_class_name: 'Jobs::TestJob',
|
189
|
-
arguments: [{
|
199
|
+
arguments: [{}],
|
190
200
|
properties: {priority: 23, perform_method: :event},
|
191
201
|
archive_directory: @archive_directory
|
192
202
|
)
|
193
|
-
@job = Jobs::TestJob.new
|
203
|
+
@job = Jobs::TestJob.new(
|
204
|
+
@entry.properties.merge(
|
205
|
+
arguments: @entry.arguments,
|
206
|
+
properties: @entry.properties,
|
207
|
+
perform_method: @entry.perform_method
|
208
|
+
)
|
209
|
+
)
|
194
210
|
@file = Tempfile.new('archive')
|
195
211
|
@file_name = @file.path
|
196
212
|
@pathname = Pathname.new(@file_name)
|
@@ -222,10 +238,30 @@ class DirmonEntryTest < Minitest::Test
|
|
222
238
|
end
|
223
239
|
|
224
240
|
describe '#upload_default' do
|
225
|
-
it '
|
241
|
+
it 'sets full_file_name in Hash argument' do
|
226
242
|
@entry.send(:upload_default, @job, @pathname)
|
227
243
|
assert_equal @archive_real_name, @job.arguments.first[:full_file_name], @job.arguments
|
228
244
|
end
|
245
|
+
|
246
|
+
it 'sets full_file_name property' do
|
247
|
+
@entry = RocketJob::DirmonEntry.new(
|
248
|
+
pattern: 'test/files/**/*',
|
249
|
+
job_class_name: 'DirmonEntryTest::WithFullFileNameJob',
|
250
|
+
archive_directory: @archive_directory
|
251
|
+
)
|
252
|
+
assert @entry.valid?, @entry.errors.messages
|
253
|
+
job = @entry.job_class.new
|
254
|
+
@entry.send(:upload_default, job, @pathname)
|
255
|
+
archive_real_name = @archive_path.join("#{job.id}_#{File.basename(@file_name)}").to_s
|
256
|
+
assert_equal archive_real_name, job.full_file_name, job.arguments
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'handles non hash argument and missing property' do
|
260
|
+
@job.arguments = [1]
|
261
|
+
assert_raises ArgumentError do
|
262
|
+
@entry.send(:upload_default, @job, @pathname)
|
263
|
+
end
|
264
|
+
end
|
229
265
|
end
|
230
266
|
|
231
267
|
describe '#upload_file' do
|
data/test/dirmon_job_test.rb
CHANGED
@@ -73,8 +73,7 @@ class DirmonJobTest < Minitest::Test
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'no files' do
|
76
|
-
|
77
|
-
result = @dirmon_job.send(:check_directories, previous_file_names)
|
76
|
+
result = @dirmon_job.send(:check_directories)
|
78
77
|
assert_equal 0, result.count
|
79
78
|
end
|
80
79
|
|
@@ -82,37 +81,40 @@ class DirmonJobTest < Minitest::Test
|
|
82
81
|
create_file("#{@directory}/abc/file1", 5)
|
83
82
|
create_file("#{@directory}/abc/file2", 10)
|
84
83
|
|
85
|
-
|
86
|
-
result
|
87
|
-
assert_equal
|
88
|
-
assert_equal
|
89
|
-
assert_equal 10, result.values.second, result.inspect
|
84
|
+
result = @dirmon_job.send(:check_directories)
|
85
|
+
assert_equal 2, result.count, result
|
86
|
+
assert_equal 5, result.values.first, result
|
87
|
+
assert_equal 10, result.values.second, result
|
90
88
|
end
|
91
89
|
|
92
90
|
it 'allow files to grow' do
|
93
91
|
create_file("#{@directory}/abc/file1", 5)
|
94
92
|
create_file("#{@directory}/abc/file2", 10)
|
95
|
-
|
96
|
-
@dirmon_job.send(:check_directories, previous_file_names)
|
93
|
+
@dirmon_job.send(:check_directories)
|
97
94
|
create_file("#{@directory}/abc/file1", 10)
|
98
95
|
create_file("#{@directory}/abc/file2", 15)
|
99
|
-
result = @dirmon_job.send(:check_directories
|
100
|
-
assert_equal 2, result.count, result
|
101
|
-
assert_equal 10, result.values.first, result
|
102
|
-
assert_equal 15, result.values.second, result
|
96
|
+
result = @dirmon_job.send(:check_directories)
|
97
|
+
assert_equal 2, result.count, result
|
98
|
+
assert_equal 10, result.values.first, result
|
99
|
+
assert_equal 15, result.values.second, result
|
103
100
|
end
|
104
101
|
|
105
102
|
it 'start all files' do
|
106
103
|
create_file("#{@directory}/abc/file1", 5)
|
107
104
|
create_file("#{@directory}/abc/file2", 10)
|
108
|
-
|
105
|
+
files = @dirmon_job.send(:check_directories)
|
106
|
+
assert_equal 2, files.count, files
|
107
|
+
assert_equal 2, @dirmon_job.previous_file_names.count, files
|
108
|
+
|
109
|
+
# files = @dirmon_job.send(:check_directories)
|
110
|
+
# assert_equal 0, files.count, files
|
109
111
|
|
110
112
|
count = 0
|
111
113
|
result = RocketJob::DirmonEntry.stub_any_instance(:later, -> path { count += 1 }) do
|
112
|
-
@dirmon_job.send(:check_directories
|
114
|
+
@dirmon_job.send(:check_directories)
|
113
115
|
end
|
116
|
+
assert_equal 0, result.count, result
|
114
117
|
assert 2, count
|
115
|
-
assert_equal 0, result.count, result.inspect
|
116
118
|
end
|
117
119
|
|
118
120
|
it 'skip files in archive directory' do
|
@@ -125,11 +127,11 @@ class DirmonJobTest < Minitest::Test
|
|
125
127
|
FileUtils.makedirs(@entry.archive_pathname(file_pathname))
|
126
128
|
create_file("#{@entry.archive_pathname(file_pathname)}/file3", 10)
|
127
129
|
|
128
|
-
result = @dirmon_job.send(:check_directories
|
130
|
+
result = @dirmon_job.send(:check_directories)
|
129
131
|
|
130
|
-
assert_equal 2, result.count, result
|
131
|
-
assert_equal 5, result.values.first, result
|
132
|
-
assert_equal 10, result.values.second, result
|
132
|
+
assert_equal 2, result.count, result
|
133
|
+
assert_equal 5, result.values.first, result
|
134
|
+
assert_equal 10, result.values.second, result
|
133
135
|
end
|
134
136
|
end
|
135
137
|
|
@@ -147,10 +149,12 @@ class DirmonJobTest < Minitest::Test
|
|
147
149
|
RocketJob::Jobs::DirmonJob.destroy_all
|
148
150
|
RocketJob::Jobs::DirmonJob.stub_any_instance(:check_directories, new_file_names) do
|
149
151
|
# perform_now does not save the job, just runs it
|
150
|
-
dirmon_job = RocketJob::Jobs::DirmonJob.
|
151
|
-
|
152
|
-
|
153
|
-
|
152
|
+
dirmon_job = RocketJob::Jobs::DirmonJob.new(
|
153
|
+
previous_file_names: previous_file_names,
|
154
|
+
priority: 11,
|
155
|
+
check_seconds: 30
|
156
|
+
)
|
157
|
+
dirmon_job.work_now
|
154
158
|
end
|
155
159
|
assert dirmon_job.completed?, dirmon_job.status.inspect
|
156
160
|
|
@@ -171,14 +175,15 @@ class DirmonJobTest < Minitest::Test
|
|
171
175
|
RocketJob::Jobs::DirmonJob.destroy_all
|
172
176
|
RocketJob::Jobs::DirmonJob.stub_any_instance(:check_directories, -> previous { raise RuntimeError.new("Oh no") }) do
|
173
177
|
# perform_now does not save the job, just runs it
|
174
|
-
dirmon_job = RocketJob::Jobs::DirmonJob.
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
+
dirmon_job = RocketJob::Jobs::DirmonJob.create!(
|
179
|
+
priority: 11,
|
180
|
+
check_seconds: 30
|
181
|
+
)
|
182
|
+
dirmon_job.work_now
|
178
183
|
end
|
179
184
|
assert dirmon_job.failed?, dirmon_job.status.inspect
|
180
185
|
|
181
|
-
#
|
186
|
+
# Must have enqueued another instance to run in the future
|
182
187
|
assert_equal 2, RocketJob::Jobs::DirmonJob.count
|
183
188
|
assert new_dirmon_job = RocketJob::Jobs::DirmonJob.last
|
184
189
|
assert new_dirmon_job.run_at
|
data/test/job_test.rb
CHANGED
@@ -154,7 +154,8 @@ class JobTest < Minitest::Test
|
|
154
154
|
@job.destroy_on_complete = true
|
155
155
|
@job.start!
|
156
156
|
assert_equal false, @job.work(@worker)
|
157
|
-
|
157
|
+
assert @job.completed?, @job.state
|
158
|
+
assert_equal 0, RocketJob::Job.where(id: @job.id).count
|
158
159
|
end
|
159
160
|
|
160
161
|
it 'silence logging when log_level is set' do
|
@@ -254,8 +255,9 @@ class JobTest < Minitest::Test
|
|
254
255
|
it 'requeue jobs from dead workers' do
|
255
256
|
worker_name = 'server:12345'
|
256
257
|
@job.worker_name = worker_name
|
258
|
+
assert @job.valid?, @job.errors.messages
|
257
259
|
@job.start!
|
258
|
-
assert @job.running
|
260
|
+
assert @job.running?, @job.state
|
259
261
|
|
260
262
|
@job.requeue
|
261
263
|
assert @job.queued?
|
@@ -273,7 +275,7 @@ class JobTest < Minitest::Test
|
|
273
275
|
worker_name = 'server:12345'
|
274
276
|
@job.worker_name = worker_name
|
275
277
|
@job.start!
|
276
|
-
assert @job.running
|
278
|
+
assert @job.running?, @job.state
|
277
279
|
|
278
280
|
worker_name2 = 'server:76467'
|
279
281
|
@job2.worker_name = worker_name2
|
data/test/test_helper.rb
CHANGED
@@ -8,7 +8,13 @@ require 'rocketjob'
|
|
8
8
|
require 'awesome_print'
|
9
9
|
require 'symmetric-encryption'
|
10
10
|
|
11
|
-
|
11
|
+
if ENV['DETAILED_TESTS'].present?
|
12
|
+
# See every test and how long it took
|
13
|
+
MiniTest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
14
|
+
else
|
15
|
+
# Only show failed tests
|
16
|
+
MiniTest::Reporters.use! MiniTest::Reporters::ProgressReporter.new
|
17
|
+
end
|
12
18
|
|
13
19
|
SemanticLogger.add_appender('test.log', &SemanticLogger::Appender::Base.colorized_formatter)
|
14
20
|
SemanticLogger.default_level = :debug
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocketjob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.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: 2015-09-
|
11
|
+
date: 2015-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aasm
|
@@ -94,22 +94,8 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.0'
|
97
|
-
|
98
|
-
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '2.0'
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '2.0'
|
111
|
-
description: Next generation, high performance, priority based, distributed, background
|
112
|
-
job processing solution
|
97
|
+
description: Enterprise Batch Processing System focused on performance, scalability,
|
98
|
+
reliability, and visibility of every job in the system.
|
113
99
|
email:
|
114
100
|
- reidmo@gmail.com
|
115
101
|
executables:
|
@@ -165,7 +151,7 @@ rubyforge_project:
|
|
165
151
|
rubygems_version: 2.4.5.1
|
166
152
|
signing_key:
|
167
153
|
specification_version: 4
|
168
|
-
summary:
|
154
|
+
summary: Enterprise Batch Processing System for Ruby, JRuby, and Rubinius
|
169
155
|
test_files:
|
170
156
|
- test/config/mongo.yml
|
171
157
|
- test/dirmon_entry_test.rb
|