dryad-consul 0.3.4 → 1.0.0

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: 48124ab15b6961d45ce9eed7d67fa9635e3a2390d7ba9f2f4754801c070f9476
4
- data.tar.gz: fe916f91598b23ea9e2ad6183c3de57e43e15566b9ca1aa32bf812bb7d43a64b
3
+ metadata.gz: 951e59a7afbb4fc27b3c6fdaaf1e564935cb9b60820dee01a54eee3b27a454f0
4
+ data.tar.gz: ce86ce12cfb04787e9cbe18cf0b7e2c198681213af72bfe97de17ea8cac340d1
5
5
  SHA512:
6
- metadata.gz: 43348516948c17e87f9bf592a20942b30f9312bfd9cb523df1ca4719de62ff2c9f02e9e49e2748389fc1e160cd32962048ae9dbb297c36f8db4c1e104981f4ce
7
- data.tar.gz: da660ecc72ebbc4b689732988f12e0016f727235d6f06334e9b3f1742d753581cc2b9a21eba7bb945f7a46d92f60cf3c1bf71323a30f15b3f05ba3f92e8acfec
6
+ metadata.gz: 4e04cc80371617fb98804c3f720e263a386f40f90eddc0cc018d4dabcf1eb272e8e3f34bf97d33a2d22034619b8c973ee9a96fe99bb168958b0c3f10bbba8d18
7
+ data.tar.gz: 2eb6f2ba0f4355d9c23bfc953246cfd3c84d1e43cfd194c312818d5b08efb4caf738b0fffb9dfc6fbda215c885419e01df551a05002b250381cc59afbd24fb37
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dryad-consul (0.3.4)
4
+ dryad-consul (1.0.0)
5
5
  concurrent-ruby (~> 1.1, >= 1.1.5)
6
6
  diplomat (~> 2.2, >= 2.2.4)
7
- dryad-core (= 0.3.4)
7
+ dryad-core (= 1.0.0)
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 (0.3.4)
18
+ dryad-core (1.0.0)
19
19
  faraday (0.15.4)
20
20
  multipart-post (>= 1.2, < 3)
21
21
  multipart-post (2.1.1)
@@ -7,6 +7,7 @@ require "dryad/consul/service_registry"
7
7
  require "dryad/consul/service"
8
8
  require "dryad/consul/key_value_client"
9
9
  require "dryad/consul/config_provider"
10
+ require "dryad/consul/service_observer"
10
11
 
11
12
  require "erb"
12
13
 
@@ -0,0 +1,17 @@
1
+ module Dryad
2
+ module Consul
3
+ class ServiceObserver < ::Dryad::Core::Observer
4
+ def update(time, service_instances, exception)
5
+ if exception
6
+ puts "(#{time}) [#{self.class.to_s}] #{exception.message}"
7
+ elsif service_instances
8
+ update_self(service_instances)
9
+ end
10
+ end
11
+
12
+ def update_self(service_instances)
13
+ raise "Implement this method"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,43 +1,79 @@
1
+ require 'singleton'
2
+ require 'concurrent'
3
+
1
4
  module Dryad
2
5
  module Consul
3
6
  class ServiceRegistry
4
- class << self
5
- def register(service)
6
- service.to_registers.each do |register|
7
- ::Diplomat::Service.register(register)
8
- end
7
+ include Singleton
8
+ WATCHER_EXECUTION_INTERVAL = 5 * 60
9
+
10
+ def initialize
11
+ @timers = {}
12
+ end
13
+
14
+ def register(service)
15
+ service.to_registers.each do |register|
16
+ ::Diplomat::Service.register(register)
9
17
  end
18
+ end
10
19
 
11
- def deregister(service)
12
- service.portals.each do |portal|
13
- ::Diplomat::Service.deregister(portal.id)
14
- end
20
+ def deregister(service)
21
+ service.portals.each do |portal|
22
+ ::Diplomat::Service.deregister(portal.id)
15
23
  end
24
+ end
16
25
 
17
- def service_instances(name, schema, groups)
18
- all_services = ::Diplomat::Health.service(Dryad::Core::Service.full_name(schema, name))
19
- service_instances = []
20
- all_services.each do |service|
21
- service_hash = service.Service
22
- if !service_hash["Meta"].nil? && service_hash["Meta"].has_key?("group") &&
23
- groups.include?(service_hash["Meta"]["group"])
24
- service_instances << service_hash
25
- else
26
- groups.each do |group|
27
- if service_hash["Tags"].include?("group = \"#{group}\"")
28
- service_instances << service_hash
29
- break
30
- end
26
+ def service_instances(name, schema, groups, observer = nil)
27
+ add_observer(observer, name, schema, groups) unless observer.nil?
28
+ _service_instances(name, schema, groups)
29
+ end
30
+
31
+ private
32
+ def _service_instances(name, schema, groups)
33
+ service_name = Dryad::Core::Service.full_name(schema, name)
34
+ all_services = ::Diplomat::Health.service(service_name)
35
+ service_instances = filter_services(all_services, groups)
36
+ service_instances.map do |service|
37
+ Dryad::Core::ServiceInstance.new(
38
+ name: name,
39
+ schema: schema,
40
+ address: service["Address"],
41
+ port: service["Port"]
42
+ )
43
+ end
44
+ end
45
+
46
+ def filter_services(all_services, groups)
47
+ service_hashs = []
48
+ all_services.each do |service|
49
+ service_hash = service.Service
50
+ if !service_hash["Meta"].nil? && service_hash["Meta"].has_key?("group") &&
51
+ groups.include?(service_hash["Meta"]["group"])
52
+ service_instances << service_hash
53
+ else
54
+ groups.each do |group|
55
+ if service_hash["Tags"].include?("group = \"#{group}\"")
56
+ service_hashs << service_hash
57
+ break
31
58
  end
32
59
  end
33
60
  end
34
- service_instances.map do |service|
35
- Dryad::Core::ServiceInstance.new(
36
- name: name,
37
- schema: schema,
38
- address: service["Address"],
39
- port: service["Port"]
40
- )
61
+ end
62
+ service_hashs
63
+ end
64
+
65
+ def add_observer(observer, name, schema, groups)
66
+ if observer && observer.is_a?(Dryad::Consul::ServiceObserver)
67
+ service_name = Dryad::Core::Service.full_name(schema, name)
68
+ if @timers.has_key?(service_name)
69
+ @timers[service_name].add_observer(observer)
70
+ else
71
+ timer = Concurrent::TimerTask.new(execution_interval: WATCHER_EXECUTION_INTERVAL) do
72
+ _service_instances(service_name, groups)
73
+ end
74
+ timer.add_observer(observer)
75
+ timer.execute
76
+ @timers[service_name] = timer
41
77
  end
42
78
  end
43
79
  end
@@ -1,5 +1,5 @@
1
1
  module Dryad
2
2
  module Consul
3
- VERSION = '0.3.4'
3
+ VERSION = '1.0.0'
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: 0.3.4
4
+ version: 1.0.0
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-08 00:00:00.000000000 Z
11
+ date: 2019-07-09 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: 0.3.4
19
+ version: 1.0.0
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.4
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: diplomat
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +130,7 @@ files:
130
130
  - lib/dryad/consul/key_value_client.rb
131
131
  - lib/dryad/consul/railtie.rb
132
132
  - lib/dryad/consul/service.rb
133
+ - lib/dryad/consul/service_observer.rb
133
134
  - lib/dryad/consul/service_registry.rb
134
135
  - lib/dryad/consul/version.rb
135
136
  homepage: https://github.com/jack0pan/dryad.rb