multiple_man 1.0.0 → 1.1.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
  SHA1:
3
- metadata.gz: eff9e5989a0fe4702caf87df4d8a50b0fb5cea03
4
- data.tar.gz: 04361d38e491938b791dfb98e16727240ee33daa
3
+ metadata.gz: 620155bba7ed083d04162d64106eabcaca533bbd
4
+ data.tar.gz: 313cb2f92c8a02e48fea9b4f4208531c42f97753
5
5
  SHA512:
6
- metadata.gz: 4fdf426a23e43e4ee9f13d19d2b940d329b8ead830fe0155043370c0341d7e8b1ef012d8712375f85d9235c9aea2a61e9084b80b6837dd8b37e01f0952c7988a
7
- data.tar.gz: 092424fa6b574af0eef20f6585b0fe1026cc0baee453eb4d349bb106d9d71ca2f612df050dee82030140dea45f43f017043d784d5bf3ee70c2b2e74ea9fd1ae3
6
+ metadata.gz: 2afc286f24e1e82ce7809984c67358d71852deab99093d48d5a6aa383877741b754246fa2ea843ceefb04a5f79563a9ce152eaa8cd42e5376ddc90b402e24d22
7
+ data.tar.gz: ed09d9f96992efaeae2cfb4f55f260b35b89623eb5a17c51bef351ad29672c632d1ac170060d76ff2f980e7af85c09474e6ded21593aacff982ca915701d8dd4
data/bin/multiple_man ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Add gem directory to load path - (compatible with Ruby 1.9+)
4
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
5
+
6
+ # Add the current working directory to the load path so we can load the config/environment
7
+ $LOAD_PATH.unshift Dir.pwd
8
+
9
+ require 'multiple_man'
10
+
11
+ MultipleMan::CLI.run(ARGV)
data/lib/multiple_man.rb CHANGED
@@ -4,7 +4,7 @@ require 'active_support'
4
4
  module MultipleMan
5
5
  Error = Class.new(StandardError)
6
6
  ConsumerError = Class.new(Error)
7
-
7
+
8
8
  require 'multiple_man/railtie' if defined?(Rails)
9
9
 
10
10
  require 'multiple_man/mixins/publisher'
@@ -25,6 +25,8 @@ module MultipleMan
25
25
  require 'multiple_man/model_populator'
26
26
  require 'multiple_man/identity'
27
27
  require 'multiple_man/publish'
28
+ require 'multiple_man/runner'
29
+ require 'multiple_man/cli'
28
30
 
29
31
  require 'multiple_man/channel_maintenance/gc'
30
32
  require 'multiple_man/channel_maintenance/reaper'
@@ -0,0 +1,39 @@
1
+ require 'optparse'
2
+
3
+ module MultipleMan
4
+ class Options < OptionParser
5
+ def self.parse!(args)
6
+ parser = new('Multiple Man')
7
+ parser.set_opts.parse!(args)
8
+ parser.options
9
+ end
10
+
11
+ attr_reader :options
12
+
13
+ def initialize(*args)
14
+ @options = { mode: :general, environment_path: 'config/environment' }
15
+ super
16
+ end
17
+
18
+ def set_opts
19
+ on('--seed', 'listen to the seeding queue') do
20
+ options[:mode] == :seed
21
+ end
22
+ on('-e', '--environment-path PATH', 'Set the path to load the web framework (default: config/environment)') do |value|
23
+ options[:environment_path] = value
24
+ end
25
+ end
26
+ end
27
+
28
+ module CLI
29
+ module_function
30
+
31
+ def run(args)
32
+ options = Options.parse!(args)
33
+
34
+ require options[:environment_path]
35
+
36
+ Runner.new(mode: options[:mode]).run
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,83 @@
1
+ require 'forwardable'
2
+
3
+ module MultipleMan
4
+ def self.trap_signals!
5
+ return if @signals_trapped
6
+
7
+ @signals_trapped = true
8
+
9
+ handler = proc do |signal|
10
+ puts "received #{Signal.signame(signal)}"
11
+ exit
12
+ end
13
+
14
+ %w(INT QUIT TERM).each { |signal| Signal.trap(signal, handler) }
15
+ end
16
+
17
+ class Runner
18
+ extend Forwardable
19
+
20
+ MODES = [:general, :seed].freeze
21
+
22
+ def initialize(options = {})
23
+ @mode = options.fetch(:mode, :general)
24
+
25
+ raise ArgumentError, "undefined mode: #{mode}" unless MODES.include?(mode)
26
+ end
27
+
28
+ def run
29
+ MultipleMan.trap_signals!
30
+ preload_framework!
31
+ channel.prefetch(prefetch_size)
32
+ build_listener.listen
33
+ sleep
34
+ end
35
+
36
+ private
37
+
38
+ attr_reader :mode
39
+
40
+ def_delegators :config, :prefetch_size, :queue_name, :listeners, :topic_name
41
+
42
+ def preload_framework!
43
+ Rails.application.eager_load! if defined?(Rails)
44
+ Hanami::Application.preload_applications! if defined?(Hanami)
45
+ end
46
+
47
+ def build_listener
48
+ listener_class.new(
49
+ queue: channel.queue(*queue_params),
50
+ subscribers: listeners,
51
+ topic: topic_name
52
+ )
53
+ end
54
+
55
+ def listener_class
56
+ if seeding?
57
+ Consumers::Seed
58
+ else
59
+ Consumers::General
60
+ end
61
+ end
62
+
63
+ def queue_params
64
+ if seeding?
65
+ ["#{queue_name}.seed", durable: false, auto_delete: true]
66
+ else
67
+ [queue_name, durable: true, auto_delete: false]
68
+ end
69
+ end
70
+
71
+ def channel
72
+ @channel ||= Connection.connection.create_channel
73
+ end
74
+
75
+ def config
76
+ MultipleMan.configuration
77
+ end
78
+
79
+ def seeding?
80
+ mode == :seed
81
+ end
82
+ end
83
+ end
@@ -1,37 +1,12 @@
1
1
  namespace :multiple_man do
