dendrite 0.4.9 → 0.5.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
  SHA1:
3
- metadata.gz: 6feed9c5792fbbd6d6804e7d32e22dc98e0d174c
4
- data.tar.gz: bd9df0cc2f920831f5e2dc710089cd2d5f32ad7b
3
+ metadata.gz: 25e1151220355a93c5ea94be65e31f3a287fb287
4
+ data.tar.gz: 55550e682e1632b91ff3ac2a7fcc3345b27fe26b
5
5
  SHA512:
6
- metadata.gz: cfd2ce95a4a1eda939f295f47c3a8dc1fde511abacb793975d090e187da4095b117d4cf283c66653ddcd29984efa960b1eaa6e86aa28516ef1d25c4165b8a49e
7
- data.tar.gz: c9638f886814e3b2010527afd275f2e734ce90b6a32852f4a624101637c78f581209c63f11810fbd5ddaed71f62ca28a9f63b5f8ef5b6c9b1ebabfcb9b5dc5ef
6
+ metadata.gz: ed661d13ec78fde86266ae46fd665f21ef7b9257fb0289de972680c851e4849ca30e2ed1fcbb2feff9002bfabf1b31d14f14ba4389c6771b305180cffd9aaf6c
7
+ data.tar.gz: 644975f47dda7346f6039c18c188e8c3e98e6b89d9ce6b0ff51d1f8169afa22d36b3f83e4527a45e37587229c2a4cfafac049854e02d200f5ab1f516f29c8529
@@ -2,9 +2,15 @@ organization: sd
2
2
  component: cams
3
3
  lead_email: vp@foobar.com
4
4
  team_email: team@foobar.com
5
+ users: &users
6
+ name1:
7
+ name2:
5
8
  subcomponents:
6
9
  - name: foobar
7
10
  type: tomcat
11
+ users:
12
+ <<: *users
13
+ name3:
8
14
  deploy:
9
15
  repository: git@github.com:yagnik/dendrite
10
16
  package: dendrite
@@ -28,9 +34,13 @@ subcomponents:
28
34
  - component: cams
29
35
  subcomponent: cat
30
36
  latency: foo
37
+ identifier: barbaz
31
38
  - component: cams
32
39
  subcomponent: foobar
33
40
  latency: foo
41
+ identifier: barbas3
42
+ metadata:
43
+ foo: bar
34
44
  - name: cat
35
45
  type: tomcat
36
46
  deploy:
@@ -79,14 +79,33 @@ module Dendrite
79
79
  {
80
80
  haproxy: {
81
81
  port: service.loadbalancer_port,
82
- bind_address: '127.0.0.1',
82
+ bind_address: bind_address,
83
83
  server_options: 'check inter 2s rise 3 fall 2',
84
- listen: [
85
- 'mode tcp'
86
- ]
84
+ listen: mode
87
85
  }
88
86
  }
89
87
  end
88
+
89
+ def mode
90
+ if metadata && metadata.sticky_session
91
+ [
92
+ 'mode http',
93
+ 'stick-table type string len 200 size 500m expire 30m',
94
+ "stick store-response res.cook(#{metadata.sticky_session})",
95
+ "stick match req.cook(#{metadata.sticky_session})"
96
+ ]
97
+ else
98
+ ['mode tcp']
99
+ end
100
+ end
101
+
102
+ def bind_address
103
+ if metadata && metadata.bind_address
104
+ metadata.bind_address
105
+ else
106
+ '127.0.0.1'
107
+ end
108
+ end
90
109
  end
91
110
  end
92
111
  end
data/lib/dendrite/io.rb CHANGED
@@ -16,7 +16,7 @@ module Dendrite
16
16
  if service[:dependencies]
17
17
  service[:dependencies].each do |deps|
18
18
  dependency_name = "#{service[:organization]}_#{deps[:component]}_#{deps[:subcomponent]}"
19
- graph[node.name].add_dependency(service: graph[dependency_name], latency: deps[:latency])
19
+ graph[node.name].add_dependency(service: graph[dependency_name], latency: deps[:latency], identifier: deps[:identifier])
20
20
  end
21
21
  end
22
22
  end
@@ -47,7 +47,7 @@ module Dendrite
47
47
  end
48
48
 
49
49
  def services_from_folder(source:)
50
- Dir["#{source}/*.yml"].collect {|file| services_from_file(source: file)}
50
+ Dir["#{source}/**/*.yml"].collect {|file| services_from_file(source: file)}
51
51
  .flatten
52
52
  end
53
53
  end
@@ -5,6 +5,8 @@ module Dendrite
5
5
 
6
6
  attr_reader :services
7
7
  def_delegators :services, :each, :each
