beetle 3.0.0 → 3.1.0

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: 8a90e706d339d2a9e458c0b82113b58d5be98243fa9c9adbeaafb12fadeeb3d1
4
- data.tar.gz: d89db5e989cfa51558ebda9db9c6acd10170c27fda0135378157e252570be626
3
+ metadata.gz: 81efac323bc4a748a3e15d4ca496fa826cc75338b6841d28d22970cd38bf7a4d
4
+ data.tar.gz: f34c106da764a475f0396b225482a16083b00b659270d58b7b04c6887b59c6fd
5
5
  SHA512:
6
- metadata.gz: ee25e895ba9f3f38afe6d4985297435d93cab432b0dd8d483b8890a25b58f89d9993fac429c0d710bfeed49568dd1a28c948a0241297c1352ad2200987e0aebc
7
- data.tar.gz: d1dff384a6bd1da983b2c400e524970d086759ae7c24106089ef0e36a167b7cb9b8769f6938b96b9a5b78435abb945cddba432b14755716f67c96e508783ef51
6
+ metadata.gz: 933a4abbd1748fca969f40bd1c2cd304302ce70ec52251c0e1af66b491878644bb6be881686d9899718836f709caeba036bab2a0e0df5f4d9824233af7082dd7
7
+ data.tar.gz: 4b215e85dd35302221e1d7366f7fbc271025b032fddc9e9a7cf6fa60f37fd8502bcb22605785969cb9607229e74708df97af7d78f51b659159a98ce53c876ec4
@@ -13,6 +13,10 @@ infrastructure. It offers the following features:
13
13
 
