rabbitek 0.3.1 → 0.4.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
  SHA256:
3
- metadata.gz: f7908fdc1329216ae02618bee4aae76564192031c6e2e7c10016758581f665d3
4
- data.tar.gz: 25265bd1ab29f07298edbd2594ac972dafdc72d9ae6585dc89460e5020ce5da0
3
+ metadata.gz: d1f7cc70de57fb560439fe5e93b30b76e419d8e00dcea7379c6b3fe4aa4a6325
4
+ data.tar.gz: 1eb6bd702c62d2e9cd44f97211cfbe6769c58db9f032073bf0361a137d5c16e9
5
5
  SHA512:
6
- metadata.gz: 7674a197bbd8d963f3e39253fd779e8a9261e98a8f5145b7b0ab624a690156758a81339f2fc74e9fafd4bbcc34e934c04794c89150a221e5daed2a8c83c209b9
7
- data.tar.gz: 4f04a4cbf33ec615366e891500ffebd38e4d54a9c7fc4c772c04dc602279a423541ac1c3cd045e18ee0428f490356cc41c86f05420b5eaeaff775ffd31c872bd
6
+ metadata.gz: 398811e481a4b197ddaea89a52448d76e158576156aacffb5c3801d0b3122bfb3df1770e15c348500fd5fe59a172b3bdb3d8f0c52e4642a9306a7d983a8c616f
7
+ data.tar.gz: fcc347a951e4530f723e8d754a58b111b7463cc175a3944249296db049b070898b1b44e509633c7af2c8d633c6fa2fb8c45908c3e09e6fa87c677ef327db8c5c
@@ -1,3 +1,25 @@
1
+ ## v0.4.0
2
+
3
+ Improvements:
4
+ * Add metrics (universal, you can use e.g. prometheus)
5
+
6
+ ## v0.3.5
7
+
8
+ Bugfix:
9
+ * Fix OpenTracing support when there is no trace_id incoming with job.
10
+
11
+ ## v0.3.4
12
+
13
+ Improvements:
14
+ * Logging improvement
15
+
16
+ ## v0.3.3
17
+
18
+ Improvements:
19
+ * Failure in retry hook will result in additional logging and nacking job with requeue: true
20
+
21
+ ## v0.3.2
22
+
1
23
  ## v0.3.1
2
24
 
3
25
  Bugfix:
@@ -1,53 +1,54 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rabbitek (0.3.0)
4
+ rabbitek (0.4.0)
5
5
  activesupport (> 3.0)
6
6
  bunny (~> 2.11.0)
7
7
  oj (~> 3.6)
8
8
  opentracing (~> 0.4)
9
9
  slop (~> 4.0)
10
+ yabeda
10
11
 
11
12
  GEM
12
13
  remote: https://rubygems.org/
13
14
  specs:
14
- actioncable (5.2.2)
15
- actionpack (= 5.2.2)
15
+ actioncable (5.2.4.1)
16
+ actionpack (= 5.2.4.1)
16
17
  nio4r (~> 2.0)
17
18
  websocket-driver (>= 0.6.1)
18
- actionmailer (5.2.2)
19
- actionpack (= 5.2.2)
20
- actionview (= 5.2.2)
21
- activejob (= 5.2.2)
19
+ actionmailer (5.2.4.1)
20
+ actionpack (= 5.2.4.1)
21
+ actionview (= 5.2.4.1)
22
+ activejob (= 5.2.4.1)
22
23
  mail (~> 2.5, >= 2.5.4)
23
24
  rails-dom-testing (~> 2.0)
24
- actionpack (5.2.2)
25
- actionview (= 5.2.2)
26
- activesupport (= 5.2.2)
27
- rack (~> 2.0)
25
+ actionpack (5.2.4.1)
26
+ actionview (= 5.2.4.1)
27
+ activesupport (= 5.2.4.1)
28
+ rack (~> 2.0, >= 2.0.8)
28
29
  rack-test (>= 0.6.3)
29
30
  rails-dom-testing (~> 2.0)
30
31
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
31
- actionview (5.2.2)
32
- activesupport (= 5.2.2)
32
+ actionview (5.2.4.1)
33
+ activesupport (= 5.2.4.1)
33
34
  builder (~> 3.1)
