odania 0.0.1 → 0.0.2

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
  SHA1:
3
- metadata.gz: f3ea4dc6ef659e59d62f4afa7b347f84ca289143
4
- data.tar.gz: 1f2cb8775a0d6df2ea304b0296688d569f0813c0
3
+ metadata.gz: 98f1b35d343d29593bd92072acba51056e07f691
4
+ data.tar.gz: 1473ba35af554c2addb4b67b328b456667f8dabe
5
5
  SHA512:
6
- metadata.gz: 39b57280e4fc8b73efb5751ff85063bd0196394546b5f803b0d08766f37201cb834571ce21b323607c601d56823fe88d7824467966f9d706bcb345909071f556
7
- data.tar.gz: 4d71815ae0788bc39f911a82853f38c1ead7387e209811b60dc8a43b301fedef03296101c31b4b88c9fe77cea438347260fa01f41445ed0f4fc1d1c7d87568ce
6
+ metadata.gz: c1a2ea5dce9d5d95f5cf14256f085a1a6c4be5175abb8c9cbb7aac82f76dd8bf01e3d735413cd4357b957cc96020b3c3400c6501b9aad8ea6ed7d679ff170383
7
+ data.tar.gz: 26ad3362b23cd99dbc1df1a7099c1fd0c16ea488759336b828550947addc3e12a8c9a8cc98d630068b4befb6d0820b370e205df5796d5b14d92bbe428304d55c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- odania (0.0.1)
4
+ odania (0.0.2)
5
5
  diplomat
6
6
 
7
7
  GEM
data/lib/odania/consul.rb CHANGED
@@ -1,34 +1,6 @@
1
1
  module Odania
2
2
  class Consul
3
- def initialize
4
- consul_url = "http://#{ENV['CONSUL_PORT_8500_TCP_ADDR']}:#{ENV['CONSUL_PORT_8500_TCP_PORT']}"
5
- puts "Consul: #{consul_url}"
6
-
7
- Diplomat.configure do |config|
8
- # Set up a custom Consul URL
9
- config.url = consul_url
10
- end
11
- end
12
-
13
- def get_config
14
- configs = retrieve_value 'plugins'
15
- puts
16
- puts 'Configs'
17
- puts configs.inspect
18
- puts
19
- puts
20
-
21
- result = {}
22
- configs.each do |json_data|
23
- config = JSON.parse json_data[:value]
24
- # TODO merge
25
- puts config.inspect
26
- result = config
27
- end
28
- result
29
- end
30
-
31
- private
3
+ protected
32
4
 
33
5
  def retrieve_value(plugin_path)
34
6
  begin
