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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10ef66caa28110774987fdeff06af1a4906ed724bc307bf55d012e1104a9eca8
4
- data.tar.gz: b0384cccd5d694a3431c6c9cb7d004603c4b79865929b8c2bb249b4b66e937a2
3
+ metadata.gz: ca9a7af0f4448efdb418e738f95bc5f885d2399bdfd50ce3d0533c6928f3f78f
4
+ data.tar.gz: e0f1bc3fb3c60989f22ff4d75c1ed86c8f7a998bdc5bc02f0f8616dd9631029e
5
5
  SHA512:
6
- metadata.gz: 331a1c21ad9c2b481e67d5d3857e3158dd23a7bb6524dd872773e0aad0e0c5edb4e02d4a60be6498bc212e2517c81c027ce7f22d6b378e9d5772c391669c4347
7
- data.tar.gz: e46cdffa443cc75d5dbed5f396ec84fb19fd12bad5b48bbddad7d310526a941bd837f778da8391460e40c575caed62c6e0329adc99ae8c58b07ada694cb1684c
6
+ metadata.gz: 79e914a57bbdae9026cbe783d8a1743e538bb2b1ffebacb527561ef961174eaa24693e850e0b72ee9ae113611db96fe1e0e2edb85d6395cbc057b7fc17bf11e9
7
+ data.tar.gz: f6a8ba0b5060f54072a68fc396e43a3b9ba1c53b58e6b282006e111792e612d301b737279a344be252fc659724b70e12cff5400f49eb47316d38eda0571788f3
@@ -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 { |stream, args| path.stream(stream.to_sym, args.nil? ? {} : decode_args(args)) }
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.each do |path|
63
- # Skip file size checking since S3 files are only visible once completely uploaded.
64
- unless path.partial_files_visible?
65
- logger.info("File: #{path}. Starting: #{dirmon_entry.job_class_name}")
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
- # BSON Keys cannot contain periods
71
- key = path.to_s.tr(".", "_")
72
- previous_size = previous_file_names[key]
73
- # Check every few minutes for a file size change before trying to process the file.
74
- size = check_file(dirmon_entry, path, previous_size)
75
- new_file_names[key] = size if size
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
- self.previous_file_names = new_file_names
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
@@ -12,6 +12,7 @@ module RocketJob
12
12
  # Call the supplied block for every record returned
13
13
  record_count = 0
14
14
  each do |slice|
15
+ # TODO: Add slice_id to named tags to aid problem determination
15
16
  slice.each do |record|
16
17
  record_count += 1
17
18
  yield(record)
@@ -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
- supervise_pool
39
- stop!
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
@@ -1,3 +1,3 @@
1
1
  module RocketJob
2
- VERSION = "6.0.2".freeze
2
+ VERSION = "6.1.1".freeze
3
3
  end
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.0.2
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: 2021-10-25 00:00:00.000000000 Z
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.2.22
239
+ rubygems_version: 3.3.7
240
240
  signing_key:
241
241
  specification_version: 4
242
242
  summary: Ruby's missing batch processing system.