pika_que 0.1.4 → 0.1.5

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: 28ecc988c45a92ccc93c7bd93f07f1718b22706a
4
- data.tar.gz: 572d69067683be65725366f62bd1e2d778bee080
3
+ metadata.gz: faba17eaee828074e195258b47a178d6e90e8674
4
+ data.tar.gz: '04959436f6a2e742b7cea6ba805d4b10f0b187ca'
5
5
  SHA512:
6
- metadata.gz: 60a0900cc9d1cc73054d3fe88664850af3c092760972f99fc5da7f2b02805f458240cb7d257d4ccd0825a407aabbfca3df3c5ae2efedc8d70e4badadf79ac79f
7
- data.tar.gz: 937f46dd60a3abc2a094d2d6165871d06cc5ce38e23580a4290aff9363cca7825615883019042cf6b19768fc1c82c91ac6593f11b5e88ac80b95e83a790d7dfa
6
+ metadata.gz: e5dc91623fa960d2eb130798ee6a1f89ae7fe2a5fe2199201b1c92bea7e55d6b53512a3a14b373d2bb8b7361a14777f57073aa73cfd33dea678fe0d8d2de6690
7
+ data.tar.gz: 9c70e4d7229bcb37409144d4905e9a94e9d6690e9a9babb17a2f397d3e384f4d5d48557702edc885c11c5ff09ea8636bf180a0e9f1bc9df73caa57fbff161975
@@ -1,4 +1,11 @@
1
1
  processors:
2
2
  - workers:
3
- - queue: default
4
3
  - queue: mailers
4
+ handler_class: PikaQue::Handlers::RetryHandler
5
+ handler_options:
6
+ retry_mode: :const
7
+ - workers:
8
+ - queue: default
9
+ handler_class: PikaQue::Handlers::RetryHandler
10
+ handler_options:
11
+ retry_mode: :exp
data/lib/pika_que.rb CHANGED
@@ -10,6 +10,7 @@ require 'pika_que/connection'
10
10
  require 'pika_que/publisher'
11
11
  require 'pika_que/reporters/log_reporter'
12
12
  require 'pika_que/middleware/chain'
13
+ require 'pika_que/handlers'
13
14
  require 'pika_que/worker'
14
15
 
15
16
  module PikaQue
@@ -0,0 +1,9 @@
1
+ module PikaQue
2
+ module Codecs
3
+
4
+ autoload :JSON, 'pika_que/codecs/json'
5
+ autoload :NOOP, 'pika_que/codecs/noop'
6
+ autoload :RAILS, 'pika_que/codecs/rails'
7
+
8
+ end
9
+ end
@@ -71,7 +71,7 @@ module PikaQue
71
71
  # :concurrency => 1,
72
72
  # :ack => true,
73
73
  # :handler_class => nil,
74
- # :handler_options => nil,
74
+ # :handler_options => {},
75
75
  # :codec => PikaQue::Codecs::JSON
76
76
  # }
77
77
 
@@ -0,0 +1,9 @@
1
+ module PikaQue
2
+ module Handlers
3
+
4
+ autoload :DefaultHandler, 'pika_que/handlers/default_handler'
5
+ autoload :ErrorHandler, 'pika_que/handlers/error_handler'
6
+ autoload :RetryHandler, 'pika_que/handlers/retry_handler'
7
+
8
+ end
9
+ end
@@ -1,8 +1,11 @@
1
+ require 'pika_que/util'
2
+
1
3
  module PikaQue
2
4
  class Publisher
3
5
 
4
6
  def initialize(opts = {})
5
- @opts = PikaQue.config.merge(opts)
7
+ @opts = PikaQue.config.merge(opts)
8
+ @codec = PikaQue::Util.constantize(@opts[:codec])
6
9
  @connection = @opts[:connection] || PikaQue.connection
7
10
  @channel = @connection.create_channel
8
11
  @exchange = @channel.exchange(@opts[:exchange], @opts[:exchange_options])
@@ -10,10 +13,9 @@ module PikaQue
10
13
 
11
14
  def publish(msg, options = {})
12
15
  to_queue = options.delete(:to_queue)
13
- codec = @opts[:codec]
14
16
  options[:routing_key] ||= to_queue
15
- options[:content_type] ||= codec.content_type
16
- msg = codec.encode(msg)
17
+ options[:content_type] ||= @codec.content_type
18
+ msg = @codec.encode(msg)
17
19
 
18
20
  PikaQue.logger.info {"publishing <#{msg}> to [#{options[:routing_key]}]"}
19
21
  @exchange.publish(msg, options)
@@ -33,8 +33,6 @@ module PikaQue
33
33
  worker_files = []
34
34
  end
35
35
 
36
- # TODO options, etc
37
-
38
36
  PIKA_QUE_CONFIG['processors'].each do |processor|
39
37
  workers = []
40
38
  processor['workers'].each do |worker|