34
35
  erubi (~> 1.4)
35
36
  rails-dom-testing (~> 2.0)
36
37
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
37
- activejob (5.2.2)
38
- activesupport (= 5.2.2)
38
+ activejob (5.2.4.1)
39
+ activesupport (= 5.2.4.1)
39
40
  globalid (>= 0.3.6)
40
- activemodel (5.2.2)
41
- activesupport (= 5.2.2)
42
- activerecord (5.2.2)
43
- activemodel (= 5.2.2)
44
- activesupport (= 5.2.2)
41
+ activemodel (5.2.4.1)
42
+ activesupport (= 5.2.4.1)
43
+ activerecord (5.2.4.1)
44
+ activemodel (= 5.2.4.1)
45
+ activesupport (= 5.2.4.1)
45
46
  arel (>= 9.0)
46
- activestorage (5.2.2)
47
- actionpack (= 5.2.2)
48
- activerecord (= 5.2.2)
47
+ activestorage (5.2.4.1)
48
+ actionpack (= 5.2.4.1)
49
+ activerecord (= 5.2.4.1)
49
50
  marcel (~> 0.3.1)
50
- activesupport (5.2.2)
51
+ activesupport (5.2.4.1)
51
52
  concurrent-ruby (~> 1.0, >= 1.0.2)
52
53
  i18n (>= 0.7, < 2)
53
54
  minitest (~> 5.1)
@@ -55,20 +56,21 @@ GEM
55
56
  amq-protocol (2.3.0)
56
57
  arel (9.0.0)
57
58
  ast (2.4.0)
58
- builder (3.2.3)
59
+ builder (3.2.4)
59
60
  bunny (2.11.0)
60
61
  amq-protocol (~> 2.3.0)
61
62
  coderay (1.1.2)
62
- concurrent-ruby (1.1.4)
63
- crass (1.0.4)
63
+ concurrent-ruby (1.1.5)
64
+ crass (1.0.6)
64
65
  diff-lcs (1.3)
65
- erubi (1.8.0)
66
+ dry-initializer (3.0.3)
67
+ erubi (1.9.0)
66
68
  globalid (0.4.2)
67
69
  activesupport (>= 4.2.0)
68
- i18n (1.5.2)
70
+ i18n (1.8.2)
69
71
  concurrent-ruby (~> 1.0)
70
72
  jaro_winkler (1.5.1)
71
- loofah (2.2.3)
73
+ loofah (2.4.0)
72
74
  crass (~> 1.0.2)
73
75
  nokogiri (>= 1.5.9)
74
76
  mail (2.7.1)
@@ -79,11 +81,11 @@ GEM
79
81
  mimemagic (0.3.3)
80
82
  mini_mime (1.0.2)
81
83
  mini_portile2 (2.4.0)
82
- minitest (5.11.3)
83
- nio4r (2.4.0)
84
- nokogiri (1.10.3)
84
+ minitest (5.14.0)
85
+ nio4r (2.5.2)
86
+ nokogiri (1.10.7)
85
87
  mini_portile2 (~> 2.4.0)
86
- oj (3.8.1)
88
+ oj (3.10.0)
87
89
  opentracing (0.5.0)
88
90
  parallel (1.12.1)
89
91
  parser (2.5.1.2)
@@ -92,30 +94,30 @@ GEM
92
94
  pry (0.12.2)
93
95
  coderay (~> 1.1.0)
94
96
  method_source (~> 0.9.0)
95
- rack (2.0.7)
97
+ rack (2.1.1)
96
98
  rack-test (1.1.0)
97
99
  rack (>= 1.0, < 3)
98
- rails (5.2.2)
99
- actioncable (= 5.2.2)
100
- actionmailer (= 5.2.2)
101
- actionpack (= 5.2.2)
102
- actionview (= 5.2.2)
103
- activejob (= 5.2.2)
104
- activemodel (= 5.2.2)
105
- activerecord (= 5.2.2)
106
- activestorage (= 5.2.2)
107
- activesupport (= 5.2.2)
100
+ rails (5.2.4.1)
101
+ actioncable (= 5.2.4.1)
102
+ actionmailer (= 5.2.4.1)
103
+ actionpack (= 5.2.4.1)
104
+ actionview (= 5.2.4.1)
105
+ activejob (= 5.2.4.1)
106
+ activemodel (= 5.2.4.1)
107
+ activerecord (= 5.2.4.1)
108
+ activestorage (= 5.2.4.1)
109
+ activesupport (= 5.2.4.1)
108
110
  bundler (>= 1.3.0)
