consul-templaterb 1.5.1 → 1.5.2

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: 66b33121c7949683986ddb7ff40573e6110ff98294bca01b944e9aa268a2dc66
4
- data.tar.gz: e309df0ebc89ecf50c5e4c18733a1f617ba0f1714845822215c8a8871f335b42
3
+ metadata.gz: 0b4a47eabba659837253d921211008b5e44d625f6b0229d38da9dfbdfe2570b4
4
+ data.tar.gz: 5bfae8c915b2a263f6f5e3d9867f48e1b43abb6a7bcba5e31754efdb5a6c905b
5
5
  SHA512:
6
- metadata.gz: e127b2aa026380d0acad164fc2263582609940e09d2554fdfb468bc63b4be1821f58124299e29d4e83dec42a2c16c62138a9828d728a4c89af63063dd1adb42a
7
- data.tar.gz: b23008ed571d5172177332dbaf848db958bfedbbacfeeb7f7f01a056f753bfa8d047552ad8e9870e350caf328879fc6c105eb676c1ef5089a8a44c760b903972
6
+ metadata.gz: e6f34ac0190a98f5a27e1250a2c8c4aa7c49687857337e83ac7cd02bd4c3659e367e821805cec08625ad42a797419018d707fdccdede1a15bf879a259d346e86
7
+ data.tar.gz: aef9aaa4acab258920984b042333e1190a49f50d0ec67f0e4c86613e1adcc908c7899dce9922da2395e3efb07404e5be32e887d66ee3d89790d861298fc64db0
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## (UNRELEASED)
4
4
 
5
+ ## 1.5.2 (September 12, 2018)
6
+
7
+ IMPROVEMENTS:
8
+
9
+ * added support for Weights in Consul-UI
10
+ * new `debug/compare_connect_services.txt.erb`
11
+ * new erb .map() function to iterate over all values
12
+
5
13
  ## 1.5.1 (September 4, 2018)
6
14
 
7
15
  BUG FIXES:
@@ -255,7 +255,7 @@ module Consul
255
255
 
256
256
  class ConsulTemplateAbstract
257
257
  extend Forwardable
258
- def_delegators :result_delegate, :each, :[], :sort, :select, :each_value, :count, :empty?
258
+ def_delegators :result_delegate, :each, :[], :sort, :select, :each_value, :count, :empty?, :map
259
259
  attr_reader :result, :endpoint, :seen_at
260
260
  def initialize(consul_endpoint)
261
261
  @endpoint = consul_endpoint
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Async
3
- VERSION = '1.5.1'.freeze
3
+ VERSION = '1.5.2'.freeze
4
4
  end
5
5
  end
@@ -87,6 +87,7 @@
87
87
  port: snode['Service']['Port'],
88
88
  tags: snode['Service']['Tags'],
89
89
  checks: checks,
90
+ weights: snode['Service']['Weights'],
90
91
  }
91
92
  kind_of_service = snode['Service']['Kind']
92
93
  service['kind'] = kind_of_service if kind_of_service
@@ -18,6 +18,10 @@
18
18
  overflow: hidden;
19
19
  }
20
20
 
21
+ .weights {
22
+ float: right;
23
+ }
24
+
21
25
  #service-wrapper .list-group-item:last-child, #instances-wrapper .list-group-item:last-child,
22
26
  #keys-wrapper .list-group-item:last-child {
23
27
  border-bottom-width: 0px;
@@ -225,13 +225,13 @@ class ConsulService {
225
225
  var instance = service['instances'][key];
226
226
  var serviceHtml = document.createElement('div');
227
227
  serviceHtml.setAttribute('class','list-group-item');
228
-
228
+ var state = nodeState(instance.checks);
229
+ serviceHtml.appendChild(weightsGenerator(instance.weights, state));
229
230
  serviceHtml.appendChild(serviceTitleGenerator(instance));
230
231
  serviceHtml.appendChild(tagsGenerator(instance.tags));
231
232
  serviceHtml.appendChild(serviceMetaGenerator(instance.sMeta));
232
233
  serviceHtml.appendChild(connectGenerator(instance))
233
234
  serviceHtml.appendChild(checksStatusGenerator(instance.checks));
234
- var state = nodeState(instance.checks);
235
235
  serviceHtml.setAttribute('status', state);
236
236
  $("#instances-list").append(serviceHtml);
237
237
  }
@@ -148,6 +148,41 @@ function serviceMetaGenerator(instanceMeta) {
148
148
  return top;
149
149
  }
150
150
 
