dispatch-rider 0.2.6 → 0.2.7

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
  SHA1:
3
- metadata.gz: e8c83bd0eaa995fa7670ffdefc142601edf76b67
4
- data.tar.gz: 3da06e688819bd362c5ad5496ff8bb69373ff8a6
3
+ metadata.gz: 30af4d35a460ffed8231e8baf51fce6e2cd03d31
4
+ data.tar.gz: 72064d34039b26cff1d57f1e378c261f68e7a59d
5
5
  SHA512:
6
- metadata.gz: 80f0873bf4ba615d32eef762af905f2c627d100183de4fabb5ddb96a849a0656ed233b4d77cd19983c540ad44f3b2bad43247eecb6d57e5c4532f169cca23c4e
7
- data.tar.gz: a0488d4f6932746868fb83a60714a35b59d26798c32bc5dd82a9c2ac700c9ad914324f5ba1c49e8127fcf18d73f8435b1ab320306bc0eac434b8c5819a5a9cb9
6
+ metadata.gz: bafae95fb175d28736ac1ca3615c84d3e446f4736e82ba75582b092877f205dc363e9d9f26b36d8ddcc5f07b7103f63307f91ab656e557c8ffa080ea7a9e60bc
7
+ data.tar.gz: 6fefbc2b6f0b5f72dad10835a76c1ae810abb4f391368eb1c71f0816fc1074d4611fb519eb2451e2e5569590bf3ef460dcfdb088bcb7700b98812b1cc1087f9f
data/README.md CHANGED
@@ -208,6 +208,8 @@ DispatchRider.config do |config|
208
208
  end
209
209
  end
210
210
 
211
+ config.logger = Rails.logger
212
+
211
213
  config.error_handler = DispatchRider::DefaultErrorHandler # an object that responds to .call(message, exception)
212
214
 
213
215
  config.queue_kind = :sqs
@@ -217,6 +219,11 @@ DispatchRider.config do |config|
217
219
  end
218
220
  ```
219
221
 
222
+ Options:
223
+
224
+ * `logger` : what logger to use to send messages to (responds to the standard ruby Logger protocol), defaults to a new Logger sending messages to STDERR
225
+
226
+
220
227
  ### Callbacks
221
228
 
222
229
  Dispatch rider supports injecting callbacks in a few parts of the
@@ -237,12 +244,10 @@ To setup a subscriber you'll need message handlers. The handlers are named the s
237
244
  Sample message handler:
238
245
  ```ruby
239
246
  # app/handlers/bar_handler
240
- module ReadNews
241
- class << self
242
- def process(message_body)
243
- message_body["headlines"].each do |headline|
244
- puts headline
245
- end
247
+ class ReadNews < DispatchRider::Handlers::Base
248
+ def process(message_body)
249
+ message_body["headlines"].each do |headline|
250
+ puts headline
246
251
  end
247
252
  end
248
253
  end
@@ -1,6 +1,6 @@
1
1
  module DispatchRider
2
2
  class Configuration
3
- attr_accessor :handler_path, :error_handler, :queue_info, :queue_kind, :subscriber
3
+ attr_accessor :handler_path, :error_handler, :queue_info, :queue_kind, :subscriber, :logger
4
4
  attr_reader :callbacks
5
5
 
6
6
  def initialize
@@ -10,6 +10,7 @@ module DispatchRider
10
10
  @queue_info = { path: "tmp/dispatch-rider-queue" }
11
11
  @callbacks = Callbacks::Storage.new
12
12
  @subscriber = DispatchRider::Subscriber
13
+ @logger = Logger.new(STDERR)
13
14
  end
14
15
 
15
16
  delegate :before, :after, :around, :to => :callbacks
@@ -35,7 +35,7 @@ module DispatchRider
35
35
  def dispatch_message(message)
36
36
  dispatcher.dispatch(message)
37
37
  rescue => exception
38
- error_handler.call(message, exception)
38
+ handle_message_error message, exception
39
39
  false
40
40
  end
41
41
 
@@ -48,11 +48,38 @@ module DispatchRider
48
48
  end
49
49
  end
50
50
 