109
- railties (= 5.2.2)
111
+ railties (= 5.2.4.1)
110
112
  sprockets-rails (>= 2.0.0)
111
113
  rails-dom-testing (2.0.3)
112
114
  activesupport (>= 4.2.0)
113
115
  nokogiri (>= 1.6)
114
- rails-html-sanitizer (1.0.4)
115
- loofah (~> 2.2, >= 2.2.2)
116
- railties (5.2.2)
117
- actionpack (= 5.2.2)
118
- activesupport (= 5.2.2)
116
+ rails-html-sanitizer (1.3.0)
117
+ loofah (~> 2.3)
118
+ railties (5.2.4.1)
119
+ actionpack (= 5.2.4.1)
120
+ activesupport (= 5.2.4.1)
119
121
  method_source
120
122
  rake (>= 0.8.7)
121
123
  thor (>= 0.19.0, < 2.0)
@@ -144,21 +146,24 @@ GEM
144
146
  unicode-display_width (~> 1.0, >= 1.0.1)
145
147
  ruby-progressbar (1.10.0)
146
148
  slop (4.7.0)
147
- sprockets (3.7.2)
149
+ sprockets (4.0.0)
148
150
  concurrent-ruby (~> 1.0)
149
151
  rack (> 1, < 3)
150
152
  sprockets-rails (3.2.1)
151
153
  actionpack (>= 4.0)
152
154
  activesupport (>= 4.0)
153
155
  sprockets (>= 3.0.0)
154
- thor (0.20.3)
156
+ thor (1.0.1)
155
157
  thread_safe (0.3.6)
156
- tzinfo (1.2.5)
158
+ tzinfo (1.2.6)
157
159
  thread_safe (~> 0.1)
158
160
  unicode-display_width (1.4.0)
159
161
  websocket-driver (0.7.1)
160
162
  websocket-extensions (>= 0.1.0)
161
163
  websocket-extensions (0.1.4)
164
+ yabeda (0.3.0)
165
+ concurrent-ruby
166
+ dry-initializer
162
167
 
163
168
  PLATFORMS
164
169
  ruby
@@ -173,4 +178,4 @@ DEPENDENCIES
173
178
  rubocop (~> 0.58.0)
174
179
 
175
180
  BUNDLED WITH
