dryad-consul 0.2.7 → 0.3.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: 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