51
+ def message_info_fragment(message)
52
+ "(#{message.object_id}): #{message.subject} : #{message.body.inspect}"
53
+ end
54
+
51
55
  def handle_next_queue_item
52
56
  queue.pop do |message|
53
- dispatch_message(message)
57
+ begin
58
+ logger.info "Starting execution of: #{message_info_fragment(message)}"
59
+ dispatch_message(message)
60
+ ensure
61
+ logger.info "Completed execution of: #{message_info_fragment(message)}"
62
+ end
54
63
  end
55
64
  end
56
65
 
66
+ def exception_info_fragment(message, exception)
67
+ "(#{message.object_id}): #{message.subject} with #{exception.class}: #{exception.message}"
68
+ end
69
+
70
+ def handle_message_error(message, exception)
71
+ begin
72
+ logger.error "Failed execution of: #{exception_info_fragment(message, exception)}"
73
+ error_handler.call(message, exception)
74
+ rescue => error_handler_exception # the error handler crashed
75
+ logger.error "Failed error handling of: #{exception_info_fragment(message, error_handler_exception)}"
76
+ raise error_handler_exception
77
+ end
78
+ end
79
+
80
+ def logger
81
+ DispatchRider.config.logger
82
+ end
83
+
57
84
  end
58
85
  end
@@ -30,12 +30,16 @@ module DispatchRider
30
30
  @callbacks ||= Callbacks::Access.new(config.callbacks)
31
31
  end
32
32
 
33
+ def logger
34
+ config.logger
35
+ end
36
+
33
37
  def ready
34
- puts "Creating subscriber..."
38
+ logger.info "Creating subscriber..."
35
39
  @subscriber = config.subscriber.new
36
40
 
37
41
  config.handlers.each do |handler_name|
38
- puts "Registering #{handler_name} handler..."
42
+ logger.info "Registering #{handler_name} handler..."
39
43
  @subscriber.register_handler(handler_name)
40
44
  end
41
45
  end
@@ -44,7 +48,7 @@ module DispatchRider
44
48
  kind = config.queue_kind
45
49
  info = config.queue_info
46
50
 
47
- puts "Setting #{kind} queue @ #{info.to_json} ..."
51
+ logger.info "Setting #{kind} queue @ #{info.to_json} ..."
48
52
  @subscriber.register_queue(kind, info)
49
53
  @subscriber.setup_demultiplexer(kind, config.error_handler)
50
54
  end
@@ -30,17 +30,38 @@ module DispatchRider
30
30
  end
31
31
 
32
32
  def process
33
- Signal.trap("QUIT") { demultiplexer.stop } # signal number: 3
34
- Signal.trap("TERM") { demultiplexer.stop } # signal number: 15
33
+ Signal.trap("QUIT") do
34
+ # signal number: 3
35
+ logger.info "Received SIGQUIT, stopping demultiplexer"
36
+ demultiplexer.stop
37
+ end
38
+
39
+ Signal.trap("TERM") do
40
+ # signal number: 15
41
+ logger.info "Received SIGTERM, stopping demultiplexer"
42
+ demultiplexer.stop
43
+ end
35
44
 
36
- # user interuption
37
- already_interupted = false
45
+ # user interruption
46
+ already_interrupted = false
38
47
  Signal.trap("INT") do
39
- already_interupted ? exit(0) : demultiplexer.stop
40
- already_interupted = true
48
+ if already_interrupted
49
+ logger.info "Received SIGINT second time, aborting"
50
+ exit(0)
51
+ else
52
+ logger.info "Received SIGINT first time, stopping demultiplexer"
53
+ demultiplexer.stop
54
+ end
55
+ already_interrupted = true
41
56
  end
42
57
 
43
58
  demultiplexer.start
44
59
  end
60
+
61
+ private
62
+
63
+ def logger
64
+ DispatchRider.config.logger
65
+ end
45
66
  end
46
67
  end
@@ -1,4 +1,4 @@
1
1
  # This file specifies the current version of the gem.
2
2
  module DispatchRider
3
- VERSION = "0.2.6"
3
+ VERSION = "0.2.7"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dispatch-rider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Suman Mukherjee
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-12-05 00:00:00.000000000 Z
14
+ date: 2013-12-10 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport