sqewer 6.0.6 → 6.1.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: 7a2ea4f82f0df911ffb45032ec714b8d2545780a
4
- data.tar.gz: 3bde7fb9fb85a51a80ab566768a3eafd23c2825d
3
+ metadata.gz: 1301945308afd9596e1b563dd0ed568f8dd2bd82
4
+ data.tar.gz: 770c8114bf9ef3bc84b96dcfb6a08fb251d77643
5
5
  SHA512:
6
- metadata.gz: 592ba8e297da9d9e7a07a35cbb0521cd6f932e376709933560eec4ea609482f0ca00956612ab839ca4df83e2bec7dd35fb3612c856fb2ee0fc1c0e0d92ba9a9d
7
- data.tar.gz: 56005129f98d24234235de265cf1216433392276018011276f4872fa742ab80b5c62aea82b227881a4aca7e65fe56d24f2e424fa1afea64e040c7c79948b2854
6
+ metadata.gz: fdcd703b863c6e5ce2af7adeaf4a6205304d7c42ed0a227dc7d466c270294013efba20d7f2030c644663c6f6a6c98549b364802eeb407664e646056fa9d7adbe
7
+ data.tar.gz: 408b96e763f411673b914011cb5f70dfde2b791da07a4487f3b018d5dad8ae1b1f01a83cc0a5cf182ec7852672dfadb97a46c92a34e0007e47aa22a5b6673b2f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ### 6.1.0
2
+ - Pass SQS message attributes through the middleware chain
3
+ - Recover the SentTimestamp attribute and set it as queue start in Appsignal
4
+ - Make sure a job given to `submit!` responds to `run`
5
+
1
6
  ### 6.0.6
2
7
  - Make sure :sqewer ActiveJob adapter parameter works in both Rails 4
3
8
  and Rails 5.
data/README.md CHANGED
@@ -248,8 +248,8 @@ You can wrap job processing in middleware. A full-featured middleware class look
248
248
 
249
249
  class MyWrapper
250
250
  # Surrounds the job instantiation from the string coming from SQS.
251
- def around_deserialization(serializer, msg_id, msg_payload)
252
- # msg_id is the receipt handle, msg_payload is the message body string
251
+ def around_deserialization(serializer, msg_id, msg_payload, msg_attributes)
252
+ # msg_id is the receipt handle, msg_payload is the message body string, msg_attributes are the message's attributes
253
253
  yield
254
254
  end
255
255
 
@@ -14,7 +14,7 @@ class Sqewer::Connection
14
14
  NotOurFaultAwsError = Class.new(StandardError)
15
15
 
16
16
  # A wrapper for most important properties of the received message
17
- class Message < Struct.new(:receipt_handle, :body)
17
+ class Message < Struct.new(:receipt_handle, :body, :attributes)
18
18
  def inspect
19
19
  body.inspect
20
20
  end
@@ -57,7 +57,7 @@ class Sqewer::Connection
57
57
  Retriable.retriable on: Seahorse::Client::NetworkingError, tries: MAX_RANDOM_RECEIVE_FAILURES do
58
58
  response = client.receive_message(queue_url: @queue_url,
59
59
  wait_time_seconds: DEFAULT_TIMEOUT_SECONDS, max_number_of_messages: BATCH_RECEIVE_SIZE)
60
- response.messages.map {|message| Message.new(message.receipt_handle, message.body) }
60
+ response.messages.map {|message| Message.new(message.receipt_handle, message.body, message.attributes) }
61
61
  end
62
62
  end
63
63
 
@@ -22,7 +22,7 @@ module Sqewer
22
22
  def env; {params: self.params}; end
23
23
  end
24
24
 
25
- def around_deserialization(serializer, msg_id, msg_payload)
25
+ def around_deserialization(serializer, msg_id, msg_payload, msg_attributes)
26
26
  return yield unless Appsignal.active?
27
27
 
28
28
  # This creates a transaction, but also sets it as the Appsignal.current_transaction
@@ -35,7 +35,9 @@ module Sqewer
35
35
 
36
36
  transaction.set_action('%s#%s' % [serializer.class, 'unserialize'])
37
37
  transaction.request.params = {:sqs_message_body => msg_payload.to_s}
38
- transaction.set_http_or_background_queue_start
38
+ if msg_attributes.key?('SentTimestamp')
39
+ transaction.set_queue_start = Time.at(msg_attributes['SentTimestamp'].to_i / 1000.0)
40
+ end
39
41
 
40
42
  job_unserialized = yield
41
43
 
@@ -33,12 +33,12 @@ class Sqewer::MiddlewareStack
33
33
  }.call
34
34
  end
35
35
 
36
- def around_deserialization(serializer, message_id, message_body, &inner_block)
36
+ def around_deserialization(serializer, message_id, message_body, message_attributes, &inner_block)
37
37
  return yield if @handlers.empty?
38
38
 
39
39
  responders = @handlers.select{|e| e.respond_to?(:around_deserialization) }
40
40
  responders.reverse.inject(inner_block) {|outer_block, middleware_object|
41
- ->{ middleware_object.public_send(:around_deserialization, serializer, message_id, message_body, &outer_block) }
41
+ ->{ middleware_object.public_send(:around_deserialization, serializer, message_id, message_body, message_attributes, &outer_block) }
42
42
  }.call
43
43
  end
44
44
  end
@@ -3,6 +3,7 @@
3
3
  # and the serializer (something that responds to `#serialize`) to
4
4
  # convert the job into the string that will be put in the queue.
5
5
  class Sqewer::Submitter < Struct.new(:connection, :serializer)
6
+ NotSqewerJob = Class.new(StandardError)
6
7
 
7
8
  # Returns a default Submitter, configured with the default connection
8
9
  # and the default serializer.
@@ -11,6 +12,7 @@ class Sqewer::Submitter < Struct.new(:connection, :serializer)
11
12
  end
12
13
 
13
14
  def submit!(job, **kwargs_for_send)
15
+ raise NotSqewerJob.new("Submitted object is not a valid job: #{job.inspect}") unless job.respond_to?(:run)
14
16
  message_body = if delay_by_seconds = kwargs_for_send[:delay_seconds]
15
17
  clamped_delay = clamp_delay(delay_by_seconds)
16
18
  kwargs_for_send[:delay_seconds] = clamped_delay
@@ -1,3 +1,3 @@
1
1
  module Sqewer
2
- VERSION = '6.0.6'
2
+ VERSION = '6.1.0'
3
3
  end
data/lib/sqewer/worker.rb CHANGED
@@ -204,7 +204,7 @@ class Sqewer::Worker
204
204
  box = Sqewer::ConnectionMessagebox.new(connection)
205
205
  return box.delete_message(message.receipt_handle) unless message.has_body?
206
206
 
207
- job = middleware_stack.around_deserialization(serializer, message.receipt_handle, message.body) do
207
+ job = middleware_stack.around_deserialization(serializer, message.receipt_handle, message.body, message.attributes) do
208
208
  serializer.unserialize(message.body)
209
209
  end
210
210
  return unless job
@@ -243,7 +243,7 @@ class Sqewer::Worker
243
243
  # thread-safe - or at least not it's HTTP client part).
244
244
  box = Sqewer::ConnectionMessagebox.new(connection)
245
245
 
246
- job = middleware_stack.around_deserialization(serializer, message.receipt_handle, message.body) do
246
+ job = middleware_stack.around_deserialization(serializer, message.receipt_handle, message.body, message.attributes) do
247
247
  serializer.unserialize(message.body)
248
248
  end
249
249
  return unless job
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqewer
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.6
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-22 00:00:00.000000000 Z
11
+ date: 2019-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-sqs