dendrite 0.4.9 → 0.5.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
  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