consul-templaterb 1.5.1 → 1.5.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
  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