eventhub-processor 0.0.7 → 0.1.1

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: d6896414dd331b83418d8bbf1e7ed6f6efc78f35
4
- data.tar.gz: c7b8614fc58ba0cdef80a3532d94a645564d08ee
3
+ metadata.gz: 8e4ce69b4a807077b43ff86fa599cf2f16a98edd
4
+ data.tar.gz: 11494b0b12a740701ee3d9485a62cf86bb998554
5
5
  SHA512:
6
- metadata.gz: 46bc0b39fb711bab9835d507bd6bb1410a154d262c0a25fc9239eda0f7bdf79e70480adba332b5e6f4201b9e31ac293ac7861525ea4689807dc8b991203d3916
7
- data.tar.gz: b67fe54f620f45b063721dd6510258b520ea5ec37c7edc83f8e4bbf2ed343588c864726a0f3bb2f6052b3b3a936840b4fb377856a1ae7fa31d4e3bd9ec480f26
6
+ metadata.gz: 6643282458c6a9fda028a66cdd595cfee83a4b0fd4a37bda1b3efc34a7f645c9bd25b87f2cae6020ea15526f4504c70701fd442d0eac662791c8b072451d59bb
7
+ data.tar.gz: 4cd12c7edcadf630f7445d6be571fe54e9779a6a09891a726995586b0e1cdc0b0f344222fced136a3d3e85b92dc2c397ef04c6e3e43dc1e968c0459ca9f5d13d
@@ -19,8 +19,10 @@ module EventHub
19
19
  attr_accessor :folder, :devices
20
20
 
21
21
  def initialize(folder=nil)
22
- @folder = folder || Dir.pwd
22
+ @folder = folder || (Dir.pwd + '/log')
23
23
  @devices = []
24
+
25
+ FileUtils.makedirs(@folder)
24
26
  end
25
27
 
26
28
  def add_device(device)
@@ -5,6 +5,10 @@ module EventHub
5
5
 
6
6
  include Helper
7
7
 
8
+ def version
9
+ "1.0.0"
10
+ end
11
+
8
12
  def initialize(name=nil)
9
13
  @name = name || class_to_array(self.class)[1..-1].join(".")
10
14
  @folder = Dir.pwd
@@ -14,6 +18,9 @@ module EventHub
14
18
  @messages_successful = 0
15
19
  @messages_unsuccessful = 0
16
20
 
21
+
22
+ @channel_receiver = nil
23
+ @channel_sender = nil
17
24
  @restart = true
18
25
  end
19
26
 
@@ -66,8 +73,6 @@ module EventHub
66
73
 
67
74
  EventHub.logger.info("Processor [#{@name}] base folder [#{@folder}]")
68
75
 
69
- channel = nil
70
-
71
76
  while @restart
72
77
 
73
78
  begin
@@ -82,10 +87,10 @@ module EventHub
82
87
  end
83
88
 
84
89
  # create channel
85
- channel = AMQP::Channel.new(@connection)
86
-
90
+ @channel_receiver = AMQP::Channel.new(@connection, prefetch: 1)
91
+
87
92
  # connect to queue
88
- @queue = channel.queue(self.listener_queue, durable: true, auto_delete: false)
93
+ @queue = @channel_receiver.queue(self.listener_queue, durable: true, auto_delete: false)
89
94
 
90
95
  # subscribe to queue
91
96
  @queue.subscribe(:ack => true) do |metadata, payload|
@@ -110,11 +115,11 @@ module EventHub
110
115
  messages_to_send.each do |message|
111
116
  send_message(message)
112
117
  end
113
- channel.acknowledge(metadata.delivery_tag)
118
+ @channel_receiver.acknowledge(metadata.delivery_tag)
114
119
  @messages_successful += 1
115
120
 
116
121
  rescue => e
117
- channel.reject(metadata.delivery_tag,false)
122
+ @channel_receiver.reject(metadata.delivery_tag,false)
118
123
  @messages_unsuccessful += 1