2
- desc "Run multiple man listeners"
2
+ desc 'Run multiple man listeners'
3
3
  task worker: :environment do
4
- channel = MultipleMan::Connection.connection.create_channel
5
- channel.prefetch(MultipleMan.configuration.prefetch_size)
6
- queue_name = MultipleMan.configuration.queue_name
7
- queue = channel.queue(queue_name, durable: true, auto_delete: false)
8
-
9
- run_listener(MultipleMan::Consumers::General, queue)
4
+ MultipleMan::Runner.new(mode: :general).run
10
5
  end
11
6
 
12
7
  desc 'Run a seeding listener'
13
8
  task seed: :environment do
14
- channel = MultipleMan::Connection.connection.create_channel
15
- channel.prefetch(MultipleMan.configuration.prefetch_size)
16
- queue_name = MultipleMan.configuration.queue_name + '.seed'
17
- queue = channel.queue(queue_name, durable: false, auto_delete: true)
18
-
19
- run_listener(MultipleMan::Consumers::Seed, queue)
20
- end
21
-
22
- def run_listener(listener, queue)
23
- Rails.application.eager_load! if defined?(Rails)
24
-
25
- subscribers = MultipleMan.configuration.listeners
26
- topic = MultipleMan.configuration.topic_name
27
-
28
- listener.new(subscribers: subscribers, queue: queue, topic: topic).listen
29
-
30
- Signal.trap("INT") { puts "received INT"; exit }
31
- Signal.trap("QUIT") { puts "received QUIT"; exit }
32
- Signal.trap("TERM") { puts "received TERM"; exit }
33
-
34
- sleep
9
+ MultipleMan::Runner.new(mode: :seed).run
35
10
  end
36
11
 
37
12
  desc 'Run transitional worker'
@@ -54,10 +29,7 @@ namespace :multiple_man do
54
29
  MultipleMan::Consumers::Transitional.new(subscription: listener, queue: queue, topic: topic).listen
55
30
  end
56
31
 
57
- Signal.trap("INT") { puts "received INT"; exit }
58
- Signal.trap("QUIT") { puts "received QUIT"; exit }
59
- Signal.trap("TERM") { puts "received TERM"; exit }
60
-
32
+ MultipleMan.trap_signals!
61
33
  sleep
62
34
  end
63
35
 
@@ -1,3 +1,3 @@
1
1
  module MultipleMan
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multiple_man
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Brunner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-23 00:00:00.000000000 Z
11
+ date: 2016-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -139,7 +139,8 @@ dependencies:
139
139
  description: MultipleMan syncs changes to ActiveRecord models via AMQP
140
140
  email:
141
141
  - ryan@influitive.com
142
- executables: []
142
+ executables:
143
+ - multiple_man
143
144
  extensions: []
144
145
  extra_rdoc_files: []
145
146
  files:
@@ -150,11 +151,13 @@ files:
150
151
  - LICENSE.txt
151
152
  - README.md
152
153
  - Rakefile
154
+ - bin/multiple_man
153
155
  - circle.yml
154
156
  - lib/multiple_man.rb
155
157
  - lib/multiple_man/attribute_extractor.rb
156
158
  - lib/multiple_man/channel_maintenance/gc.rb
157
159
  - lib/multiple_man/channel_maintenance/reaper.rb
160
+ - lib/multiple_man/cli.rb
158
161
  - lib/multiple_man/configuration.rb
159
162
  - lib/multiple_man/connection.rb
160
163
  - lib/multiple_man/consumers/general.rb
@@ -170,6 +173,7 @@ files:
170
173
  - lib/multiple_man/publish.rb
171
174
  - lib/multiple_man/railtie.rb
172
175
  - lib/multiple_man/routing_key.rb
176
+ - lib/multiple_man/runner.rb
173
177
  - lib/multiple_man/subscribers/base.rb
174
178
  - lib/multiple_man/subscribers/model_subscriber.rb
175
179
  - lib/multiple_man/subscribers/registry.rb