dryad-consul 1.0.0 → 1.0.1

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
  SHA256:
3
- metadata.gz: 951e59a7afbb4fc27b3c6fdaaf1e564935cb9b60820dee01a54eee3b27a454f0
4
- data.tar.gz: ce86ce12cfb04787e9cbe18cf0b7e2c198681213af72bfe97de17ea8cac340d1
3
+ metadata.gz: 81a3b8b9de62325983f37abf4941b498727632bce970e46272eb0a1214d97b29
4
+ data.tar.gz: 0c960ad4cfaa9bf517d28058c381cef0b28e71d4e25b3b739fc460864743a438
5
5
  SHA512:
6
- metadata.gz: 4e04cc80371617fb98804c3f720e263a386f40f90eddc0cc018d4dabcf1eb272e8e3f34bf97d33a2d22034619b8c973ee9a96fe99bb168958b0c3f10bbba8d18
7
- data.tar.gz: 2eb6f2ba0f4355d9c23bfc953246cfd3c84d1e43cfd194c312818d5b08efb4caf738b0fffb9dfc6fbda215c885419e01df551a05002b250381cc59afbd24fb37
6
+ metadata.gz: 0a9daa27bf4aa030d0c507305a2c8cbf07bf964840301067348c46556e00880dc65a8df88cfa59df9989ade601e781d2ee84c9aac096193cd59981cb288e5da3
7
+ data.tar.gz: fbdc715e93107f64bfc681c177bb3ffb41b1d22344d8cca3e262e9af0728fd76f216bf5ce716ed76ad9a086c878bfe72c8935a655a78993ae7b62780f322490e
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dryad-consul (1.0.0)
4
+ dryad-consul (1.0.1)
5
5
  concurrent-ruby (~> 1.1, >= 1.1.5)
6
6
  diplomat (~> 2.2, >= 2.2.4)
7
- dryad-core (= 1.0.0)
7
+ dryad-core (= 1.0.1)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
@@ -15,7 +15,7 @@ GEM
15
15
  diplomat (2.2.5)
16
16
  deep_merge (~> 1.0, >= 1.0.1)
17
17
  faraday (~> 0.9)
18
- dryad-core (1.0.0)
18
+ dryad-core (1.0.1)
19
19
  faraday (0.15.4)
20
20
  multipart-post (>= 1.2, < 3)
21
21
  multipart-post (2.1.1)
@@ -1,15 +1,13 @@
1
1
  require "diplomat"
2
2
  require "dryad/core"
3
3
  require "dryad/consul/config_observer"
4
- require "dryad/consul/railtie" if defined?(Rails)
5
4
  require "dryad/consul/version"
6
5
  require "dryad/consul/service_registry"
7
6
  require "dryad/consul/service"
8
7
  require "dryad/consul/key_value_client"
9
8
  require "dryad/consul/config_provider"
10
9
  require "dryad/consul/service_observer"
11
-
12
- require "erb"
10
+ require "dryad/consul/health_check"
13
11
 
14
12
  module Dryad
15
13
  module Consul
@@ -20,12 +18,58 @@ module Dryad
20
18
  if consul[:username].nil? || consul[:password].nil?
21
19
  url = "http://#{consul[:host]}:#{consul[:port]}"
22
20
  else
21
+ require "erb"
23
22
  url = "http://#{consul[:username]}:#{ERB::Util.url_encode(consul[:password])}@#{consul[:host]}:#{consul[:port]}"
24
23
  end
25
24
  ::Diplomat.configure do |config|
26
25
  config.url = url
27
26
  end
28
27
  end
28
+
29
+ def build_check(check_config, name, address, port)
30
+ if check_config
31
+ interval = check_config[:interval] || 10
32
+ if !check_config[:url].nil?
33
+ http = check_config[:url]
34
+ http = "#{k.to_s}://#{address}:#{port}#{url}" if http.start_with?("/")
35
+ timeout = check_config[:timeout] || 5
36
+ Dryad::Consul::HTTPHealthCheck.new(http, interval, timeout, interval * 10)
37
+ elsif !check_config[:grpc_use_tls].nil?
38
+ grpc = "#{address}:#{port}/#{name}"
39
+ Dryad::Consul::GRPCHealthCheck.new(grpc, interval, check_config[:grpc_use_tls], interval * 10)
40
+ else
41
+ Dryad::Consul::TTLHealthCheck.new(interval, interval * 10)
42
+ end
43
+ else
44
+ Dryad::Consul::TTLHealthCheck.new(10, 100)
45
+ end
46
+ end
47
+
48
+ def build_service(name, group, service_config)
49
+ address = if service_config[:address]
50
+ service_config[:address]
51
+ else
52
+ require 'socket'
53
+ Socket.ip_address_list.detect{|ai| ai.ipv4_private?}&.ip_address
54
+ end
55
+ schemas = Dryad::Core::Schema.constants.map{|s| Dryad::Core::Schema.const_get(s).to_sym}
56
+ portals = service_config.slice(*schemas).map do |k, v|
57
+ params = v.slice(:port, :non_certifications).merge({
58
+ schema: k.to_s,
59
+ pattern: v[:pattern] || "/.*",
60
+ check: build_check(v[:check], name, address, v[:port])
61
+ })
62
+ Dryad::Core::Portal.new(params)
63
+ end
64
+ Dryad::Consul::Service.new({
65
+ name: name,
66
+ group: group,
67
+ address: address,
68
+ portals: portals,
69
+ priority: service_config[:priority] || 0,
70
+ load_balancing: service_config[:load_balancing] || []
71
+ })
72
+ end
29
73
  end