@@ -0,0 +1,49 @@
1
+ module Odania
2
+ class Plugin < Odania::Consul
3
+ def plugins_config
4
+ configs = retrieve_value 'plugins'
5
+ puts
6
+ puts 'Configs'
7
+ puts configs.inspect
8
+ puts
9
+ puts
10
+
11
+ result = {}
12
+ configs.each do |json_data|
13
+ config = JSON.parse json_data[:value]
14
+ # TODO merge
15
+ puts config.inspect
16
+ result = config
17
+ end
18
+ result
19
+ end
20
+
21
+ def add_plugin(plugin_config)
22
+ plugin_name = plugin_config['name']
23
+ plugin_instance_name = get_plugin_instance_name plugin_name
24
+
25
+ puts "Writing plugin instance config: #{plugin_instance_name}"
26
+ Diplomat::Kv.put("#{get_plugin_path(plugin_name)}#{plugin_instance_name}", JSON.dump(plugin_config))
27
+
28
+ Odania.service.add_service(plugin_name, plugin_instance_name, plugin_config['ip'])
29
+
30
+ Diplomat::Event.fire('updated_plugin_config', "#{plugin_name}|#{plugin_instance_name}")
31
+ end
32
+
33
+ private
34
+
35
+ def get_plugin_path(plugin_name)
36
+ "plugins/#{plugin_name}/"
37
+ end
38
+
39
+ # Generate a unique number for this instance of the plugin
40
+ def get_plugin_instance_name(plugin_name)
41
+ available_plugins = retrieve_value(get_plugin_path(plugin_name))
42
+
43
+ puts 'Current plugins'
44
+ puts available_plugins.inspect
45
+
46
+ "#{plugin_name}_#{available_plugins.length + 1}"
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,33 @@
1
+ module Odania
2
+ class Service < Odania::Consul
3
+ def register_service(plugin_name, plugin_instance_name, ip)
4
+ puts "Registering service #{plugin_name} as instance #{plugin_instance_name}"
5
+ if Diplomat::Service.register consul_service_config(plugin_name, plugin_instance_name, ip)
6
+ puts 'Service registered'
7
+ else
8
+ puts 'Error registering service'
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def consul_service_config(plugin_name, plugin_instance_name, ip)
15
+ {
16
+ 'id' => plugin_instance_name,
17
+ 'name' => plugin_name,
18
+ 'tags' => ['odania-static'],
19
+ 'port' => 80,
20
+ 'token' => plugin_instance_name,
21
+ 'checks' => [
22
+ {
23
+ 'id' => plugin_name,
24
+ 'name' => 'HTTP on port 80',
25
+ 'http' => "http://#{ip}:80/health",
26
+ 'interval' => '10s',
27
+ 'timeout' => '1s'
28
+ }
29
+ ]
30
+ }
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module Odania
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/lib/odania.rb CHANGED
@@ -3,4 +3,32 @@ require 'diplomat'
3
3
 
4
4
  module Odania
5
5
  autoload :Consul, 'odania/consul'
6
+ autoload :Service, 'odania/service'
7
+ autoload :Plugin, 'odania/plugin'
8
+
9
+ def self.service(consul_url=nil)
10
+ if @service.nil?
11
+ Odania.configure
12
+ @service = Service.new(consul_url)
13
+ end
14
+ @service
15
+ end
16
+
17
+ def self.plugin
18
+ Odania.configure
19
+ @plugin = Plugin.new if @plugin.nil?
20
+ @plugin
21
+ end
22
+
23
+ def self.configure(consul_url=nil)
24
+ if @configured.nil?
25
+ consul_url = "http://#{ENV['CONSUL_PORT_8500_TCP_ADDR']}:#{ENV['CONSUL_PORT_8500_TCP_PORT']}" if consul_url.nil?
26
+ puts "Consul URL: #{consul_url}"
27
+ Diplomat.configure do |config|
28
+ # Set up a custom Consul URL
29
+ config.url = consul_url
30
+ end
31
+ @configured = true
32
+ end
33
+ end
6
34
  end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Odania::Consul do
4
- subject { Odania::Consul.new }
3
+ describe Odania::Plugin do
4
+ subject { Odania::Plugin.new }
5
5
 
6
- describe '#process' do
7
- let(:output) { subject.get_config }
6
+ describe 'plugins_config' do
7
+ let(:output) { subject.plugins_config }
8
8
 
9
9
  it 'retrieves config' do
10
10
  allow(subject).to receive(:retrieve_value) do |plugin_path|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odania
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Petersen
@@ -81,9 +81,11 @@ files:
81
81
  - Rakefile
82
82
  - lib/odania.rb
83
83
  - lib/odania/consul.rb
84
+ - lib/odania/plugin.rb
85
+ - lib/odania/service.rb
84
86
  - lib/odania/version.rb
85
87
  - odania.gemspec
86
- - spec/odania_spec.rb
88
+ - spec/odania/plugin_spec.rb
87
89
  - spec/spec_helper.rb
88
90
  - tasks/rspec.rake
89
91
  homepage: http://www.odania.com
@@ -111,5 +113,5 @@ signing_key:
111
113
  specification_version: 4
112
114
  summary: Helper for the odania portal
113
115
  test_files:
114
- - spec/odania_spec.rb
116
+ - spec/odania/plugin_spec.rb
115
117
  - spec/spec_helper.rb