appfuel-service 0.1.7 → 0.2.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: f0d380dded6c4c32db4057a65025b99a57b1a58f
4
- data.tar.gz: 262bd00527db2c4e0ff4196244319a4c20307b4f
3
+ metadata.gz: a3c22097e153fb04fdb6960de41250197d35b497
4
+ data.tar.gz: f5ff621f80b073bef84cc4e22f530bc8fec3d7e8
5
5
  SHA512:
6
- metadata.gz: 651d244d4dae5fe65aab6e58fe5cf5ddb800c9bfeaf6cc6655255a1a6efe9797529a7591477caede1dc7c7fb0e8702e4aa5065bef13c390940e814137d2d5794
7
- data.tar.gz: 498b51239ad70c3a954de33d3497214980e23a534483f9bdb8cfa3f3c0e42c50a4a842fec5bdc0227473b21fd6a0927565ffd8933641b6fe62ce0cf34a05db6d
6
+ metadata.gz: 4e3deed6e71ad5616e66e2bdfc105a1068ea2b2c357cb705ac9de6a3fe3db7e1954163a9dc16638ea0d145c07f651cdae8af97a49bdfaa5889822c62b87428d9
7
+ data.tar.gz: 5d12e7a068976c4a2ef8b30064d0e619be0426ddb67d1a2ed7a97da622575e281d4a2e1195f465740f5bd56e1859a9c18b4de51a932fb8e63b0e4d9002009219
data/CHANGELOG.md CHANGED
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file. (Pending ap
5
5
 
6
6
 
7
7
  # Releases
8
+ ## [[0.2.1]](https://github.com/rsb/appfuel/releases/tag/0.2.8) 2017-06-28
9
+ ### Fixed
10
+ - fixed initializer for message broker to allow cli to start up individual
11
+ queues
12
+
13
+ ## [[0.2.0]](https://github.com/rsb/appfuel/releases/tag/0.2.0) 2017-06-21
14
+ ### Added
15
+ - added rpc client to publish rabbitmq messages
16
+
8
17
  ## [[0.1.7]](https://github.com/rsb/appfuel/releases/tag/0.1.7) 2017-06-20
9
18
  ### Changed
10
19
  - `upgraded` `appfuel` to 0.3.0
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "appfuel", "~> 0.3"
23
+ spec.add_dependency "appfuel", "~> 0.4"
24
24
  spec.add_dependency "sneakers", "~> 2.5"
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.15"
@@ -25,7 +25,7 @@ module Appfuel
25
25
  #
26
26
  # @returns Config::Definition
27
27
  def self.sneakers_definition
28
- Appfuel::Configuration.define :sneakers do
28
+ Appfuel::Config.define :sneakers do
29
29
  defaults heartbeat: 60,
30
30
  ack: true,
31
31
  pid_path: 'tmp/sneakers.pid',
@@ -18,14 +18,16 @@ module Appfuel
18
18
  # aws Configuration S3 where we store our documents
19
19
  # @return Definition
20
20
  def self.worker_definition
21
- Appfuel::Configuration.define :worker do
21
+ Appfuel::Config.define :worker do
22
22
  file 'config/app.yaml'
23
- defaults logfile: 'stdout',
23
+ defaults log_file: 'stdout',
24
+ log_level: 'info',
24
25
  audit_logfile: 'stdout'
25
26
 
26
27
  validator {
27
28
  required(:env).filled(:str?)
28
- required(:logfile).filled(:str?)
29
+ required(:log_file).filled(:str?)
30
+ required(:log_level).filled(:str?)
29
31
  required(:audit_logfile).filled(:str?)
30
32
  # Children will be validated on there own
31
33
  # we are just ensuring they exist
@@ -34,7 +36,7 @@ module Appfuel
34
36
  }
35
37
  self << [
36
38
  Config.sneakers_definition,
37
- Config.db_definition,
39
+ Appfuel::Config.db_definition,
38
40
  ]
39
41
  end
40
42
  end
@@ -1,10 +1,6 @@
1
1
  require 'yaml'
2
- require_relative 'config/database'
3
2
  require_relative 'config/sneakers'
4
- require_relative 'config/aws'
5
3
  require_relative 'config/worker'
6
- require_relative 'config/sentry'
7
- require_relative 'config/newrelic'
8
4
 
9
5
  module Appfuel
10
6
  module Service
@@ -0,0 +1,2 @@
1
+ require 'appfuel/initializers/all'
2
+ require_relative 'message_broker'
@@ -3,10 +3,9 @@ Appfuel::Initialize.define('global.message_broker') do |config, container|
3
3
  fail "[initializer message_broker] :sneakers not found"
4
4
  end
5
5
 
6
- consumer_keys = container['message_brokers.consumer_keys']
7
- unless consumer_keys.is_a?(Array)
8
- fail "[initializer message_broker] message_borker.consumers must be " +
9
- " an Array"
6
+ unless container['message_brokers.consumer_keys'].is_a?(Array)
7
+ fail "[initializer message_broker] message_borker.consumer_keys " +
8
+ "must be an Array"
10
9
  end
11
10
 
12
11
  require 'sneakers'
@@ -15,11 +14,6 @@ Appfuel::Initialize.define('global.message_broker') do |config, container|
15
14
  Sneakers.configure(config[:sneakers])
16
15
 
17
16
 
18
- consumers = consumer_keys.each.inject([]) do |result, key|
19
- result << container[key]
20
- result
21
- end
22
-
23
- container.register("message_brokers.runner", Sneakers::Runner.new(consumers))
17
+ container.register("message_brokers.runner_class", Sneakers::Runner)
24
18
  nil
25
19
  end
@@ -0,0 +1,57 @@
1
+ module Appfuel
2
+ module Service
3
+ class RpcClient < Sneakers::Publisher
4
+ attr_accessor :call_id, :response
5
+ attr_reader :channel, :config, :exchange, :reply_queue, :lock, :condition
6
+
7
+ def publish(to_queue, action_route, msg, headers = {})
8
+ @mutex.synchronize do
9
+ ensure_connection! unless connected?
10
+ end
11
+
12
+ self.call_id = SecureRandom.uuid
13
+ msg = msg.to_json
14
+ @response = nil
15
+ params = {
16
+ routing_key: to_queue,
17
+ correlation_id: call_id,
18
+ reply_to: reply_queue.name,
19
+ content_type: 'application/json',
20
+ headers: {action_route: action_route}.merge(headers)
21
+ }
22
+
23
+ exchange.publish(msg, params)
24
+ lock.synchronize { condition.wait(lock) }
25
+
26
+ result = JSON.parse(@response)
27
+ Appfuel::ResponseHandler.new.create_response(result)
28
+ end
29
+
30
+ private
31
+
32
+ def ensure_connection!
33
+ super
34
+ @reply_queue = channel.queue('', exclusive: true)
35
+ subscribe
36
+ end
37
+
38
+ def subscribe
39
+ @lock = Mutex.new
40
+ @condition = ConditionVariable.new
41
+ that = self
42
+
43
+ reply_queue.bind(@opts[:exchange], routing_key: reply_queue.name)
44
+
45
+ reply_queue.subscribe do |_delivery_info, properties, payload|
46
+ if properties[:correlation_id] == that.call_id
47
+ that.response = payload.to_s
48
+ that.lock.synchronize { that.condition.signal }
49
+ else
50
+ Sneakers.logger.warn "request not found for correlation_id: " +
51
+ "(#{properties[:correlation_id]}"
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,5 +1,5 @@
1
1
  module Appfuel
2
2
  module Service
3
- VERSION = "0.1.7"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -4,3 +4,4 @@ require "appfuel/service/version"
4
4
  require "appfuel/service/msg_request"
5
5
  require "appfuel/service/worker"
6
6
  require "appfuel/service/config"
7
+ require "appfuel/service/rpc_client"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appfuel-service
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Scott-Buccleuch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appfuel
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
19
+ version: '0.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.3'
26
+ version: '0.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sneakers
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -102,17 +102,13 @@ files:
102
102
  - lib/appfuel/service.rb
103
103
  - lib/appfuel/service/config.rb
104
104
  - lib/appfuel/service/config/aws.rb
105
- - lib/appfuel/service/config/database.rb
106
- - lib/appfuel/service/config/newrelic.rb
107
- - lib/appfuel/service/config/sentry.rb
108
105
  - lib/appfuel/service/config/sneakers.rb
109
106
  - lib/appfuel/service/config/worker.rb
110
- - lib/appfuel/service/initializers.rb
111
- - lib/appfuel/service/initializers/db.rb
112
- - lib/appfuel/service/initializers/logging.rb
107
+ - lib/appfuel/service/initializers/all.rb
113
108
  - lib/appfuel/service/initializers/message_broker.rb
114
109
  - lib/appfuel/service/initializers/worker.rb
115
110
  - lib/appfuel/service/msg_request.rb
111
+ - lib/appfuel/service/rpc_client.rb
116
112
  - lib/appfuel/service/version.rb
117
113
  - lib/appfuel/service/worker.rb
118
114
  homepage: https://github.com/rsb/appfuel-service
@@ -1,57 +0,0 @@
1
- module Appfuel
2
- module Service
3
- module Config
4
- # Defines database configuration. This is designed to hold more than one
5
- # database connection which is why they are named invidually. We are using
6
- # active record so the config is taylored to that style connection.
7
- #
8
- # Configuration Overview
9
- #
10
- # pool: Managed connection which controls the amount of thread access to
11
- # a limited number of database connections
12
- # adapter: We always use postgres, rarely changes
13
- # encoding: We always use unicode, rarely changes
14
- # database Name of the database
15
- # username Name of the database user
16
- # password Database password
17
- # host Location of the database server
18
- #
19
- # @return Defintion
20
- def self.db_definition
21
- Appfuel::Configuration.define :db do
22
- validator {
23
- required(:main).filled(:hash?)
24
- required(:path).filled(:str?)
25
- required(:seed_path).filled(:str?)
26
- required(:migrations_path).filled(:str?)
27
- }
28
-
29
- db_path = 'db'
30
- defaults path: db_path,
31
- migrations_path: "#{db_path}/migrations",
32
- seed_path: 'db/seed'
33
-
34
- define :main do
35
- defaults pool: 5,
36
- adapter: 'postgresql',
37
- encoding: 'unicode',
38
- schema_format: 'sql'
39
-
40
- validator do
41
- required(:schema_search_path).filled(:str?)
42
- required(:schema_format).filled(:str?)
43
- required(:database).filled(:str?)
44
- required(:username).filled(:str?)
45
- required(:password).filled(:str?)
46
- required(:host).filled(:str?)
47
- required(:adapter).filled(:str?)
48
- optional(:pool).filled(:int?)
49
- optional(:encoding).filled(:str?)
50
- optional(:port).filled(:int?)
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,20 +0,0 @@
1
- module Appfuel
2
- module Service
3
- module Config
4
- def self.newrelic_definition
5
- Appfuel::Configuration.define :newrelic do
6
- defaults log_level: 'info',
7
- monitor_mode: 'true',
8
- agent_enabled: 'true'
9
- validator {
10
- required(:license_key).filled(:str?)
11
- required(:app_name).filled(:str?)
12
- optional(:log_level).filled(:str?)
13
- optional(:monitor_mode).filled(:str?)
14
- optional(:agent_enabled).filled(:str?)
15
- }
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,13 +0,0 @@
1
- module Appfuel
2
- module Service
3
- module Config
4
- def self.sentry_definition
5
- Appfuel::Configuration.define :sentry do
6
- validator {
7
- required(:dsn).filled(:str?)
8
- }
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- Appfuel::Initialize.define('global.db') do |config, container|
2
- fail "[initializer db] :db config not found" unless config.key?(:db)
3
- fail "[initializer db] :main not found in :db" unless config[:db].key?(:main)
4
-
5
- require 'pg'
6
- require 'active_record'
7
- config[:db][:main] = config[:db][:main].with_indifferent_access
8
-
9
- ActiveSupport.on_load(:active_record) do
10
- if ActiveRecord::Base.connected?
11
- ActiveRecord::Base.connection_pool.disconnect!
12
- end
13
-
14
- if container.key?(:logger)
15
- ActiveRecord::Base.logger = container[:logger]
16
- end
17
-
18
- ActiveRecord::Base.establish_connection(config[:db][:main])
19
- end
20
- nil
21
- end
@@ -1,27 +0,0 @@
1
- Appfuel::Initialize.define('global.logging') do |config, container|
2
- logfile = config[:logfile] || 'stdout'
3
- logger_file = ->(file) {
4
- file = file.to_s
5
- if file.empty? || file.downcase == 'stdout'
6
- file = $stdout
7
- elsif file.downcase == 'stderr'
8
- file = $stderr
9
- else
10
- file
11
- end
12
- }
13
-
14
- factory = ->(file, level = 'info', file_coercer = logger_file) {
15
- logger = Logger.new(file_coercer.call(file))
16
- if level
17
- logger.level = Logger.const_get(level.to_s.upcase)
18
- end
19
-
20
- logger.formatter = Sneakers::Support::ProductionFormatter
21
- logger
22
- }
23
-
24
- container.register(:logger, factory.call(logfile))
25
- container.register(:logger_factory, factory)
26
- nil
27
- end
@@ -1,4 +0,0 @@
1
- require_relative 'initializers/worker'
2
- require_relative 'initializers/logging'
3
- require_relative 'initializers/message_broker'
4
- require_relative 'initializers/db'