@@ -53,8 +51,9 @@ module PikaQue
53
51
  ) unless worker_files.detect{ |w| w =~ /#{worker_name.underscore}/ }
54
52
  workers << worker_name
55
53
  end
56
- proc_args = { workers: workers }
57
- proc_args[:processor] = processor['processor'] if processor['processor']
54
+ proc_args = processor.symbolize_keys
55
+ proc_args[:workers] = workers
56
+ PikaQue.logger.info "Adding rails processor: #{proc_args}"
58
57
  PikaQue.config.add_processor(proc_args)
59
58
  end
60
59
  end
@@ -1,5 +1,6 @@
1
1
  require 'pika_que/reporters'
2
2
  require 'pika_que/metrics'
3
+ require 'pika_que/util'
3
4
 
4
5
  module PikaQue
5
6
  class Subscriber
@@ -11,7 +12,7 @@ module PikaQue
11
12
 
12
13
  def initialize(opts = {})
13
14
  @opts = PikaQue.config.merge(opts)
14
- @codec = @opts[:codec]
15
+ @codec = PikaQue::Util.constantize(@opts[:codec])
15
16
  @broker = @opts[:broker] || PikaQue::Broker.new(nil, @opts).tap{ |b| b.start }
16
17
  @pool = @opts[:worker_pool] || Concurrent::FixedThreadPool.new(@opts[:concurrency] || 1)
17
18
  end
@@ -21,8 +22,9 @@ module PikaQue
21
22
  end
22
23
 
23
24
  def setup_handler(handler_class, handler_opts)
24
- @handler = broker.handler(handler_class, handler_opts)
25
+ @handler = broker.handler(handler_class, @opts[:handler_options].merge(handler_opts || {}))
25
26
  # TODO use routing keys?
27
+ logger.info "binding queue #{@queue.name} to handler #{@handler.class}"
26
28
  @handler.bind_queue(@queue, @queue.name)
27
29
  end
28
30
 
@@ -34,8 +36,8 @@ module PikaQue
34
36
  error = nil
35
37
  begin
36
38
  decoded_msg = @codec.decode(msg)
37
- metrics.measure("work.#{self.class.name}.time") do
38
- PikaQue.middleware.invoke(self, delivery_info, metadata, decoded_msg) do
39
+ metrics.measure("work.#{worker.class.name}.time") do
40
+ PikaQue.middleware.invoke(worker, delivery_info, metadata, decoded_msg) do
39
41
  res = worker.work(delivery_info, metadata, decoded_msg)
40
42
  end
41
43
  end
@@ -49,15 +51,15 @@ module PikaQue
49
51
  if @opts[:ack]
50
52
  begin
51
53
  handler.handle(res, broker.channel, delivery_info, metadata, msg, error)
52
- metrics.increment("work.#{self.class.name}.handled.#{res}")
54
+ metrics.increment("work.#{worker.class.name}.handled.#{res}")
53
55
  rescue => handler_err
54
56
  notify_reporters(handler_err, handler.class, msg)
55
- metrics.increment("work.#{self.class.name}.handler.error")
57
+ metrics.increment("work.#{worker.class.name}.handler.error")
56
58
  end
57
59
  else
58
- metrics.increment("work.#{self.class.name}.handled.noop")
60
+ metrics.increment("work.#{worker.class.name}.handled.noop")
59
61
  end
60
- metrics.increment("work.#{self.class.name}.processed")
62
+ metrics.increment("work.#{worker.class.name}.processed")
61
63
  end
62
64
  end
63
65
  end
data/lib/pika_que/util.rb CHANGED
@@ -3,7 +3,7 @@ module PikaQue
3
3
  extend self
4
4
 
5
5
  def constantize(str)
6
- return str if str.is_a? Class
6
+ return str if (str.is_a?(Class) || str.is_a?(Module))
7
7
 
8
8
  names = str.split('::')
9
9
  names.shift if names.empty? || names.first.empty?
@@ -1,3 +1,3 @@
1
1
  module PikaQue
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -4,7 +4,7 @@ module PikaQue
4
4
  module Worker
5
5
 
6
6
  def initialize(opts = {})
7
- @subscriber = PikaQue::Subscriber.new(opts)
7
+ @subscriber = PikaQue::Subscriber.new(opts.merge(self.class.local_config || {}))
8
8
  end
9
9
 
10
10
  def prepare
@@ -52,17 +52,17 @@ module PikaQue
52
52
  attr_reader :handler_class
53
53
  attr_reader :handler_opts
54
54
  attr_reader :priority
55
- attr_reader :config
55
+ attr_reader :local_config
56
56
 
57
57
  def from_queue(q, opts={})
58
58
  @queue_name = q.to_s
59
59
  @priority = opts.delete(:priority)
60
- @queue_opts = PikaQue.config[:queue_options].merge(opts)
60
+ @queue_opts = opts
61
61
  end
62
62
 
63
63
  def handle_with(handler, opts={})
64
64
  @handler_class = handler
65
- @handler_opts = PikaQue.config[:handler_options].merge(opts)
65
+ @handler_opts = opts
66
66
  end
67
67
 
68
68
  def enqueue(msg, opts={})
@@ -83,14 +83,14 @@ module PikaQue
83
83
  end
84
84
  alias_method :perform_at, :enqueue
85
85
 
86
- def config(opts={})
87
- @config = opts
86
+ def config(opts)
87
+ @local_config = opts
88
88
  end
89
89
 
90
90
  private
91
91
 
92
92
  def publisher
93
- @publisher ||= PikaQue::Publisher.new(config || {})
93
+ @publisher ||= PikaQue::Publisher.new(local_config || {})
94
94
  end
95
95
 
96
96
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pika_que
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dong Wook Koo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-08 00:00:00.000000000 Z
11
+ date: 2018-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -126,6 +126,7 @@ files:
126
126
  - lib/pika_que.rb
127
127
  - lib/pika_que/broker.rb
128
128
  - lib/pika_que/cli.rb
129
+ - lib/pika_que/codecs.rb
129
130
  - lib/pika_que/codecs/json.rb
130
131
  - lib/pika_que/codecs/noop.rb
131
132
  - lib/pika_que/codecs/rails.rb
@@ -133,6 +134,7 @@ files:
133
134
  - lib/pika_que/connection.rb
134
135
  - lib/pika_que/delay_worker.rb
135
136
  - lib/pika_que/errors.rb
137
+ - lib/pika_que/handlers.rb
136
138
  - lib/pika_que/handlers/default_handler.rb
137
139
  - lib/pika_que/handlers/delay_handler.rb
138
140
  - lib/pika_que/handlers/error_handler.rb