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 +4 -4
- data/Gemfile.lock +3 -3
- data/lib/dryad/consul.rb +1 -0
- data/lib/dryad/consul/service_observer.rb +17 -0
- data/lib/dryad/consul/service_registry.rb +66 -30
- data/lib/dryad/consul/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 951e59a7afbb4fc27b3c6fdaaf1e564935cb9b60820dee01a54eee3b27a454f0
|
4
|
+
data.tar.gz: ce86ce12cfb04787e9cbe18cf0b7e2c198681213af72bfe97de17ea8cac340d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e04cc80371617fb98804c3f720e263a386f40f90eddc0cc018d4dabcf1eb272e8e3f34bf97d33a2d22034619b8c973ee9a96fe99bb168958b0c3f10bbba8d18
|
7
|
+
data.tar.gz: 2eb6f2ba0f4355d9c23bfc953246cfd3c84d1e43cfd194c312818d5b08efb4caf738b0fffb9dfc6fbda215c885419e01df551a05002b250381cc59afbd24fb37
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dryad-consul (0.
|
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.
|
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.
|
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)
|
data/lib/dryad/consul.rb
CHANGED
@@ -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
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
data/lib/dryad/consul/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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
|