rocketjob 6.0.2 → 6.1.1
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/lib/rocket_job/batch/io.rb +2 -0
- data/lib/rocket_job/dirmon_entry.rb +2 -0
- data/lib/rocket_job/extensions/mongo/logging.rb +4 -0
- data/lib/rocket_job/jobs/copy_file_job.rb +4 -1
- data/lib/rocket_job/jobs/dirmon_job.rb +22 -14
- data/lib/rocket_job/jobs/on_demand_batch_job.rb +4 -0
- data/lib/rocket_job/jobs/on_demand_job.rb +4 -0
- data/lib/rocket_job/sliced/output.rb +1 -0
- data/lib/rocket_job/supervisor.rb +9 -10
- data/lib/rocket_job/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca9a7af0f4448efdb418e738f95bc5f885d2399bdfd50ce3d0533c6928f3f78f
|
4
|
+
data.tar.gz: e0f1bc3fb3c60989f22ff4d75c1ed86c8f7a998bdc5bc02f0f8616dd9631029e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79e914a57bbdae9026cbe783d8a1743e538bb2b1ffebacb527561ef961174eaa24693e850e0b72ee9ae113611db96fe1e0e2edb85d6395cbc057b7fc17bf11e9
|
7
|
+
data.tar.gz: f6a8ba0b5060f54072a68fc396e43a3b9ba1c53b58e6b282006e111792e612d301b737279a344be252fc659724b70e12cff5400f49eb47316d38eda0571788f3
|
data/lib/rocket_job/batch/io.rb
CHANGED
@@ -466,6 +466,8 @@ module RocketJob
|
|
466
466
|
output_collection.download(header_line: binary_header_line) { |record| io.write(record) }
|
467
467
|
end
|
468
468
|
else
|
469
|
+
# TODO: Add category to named tags to aid problem determination
|
470
|
+
# And RJ Download metric with duration
|
469
471
|
IOStreams.new(stream || category.file_name).writer(:line, **args) do |io|
|
470
472
|
output_collection.download(header_line: header_line) { |record| io << record }
|
471
473
|
end
|
@@ -71,6 +71,7 @@ module RocketJob
|
|
71
71
|
validates_presence_of :pattern, :job_class_name, :archive_directory
|
72
72
|
validate :job_is_a_rocket_job
|
73
73
|
validate :job_has_properties
|
74
|
+
validates_uniqueness_of :pattern, :name
|
74
75
|
|
75
76
|
# State Machine events and transitions
|
76
77
|
#
|
@@ -97,6 +98,7 @@ module RocketJob
|
|
97
98
|
event :enable do
|
98
99
|
transitions from: :pending, to: :enabled
|
99
100
|
transitions from: :disabled, to: :enabled
|
101
|
+
transitions from: :failed, to: :enabled
|
100
102
|
end
|
101
103
|
|
102
104
|
event :disable do
|
@@ -6,22 +6,26 @@ module Mongo
|
|
6
6
|
include SemanticLogger::Loggable
|
7
7
|
logger.name = "Mongo"
|
8
8
|
|
9
|
+
undef :started
|
9
10
|
def started(event)
|
10
11
|
@event_command = event.command
|
11
12
|
end
|
12
13
|
|
14
|
+
undef :succeeded
|
13
15
|
def succeeded(event)
|
14
16
|
logger.debug(message: prefix(event),
|
15
17
|
duration: (event.duration * 1000),
|
16
18
|
payload: @event_command)
|
17
19
|
end
|
18
20
|
|
21
|
+
undef :failed
|
19
22
|
def failed(event)
|
20
23
|
logger.debug(message: "#{prefix(event)} Failed: #{event.message}",
|
21
24
|
duration: (event.duration * 1000),
|
22
25
|
payload: @event_command)
|
23
26
|
end
|
24
27
|
|
28
|
+
undef :prefix
|
25
29
|
def prefix(event)
|
26
30
|
"#{event.address} | #{event.database_name}.#{event.command_name}"
|
27
31
|
end
|
@@ -82,7 +82,10 @@ module RocketJob
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def apply_streams(path, streams)
|
85
|
-
streams.each_pair
|
85
|
+
streams.each_pair do |stream, args|
|
86
|
+
stream_args = args.nil? ? {} : decode_args(args)
|
87
|
+
path.stream(stream.to_sym, **stream_args)
|
88
|
+
end
|
86
89
|
end
|
87
90
|
|
88
91
|
def decode_args(args)
|
@@ -59,23 +59,31 @@ module RocketJob
|
|
59
59
|
def check_directories
|
60
60
|
new_file_names = {}
|
61
61
|
DirmonEntry.enabled.each do |dirmon_entry|
|
62
|
-
dirmon_entry
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
dirmon_entry.later(path)
|
67
|
-
next
|
68
|
-
end
|
62
|
+
check_entry(dirmon_entry, new_file_names)
|
63
|
+
end
|
64
|
+
self.previous_file_names = new_file_names
|
65
|
+
end
|
69
66
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
67
|
+
def check_entry(dirmon_entry, file_names)
|
68
|
+
dirmon_entry.each do |path|
|
69
|
+
# Skip file size checking since S3 files are only visible once completely uploaded.
|
70
|
+
unless path.partial_files_visible?
|
71
|
+
logger.info("File: #{path}. Starting: #{dirmon_entry.job_class_name}")
|
72
|
+
dirmon_entry.later(path)
|
73
|
+
next
|
76
74
|
end
|
75
|
+
|
76
|
+
# BSON Keys cannot contain periods
|
77
|
+
key = path.to_s.tr(".", "_")
|
78
|
+
previous_size = previous_file_names[key]
|
79
|
+
# Check every few minutes for a file size change before trying to process the file.
|
80
|
+
size = check_file(dirmon_entry, path, previous_size)
|
81
|
+
file_names[key] = size if size
|
77
82
|
end
|
78
|
-
|
83
|
+
rescue StandardError => e
|
84
|
+
logger.error("Dirmon Entry: #{dirmon_entry.id} failed. Moved to `failed` state to prevent processing again without manual intervention.", e)
|
85
|
+
dirmon_entry.fail(worker_name, e)
|
86
|
+
dirmon_entry.save(validate: false)
|
79
87
|
end
|
80
88
|
|
81
89
|
# Checks if a file should result in starting a job
|
@@ -145,6 +145,10 @@ module RocketJob
|
|
145
145
|
rescue Exception => e
|
146
146
|
errors.add(field, "Failed to load :#{field}, #{e.inspect}")
|
147
147
|
end
|
148
|
+
|
149
|
+
# Allow multiple instances of this job to run with the same cron schedule
|
150
|
+
def rocket_job_cron_singleton_check
|
151
|
+
end
|
148
152
|
end
|
149
153
|
end
|
150
154
|
end
|
@@ -97,6 +97,10 @@ module RocketJob
|
|
97
97
|
rescue Exception => e
|
98
98
|
errors.add(:code, "Failed to parse :code, #{e.inspect}")
|
99
99
|
end
|
100
|
+
|
101
|
+
# Allow multiple instances of this job to run with the same cron schedule
|
102
|
+
def rocket_job_cron_singleton_check
|
103
|
+
end
|
100
104
|
end
|
101
105
|
end
|
102
106
|
end
|
@@ -14,7 +14,6 @@ module RocketJob
|
|
14
14
|
Thread.current.name = "rocketjob main"
|
15
15
|
RocketJob.create_indexes
|
16
16
|
register_signal_handlers
|
17
|
-
subscribe_to_events
|
18
17
|
|
19
18
|
server = Server.create!
|
20
19
|
new(server).run
|
@@ -35,8 +34,15 @@ module RocketJob
|
|
35
34
|
logger.info "Rocket Job Server started"
|
36
35
|
|
37
36
|
event_listener = Thread.new { Event.listener }
|
38
|
-
|
39
|
-
|
37
|
+
Subscribers::SecretConfig.subscribe if defined?(SecretConfig)
|
38
|
+
Subscribers::Server.subscribe(self) do
|
39
|
+
Subscribers::Worker.subscribe(self) do
|
40
|
+
Subscribers::Logger.subscribe do
|
41
|
+
supervise_pool
|
42
|
+
stop!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
40
46
|
rescue ::Mongoid::Errors::DocumentNotFound
|
41
47
|
logger.info("Server has been destroyed. Going down hard!")
|
42
48
|
rescue Exception => e
|
@@ -89,12 +95,5 @@ module RocketJob
|
|
89
95
|
def synchronize(&block)
|
90
96
|
@mutex.synchronize(&block)
|
91
97
|
end
|
92
|
-
|
93
|
-
def subscribe_to_events
|
94
|
-
Subscribers::Logger.subscribe
|
95
|
-
Subscribers::SecretConfig.subscribe if defined?(SecretConfig)
|
96
|
-
Subscribers::Server.subscribe
|
97
|
-
Subscribers::Worker.subscribe
|
98
|
-
end
|
99
98
|
end
|
100
99
|
end
|
data/lib/rocket_job/version.rb
CHANGED
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: 6.
|
4
|
+
version: 6.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aasm
|
@@ -236,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
236
236
|
- !ruby/object:Gem::Version
|
237
237
|
version: '0'
|
238
238
|
requirements: []
|
239
|
-
rubygems_version: 3.
|
239
|
+
rubygems_version: 3.3.7
|
240
240
|
signing_key:
|
241
241
|
specification_version: 4
|
242
242
|
summary: Ruby's missing batch processing system.
|