pika_que 0.1.4 → 0.1.5

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: 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