dryad-consul 0.3.4 → 1.0.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
  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