8
+ def_delegators :services, :keys, :keys
9
+ def_delegators :services, :values, :values
8
10
 
9
11
  validate :validate_nodes
10
12
  validate :collisions
@@ -15,7 +17,7 @@ module Dendrite
15
17
 
16
18
  def <<(service)
17
19
  raise KeyError unless service.name
18
- raise DuplicateService if services.keys.include?(service.name)
20
+ raise DuplicateService, service.name if services.keys.include?(service.name)
19
21
  services[service.name] = service
20
22
  end
21
23
 
@@ -79,7 +79,7 @@ module Dendrite
79
79
  validates :port, numericality: { only_integer: true }
80
80
  end
81
81
 
82
- Dependency = Struct.new(:service, :latency) do
82
+ Dependency = Struct.new(:service, :latency, :identifier) do
83
83
  include ActiveModel::Validations
84
84
  validates_presence_of :service
85
85
  validates_presence_of :latency
@@ -92,12 +92,15 @@ module Dendrite
92
92
  end
93
93
  end
94
94
 
95
- Scale = Struct.new(:max_instance_count, :min_instance_count) do
95
+ Scale = Struct.new(:max_instance_count, :min_instance_count, :min_memory, :min_cpu) do
96
96
  include ActiveModel::Validations
97
97
  validates_presence_of :max_instance_count
98
98
  validates_presence_of :min_instance_count
99
+ # @TODO add validation for max and min
99
100
  validates :max_instance_count, numericality: { only_integer: true }
100
101
  validates :min_instance_count, numericality: { only_integer: true }
102
+ # validates :min_memory, numericality: { only_integer: true }
103
+ # validates :min_cpu, numericality: { only_integer: true }
101
104
  end
102
105
 
103
106
  Deploy = Struct.new(:repository, :package) do
@@ -106,9 +109,11 @@ module Dendrite
106
109
  validates_presence_of :package
107
110
  end
108
111
 
112
+ Metadata = OpenStruct
113
+
109
114
  attr_reader :organization, :component, :lead_email, :team_email,
110
115
  :type, :deploy, :scale, :ports, :dependencies, :telemetry,
111
- :default_servers
116
+ :default_servers, :metadata, :users
112
117
  # :name is set but magically
113
118
 
114
119
  validates_presence_of :organization, :component, :lead_email, :team_email,
@@ -134,7 +139,7 @@ module Dendrite
134
139
  when :deploy
135
140
  @deploy = Deploy.new(v[:repository], v[:package]) if v != nil
136
141
  when :scale
137
- @scale = Scale.new(v[:max_instance_count], v[:min_instance_count]) if v != nil
142
+ @scale = Scale.new(v[:max_instance_count], v[:min_instance_count], v[:min_memory], v[:min_cpu]) if v != nil
138
143
  when :telemetry
139
144
  @telemetry = Telemetry.new(v[:health_url], v[:notification_email]) if v != nil
140
145
  when :default_servers
@@ -142,6 +147,10 @@ module Dendrite
142
147
  @default_servers[node[:environment]] ||= []
143
148
  @default_servers[node[:environment]] << DefaultServer.new(node[:environment], node[:host], node[:port])
144
149
  end
150
+ when :metadata
151
+ @metadata = Metadata.new(v)
152
+ when :users
153
+ @users = v.keys
145
154
  else
146
155
  instance_variable_set("@#{k}", v)
147
156
  end
@@ -165,8 +174,8 @@ module Dendrite
165
174
  ports[:loadbalancer_port].port if ports[:loadbalancer_port]
166
175
  end
167
176
 
168
- def add_dependency(service:, latency:)
169
- @dependencies[service.name] = Dependency.new(service, latency)
177
+ def add_dependency(service:, latency:, identifier:)
178
+ @dependencies[service.name] = Dependency.new(service, latency, identifier)
170
179
  end
171
180
 
172
181
  def to_h
@@ -1,3 +1,3 @@
1
1
  module Dendrite
2
- VERSION = "0.4.9"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/dendrite.rb CHANGED
@@ -3,6 +3,7 @@ require 'json'
3
3
  require 'active_model'
4
4
  require 'socket'
5
5
  require 'forwardable'
6
+ require 'ostruct'
6
7
  require 'dendrite/version'
7
8
 
8
9
  module Dendrite
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dendrite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yagnik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-26 00:00:00.000000000 Z
11
+ date: 2016-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -99,7 +99,7 @@ files:
99
99
  - bin/add_proxy
100
100
  - bin/metadata
101
101
  - bin/register
102
- - conf/config.yaml
102
+ - conf/config.yml
103
103
  - conf/services/service.yml
104
104
  - dendrite.gemspec
105
105
  - lib/dendrite.rb
File without changes