rocketjob 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 [![Gem Version](https://badge.fury.io/rb/rocketjob.svg)](http://badge.fury.io/rb/rocketjob) [![Build Status](https://secure.travis-ci.org/rocketjob/rocketjob.png?branch=master)](http://travis-ci.org/rocketjob/rocketjob) ![](http://ruby-gem-downloads-badge.herokuapp.com/rocketjob?type=total)
|
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
|