176
- 2.0.1
181
+ 2.0.2
data/README.md CHANGED
@@ -11,6 +11,7 @@ High performance, easy to use background job processing library for Ruby using R
11
11
  * OpenTracing (http://opentracing.io/) instrumentation
12
12
  * NewRelic instrumentation for sending errors
13
13
  * Sentry instrumentation for sending errors
14
+ * Metrics (using [Yabeda](https://github.com/yabeda-rb/yabeda))
14
15
 
15
16
  ## Installation
16
17
 
@@ -89,7 +90,6 @@ You can schedule jobs e.g.: `ExampleCustomer.perform_async(some: :payload)`
89
90
  * dead queue
90
91
  * CRON jobs
91
92
  * extended docs and how to
92
- * prometheus metrics
93
93
 
94
94
 
95
95
  ## Development
@@ -6,6 +6,7 @@ require 'bunny'
6
6
  require 'oj'
7
7
  require 'opentracing'
8
8
  require 'logger'
9
+ require 'yabeda'
9
10
 
10
11
  # active_support
11
12
  require 'active_support/core_ext/module/attribute_accessors'
@@ -54,3 +55,15 @@ module Rabbitek
54
55
  @bunny_connection ||= BunnyConnection.initialize_connection
55
56
  end
56
57
  end
58
+
59
+ Yabeda.configure do
60
+ group :rabbitek do
61
+ counter :processed_messages_count, comment: 'Total number of all messages'
62
+ counter :errored_messages_count, comment: 'Total number of errored messages'
63
+ histogram :processed_messages_runtime do
64
+ comment 'How long it takes to process message'
65
+ unit :seconds
66
+ buckets [0.1, 0.5, 1, 5, 10, 30, 60]
67
+ end
68
+ end
69
+ end
@@ -77,7 +77,8 @@ module Rabbitek
77
77
  end
78
78
 
79
79
  def boot_consumers
80
- (1..configuration[:threads]).each_with_object([]) do |_, arr|
80
+ (1..configuration[:threads]).each_with_object([]) do |i, arr|
81
+ debug "Booting thread ##{i}"
81
82
  arr << Starter.new(Rabbitek.bunny_connection, configuration).start
82
83
  end
83
84
  end
@@ -21,6 +21,10 @@ module Rabbitek
21
21
  channel.ack(delivery_info.delivery_tag, multiple)
22
22
  end
23
23
 
24
+ def nack!(delivery_info, multiple = false, requeue = true)
25
+ channel.nack(delivery_info.delivery_tag, multiple, requeue)
26
+ end
27
+
24
28
  def logger
25
29
  Rabbitek.logger
26
30
  end
@@ -8,12 +8,29 @@ module Rabbitek
8
8
  ##
9
9
  # Hook to retry failed jobs
10
10
  class Retry < Rabbitek::ServerHook
11
+ include Loggable
12
+
11
13
  def call(consumer, message)
12
14
  super
13
15
  rescue StandardError
14
- Retryer.call(consumer, message) unless consumer.batch_size
16
+ retry_message(consumer, message) unless consumer.batch_size
15
17
  raise
16
18
  end
19
+
20
+ private
21
+
22
+ def retry_message(consumer, message)
23
+ Retryer.call(consumer, message)
24
+ rescue StandardError => e
25
+ error(
26
+ message: 'Critical error while retrying. Nacking and requeueing message',
27
+ consumer: message.delivery_info.routing_key,
28
+ jid: consumer.jid,
29
+ error: e.to_s
30
+ )
31
+
32
+ consumer.nack!(message.delivery_info)
33
+ end
17
34
  end
18
35
  end
19
36
  end
@@ -11,19 +11,40 @@ module Rabbitek
11
11
  include Loggable
12
12
 
13
13
  def call(consumer, message)
14
- info(message: 'Starting', consumer: message.delivery_info.routing_key, jid: consumer.jid)
14
+ log_started(consumer, message)
15
15
 
16
- start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
16
+ start = current_time
17
17
 
18
18
  super
19
19
  ensure
20
+ total_time = current_time - start
21
+
22
+ log_finished(consumer, message, total_time)
23
+ metrics_measure_time(consumer, total_time)
24
+ end
25
+
26
+ private
27
+
28
+ def current_time
29
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
30
+ end
31
+
32
+ def log_started(consumer, message)
33
+ info(message: 'Starting job', consumer: message.delivery_info.routing_key, jid: consumer.jid)
34
+ end
35
+
36
+ def log_finished(consumer, message, total_time)
20
37
  info(
21
- message: 'Finished',
38
+ message: 'Finished job',
22
39
  consumer: message.delivery_info.routing_key,
23
- time: Process.clock_gettime(Process::CLOCK_MONOTONIC) - start,
40
+ time: total_time,
24
41
  jid: consumer.jid
25
42
  )
26
43
  end
44
+
45
+ def metrics_measure_time(consumer, total_time)
46
+ Yabeda.rabbitek.processed_messages_runtime.measure({ consumer: consumer.class }, total_time)
47
+ end
27
48
  end
28
49
  end
29
50
  end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ module Rabbitek
6
+ ##
7
+ # Single message processor
8
+ class MessageProcessor
9
+ include Loggable
10
+ extend Forwardable
11
+
12
+ def initialize(starter, delivery_info, properties, payload)
13
+ @starter = starter
14
+ @delivery_info = delivery_info
15
+ @properties = properties
16
+ @payload = payload
17
+ end
18
+
19
+ def process
20
+ consumer.set_context
21
+
22
+ metrics_add_processed_count
23
+
24
+ hook_walker = Utils::HookWalker.new(Rabbitek.config.server_hooks)
25
+ hook_walker.call!(consumer, message) { |*args| run_job(*args) }
26
+ rescue StandardError => e
27
+ on_message_errored(e)
28
+ end
29
+
30
+ private
31
+
32
+ attr_reader :starter, :delivery_info, :properties, :payload
33
+ def_delegators :starter, :channel, :work_queue, :retry_or_delayed_queue, :retry_or_delayed_exchange
34
+
35
+ def run_job(modified_consumer, message)
36
+ if modified_consumer.class.batch
37
+ run_job_batched(modified_consumer, message)
38
+ else
39
+ modified_consumer.perform(message)
40
+ modified_consumer.ack!(message.delivery_info)
41
+ end
42
+ end
43
+
44
+ def run_job_batched(modified_consumer, message)
45
+ Batcher.new(modified_consumer).perform(message) do |batch|
46
+ modified_consumer.perform(batch)
47
+ modified_consumer.ack!(batch.last.delivery_info, true)
48
+ end
49
+ end
50
+
51
+ def on_message_errored(exception)
52
+ error(message: exception.inspect, backtrace: exception.backtrace, consumer: consumer.class, jid: consumer.jid)
53
+ metrics_add_errored_count
54
+ end
55
+
56
+ def metrics_add_processed_count
57
+ Yabeda.rabbitek.processed_messages_count.increment(metrics_tags, by: 1)
58
+ end
59
+
60
+ def metrics_add_errored_count
61
+ Yabeda.rabbitek.errored_messages_count.increment(metrics_tags, by: 1)
62
+ end
63
+
64
+ def message
65
+ @message ||= Message.new(delivery_info: delivery_info, properties: properties, payload: payload)
66
+ end
67
+
68
+ def consumer
69
+ @consumer ||= consumer_instance(message.delivery_info.routing_key)
70
+ end
71
+
72
+ def consumer_instance(routing_key)
73
+ Thread.current[:worker_classes] ||= {}
74
+ klass = Thread.current[:worker_classes][routing_key] ||= routing_key.constantize
75
+ klass.new(channel, work_queue, retry_or_delayed_queue, retry_or_delayed_exchange)
76
+ rescue NameError
77
+ nil # TODO: to dead queue
78
+ end
79
+
80
+ def metrics_tags
81
+ { consumer: consumer.class }
82
+ end
83
+ end
84
+ end
@@ -17,58 +17,18 @@ module Rabbitek
17
17
  setup_bindings!
18
18
 
19
19
  work_queue.subscribe(manual_ack: true) do |delivery_info, properties, payload|
20
- message = Message.new(delivery_info: delivery_info, properties: properties, payload: payload)
21
- Rabbitek.reloader.call { on_message_received(message) }
20
+ Rabbitek.reloader.call do
21
+ MessageProcessor.new(self, delivery_info, properties, payload).process
22
+ end
22
23
  end
23
24
  end
24
25
 
25
- private
26
-
27
- attr_reader :connection, :queue_name, :consumers, :opts
28
-
29
- def setup_bindings!
30
- consumers.each do |worker_class|
31
- work_queue.bind(work_exchange, routing_key: worker_class.to_s)
32
- retry_or_delayed_queue.bind(retry_or_delayed_exchange, routing_key: worker_class.to_s)
33
- end
34
- end
35
-
36
- def on_message_received(message)
37
- consumer = consumer_instance(message.delivery_info.routing_key)
38
- consumer.set_context
39
-
40
- hook_walker = Utils::HookWalker.new(Rabbitek.config.server_hooks)
41
-
42
- hook_walker.call!(consumer, message) do |*args|
43
- run_job(*args)
44
- end
45
- rescue StandardError => e
46
- error(message: e.inspect, backtrace: e.backtrace, consumer: consumer.class, jid: consumer.jid)
47
- end
48
-
49
- def run_job(consumer, message)
50
- if consumer.class.batch
51
- run_job_batched(consumer, message)
52
- else
53
- consumer.perform(message)
54
- consumer.ack!(message.delivery_info)
55
- end
56
- end
57
-
58
- def consumer_instance(routing_key)
59
- Thread.current[:worker_classes] ||= {}
60
- klass = Thread.current[:worker_classes][routing_key] ||= routing_key.constantize
61
- klass.new(channel, work_queue, retry_or_delayed_queue, retry_or_delayed_exchange)
62
- rescue NameError
63
- nil # TODO: to dead queue
64
- end
65
-
66
26
  def channel
67
27
  @channel ||= begin
68
- channel = connection.create_channel
69
- channel.basic_qos(opts[:basic_qos]) if opts[:basic_qos].present?
70
- channel
71
- end
28
+ channel = connection.create_channel
29
+ channel.basic_qos(opts[:basic_qos]) if opts[:basic_qos].present?
30
+ channel
31
+ end
72
32
  end
73
33
 
74
34
  def work_exchange
@@ -95,10 +55,14 @@ module Rabbitek
95
55
  )
96
56
  end
97
57
 
98
- def run_job_batched(consumer, message)
99
- Batcher.new(consumer).perform(message) do |batch|
100
- consumer.perform(batch)
101
- consumer.ack!(batch.last.delivery_info, true)
58
+ private
59
+
60
+ attr_reader :connection, :queue_name, :consumers, :opts
61
+
62
+ def setup_bindings!
63
+ consumers.each do |worker_class|
64
+ work_queue.bind(work_exchange, routing_key: worker_class.to_s)
65
+ retry_or_delayed_queue.bind(retry_or_delayed_exchange, routing_key: worker_class.to_s)
102
66
  end
103
67
  end
104
68
  end
@@ -55,7 +55,10 @@ module Rabbitek
55
55
  private
56
56
 
57
57
  def server_references(message_properties)
58
- ::OpenTracing::Reference.follows_from(extract(message_properties))
58
+ ctx = extract(message_properties)
59
+ return unless ctx
60
+
61
+ ::OpenTracing::Reference.follows_from(ctx)
59
62
  end
60
63
 
61
64
  def extract(message_properties)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rabbitek
4
- VERSION = '0.3.1'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -14,9 +14,15 @@ Gem::Specification.new do |spec|
14
14
  spec.description = 'High performance background job processing'
15
15
  spec.homepage = 'http://boostcom.no'
16
16
 
17
+ spec.license = 'MIT'
18
+
19
+ spec.metadata['source_code_uri'] = 'https://github.com/Boostcom/rabbitek'
20
+ spec.metadata['changelog_uri'] = 'https://github.com/Boostcom/rabbitek/blob/master/CHANGELOG.md'
21
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/Boostcom/rabbitek/issues'
22
+
17
23
  # Specify which files should be added to the gem when it is released.
18
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
27
  end
22
28
  spec.bindir = 'exe'
@@ -28,6 +34,7 @@ Gem::Specification.new do |spec|
28
34
  spec.add_dependency 'oj', '~> 3.6'
29
35
  spec.add_dependency 'opentracing', '~> 0.4'
30
36
  spec.add_dependency 'slop', '~> 4.0'
37
+ spec.add_dependency 'yabeda'
31
38
 
32
39
  spec.add_development_dependency 'bundler', '~> 2.0'
33
40
  spec.add_development_dependency 'pry'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbitek
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boostcom
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2020-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '4.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yabeda
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -204,6 +218,7 @@ files:
204
218
  - lib/rabbitek/server/hooks/retry.rb
205
219
  - lib/rabbitek/server/hooks/time_tracker.rb
206
220
  - lib/rabbitek/server/message.rb
221
+ - lib/rabbitek/server/message_processor.rb
207
222
  - lib/rabbitek/server/retryer.rb
208
223
  - lib/rabbitek/server/server_hook.rb
209
224
  - lib/rabbitek/server/starter.rb
@@ -215,8 +230,12 @@ files:
215
230
  - lib/rabbitek/version.rb
216
231
  - rabbitek.gemspec
217
232
  homepage: http://boostcom.no
218
- licenses: []
219
- metadata: {}
233
+ licenses:
234
+ - MIT
235
+ metadata:
236
+ source_code_uri: https://github.com/Boostcom/rabbitek
237
+ changelog_uri: https://github.com/Boostcom/rabbitek/blob/master/CHANGELOG.md
238
+ bug_tracker_uri: https://github.com/Boostcom/rabbitek/issues
220
239
  post_install_message:
221
240
  rdoc_options: []
222
241
  require_paths: