consul-templaterb 1.5.6 → 1.5.7

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: 304b95f065eeb5380e20568ab0d157b011b02e2990bcad5badffdc9cdbd74463
4
- data.tar.gz: e3e520457339beea59c4d0caf4f21b42457ad67fb163d5f2a93ce227b0bb5602
3
+ metadata.gz: ced33aa72d9f144f338dd896e962ad57577f0580a590a7cf9c4151ddf4f9c12c
4
+ data.tar.gz: 27627d161c46451eeb383d3d69797004eb3d2b9c7fda4d74e50315c332c5b9e9
5
5
  SHA512:
6
- metadata.gz: 6cf440dbc49f9f9834eae4fee2f8377e7dbcd06362ca8a7bf4ca0525d62ac5e426c2069f571a76e82081db10a43c55faea2c4a31050015cb4b5e060905d81017
7
- data.tar.gz: 83a6958a169229cbb598a93440852f824e5cc8c65c6e2b751146e36e5371e8c6cc8bafd3bedfd2862e2323d2047eaa01ad6abc86c54bfbf4543034f61082b8e4
6
+ metadata.gz: 57472c838bcd831aced8a7331b058ea8a87bc4a50b1a61b5e62b6dd46dd7ac48712b626c374f5643d5ef2a7627fe9d268f05559af395d978a3ac35dcd74e28e5
7
+ data.tar.gz: '063973ff971f13077e2b8e8c41a93d107662b1154286933ad0211320f1a8bcb3d42ed0482ecebf3822fe545b8a6a24c2c48b4d7770df39aa75f426759de668f2'
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## (UNRELEASED)
4
4
 
5
+ ## 1.5.7 (November 12, 2018)
6
+
7
+ NEW FEATURES:
8
+
9
+ * Services can be favorited in samples/consul-ui. Favorited services are kept on top of the list for easier finding.
10
+
5
11
  ## 1.5.6 (September 30, 2018)
6
12
 
7
13
  IMPROVEMENTS:
@@ -25,14 +25,14 @@ module Consul
25
25
  @errors += 1
26
26
  end
27
27
 
28
- def bytes_per_sec
29
- diff = (Time.now.utc - start)
28
+ def bytes_per_sec(now = Time.now.utc)
29
+ diff = (now - start)
30
30
  diff = 1 if diff < 1
31
31
  (body_bytes / diff).round(0)
32
32
  end
33
33
 
34
- def bytes_per_sec_human
35
- "#{Utilities.bytes_to_h(bytes_per_sec)}/s"
34
+ def bytes_per_sec_human(now = Time.now.utc)
35
+ "#{Utilities.bytes_to_h(bytes_per_sec(now))}/s"
36
36
  end
37
37
 
38
38
  def body_bytes_human
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Async
3
- VERSION = '1.5.6'.freeze
3
+ VERSION = '1.5.7'.freeze
4
4
  end
5
5
  end
@@ -18,6 +18,26 @@
18
18
  overflow: hidden;
19
19
  }
20
20
 
21
+ #service-list .favorite {
22
+ width: 20px;
23
+ height: 20px;
24
+ border: 0;
25
+ color: #f7d800;
26
+ cursor: pointer;
27
+ font-size: 1.3em;
28
+ vertical-align: middle;
29
+ line-height: 1;
30
+ background-color: transparent;
31
+ }
32
+
33
+ #service-list .favorite::before {
34
+ content: '☆';
35
+ }
36
+
37
+ #service-list .favorite.favorited::before {
38
+ content: '★';
39
+ }
40
+
21
41
  .weights {
22
42
  float: right;
23
43
  }