30
74
  end
31
75
  end
@@ -1,40 +1,47 @@
1
1
  module Dryad
2
2
  module Consul
3
3
  class HealthCheck
4
- attr_accessor :deregister_critial_service_after
4
+ attr_accessor :deregister_critical_service_after
5
5
 
6
6
  def initialize(duration)
7
- @deregister_critial_service_after = duration
7
+ @deregister_critical_service_after = "#{duration}s"
8
+ end
9
+
10
+ def attributes
11
+ self.instance_variables.map do |attribute|
12
+ key = attribute.to_s.gsub('@', '')
13
+ [key, self.instance_variable_get(attribute)]
14
+ end.to_h
8
15
  end
9
16
  end
10
17
 
11
18
  class TTLHealthCheck < HealthCheck
12
19
  attr_accessor :ttl
13
20
 
14
- def initialize(ttl, deregister_critial_service_after)
15
- super(deregister_critial_service_after)
16
- @ttl = ttl
21
+ def initialize(ttl, deregister_critical_service_after)
22
+ super(deregister_critical_service_after)
23
+ @ttl = "#{ttl}s"
17
24
  end
18
25
  end
19
26
 
20
27
  class HTTPHealthCheck < HealthCheck
21
28
  attr_accessor :http, :interval, :timeout
22
29
 
23
- def initialize(http, interval, timeout, deregister_critial_service_after)
24
- super(deregister_critial_service_after)
30
+ def initialize(http, interval, timeout, deregister_critical_service_after)
31
+ super(deregister_critical_service_after)
25
32
  @http = http
26
- @interval = interval
27
- @timeout = timeout
33
+ @interval = "#{interval}s"
34
+ @timeout = "#{timeout}s"
28
35
  end
29
36
  end
30
37
 
31
38
  class GRPCHealthCheck < HealthCheck
32
39
  attr_accessor :grpc, :interval, :grpc_use_tls
33
40
 
34
- def initialize(grpc, interval, grpc_use_tls, deregister_critial_service_after)
35
- super(deregister_critial_service_after)
41
+ def initialize(grpc, interval, grpc_use_tls, deregister_critical_service_after)
42
+ super(deregister_critical_service_after)
36
43
  @grpc = grpc
37
- @interval = interval
44
+ @interval = "#{interval}s"
38
45
  @grpc_use_tls = grpc_use_tls
39
46
  end
40
47
  end
@@ -1,5 +1,5 @@
1
1
  module Dryad
2
2
  module Consul
3
- VERSION = '1.0.0'
3
+ VERSION = '1.0.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dryad-consul
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pan Jie
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-09 00:00:00.000000000 Z
11
+ date: 2019-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dryad-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0
19
+ version: 1.0.1
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: 1.0.0
26
+ version: 1.0.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: diplomat
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +128,6 @@ files:
128
128
  - lib/dryad/consul/config_provider.rb
129
129
  - lib/dryad/consul/health_check.rb
130
130
  - lib/dryad/consul/key_value_client.rb
131
- - lib/dryad/consul/railtie.rb
132
131
  - lib/dryad/consul/service.rb
133
132
  - lib/dryad/consul/service_observer.rb
134
133
  - lib/dryad/consul/service_registry.rb
@@ -1,39 +0,0 @@
1
- require "rails"
2
- require "dryad"
3
-
4
- module Dryad
5
- module Consul
6
- class DBConfigObserver < ConfigObserver
7
- def update_self(config_desc)
8
- ActiveRecord::Base.configurations = YAML.load(ERB.new(config_desc.payload).result)
9
- ActiveRecord::Base.establish_connection(Rails.env.to_sym)
10
- end
11
- end
12
-
13
- class Railtie < ::Rails::Railtie
14
- initializer "dryad_consul.set_consul" do
15
- ActiveSupport.on_load(:dryad_consul) do
16
- Dryad::Consul.configure_consul(Dryad.configuration)
17
- end
18
- end
19
-
20
- initializer "dryad_consul.update_active_record_connection" do
21
- config.after_initialize do
22
- db_path = "#{Dryad.configuration.namespace}/#{Dryad.configuration.group}/database.yml"
23
- observer = ::Dryad::Consul::DBConfigObserver.new
24
- begin
25
- db_config = Dryad::Consul::ConfigProvider.instance.load(db_path, observer)
26
- raise Dryad::Core::ConfigurationNotFound, db_path if db_config.nil?
27
- ActiveRecord::Base.configurations = YAML.load(ERB.new(db_config.payload).result)
28
- ActiveRecord::Base.establish_connection(Rails.env.to_sym)
29
- rescue Dryad::Core::ConfigurationNotFound => e
30
- raise e
31
- rescue Exception => e
32
- Rails.logger.warn e.message
33
- end
34
- end
35
- end
36
- end
37
- end
38
- ActiveSupport.run_load_hooks(:dryad_consul, Consul)
39
- end