dryad-consul 0.2.7 → 0.3.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: d753817e009be98a773228e8b5fcf6c66636bec0f2e6baa70b1e01ad3ae45482
4
- data.tar.gz: 856dd2ceb5bfb940b9ccb68153b5bb443e4ad5c2fb1a2163684d632777744511
3
+ metadata.gz: ebfad19cea21ae94dd248931ed5a37afbdd59f60ec9a65902b33c77c3bd9ffad
4
+ data.tar.gz: 42de2e60a31f501314c04adc676720f10eac9f23499efcaf4b0b59eaf6713d18
5
5
  SHA512:
6
- metadata.gz: 535f3a338b4022450d2d715759535e7951a3e325a8deb7fd5e061500bc30d74f4bf4c6bc528fe04c4c6a221197ab308bc2786a1d29ff636d29a694076bb05950
7
- data.tar.gz: 48326d528f01eb302f9fd95570d144844c733a569054aac8c8b33cd3f6ccaa33670e499c9ea098dd6a5fe3fc23342adf907e7672c36e2fb880c5d870523bb75b
6
+ metadata.gz: 4ac0341de021e32e7e7cedd25412a0c108c02fb085ca20c9c05bc28cd43f5c68a034ca018e2927fc1dd64e44c0b6b673a27ac62adf2725199328cb07246e9054
7
+ data.tar.gz: bb233a9b8c98588d0fa00fb9d17f1b103ab62e0a22b16ab346811eee1d6554174dbbf8bf1d57e2c2b8cb186f346d291cbdc378e78ab9728a6a27c5ee56d5788c
data/Gemfile.lock CHANGED
@@ -1,19 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dryad-consul (0.2.7)
4
+ dryad-consul (0.3.0)
5
+ concurrent-ruby (~> 1.1, >= 1.1.5)
5
6
  diplomat (~> 2.2, >= 2.2.4)
6
- dryad-core (= 0.2.7)
7
+ dryad-core (= 0.3.0)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
12
+ concurrent-ruby (1.1.5)
11
13
  deep_merge (1.2.1)
12
14
  diff-lcs (1.3)
13
15
  diplomat (2.2.5)
14
16
  deep_merge (~> 1.0, >= 1.0.1)
15
17
  faraday (~> 0.9)
16
- dryad-core (0.2.7)
18
+ dryad-core (0.3.0)
17
19
  faraday (0.15.4)
18
20
  multipart-post (>= 1.2, < 3)
19
21
  multipart-post (2.1.1)
data/dryad-consul.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency "dryad-core", Dryad::Consul::VERSION
25
25
  spec.add_dependency "diplomat", "~> 2.2", ">= 2.2.4"
26
+ spec.add_dependency "concurrent-ruby", "~> 1.1", ">= 1.1.5"
26
27
 
27
28
  spec.add_development_dependency "bundler", "~> 2.0"
28
29
  spec.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,24 @@
1
+ module Dryad
2
+ module Consul
3
+ class ConfigObserver < ::Dryad::Core::Observer
4
+ def initialize
5
+ @last_version = 0
6
+ end
7
+
8
+ def update(time, config_desc, exception)
9
+ if exception
10
+ puts "(#{time}) [#{self.class.to_s}] #{exception.message}"
11
+ elsif config_desc
12
+ if @last_version < config_desc.version
13
+ update_self(config_desc)
14
+ @last_version = config_desc.version
15
+ end
16
+ end
17
+ end
18
+
19
+ def update_self(config_desc)
20
+ raise "Implement this method"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,13 +1,43 @@
1
+ require 'singleton'
2
+ require 'concurrent'
3
+
1
4
  module Dryad
2
5
  module Consul
3
6
  class ConfigProvider < Dryad::Core::ConfigProvider