@@ -13,6 +13,7 @@ class ConsulService {
13
13
  this.serviceFilterCount = 0;
14
14
  this.showProxiesInList = false;
15
15
  var cs = this
16
+ this.loadFavorites();
16
17
  window.setTimeout(function(){
17
18
  cs.showTags($('#showTagsInList:checked').length > 0);
18
19
  cs.showProxies($('#showProxiesInList:checked').length > 0);
@@ -75,6 +76,9 @@ class ConsulService {
75
76
  }
76
77
  this.serviceList.html('');
77
78
  this.serviceFilterCount = 0;
79
+
80
+ let idx = 0;
81
+ let lastFav = null;
78
82
  for (var serviceName in this.data.services) {
79
83
  var service = this.data.services[serviceName];
80
84
  var serviceStatus = buildServiceStatus(service);
@@ -84,6 +88,8 @@ class ConsulService {
84
88
  listItem.setAttribute('onfocus','consulService.onClickServiceName(this)');
85
89
  listItem.setAttribute('onclick','consulService.onClickServiceName(this)');
86
90
  listItem.setAttribute('value',serviceName);
91
+ listItem.setAttribute('data-fav', this.favorites[serviceName] ? 1 : 0);
92
+ listItem.setAttribute('data-index', idx);
87
93
  var listItemClass = 'list-group-item list-group-item-action';
88
94
 
89
95
  var statuses = document.createElement('div');
@@ -105,6 +111,9 @@ class ConsulService {
105
111
  }
106
112
 
107
113
  statuses.appendChild(createBadge('badge-dark', (serviceStatus['total'] || 0)));
114
+
115
+ statuses.append(this.buildFavButton(serviceName));
116
+
108
117
  listItem.appendChild(statuses);
109
118
  if (!!service['kind']) {
110
119
  var kind = document.createElement('div');
@@ -129,7 +138,18 @@ class ConsulService {
129
138
 
130
139
  listItem.appendChild(serviceTagsItem);
131
140
  this.serviceFilterCount += 1;
132
- this.serviceList.append(listItem);
141
+
142
+ if (this.favorites[serviceName] && lastFav) {
143
+ lastFav.after(listItem);
144
+ lastFav = listItem;
145
+ } else if (this.favorites[serviceName] && !lastFav) {
146
+ this.serviceList.prepend(listItem);
147
+ lastFav = listItem;
148
+ } else {
149
+ this.serviceList.append(listItem);
150
+ }
151
+
152
+ idx++;
133
153
  }
134
154
  this.serviceFilterCounter.html(this.serviceFilterCount);
135
155
  resizeWrapper('service-wrapper', 'service-list');
@@ -250,6 +270,86 @@ class ConsulService {
250
270
  hljs.highlightBlock(block);
251
271
  });
252
272
  }
273
+
274
+ loadFavorites() {
275
+ const all = (localStorage.getItem('favorite_services') || '').split(',').filter(e => e != '');
276
+ this.favorites = {}
277
+ for (var i in all) {
278
+ this.favorites[all[i]] = true;
279
+ }
280
+ }
281
+
282
+ saveFavorites() {
283
+ let str = "";
284
+ for (var i in this.favorites) {
285
+ if (!this.favorites[i]) {
286
+ continue;
287
+ }
288
+ str == "" || (str += ",");
289
+ str += i;
290
+ }
291
+ localStorage.setItem('favorite_services', str);
292
+ }
293
+
294
+ buildFavButton(serviceName) {
295
+ const btn = document.createElement('button');
296
+ btn.className = 'favorite';
297
+ btn.setAttribute('title', 'Add/Remove from favorites');
298
+
299
+ if (this.favorites[serviceName]) {
300
+ btn.className += ' favorited';
301
+ }
302
+
303
+ $(btn).click(e => {
304
+ this.toggleFav(serviceName, !this.favorites[serviceName]);
305
+ });
306
+ return btn;
307
+ }
308
+
309
+ toggleFav(serviceName, fav) {
310
+ this.favorites[serviceName] = fav;
311
+
312
+ let el = this.serviceList.find('[value="' + serviceName + '"]');
313
+ if (!el.length) {
314
+ return;
315
+ }
316
+
317
+ if (fav) {
318
+ el.find('.favorite').addClass('favorited');
319
+ } else {
320
+ el.find('.favorite').removeClass('favorited');
321
+ }
322
+ el.attr('data-fav', fav ? 1 : 0);
323
+
324
+ const elIdx = parseInt(el.attr('data-index'));
325
+
326
+ let prev = fav ? null : this.serviceList.find('[data-fav="1"]').last();
327
+ const others = this.serviceList.find('[data-fav="' + (fav ? 1 : 0) + '"]');
328
+ for (var i = 0; i < others.length; i++) {
329
+ const idx = parseInt($(others[i]).attr("data-index"));
330
+ if (idx < elIdx) {
331
+ prev = $(others[i]);
332
+ } else if (idx > elIdx) {
333
+ break;
334
+ }
335
+ };
336
+
337
+ if (!prev || !prev.length) {
338
+ this.serviceList.prepend(el);
339
+ } else {
340
+ prev.after(el);
341
+ }
342
+
343
+ // if favorited, scroll to element new position
344
+ if (fav) {
345
+ const container = $('#service-wrapper');
346
+ const top = el.position().top;
347
+ const scroll = container.scrollTop();
348
+ container.scrollTop(scroll + el.offset().top - container.offset().top);
349
+ }
350
+
351
+ this.saveFavorites();
352
+ }
253
353
  }
254
354
 
255
355
  $( window ).resize(resizeAll);
data/samples/metrics.erb CHANGED
@@ -71,7 +71,8 @@ consul_services_count <%= service_count %> <%= services(tag: service_tag_filter)
71
71
 
72
72
  <%
73
73
  json_backends = {}
74
- now = Time.now.utc.to_i * 1000
74
+ now = Time.now.utc
75
+ now_ms = now.to_i * 1000
75
76
  backends.each_pair do |service_name, service_info|
76
77
  last_update = service_info[:stats].last_success_or_error.to_i * 1000
77
78
  service_info[:state].each_pair do |state_name, state_count|
@@ -86,7 +87,7 @@ consul_services_count <%= service_count %> <%= services(tag: service_tag_filter)
86
87
  <%
87
88
  end
88
89
  %>consul_service_stats_requests_bytes{service="<%= service_name %>"} <%= service_info[:stats].body_bytes %> <%= last_update %>
89
- consul_service_stats_requests_bytes_per_sec{service="<%= service_name %>"} <%= service_info[:stats].bytes_per_sec %> <%= now %>
90
+ consul_service_stats_requests_bytes_per_sec{service="<%= service_name %>"} <%= service_info[:stats].bytes_per_sec(now) %> <%= now_ms %>
90
91
 
91
92
  <%
92
93
  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.6
4
+ version: 1.5.7
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-30 00:00:00.000000000 Z
11
+ date: 2018-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request