119
124
  EventHub.logger.error("Unexpected exception in handle_message method: #{e}. Message dead lettered.")
120
125
  EventHub.logger.save_detailed_error(e)
@@ -127,6 +132,9 @@ module EventHub
127
132
  Signal.trap("TERM") {stop_processor}
128
133
  Signal.trap("INT") {stop_processor}
129
134
 
135
+ # post_start is a custom post start routing to be overwritten
136
+ post_start
137
+
130
138
  # Various timers
131
139
  EventMachine.add_timer(@watchdog_cycle_in_s) { watchdog }
132
140
 
@@ -144,6 +152,9 @@ module EventHub
144
152
 
145
153
  end # while
146
154
 
155
+ # post_start is a custom post start routing to be overwritten
156
+ post_stop
157
+
147
158
  EventHub.logger.info("Processor [#{@name}] has been stopped")
148
159
  ensure
149
160
  # remove pid file
@@ -192,7 +203,8 @@ module EventHub
192
203
 
193
204
  now = Time.now
194
205
  message.body = {
195
- heartbeat: {
206
+ version: self.version,
207
+ heartbeat: {
196
208
  started: now_stamp(@started),
197
209
  stamp_last_beat: now_stamp(now),
198
210
  uptime: duration(now-@started),
@@ -212,15 +224,25 @@ module EventHub
212
224
  send_message(message)
213
225
 
214
226
  EventMachine.add_timer(self.heartbeat_cycle_in_s) { heartbeat }
227
+
215
228
  end
216
229
 
217
230
  # send message
218
231
  def send_message(message,exchange_name=EH_X_INBOUND)
219
- AMQP::Channel.new(@connection) do |channel|
220
- channel.direct(exchange_name, :durable => true, :auto_delete => false) do |exchange, declare_ok|
221
- exchange.publish(message.to_json, :persistent => true)
222
- end
232
+
233
+ if @channel_sender.nil? || !@channel_sender.open?
234
+ @channel_sender = AMQP::Channel.new(@connection, prefetch: 1)
235
+
236
+ # use publisher confirm
237
+ @channel_sender.confirm_select
238
+
239
+ # @channel.on_error { |ch, channel_close| EventHub.logger.error "Oops! a channel-level exception: #{channel_close.reply_text}" }
240
+ # @channel.on_ack { |basic_ack| EventHub.logger.info "Received basic_ack: multiple = #{basic_ack.multiple}, delivery_tag = #{basic_ack.delivery_tag}" }
223
241
  end
242
+
243
+ exchange = @channel_sender.direct(exchange_name, :durable => true, :auto_delete => false)
244
+ exchange.publish(message.to_json, :persistent => true)
245
+
224
246
  rescue => e
225
247
  EventHub.logger.error("Unexpected exception while sending message to [#{exchange_name}]: #{e}")
226
248
  end
@@ -238,6 +260,13 @@ module EventHub
238
260
  def stop_processor(restart=false)
239
261
  @restart = restart
240
262
 
263
+ # close channels
264
+ [@channel_receiver,@channel_sender].each do |channel|
265
+ if channel
266
+ channel.close if channel.open?
267
+ end
268
+ end
269
+
241
270
  # stop connection and event loop
242
271
  if @connection
243
272
  @connection.disconnect if @connection.connected?
@@ -255,5 +284,12 @@ module EventHub
255
284
  IO.write("#{@folder}/#{@name}.pid",Process.pid.to_s)
256
285
  end
257
286
 
287
+ def post_start
288
+ # method which can be overwritten to call a code sequence after reactor start
289
+ end
290
+
291
+ def post_stop
292
+ end
293
+
258
294
  end
259
295
  end
@@ -1,3 +1,3 @@
1
1
  module EventHub
2
- VERSION = "0.0.7"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventhub-processor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Steiner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-13 00:00:00.000000000 Z
11
+ date: 2014-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler