sqewer 5.0.2 → 5.0.3

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: 3551145e9869e9bfd543de4fc88b47a08d4cfeec
4
- data.tar.gz: 9309e047cdbeae9a9c8e82e3f65cb113781df440
3
+ metadata.gz: 46d6379551635abf688acf36eae180bf893cd1d1
4
+ data.tar.gz: 1b72a67a522b77932306175616e7e4ca875e480d
5
5
  SHA512:
6
- metadata.gz: 791d2cf7b39235df354acade60340c3c9ef513a116462586554e5bd58b3ba8582de2878cb03cd4f76bbffae495dc6f448e5939d460ea4adb646698200038347e
7
- data.tar.gz: 7354e23d35a4a0d7d5e153557970f795c1c57b9ea2d34029a920826337dd99b887c00ccc8d546fabab021b877f1c768fef77c62dbd99b6f6cb68b0a1a9f49039
6
+ metadata.gz: 41b592290fa5616d61f5a2ca30a3a43e513ed603785426902d9677cb4406c4c08dd3db052aa3c22fb34bd6775443e89e12fab7ceacc2ccace5a65bd83c0a34bb
7
+ data.tar.gz: 066c8923a4db8070804c322335134af46f61426e84fc000a04712c43a9fc60b7ffff6d55064315dbd7fc0b11d83aded4fed5a07b9512838fa474dd6d55a29e10
@@ -4,25 +4,73 @@ module Sqewer
4
4
  # to Appsignal and to monitor performance. Will only activate
5
5
  # if the Appsignal gem is loaded within the current process and active.
6
6
  class AppsignalWrapper
7
- # Unserialize the job
7
+ def self.new
8
+ if defined?(Appsignal)
9
+ super
10
+ else
11
+ nil
12
+ end
13
+ end
14
+
15
+ # Acts as a replacement for Appsignal::GenericRequest
16
+ class FakeRequest < Struct.new(:params)
17
+ def initialize; super({}); end
18
+ def env; {params: self.params}; end
19
+ end
20
+
8
21
  def around_deserialization(serializer, msg_id, msg_payload)
9
- return yield unless (defined?(Appsignal) && Appsignal.active?)
22
+ return yield unless Appsignal.active?
23
+
24
+ # This creates a transaction, but also sets it as the Appsignal.current_transaction
25
+ # which is a thread-local variable. We DO share this middleware between threads,
26
+ # but since the object lives in thread locals it should be fine.
27
+ transaction = Appsignal::Transaction.create(
28
+ SecureRandom.uuid,
29
+ namespace = Appsignal::Transaction::BACKGROUND_JOB,
30
+ request = FakeRequest.new)
31
+
32
+ transaction.set_action('%s#%s' % [serializer.class, 'unserialize'])
33
+ transaction.request.params = {:sqs_message_body => msg_payload.to_s}
34
+ transaction.set_http_or_background_queue_start
10
35
 
11
- Appsignal.monitor_transaction('perform_job.demarshal',
12
- :class => serializer.class.to_s, :params => {:recepit_handle => msg_id}, :method => 'deserialize') do
13
- yield
36
+ job_unserialized = yield
37
+
38
+ if !job_unserialized
39
+ # If the job is nil or falsy, we skip the execution. In that case we finish the transaction.
40
+ Appsignal::Transaction.complete_current!
41
+ else
42
+ # If not, then the job will be executed - keep the transaction open for execution block
43
+ # that comes next. Hacky but should work.
44
+ set_transaction_details_from_job(transaction, job_unserialized)
45
+ end
46
+ return job_unserialized
47
+ rescue Exception => e
48
+ if transaction
49
+ # If an exception is raised, raise it through and also set it as the Appsignal exception
50
+ # and commit the transaction.
51
+ transaction.set_error(e)
52
+ Appsignal::Transaction.complete_current!
14
53
  end
54
+ raise e
55
+ end
56
+
57
+ def set_transaction_details_from_job(transaction, job)
58
+ transaction.set_action('%s#%s' % [job.class.to_s, 'run'])
59
+ job_params = job.respond_to?(:to_h) ? job.to_h : {}
60
+ transaction.request.params = job_params
15
61
  end
16
62
 
17
63
  # Run the job with Appsignal monitoring.
18
64
  def around_execution(job, context)
19
- return yield unless (defined?(Appsignal) && Appsignal.active?)
20
- job_params = job.respond_to?(:to_h) ? job.to_h : {}
21
- Appsignal.monitor_transaction('perform_job.sqewer',
22
- :class => job.class.to_s, :params => job_params, :method => 'run') do |t|
23
- context['appsignal.transaction'] = t
24
- yield
25
- end
65
+ return yield unless Appsignal.active?
66
+ transaction = Appsignal::Transaction.current
67
+ set_transaction_details_from_job(transaction, job)
68
+ yield
69
+ rescue Exception => e
70
+ transaction.set_error(e) if transaction
71
+ raise e
72
+ ensure
73
+ Appsignal::Transaction.complete_current! if transaction
26
74
  end
27
75
  end
28
76
  end
@@ -1,3 +1,3 @@
1
1
  module Sqewer
2
- VERSION = '5.0.2'
2
+ VERSION = '5.0.3'
3
3
  end
data/sqewer.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: sqewer 5.0.2 ruby lib
5
+ # stub: sqewer 5.0.3 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "sqewer"
9
- s.version = "5.0.2"
9
+ s.version = "5.0.3"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Julik Tarkhanov"]
14
- s.date = "2016-07-01"
14
+ s.date = "2016-09-06"
15
15
  s.description = "Process jobs from SQS"
16
16
  s.email = "me@julik.nl"
17
17
  s.executables = ["sqewer", "sqewer_rails"]
@@ -66,7 +66,7 @@ Gem::Specification.new do |s|
66
66
  ]
67
67
  s.homepage = "https://gitlab.wetransfer.net/julik/sqewer"
68
68
  s.licenses = ["MIT"]
69
- s.rubygems_version = "2.2.2"
69
+ s.rubygems_version = "2.5.1"
70
70
  s.summary = "A full-featured library for all them worker needs"
71
71
 
72
72
  if s.respond_to? :specification_version then
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: 5.0.2
4
+ version: 5.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-01 00:00:00.000000000 Z
11
+ date: 2016-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -321,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
321
  version: '0'
322
322
  requirements: []
323
323
  rubyforge_project:
324
- rubygems_version: 2.2.2
324
+ rubygems_version: 2.5.1
325
325
  signing_key:
326
326
  specification_version: 4
327
327
  summary: A full-featured library for all them worker needs