rocketjob 5.1.1 → 5.2.0.beta1
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 +2 -2
- data/bin/rocketjob_batch_perf +1 -1
- data/bin/rocketjob_perf +1 -1
- data/lib/rocket_job/active_worker.rb +1 -0
- data/lib/rocket_job/batch.rb +16 -17
- data/lib/rocket_job/batch/callbacks.rb +1 -2
- data/lib/rocket_job/batch/io.rb +10 -6
- data/lib/rocket_job/batch/logger.rb +2 -2
- data/lib/rocket_job/batch/lower_priority.rb +2 -2
- data/lib/rocket_job/batch/model.rb +23 -23
- data/lib/rocket_job/batch/performance.rb +19 -21
- data/lib/rocket_job/batch/result.rb +1 -1
- data/lib/rocket_job/batch/results.rb +1 -1
- data/lib/rocket_job/batch/state_machine.rb +5 -6
- data/lib/rocket_job/batch/statistics.rb +10 -8
- data/lib/rocket_job/batch/tabular.rb +2 -2
- data/lib/rocket_job/batch/tabular/input.rb +11 -7
- data/lib/rocket_job/batch/tabular/output.rb +1 -1
- data/lib/rocket_job/batch/throttle.rb +11 -30
- data/lib/rocket_job/batch/{throttle_running_slices.rb → throttle_running_workers.rb} +13 -10
- data/lib/rocket_job/batch/worker.rb +102 -85
- data/lib/rocket_job/cli.rb +57 -54
- data/lib/rocket_job/config.rb +8 -10
- data/lib/rocket_job/dirmon_entry.rb +13 -10
- data/lib/rocket_job/event.rb +16 -16
- data/lib/rocket_job/extensions/mongo/logging.rb +2 -2
- data/lib/rocket_job/extensions/mongoid/clients/options.rb +2 -2
- data/lib/rocket_job/extensions/mongoid/contextual/mongo.rb +4 -2
- data/lib/rocket_job/extensions/mongoid/factory.rb +13 -5
- data/lib/rocket_job/extensions/rocket_job_adapter.rb +2 -1
- data/lib/rocket_job/job_exception.rb +0 -3
- data/lib/rocket_job/jobs/dirmon_job.rb +4 -4
- data/lib/rocket_job/jobs/housekeeping_job.rb +7 -7
- data/lib/rocket_job/jobs/on_demand_batch_job.rb +14 -4
- data/lib/rocket_job/jobs/on_demand_job.rb +3 -3
- data/lib/rocket_job/jobs/performance_job.rb +1 -1
- data/lib/rocket_job/jobs/re_encrypt/relational_job.rb +11 -10
- data/lib/rocket_job/jobs/upload_file_job.rb +9 -5
- data/lib/rocket_job/performance.rb +24 -22
- data/lib/rocket_job/plugins/cron.rb +7 -3
- data/lib/rocket_job/plugins/document.rb +7 -5
- data/lib/rocket_job/plugins/job/callbacks.rb +1 -1
- data/lib/rocket_job/plugins/job/logger.rb +3 -3
- data/lib/rocket_job/plugins/job/model.rb +34 -27
- data/lib/rocket_job/plugins/job/persistence.rb +7 -34
- data/lib/rocket_job/plugins/job/state_machine.rb +5 -4
- data/lib/rocket_job/plugins/job/throttle.rb +12 -28
- data/lib/rocket_job/plugins/job/throttle_running_jobs.rb +2 -2
- data/lib/rocket_job/plugins/job/worker.rb +22 -70
- data/lib/rocket_job/plugins/processing_window.rb +5 -4
- data/lib/rocket_job/plugins/restart.rb +3 -3
- data/lib/rocket_job/plugins/retry.rb +2 -2
- data/lib/rocket_job/plugins/singleton.rb +1 -2
- data/lib/rocket_job/plugins/state_machine.rb +4 -4
- data/lib/rocket_job/plugins/transaction.rb +1 -1
- data/lib/rocket_job/rocket_job.rb +5 -4
- data/lib/rocket_job/server.rb +2 -2
- data/lib/rocket_job/server/model.rb +14 -13
- data/lib/rocket_job/server/state_machine.rb +1 -2
- data/lib/rocket_job/sliced/compressed_slice.rb +4 -4
- data/lib/rocket_job/sliced/encrypted_slice.rb +4 -4
- data/lib/rocket_job/sliced/input.rb +16 -16
- data/lib/rocket_job/sliced/output.rb +2 -2
- data/lib/rocket_job/sliced/slice.rb +43 -20
- data/lib/rocket_job/sliced/slices.rb +14 -11
- data/lib/rocket_job/subscriber.rb +6 -6
- data/lib/rocket_job/subscribers/logger.rb +3 -3
- data/lib/rocket_job/supervisor.rb +12 -12
- data/lib/rocket_job/supervisor/shutdown.rb +7 -7
- data/lib/rocket_job/throttle_definition.rb +37 -0
- data/lib/rocket_job/throttle_definitions.rb +39 -0
- data/lib/rocket_job/version.rb +1 -1
- data/lib/rocket_job/worker.rb +116 -34
- data/lib/rocket_job/worker_pool.rb +6 -6
- data/lib/rocketjob.rb +72 -76
- metadata +16 -18
- data/lib/rocket_job/extensions/mongoid_5/clients/options.rb +0 -38
- data/lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb +0 -64
- data/lib/rocket_job/extensions/mongoid_5/factory.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8920ff4a319e838729863bbf2a7a66a4ee003ac9328cc1c3d3942fc59cecab2c
|
4
|
+
data.tar.gz: 3c5f4927370915b3188295cd181f5b1dc4ae64a17b0cd070e946cfa82b7517c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1395412d271a4a1cde3d1f80fa6d45d5a0e948454b34e6a1d1221631b718d1f4fb16e3683a4a57af1e1f64d724219b70ab65cd84f7a2c9658d67e0608d263973
|
7
|
+
data.tar.gz: f5b161cf5dcb32126dff42b645b3356707ea74623f011af9a6e7bf0b8fee6403254b302ec5644a85181c207dbe70cfa3a82349be4a2bf52127e68e9f4ebaf5ab
|
data/bin/rocketjob
CHANGED
data/bin/rocketjob_batch_perf
CHANGED
data/bin/rocketjob_perf
CHANGED
data/lib/rocket_job/batch.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
1
|
+
require "active_support/concern"
|
2
|
+
require "rocket_job/batch/callbacks"
|
3
|
+
require "rocket_job/batch/io"
|
4
|
+
require "rocket_job/batch/logger"
|
5
|
+
require "rocket_job/batch/model"
|
6
|
+
require "rocket_job/batch/state_machine"
|
7
|
+
require "rocket_job/batch/throttle"
|
8
|
+
require "rocket_job/batch/throttle_running_workers"
|
9
|
+
require "rocket_job/batch/worker"
|
10
10
|
|
11
11
|
module RocketJob
|
12
12
|
module Batch
|
@@ -18,15 +18,14 @@ module RocketJob
|
|
18
18
|
include Logger
|
19
19
|
include Worker
|
20
20
|
include Throttle
|
21
|
-
include
|
21
|
+
include ThrottleRunningWorkers
|
22
22
|
include IO
|
23
23
|
|
24
|
-
autoload :LowerPriority,
|
25
|
-
autoload :Performance,
|
26
|
-
autoload :Statistics,
|
27
|
-
autoload :Result,
|
28
|
-
autoload :Results,
|
29
|
-
autoload :Tabular,
|
24
|
+
autoload :LowerPriority, "rocket_job/batch/lower_priority"
|
25
|
+
autoload :Performance, "rocket_job/batch/performance"
|
26
|
+
autoload :Statistics, "rocket_job/batch/statistics"
|
27
|
+
autoload :Result, "rocket_job/batch/result"
|
28
|
+
autoload :Results, "rocket_job/batch/results"
|
29
|
+
autoload :Tabular, "rocket_job/batch/tabular"
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
data/lib/rocket_job/batch/io.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
|
3
3
|
module RocketJob
|
4
4
|
module Batch
|
@@ -14,7 +14,9 @@ module RocketJob
|
|
14
14
|
# Default: None ( Uses the single default input collection for this job )
|
15
15
|
# Validates: This value must be one of those listed in #input_categories
|
16
16
|
def input(category = :main)
|
17
|
-
|
17
|
+
unless input_categories.include?(category) || (category == :main)
|
18
|
+
raise "Category #{category.inspect}, must be registered in input_categories: #{input_categories.inspect}"
|
19
|
+
end
|
18
20
|
|
19
21
|
(@inputs ||= {})[category] ||= RocketJob::Sliced::Input.new(rocket_job_io_slice_arguments("inputs", category))
|
20
22
|
end
|
@@ -28,7 +30,9 @@ module RocketJob
|
|
28
30
|
# Default: None ( Uses the single default output collection for this job )
|
29
31
|
# Validates: This value must be one of those listed in #output_categories
|
30
32
|
def output(category = :main)
|
31
|
-
|
33
|
+
unless output_categories.include?(category) || (category == :main)
|
34
|
+
raise "Category #{category.inspect}, must be registered in output_categories: #{output_categories.inspect}"
|
35
|
+
end
|
32
36
|
|
33
37
|
(@outputs ||= {})[category] ||= RocketJob::Sliced::Output.new(rocket_job_io_slice_arguments("outputs", category))
|
34
38
|
end
|
@@ -110,7 +114,7 @@ module RocketJob
|
|
110
114
|
# * Only use this method for UTF-8 data, for binary data use #input_slice or #input_records.
|
111
115
|
# * CSV parsing is slow, so it is usually left for the workers to do.
|
112
116
|
def upload(stream = nil, file_name: nil, category: :main, stream_mode: :line, on_first: nil, **args, &block)
|
113
|
-
raise(ArgumentError,
|
117
|
+
raise(ArgumentError, "Either stream, or a block must be supplied") unless stream || block
|
114
118
|
|
115
119
|
stream_mode = stream_mode.to_sym
|
116
120
|
# Backward compatibility with existing v4 jobs
|
@@ -384,7 +388,8 @@ module RocketJob
|
|
384
388
|
if block
|
385
389
|
RocketJob::Sliced::Writer::Output.collect(self, input_slice, &block)
|
386
390
|
else
|
387
|
-
raise(ArgumentError,
|
391
|
+
raise(ArgumentError, "result parameter is required when no block is supplied") unless result
|
392
|
+
|
388
393
|
RocketJob::Sliced::Writer::Output.collect(self, input_slice) { |writer| writer << result }
|
389
394
|
end
|
390
395
|
end
|
@@ -403,7 +408,6 @@ module RocketJob
|
|
403
408
|
end
|
404
409
|
args
|
405
410
|
end
|
406
|
-
|
407
411
|
end
|
408
412
|
end
|
409
413
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
|
3
3
|
module RocketJob
|
4
4
|
module Batch
|
@@ -31,7 +31,7 @@ module RocketJob
|
|
31
31
|
# - silence noisy jobs by raising log level
|
32
32
|
def rocket_job_batch_slice_logger(&block)
|
33
33
|
logger.measure_info(
|
34
|
-
|
34
|
+
"Completed slice",
|
35
35
|
metric: "#{self.class.name}/slice",
|
36
36
|
log_exception: :full,
|
37
37
|
on_exception_level: :error,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
module RocketJob
|
3
3
|
module Batch
|
4
4
|
# Automatically lower the priority for Jobs with a higher record_count.
|
@@ -33,7 +33,7 @@ module RocketJob
|
|
33
33
|
|
34
34
|
included do
|
35
35
|
unless public_method_defined?(:record_count=)
|
36
|
-
raise(ArgumentError,
|
36
|
+
raise(ArgumentError, "LowerPriority can only be used in conjunction with RocketJob::Plugins::Batch")
|
37
37
|
end
|
38
38
|
|
39
39
|
# For each of this many records lower the priority by 1.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
module RocketJob
|
3
3
|
module Batch
|
4
4
|
# Model attributes
|
@@ -77,8 +77,10 @@ module RocketJob
|
|
77
77
|
# Under some circumstances ActiveModel is passing in a nil value even though the
|
78
78
|
# attributes have default values
|
79
79
|
Array(value).each do |category|
|
80
|
-
record.errors.add(attr,
|
81
|
-
|
80
|
+
record.errors.add(attr, "must only contain Symbol values") unless category.is_a?(Symbol)
|
81
|
+
unless category.to_s =~ /\A[a-z_0-9]+\Z/
|
82
|
+
record.errors.add(attr, "must only consist of lowercase characters, digits, and _")
|
83
|
+
end
|
82
84
|
end
|
83
85
|
end
|
84
86
|
end
|
@@ -97,7 +99,7 @@ module RocketJob
|
|
97
99
|
# Returns 0 if the total record count has not yet been set
|
98
100
|
def percent_complete
|
99
101
|
return 100 if completed?
|
100
|
-
return 0 unless record_count.to_i
|
102
|
+
return 0 unless record_count.to_i.positive?
|
101
103
|
|
102
104
|
# Approximate number of input records
|
103
105
|
input_records = input.count.to_f * slice_size
|
@@ -110,32 +112,31 @@ module RocketJob
|
|
110
112
|
end
|
111
113
|
|
112
114
|
# Returns [Hash] status of this job
|
113
|
-
def status(time_zone =
|
115
|
+
def status(time_zone = "Eastern Time (US & Canada)")
|
114
116
|
h = {}
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
h[
|
120
|
-
h[
|
121
|
-
h['queued_slices'] = input.queued.count
|
117
|
+
if queued?
|
118
|
+
h["queued_slices"] = input.queued.count
|
119
|
+
elsif running? || paused? || failed?
|
120
|
+
h["active_slices"] = worker_count
|
121
|
+
h["failed_slices"] = input.failed.count
|
122
|
+
h["queued_slices"] = input.queued.count
|
122
123
|
# Very high level estimated time left
|
123
|
-
if record_count && running? &&
|
124
|
+
if record_count && running? && record_count.positive?
|
124
125
|
percent = percent_complete
|
125
126
|
if percent >= 5
|
126
127
|
secs = seconds.to_f
|
127
|
-
h[
|
128
|
+
h["est_remaining_duration"] = RocketJob.seconds_as_duration((((secs / percent) * 100) - secs))
|
128
129
|
end
|
129
130
|
end
|
130
|
-
|
131
|
-
secs
|
132
|
-
h[
|
131
|
+
elsif completed?
|
132
|
+
secs = seconds.to_f
|
133
|
+
h["records_per_hour"] = ((record_count.to_f / secs) * 60 * 60).round if record_count&.positive? && (secs > 0.0)
|
133
134
|
end
|
134
|
-
h[
|
135
|
+
h["output_slices"] = output.count if collect_output? && !completed?
|
135
136
|
h.merge!(super(time_zone))
|
136
|
-
h.delete(
|
137
|
+
h.delete("result")
|
137
138
|
# Worker name should be retrieved from the slices when processing
|
138
|
-
h.delete(
|
139
|
+
h.delete("worker_name") if sub_state == :processing
|
139
140
|
h
|
140
141
|
end
|
141
142
|
|
@@ -145,9 +146,9 @@ module RocketJob
|
|
145
146
|
|
146
147
|
case sub_state
|
147
148
|
when :before, :after
|
148
|
-
worker_name
|
149
|
+
[worker_name]
|
149
150
|
when :processing
|
150
|
-
input.running.collect
|
151
|
+
input.running.collect(&:worker_name)
|
151
152
|
else
|
152
153
|
[]
|
153
154
|
end
|
@@ -171,7 +172,6 @@ module RocketJob
|
|
171
172
|
@worker_count_last = Time.now.to_i
|
172
173
|
@worker_count
|
173
174
|
end
|
174
|
-
|
175
175
|
end
|
176
176
|
end
|
177
177
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "optparse"
|
2
|
+
require "csv"
|
3
|
+
require "yaml"
|
4
4
|
module RocketJob
|
5
5
|
module Batch
|
6
6
|
class Performance
|
@@ -8,8 +8,8 @@ module RocketJob
|
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@count = 10_000_000
|
11
|
-
@environment = ENV[
|
12
|
-
@mongo_config =
|
11
|
+
@environment = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
|
12
|
+
@mongo_config = "config/mongoid.yml"
|
13
13
|
@compress = false
|
14
14
|
@encrypt = false
|
15
15
|
@slice_size = 1000
|
@@ -17,7 +17,7 @@ module RocketJob
|
|
17
17
|
|
18
18
|
def run_test_case(count = self.count)
|
19
19
|
servers = RocketJob::Server.count
|
20
|
-
raise
|
20
|
+
raise "Please start workers before starting the performance test" if servers.zero?
|
21
21
|
|
22
22
|
count_running_workers
|
23
23
|
|
@@ -33,10 +33,8 @@ module RocketJob
|
|
33
33
|
end
|
34
34
|
job.save!
|
35
35
|
|
36
|
-
puts
|
37
|
-
|
38
|
-
sleep 3
|
39
|
-
end
|
36
|
+
puts "Waiting for job to complete"
|
37
|
+
sleep 3 until job.reload.completed?
|
40
38
|
|
41
39
|
duration = job.completed_at - job.started_at
|
42
40
|
{count: count, duration: duration, records_per_second: (count.to_f / duration).round(3), workers: workers, servers: servers, compress: compress, encrypt: encrypt}
|
@@ -47,7 +45,7 @@ module RocketJob
|
|
47
45
|
ruby = defined?(JRuby) ? "jruby_#{JRUBY_VERSION}" : "ruby_#{RUBY_VERSION}"
|
48
46
|
version = RocketJob::VERSION
|
49
47
|
|
50
|
-
CSV.open("job_results_#{ruby}_v#{version}.csv",
|
48
|
+
CSV.open("job_results_#{ruby}_v#{version}.csv", "wb") do |csv|
|
51
49
|
csv << results.first.keys
|
52
50
|
results.each { |result| csv << result.values }
|
53
51
|
end
|
@@ -55,28 +53,28 @@ module RocketJob
|
|
55
53
|
|
56
54
|
# Parse command line options
|
57
55
|
def parse(argv)
|
58
|
-
parser
|
59
|
-
o.on(
|
56
|
+
parser = OptionParser.new do |o|
|
57
|
+
o.on("-c", "--count COUNT", "Count of records to enqueue") do |arg|
|
60
58
|
self.count = arg.to_i
|
61
59
|
end
|
62
|
-
o.on(
|
60
|
+
o.on("-m", "--mongo MONGO_CONFIG_FILE_NAME", "Location of mongoid.yml config file") do |arg|
|
63
61
|
self.mongo_config = arg
|
64
62
|
end
|
65
|
-
o.on(
|
63
|
+
o.on("-e", "--environment ENVIRONMENT", "The environment to run the app on (Default: RAILS_ENV || RACK_ENV || development)") do |arg|
|
66
64
|
self.environment = arg
|
67
65
|
end
|
68
|
-
o.on(
|
66
|
+
o.on("-z", "--compress", "Turn on compression") do
|
69
67
|
self.compress = true
|
70
68
|
end
|
71
|
-
o.on(
|
69
|
+
o.on("-E", "--encrypt", "Turn on encryption") do
|
72
70
|
self.encrypt = true
|
73
71
|
end
|
74
|
-
o.on(
|
72
|
+
o.on("-s", "--slice_size COUNT", "Slice size") do
|
75
73
|
self.slice_size = arg.to_i
|
76
74
|
end
|
77
75
|
end
|
78
|
-
parser.banner =
|
79
|
-
parser.on_tail
|
76
|
+
parser.banner = "rocketjob_batch_perf <options>"
|
77
|
+
parser.on_tail "-h", "--help", "Show help" do
|
80
78
|
puts parser
|
81
79
|
exit 1
|
82
80
|
end
|
@@ -88,12 +86,12 @@ module RocketJob
|
|
88
86
|
self.workers = 0
|
89
87
|
RocketJob::Server.running.each do |server|
|
90
88
|
next if server.zombie?
|
89
|
+
|
91
90
|
self.servers += 1
|
92
91
|
self.workers += server.heartbeat.workers
|
93
92
|
end
|
94
93
|
puts "Running: #{workers} workers, distributed across #{servers} servers"
|
95
94
|
end
|
96
|
-
|
97
95
|
end
|
98
96
|
end
|
99
97
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
|
3
3
|
module RocketJob
|
4
4
|
module Batch
|
@@ -23,15 +23,15 @@ module RocketJob
|
|
23
23
|
aasm.state_machine.add_event(:requeue, {}) do
|
24
24
|
# Requeue perform
|
25
25
|
transitions from: :running, to: :running,
|
26
|
-
if: ->
|
26
|
+
if: ->(_server_name) { sub_state == :processing },
|
27
27
|
after: :rocket_job_requeue_sub_state_processing
|
28
28
|
# Requeue after_batch
|
29
29
|
transitions from: :running, to: :running,
|
30
|
-
if: ->
|
30
|
+
if: ->(server_name) { worker_on_server?(server_name) && (sub_state == :after) },
|
31
31
|
after: :rocket_job_requeue_sub_state_after
|
32
32
|
# Requeue before_batch
|
33
33
|
transitions from: :running, to: :queued,
|
34
|
-
if: ->
|
34
|
+
if: ->(server_name) { worker_on_server?(server_name) && (sub_state == :before) },
|
35
35
|
after: :rocket_job_requeue_sub_state_before
|
36
36
|
end
|
37
37
|
|
@@ -68,7 +68,7 @@ module RocketJob
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def rocket_job_sub_state_before
|
71
|
-
self.sub_state = :before unless
|
71
|
+
self.sub_state = :before unless sub_state
|
72
72
|
end
|
73
73
|
|
74
74
|
def rocket_job_clear_sub_state
|
@@ -96,7 +96,6 @@ module RocketJob
|
|
96
96
|
def rocket_job_requeue_failed_slices
|
97
97
|
input.requeue_failed
|
98
98
|
end
|
99
|
-
|
100
99
|
end
|
101
100
|
end
|
102
101
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
|
3
3
|
module RocketJob
|
4
4
|
module Batch
|
@@ -22,11 +22,12 @@ module RocketJob
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def inc_key(key, increment = 1)
|
25
|
-
return if increment
|
25
|
+
return if increment.zero?
|
26
|
+
|
26
27
|
if in_memory
|
27
28
|
# For tests and in-process execution
|
28
29
|
inc_in_memory(key, increment)
|
29
|
-
elsif key && key !=
|
30
|
+
elsif key && key != ""
|
30
31
|
stats["statistics.#{key}"] += increment
|
31
32
|
end
|
32
33
|
self
|
@@ -40,11 +41,11 @@ module RocketJob
|
|
40
41
|
|
41
42
|
# Navigates path and creates child hashes as needed at the end is reached
|
42
43
|
def inc_in_memory(key, increment)
|
43
|
-
paths = key.to_s.split(
|
44
|
+
paths = key.to_s.split(".")
|
44
45
|
last = paths.pop
|
45
46
|
return unless last
|
46
47
|
|
47
|
-
target
|
48
|
+
target = paths.inject(in_memory) { |target, key| target.key?(key) ? target[key] : target[key] = Hash.new(0) }
|
48
49
|
target[last] += increment
|
49
50
|
end
|
50
51
|
end
|
@@ -57,7 +58,8 @@ module RocketJob
|
|
57
58
|
|
58
59
|
# Increment a statistic
|
59
60
|
def statistics_inc(key, increment = 1)
|
60
|
-
return if key.nil? || key ==
|
61
|
+
return if key.nil? || key == ""
|
62
|
+
|
61
63
|
# Being called within tests outside of a perform
|
62
64
|
@slice_statistics ||= Stats.new(new_record? ? statistics : nil)
|
63
65
|
key.is_a?(Hash) ? @slice_statistics.inc(key) : @slice_statistics.inc_key(key, increment)
|
@@ -70,12 +72,12 @@ module RocketJob
|
|
70
72
|
def statistics_capture
|
71
73
|
@slice_statistics = Stats.new(new_record? ? statistics : nil)
|
72
74
|
yield
|
73
|
-
collection.update_one({_id: id}, {
|
75
|
+
collection.update_one({_id: id}, {"$inc" => @slice_statistics.stats}) unless @slice_statistics.empty?
|
74
76
|
end
|
75
77
|
|
76
78
|
# Overrides RocketJob::Batch::Logger#rocket_job_batch_log_payload
|
77
79
|
def rocket_job_batch_log_payload
|
78
|
-
h
|
80
|
+
h = {
|
79
81
|
from: aasm.from_state,
|
80
82
|
to: aasm.to_state,
|
81
83
|
event: aasm.current_event
|