simple_job 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6bb025d9059b69eb50b47c4bbc028c14099de884
4
- data.tar.gz: 707f5a66bbfdd89f98cc5e86969d9e7bec7d8847
3
+ metadata.gz: 7c017adc129ac7a434ceabc18789ffa3961e7a13
4
+ data.tar.gz: 4a7f812e0810ca90604bb300a10b43f31c019116
5
5
  SHA512:
6
- metadata.gz: 2f3403565780e85f72e519a494f84eef280e831be7f3b4ab4dc22c053918377eb6d1bb6628f3f456cf2a9d0d900f874f6c42e8b4d8e7b5aeecf2465587ba07b0
7
- data.tar.gz: b16e5270289067d2095778da0cc3a3fcfcb8ea97fadcff8281cf9e52847523beec3ef971f8f31df1cac4833032bc83a4507355c957b900972b83615003b79584
6
+ metadata.gz: 0a6c69686ed7cebc1ba2531a2df856d6f9f154181b1eeb3ff82b82e5f528df3e44b7fd3a6b07d24398b8958a35f4dbb6091fe5a5a0046a23dada6d060ee19a3a
7
+ data.tar.gz: 9f75a0b951dfd8b9d72c490ae40aeff1a2871e723a9e98ce81702203afe563f6592c76dd7318d41a2123b2a7219c396827f652d47860e0c879255459b47d0c82
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,9 @@
1
1
  = Simple Job
2
2
 
3
+ == Version 0.12.0
4
+ * Added accept_nested_definition option to SQSJobQueue
5
+ * Updating specs and eliminating their dependency on AWS
6
+
3
7
  == Version 0.11.0
4
8
  * Using explicit aws-sdk-v1 to allow apps dependent on this library to use both v1 and v2 of aws sdk
5
9
 
@@ -42,20 +42,38 @@ class SQSJobQueue < JobQueue
42
42
  # then fork and execute the proper job in a separate process. This can be
43
43
  # used when you have long-running jobs that will exceed the visibility timeout,
44
44
  # and it is not critical that they be retried when they fail.
45
+ #
46
+ # You may pass an :accept_nested_definition option with a string value to allow this
47
+ # queue to accept messages where the body is nested within a hash entry. This
48
+ # facilitates easy processing of SNS and AutoScaling messages. For example, if you
49
+ # pass this option:
50
+ #
51
+ # accept_nested_definition: 'NotificationMetadata'
52
+ #
53
+ # Then you can put a job body into the NotificationMetadata of an AutoScaling
54
+ # notification:
55
+ #
56
+ # { "AutoScalingGroupName": "some_name", "Service": "AWS Auto Scaling" ...
57
+ # "NotificationMetadata": "{\"type\":\"my_job\",\"version\":\"1\"}" }
58
+ #
59
+ # Then the queue will attempt to process incoming messages normally, but if it
60
+ # encounters a message missing a type and version, it will check the value
61
+ # passed into accept_nested_definition before failing.
45
62
  def self.define_queue(type, options = {})
46
63
  type = type.to_s
47
64
 
48
65
  options = {
49
- :visibility_timeout => config[:default_visibility_timeout],
50
- :asynchronous_execute => false,
51
- :default => false,
66
+ visibility_timeout: config[:default_visibility_timeout],
67
+ asynchronous_execute: false,
68
+ default: false
52
69
  }.merge(options)
70
+ make_default = options.delete(:default)
53
71
 
54
- queue = self.new(type, options[:visibility_timeout], options[:asynchronous_execute])
72
+ queue = self.new(type, options)
55
73
  self.queues ||= {}
56
74
  self.queues[type] = queue
57
75
 
58
- @default_queue = queue if options[:default]
76
+ @default_queue = queue if make_default
59
77
 
60
78
  queue
61
79
  end
@@ -153,9 +171,10 @@ class SQSJobQueue < JobQueue
153
171
  current_job_type = 'unknown'
154
172
  begin
155
173
  sqs_queue.receive_messages(options) do |message|
174
+ message_body = get_message_body(message)
156
175
  last_message = message
157
176
  last_message_at = Time.now
158
- raw_message = JSON.parse(message.body)
177
+ raw_message = JSON.parse(message_body)
159
178
  current_job_type = raw_message['type']
160
179
  definition_class = JobDefinition.job_definition_class_for(raw_message['type'], raw_message['version'])
161
180
 
@@ -165,7 +184,7 @@ class SQSJobQueue < JobQueue
165
184
  raise('max attempt count reached')
166
185
  end
167
186
 
168
- definition = definition_class.new.from_json(message.body)
187
+ definition = definition_class.new.from_json(message_body)
169
188
  last_definition = definition
170
189
 
171
190
  # NOTE: only executes if asynchronous_execute is false (message will be re-enqueued after
@@ -230,9 +249,9 @@ class SQSJobQueue < JobQueue
230
249
  attr_accessor :queues
231
250
  end
232
251
 
233
- attr_accessor :queue_name, :sqs_queue, :visibility_timeout, :asynchronous_execute, :cloud_watch
252
+ attr_accessor :queue_name, :sqs_queue, :visibility_timeout, :asynchronous_execute, :cloud_watch, :accept_nested_definition
234
253
 
235
- def initialize(type, visibility_timeout, asynchronous_execute)
254
+ def initialize(type, visibility_timeout:, asynchronous_execute:, accept_nested_definition: nil)
236
255
  sqs = ::AWS::SQS.new
237
256
  self.queue_name = "#{self.class.config[:queue_prefix]}-#{type}-#{self.class.config[:environment]}"
238
257
  self.sqs_queue = sqs.queues.create(queue_name)
@@ -242,6 +261,7 @@ class SQSJobQueue < JobQueue
242
261
  :aws_access_key_id => AWS.config.access_key_id,
243
262
  :aws_secret_access_key => AWS.config.secret_access_key
244
263
  )
264
+ self.accept_nested_definition = accept_nested_definition
245
265
  end
246
266
 
247
267
  def logger
@@ -350,6 +370,17 @@ class SQSJobQueue < JobQueue
350
370
  end
351
371
  end
352
372
 
373
+ def get_message_body(message)
374
+ result = message.body
375
+ message_hash = JSON.parse(result)
376
+
377
+ if (!message_hash.has_key?('type') || !message_hash.has_key?('version')) && accept_nested_definition
378
+ result = message_hash[accept_nested_definition]
379
+ end
380
+
381
+ result
382
+ end
383
+
353
384
  end
354
385
  end
355
386
 
@@ -1,3 +1,3 @@
1
1
  module SimpleJob
2
- VERSION = '0.11.0'
2
+ VERSION = '0.12.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Dawson