4
- class << self
5
- def load(path, listener = nil)
6
- config = Dryad::Consul::KeyValueClient.get(path)
7
- if config.nil?
8
- raise Dryad::Core::ConfigurationNotFound, path
7
+ include Singleton
8
+ WATCHER_EXECUTION_INTERVAL = 5 * 60
9
+
10
+ def initialize
11
+ @timers = {}
12
+ end
13
+
14
+ def load(path, observer = nil)
15
+ config = Dryad::Consul::KeyValueClient.get(path)
16
+ if config.nil?
17
+ nil
18
+ else
19
+ add_observer(observer, path)
20
+ Dryad::Core::ConfigDesc.new(path, config.Value, config.ModifyIndex)
21
+ end
22
+ end
23
+
24
+ private
25
+ def add_observer(observer, path)
26
+ if observer && observer.is_a?(Dryad::Core::Observer)
27
+ if @timers.has_key?(path)
28
+ @timers[path].add_observer(observer)
9
29
  else
10
- Dryad::Core::ConfigDesc.new(path, config.Value, config.ModifyIndex)
30
+ timer = Concurrent::TimerTask.new(execution_interval: WATCHER_EXECUTION_INTERVAL) do
31
+ config = Dryad::Consul::KeyValueClient.get(path)
32
+ if config.nil?
33
+ nil
34
+ else
35
+ Dryad::Core::ConfigDesc.new(path, config.Value, config.ModifyIndex)
36
+ end
37
+ end
38
+ timer.add_observer(observer)
39
+ timer.execute
40
+ @timers[path] = timer
11
41
  end
12
42
  end
13
43
  end
@@ -3,7 +3,14 @@ require "dryad"
3
3
 
4
4
  module Dryad
5
5
  module Consul
6
- class Railtie < Rails::Railtie
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
7
14
  initializer "dryad_consul.set_consul" do
8
15
  ActiveSupport.on_load(:dryad_consul) do
9
16
  Dryad::Consul.configure_consul(Dryad.configuration)
@@ -13,8 +20,10 @@ module Dryad
13
20
  initializer "dryad_consul.update_active_record_connection" do
14
21
  config.after_initialize do
15
22
  db_path = "#{Dryad.configuration.namespace}/#{Dryad.configuration.group}/database.yml"
23
+ observer = ::Dryad::Consul::DBConfigObserver.new
16
24
  begin
17
- db_config = Dryad::Consul::ConfigProvider.load(db_path)
25
+ db_config = Dryad::Consul::ConfigProvider.instance.load(db_path, observer)
26
+ raise Dryad::Core::ConfigurationNotFound, db_path
18
27
  ActiveRecord::Base.configurations = YAML.load(ERB.new(db_config.payload).result)
19
28
  ActiveRecord::Base.establish_connection(Rails.env.to_sym)
20
29
  rescue Dryad::Core::ConfigurationNotFound => e
@@ -1,5 +1,5 @@
1
1
  module Dryad
2
2
  module Consul
3
- VERSION = '0.2.7'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
data/lib/dryad/consul.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "diplomat"
2
2
  require "dryad/core"
3
+ require "dryad/consul/config_observer"
3
4
  require "dryad/consul/railtie" if defined?(Rails)
4
5
  require "dryad/consul/version"
5
6
  require "dryad/consul/service_registry"
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.2.7
4
+ version: 0.3.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-06-06 00:00:00.000000000 Z
11
+ date: 2019-06-14 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.2.7
19
+ version: 0.3.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.2.7
26
+ version: 0.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: diplomat
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,6 +44,26 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 2.2.4
47
+ - !ruby/object:Gem::Dependency
48
+ name: concurrent-ruby
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.1'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.1.5
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.1'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.1.5
47
67
  - !ruby/object:Gem::Dependency
48
68
  name: bundler
49
69
  requirement: !ruby/object:Gem::Requirement
@@ -104,6 +124,7 @@ files:
104
124
  - bin/setup
105
125
  - dryad-consul.gemspec
106
126
  - lib/dryad/consul.rb
127
+ - lib/dryad/consul/config_observer.rb
107
128
  - lib/dryad/consul/config_provider.rb
108
129
  - lib/dryad/consul/key_value_client.rb
109
130
  - lib/dryad/consul/railtie.rb