14
14
  More information can be found on the {project website}[http://xing.github.com/beetle].
15
15
 
16
+ == Release notes
17
+
18
+ See {RELEASE_NOTES.rdoc}[https://github.com/xing/beetle/blob/master/RELEASE_NOTES.rdoc]
19
+
16
20
  == Usage
17
21
 
18
22
  === Configuration
@@ -1,5 +1,13 @@
1
1
  = Release Notes
2
2
 
3
+ == Version 3.1.0
4
+ * added more debug log statements
5
+ * added new callbacks on class Beetle::Handler:
6
+ * pre_process is called before any message processing commences
7
+ * post_process is called after all processing has been completed
8
+ these handlers can be used for logging purposes (such as logjam
9
+ integration)
10
+
3
11
  == Version 3.0.0
4
12
 
5
13
  * provide client method to setup queues and queue policies.
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
30
30
  s.add_runtime_dependency "amqp", "= 1.8.0"
31
31
  s.add_runtime_dependency "activesupport", ">= 2.3.4"
32
32
 
33
- s.add_development_dependency "uuid4r", ">= 0.1.2"
34
33
  s.add_development_dependency "activerecord", "~> 5.0"
35
34
  s.add_development_dependency "cucumber", "~> 2.4.0"
36
35
  s.add_development_dependency "daemon_controller", "~> 1.2.0"
@@ -48,12 +48,20 @@ module Beetle
48
48
  @__handler_called__ = true
49
49
  end
50
50
 
51
+ # called before message processing starts
52
+ def pre_process
53
+ end
54
+
51
55
  # called for message processing if no processor was specfied when the handler instance
52
56
  # was created
53
57
  def process
54
58
  logger.info "Beetle: received message #{message.inspect}"
55
59
  end
56
60
 
61
+ # called after message processing finishes
62
+ def post_process
63
+ end
64
+
57
65
  # should not be overriden in subclasses
58
66
  def process_exception(exception) #:nodoc:
59
67
  if @error_callback
@@ -1,4 +1,5 @@
1
1
  require "timeout"
2
+ require "securerandom"
2
3
 
3
4
  module Beetle
4
5
  # Instances of class Message are created when a subscription callback fires. Class
@@ -146,16 +147,8 @@ module Beetle
146
147
  end
147
148
 
148
149
  # generate uuid for publishing
149
- begin
150
- require "uuid4r"
151
- def self.generate_uuid
152
- UUID4R::uuid(4)
153
- end
154
- rescue LoadError
155
- require "securerandom"
156
- def self.generate_uuid
157
- SecureRandom.uuid
158
- end
150
+ def self.generate_uuid
151
+ SecureRandom.uuid
159
152
  end
160
153
 
161
154
  # whether the publisher has tried sending this message to two servers
@@ -264,7 +257,7 @@ module Beetle
264
257
 
265
258
  # process this message and do not allow any exception to escape to the caller
266
259
  def process(handler)
267
- logger.debug "Beetle: processing message #{msg_id}"
260
+ logger.debug "Beetle: processing message #{msg_id}(#{timestamp})"
268
261
  result = nil
269
262
  begin
270
263
  result = process_internal(handler)
@@ -3,6 +3,8 @@ module Beetle
3
3
 
4
4
  # message processing result return codes
5
5
  class ReturnCode
6
+ attr_reader :name
7
+
6
8
  def initialize(*args)
7
9
  @reject = args.delete :reject
8
10
  @failure = args.delete :failure
@@ -168,13 +168,15 @@ module Beetle
168
168
  def create_subscription_callback(queue_name, amqp_queue_name, handler, opts)
169
169
  server = @server
170
170
  lambda do |header, data|
171
+ msg_id = header.attributes[:message_id]
171
172
  if channel(server).closing?
172
- logger.info "Beetle: ignoring message since channel to server #{server} already closed"
173
+ timestamp = header.attributes[:timestamp]
174
+ logger.info "Beetle: ignored message #{msg_id}(#{timestamp}) since channel to server #{server} was already closed"
173
175
  return
174
176
  end
175
177
  begin
176
- # logger.debug "Beetle: received message"
177
178
  processor = Handler.create(handler, opts)
179
+ processor.pre_process
178
180
  message_options = opts.merge(:server => server, :store => @client.deduplication_store)
179
181
  m = Message.new(amqp_queue_name, header, data, message_options)
180
182
  result = m.process(processor)
@@ -185,23 +187,25 @@ module Beetle
185
187
  sleep 1
186
188
  header.reject(:requeue => true)
187
189
  end
190
+ logger.debug "Beetle: rejected #{msg_id} RC: #{result.name}"
188
191
  elsif reply_to = header.attributes[:reply_to]
189
- # logger.info "Beetle: sending reply to queue #{reply_to}"
190
- # require 'ruby-debug'
191
- # Debugger.start
192
- # debugger
192
+ logger.debug "Beetle: sending reply to queue #{reply_to} for #{msg_id}"
193
193
  status = result == Beetle::RC::OK ? "OK" : "FAILED"
194
194
  exchange = AMQP::Exchange.new(channel(server), :direct, "")
195
195
  exchange.publish(m.handler_result.to_s, :routing_key => reply_to, :persistent => false, :headers => {:status => status})
196
196
  end
197
- # logger.debug "Beetle: processed message"
198
197
  rescue Exception
199
198
  Beetle::reraise_expectation_errors!
200
- # swallow all exceptions
201
- logger.error "Beetle: internal error during message processing: #{$!}: #{$!.backtrace.join("\n")}"
199
+ logger.debug "Beetle: internal error on #{msg_id}: #{$!}: #{$!.backtrace.join("\n")}"
202
200
  ensure
203
201
  # processing_completed swallows all exceptions, so we don't need to protect this call
204
202
  processor.processing_completed
203
+ logger.debug "Beetle: completed #{msg_id}"
204
+ begin
205
+ processor.post_process
206
+ rescue Exception
207
+ Beetle::reraise_expectation_errors!
208
+ end
205
209
  end
206
210
  end
207
211
  end
@@ -1,3 +1,3 @@
1
1
  module Beetle
2
- VERSION = "3.0.0"
2
+ VERSION = "3.1.0"
3
3
  end
@@ -266,6 +266,7 @@ module Beetle
266
266
  @sub = client.send(:subscriber)
267
267
  @exception = Exception.new "murks"
268
268
  @handler = Handler.create(lambda{|*args| raise @exception})
269
+ @handler.instance_eval { def post_process; raise "shoot"; end }
269
270
  @callback = @sub.send(:create_subscription_callback, "my myessage", @queue, @handler, :exceptions => 1)
270
271
  end
271
272
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beetle
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Kaes
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2019-05-27 00:00:00.000000000 Z
15
+ date: 2019-07-05 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bunny
@@ -98,20 +98,6 @@ dependencies:
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
100
  version: 2.3.4
101
- - !ruby/object:Gem::Dependency
102
- name: uuid4r
103
- requirement: !ruby/object:Gem::Requirement
104
- requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- version: 0.1.2
108
- type: :development
109
- prerelease: false
110
- version_requirements: !ruby/object:Gem::Requirement
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- version: 0.1.2
115
101
  - !ruby/object:Gem::Dependency
116
102
  name: activerecord
117
103
  requirement: !ruby/object:Gem::Requirement