151
+ function weightsGenerator(instanceWeights, instanceStatus) {
152
+ var weights = document.createElement('div');
153
+ if (instanceWeights != null) {
154
+ weights.setAttribute('class', 'weights weight-passing badge badge-' + toCSSClass(instanceStatus));
155
+ weights.appendChild(document.createTextNode("Weights: "));
156
+ {
157
+ var passing = document.createElement("span");
158
+ passing.setAttribute("class", "weight-passing badge badge-success");
159
+ passing.appendChild(document.createTextNode(instanceWeights['Passing']));
160
+ passing.setAttribute('title', "DNS Weight when in warning state")
161
+ weights.appendChild(passing);
162
+ }
163
+ weights.appendChild(document.createTextNode(' '));
164
+ {
165
+ var warning = document.createElement("span");
166
+ warning.setAttribute("class", "weight-warning badge badge-warning");
167
+ warning.setAttribute('title', "DNS Weight when in warning state")
168
+ warning.appendChild(document.createTextNode(instanceWeights['Warning']));
169
+ weights.appendChild(warning);
170
+ }
171
+ return weights;
172
+ } else {
173
+ weights.setAttribute('class', 'weights-absent');
174
+ }
175
+ return weights
176
+ }
177
+
178
+ function toCSSClass(state) {
179
+ switch(state) {
180
+ case 'passing': return 'success';
181
+ case 'critical': return 'danger';
182
+ }
183
+ return state;
184
+ }
185
+
151
186
  function servicesGenerator(instanceServices) {
152
187
  var services = document.createElement('div');
153
188
  services.className = 'instance-services';
@@ -161,11 +196,7 @@ function servicesGenerator(instanceServices) {
161
196
  service.setAttribute('target', '_blank');
162
197
  nodeAddr = instanceServices[serviceKey]['Service']['Address'];
163
198
  service.setAttribute('href', 'http://' + nodeAddr + ':' + servicePort);
164
- switch(nodeState(instanceServices[serviceKey]['Checks'])) {
165
- case 'passing': service.classList.add('btn-outline-success'); break;
166
- case 'warning': service.classList.add('btn-outline-warning'); break;
167
- case 'critical': service.classList.add('btn-outline-danger'); break;
168
- }
199
+ service.classList.add('btn-outline-'+toCSSClass(nodeState(instanceServices[serviceKey]['Checks'])))
169
200
  service.appendChild(document.createTextNode(serviceName + ':' + servicePort));
170
201
  services.appendChild(service);
171
202
  }
@@ -180,11 +211,7 @@ function checksStatusGenerator(instanceChecks) {
180
211
 
181
212
  for (var checkKey in instanceChecks) {
182
213
  checkId = Math.floor(Math.random()*10000);
183
- switch(instanceChecks[checkKey]['status']) {
184
- case 'passing': var btn = 'btn-success'; break;
185
- case 'warning': var btn = 'btn-warning'; break;
186
- case 'critical': var btn = 'btn-danger'; break;
187
- }
214
+ var btn = 'btn-' + toCSSClass(instanceChecks[checkKey]['status'])
188
215
  var check = document.createElement('div');
189
216
 
190
217
  var btnCheck = document.createElement('button');
@@ -0,0 +1,32 @@
1
+ + List of all datacenters
2
+ -------------------------
3
+ # This template compares the number of proxies with the number of services
4
+ # Following https://github.com/hashicorp/consul/issues/4648
5
+ <%
6
+ dammaged_nodes = []
7
+ datacenters.each do |dc|
8
+ services(dc: dc).each do |service_name, tags|
9
+ if service_name.end_with? '-proxy'
10
+ num_proxies = service(service_name, dc:dc).count
11
+ service_name_non_proxy = service_name[0..-7]
12
+ num_services = service(service_name_non_proxy, dc:dc).count
13
+ message = '[ OK ]'
14
+ instance_proxies = service(service_name, dc:dc).map{ |snode| snode['Node']['Node'] + "::" + snode['Service']['ID'][0..-8] }.sort
15
+ instance_services = service(service_name_non_proxy, dc:dc).map{ |snode| snode['Node']['Node'] + "::" + snode['Service']['ID'] }.sort
16
+ diff = instance_proxies - instance_services
17
+ if diff.count > 0
18
+ message = "[FAILED] (DIFF:= #{diff.inspect} not in #{instance_services.inspect})"
19
+ dammaged_nodes += diff.map{|k| k[0..k.index('::')]}
20
+ end
21
+ %><%= message %> <%= dc %> <%= service_name_non_proxy %> (<%= num_proxies %> / <%= num_services %>)
22
+ <%
23
+ end
24
+ end
25
+ end
26
+ %>
27
+ List of dammaged_nodes
28
+ ======================
29
+ <%
30
+ dammaged_nodes.uniq.each do |n|
31
+ %> <%= n %>
32
+ <% end %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: consul-templaterb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - SRE Core Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-04 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request
@@ -196,6 +196,7 @@ files:
196
196
  - samples/criteo/haproxy.cfg.erb
197
197
  - samples/criteo_choregraphies.html.erb
198
198
  - samples/criteo_choregraphies.txt.erb
199
+ - samples/debug/compare_connect_services.txt.erb
199
200
  - samples/ha_proxy.cfg.erb
200
201
  - samples/keys.html.erb
201
202
  - samples/nodes.html.erb