consul-templaterb 1.18.5 → 1.19.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
  SHA256:
3
- metadata.gz: 395c9514652523bda8cc32eb9ae1f7c0b0d19941c2df9cb3c09654e5dcc63d9c
4
- data.tar.gz: 5f444cf5c5dbc03ca4ca4515646882365f9e5a6347c083b2b590f2893944bcf8
3
+ metadata.gz: c205b2067eaf6526b4885b4303c580e2b52d4e770371db3d9678908c013b19fd
4
+ data.tar.gz: 0fe4a33a112ff1801391d4c6df928d0f63a7bc606cd0b2aa57f1907bbb3a50d1
5
5
  SHA512:
6
- metadata.gz: 41d34ad14160c153fb02a256d23bd5fd858f30d0593afe551d50738fdd60bea6009ef8e86f2d04e4220891db3ef19492906250d5fa34ed29a3e44ede30e082ef
7
- data.tar.gz: 81b45b14001c436a710a1ab766811cbae0671087bce17bd29aff06512545889a0fb6e317eaf9c6eac9239aaf08062e64f15fa3e086605b4ff5af939714734e15
6
+ metadata.gz: abef2e2b0cf9dec0ab94aaa04ad3377c0f13171cc9ffc8fa83a47a99c6a99ff229834c76c4209d1ca3d854d8006450fd8bb745f7cb594b444e2c83fc7711ec61
7
+ data.tar.gz: 6c818a568ed87d660545a03f3308c4b97cd5b3e17a80d7d7d38c1c79453fd20e73a8912b6a1da9b259b368124fab3abad7c7930cca10f6eabc1dd0475874309a
@@ -3,11 +3,16 @@ rvm:
3
3
  - 2.4.7
4
4
  - 2.5.6
5
5
  - 2.6.4
6
- deploy:
7
- provider: rubygems
8
- api_key:
9
- secure: l78H6Ow9HCeEz0hcAP2XCXaGGBNRXZ/QLFPNzwyNmHToko9WqZj6mbiNIcVwZ8aCcZEzFmtcB7m1lC1l+mvot3Snfh4OUErK7EXMLiNxUWybtA4qJqmsb2J8JGS69pTohPKagi1YyRbyVs2tJpM5OVazcNxEQDAVkWVxJuPVz6tsn4rXZsL77nTSVyB6YGKgguRGhtS/3M0ufk1ymOpuk8pxXKaotlYGRXmht2OHW+FDQczTMgqu6jiZubjWlNHVxtYn+CsLYNj1BswzD6fF1uous6nchV0if2QW5N4OJVyZCx3yEQ0RswfI8G1kG/Jm8wd2lSknY2wpnd1qkRnAcFlKBpUv8aQd6SdbSO84GTAOvucgK7Mcf0LRvYSE2FyagaAPFSfMybWd+GS26g5AuRPpkhtsS9ijfdIzpudiF18pvnJ+wQj+hWM/THWowYNyKv9NeckxdrULaHPisA346r5eM/EADOhyEUtPm11PFgcheGjff1H4qXGc9gcm50u6mNNHkWv38oGhAPpRk/bU7qybTKqRKNGWGP0MiT4WVIFXp62/JMY7AmufOdJx5Ca5JVsaWoN4fsS9r3+R+FxvRtV9NOrRJVKKaQhzi4UHEUDQ2hQjpLDijD5L0vUsl6arl+nufTt5G5jp9QvdY7fhYT1mpGgWj0hTBd8Pxsl3N8U=
10
- gem: consul-templaterb
11
- on:
12
- tags: true
13
- repo: criteo/consul-templaterb
6
+ jobs:
7
+ include:
8
+ - stage: Gem release
9
+ rvm: 2.5.6
10
+ script: echo "Publishing consul-templaterb on rubygems.org ..."
11
+ deploy:
12
+ provider: rubygems
13
+ api_key:
14
+ secure: l78H6Ow9HCeEz0hcAP2XCXaGGBNRXZ/QLFPNzwyNmHToko9WqZj6mbiNIcVwZ8aCcZEzFmtcB7m1lC1l+mvot3Snfh4OUErK7EXMLiNxUWybtA4qJqmsb2J8JGS69pTohPKagi1YyRbyVs2tJpM5OVazcNxEQDAVkWVxJuPVz6tsn4rXZsL77nTSVyB6YGKgguRGhtS/3M0ufk1ymOpuk8pxXKaotlYGRXmht2OHW+FDQczTMgqu6jiZubjWlNHVxtYn+CsLYNj1BswzD6fF1uous6nchV0if2QW5N4OJVyZCx3yEQ0RswfI8G1kG/Jm8wd2lSknY2wpnd1qkRnAcFlKBpUv8aQd6SdbSO84GTAOvucgK7Mcf0LRvYSE2FyagaAPFSfMybWd+GS26g5AuRPpkhtsS9ijfdIzpudiF18pvnJ+wQj+hWM/THWowYNyKv9NeckxdrULaHPisA346r5eM/EADOhyEUtPm11PFgcheGjff1H4qXGc9gcm50u6mNNHkWv38oGhAPpRk/bU7qybTKqRKNGWGP0MiT4WVIFXp62/JMY7AmufOdJx5Ca5JVsaWoN4fsS9r3+R+FxvRtV9NOrRJVKKaQhzi4UHEUDQ2hQjpLDijD5L0vUsl6arl+nufTt5G5jp9QvdY7fhYT1mpGgWj0hTBd8Pxsl3N8U=
15
+ gem: consul-templaterb
16
+ on:
17
+ tags: true
18
+ repo: criteo/consul-templaterb
@@ -2,6 +2,21 @@
2
2
 
3
3
  ## (UNRELEASED)
4
4
 
5
+ ## 1.19.0 (October 14, 2019)
6
+
7
+ IMPROVEMENTS:
8
+
9
+ * Refactor JS code in consul-ui
10
+ * Removed old samples not used anymore
11
+
12
+ NEW FEATURES:
13
+
14
+ * Added new function `checks_for_node`
15
+
16
+ BUGFIXs:
17
+
18
+ * Avoid try publishing several times Gem on rubygems.org
19
+
5
20
  ## 1.18.5 (September 30, 2019)
6
21
 
7
22
  IMPROVEMENTS:
data/README.md CHANGED
@@ -251,19 +251,17 @@ by consul-templaterb.
251
251
  Have a look into the [samples/](samples/) directory to browse example files which contains those
252
252
  examples:
253
253
 
254
- 1. [List all nodes on Cluster](samples/nodes.html.erb)
255
- 2. [Show all services in Cluster](samples/services.html.erb)
256
- 3. [Show all Service Checks and their output](samples/checks.html.erb)
257
- 4. [Show all Key/Values nicely](samples/keys.html.erb)
258
- 5. [Show Choregraphies - work on content of K/V with JSON](samples/criteo_choregraphies.html.erb)
259
- 6. [Services in XML](samples/consul_template.xml.erb)
260
- 7. [Services in JSON](samples/consul_template.json.erb)
261
- 8. [Generate HaProxy Configuration](samples/ha_proxy.cfg.erb)
262
- 9. [Export Consul Statistics to Prometheus](samples/metrics.erb) : count all services, their state,
254
+ 1. [List all nodes on Cluster](samples/consul-ui/consul_nodes.json.erb)
255
+ 2. [Show all services in Cluster](samples/consul-ui/consul_services.json.erb)
256
+ 3. [Show all Key/Values nicely](samples/consul-ui/consul_keys.json.erb)
257
+ 4. [Services in XML](samples/consul_template.xml.erb)
258
+ 5. [Services in JSON](samples/consul_template.json.erb)
259
+ 6. [Generate HaProxy Configuration](samples/ha_proxy.cfg.erb)
260
+ 7. [Export Consul Statistics to Prometheus](samples/metrics.erb) : count all services, their state,
263
261
  datacenters and nodes and export it to prometheus easily to trigger alerts.
264
- 10. [List all services/Nodes with their statuses for all datacenters](samples/all_services.txt.erb)
265
- 11. [Show all services/instances not passing on all DCs](samples/tools/find_all_failing_services.txt.erb)
266
- 12. [List all rubygems consul versions from remote server JSON](samples/list_ruby_versions_from_rubygems.txt.erb)
262
+ 8. [List all services/Nodes with their statuses for all datacenters](samples/all_services.txt.erb)
263
+ 9. [Show all services/instances not passing on all DCs](samples/tools/find_all_failing_services.txt.erb)
264
+ 10. [List all rubygems consul versions from remote server JSON](samples/list_ruby_versions_from_rubygems.txt.erb)
267
265
 
268
266
  If you want to test it quickly, you might try with (assuming your consul agent is listening on
269
267
  `http://localhost:8500`):
@@ -226,6 +226,10 @@ Full example: [samples/consul_template.txt.erb](samples/consul_template.txt.erb)
226
226
  [List all the services of a given Node](https://www.consul.io/api/catalog.html#list-services-for-node) using its
227
227
  name or its ID. If DC is specified, will lookup for given node in another datacenter.
228
228
 
229
+ ## checks_for_node(name, dc: nil, passing: false, tag: nil)
230
+
231
+ [Find all the checks](https://www.consul.io/api/health.html#list-checks-for-node) of a given node name.
232
+
229
233
  ## checks_for_service(name, dc: nil, passing: false, tag: nil)
230
234
 
231
235
  [Find all the checks](https://www.consul.io/api/health.html#list-checks-for-service) of a given service.
@@ -133,6 +133,16 @@ module Consul
133
133
  create_if_missing(path, query_params) { ConsulTemplateChecks.new(ConsulEndpoint.new(consul_conf, path, true, query_params, '[]')) }
134
134
  end
135
135
 
136
+ # https://www.consul.io/api/health.html#list-checks-for-node
137
+ def checks_for_node(name, dc: nil, passing: false)
138
+ raise 'You must specify a name for a service' if name.nil?
139
+ path = "/v1/health/node/#{name}"
140
+ query_params = {}
141
+ query_params[:dc] = dc if dc
142
+ query_params[:passing] = passing if passing
143
+ create_if_missing(path, query_params) { ConsulTemplateChecks.new(ConsulEndpoint.new(consul_conf, path, true, query_params, '[]')) }
144
+ end
145
+
136
146
  # https://www.consul.io/api/catalog.html#list-nodes
137
147
  def nodes(dc: nil)
138
148
  path = '/v1/catalog/nodes'
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Async
3
- VERSION = '1.18.5'.freeze
3
+ VERSION = '1.19.0'.freeze
4
4
  end
5
5
  end
@@ -36,12 +36,6 @@
36
36
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.11/css/all.css" integrity="sha384-p2jx59pefphTFIpeqCcISO9MdVfIm4pNnsL08A6v5vaQc4owkQqxMV8kg4Yvhaw/" crossorigin="anonymous">
37
37
  <link rel="stylesheet" href="css/style.css">
38
38
  <link rel="stylesheet" href="vendors/highlight/atom-one-dark.css">
39
- <style id="css-states">
40
- .service-tags { display: none; }
41
- </style>
42
- <style id="serviceCol">
43
- .service-tags { display: none; }
44
- </style>
45
39
  </head>
46
40
  <body>
47
41
  <nav class="navbar navbar-expand-md navbar-dark bg-secondary">
@@ -30,10 +30,11 @@
30
30
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
31
31
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
32
32
  <script src="js/utils.js"></script>
33
+ <script src="js/types.js"></script>
33
34
  <script src="js/keys.js"></script>
34
35
  <script src="vendors/highlight/highlight.pack.js"></script>
35
36
  <script type="text/javascript">
36
- consulKeys = new ConsulKeys('<%= datasource %>','<%= refresh %>');
37
+ consulKeysManager = new ConsulKeysManager('<%= datasource %>');
37
38
  </script>
38
39
  </body>
39
40
  </html>
@@ -6,14 +6,20 @@
6
6
  <div class="col-12 col-m-12">
7
7
  <h2 class="text-center" id="service-title"></h2>
8
8
  <div class="row mb-2">
9
- <div class="input-group float-left col-10">
10
- <input id="instance-filter" type="text" placeholder="filter nodes by name, service or tags" class="form-control" />
9
+ <div class="input-group float-left col-7">
10
+ <input id="instance-filter" type="text" placeholder="filter nodes by name, service or tags" class="form-control" >
11
11
  </div>
12
- <div id="instance-statuses" class="col-2">
13
- <span id="service-status-passing" status="passing" onclick="consulNodes.onClickFilter(this)" class="badge mx-1 badge-success passing service-status">0</span>
14
- <span id="service-status-warning" status="warning" onclick="consulNodes.onClickFilter(this)" class="badge mx-1 badge-warning warning service-status">0</span>
15
- <span id="service-status-critical" status="critical" onclick="consulNodes.onClickFilter(this)" class="badge mx-1 badge-danger critical service-status">0</span>
16
- <span id="service-status-total" status="total" onclick="consulNodes.onClickFilter(this)" class="badge mx-1 badge-dark service-status">0</span>
12
+ <select id="max-display-selector" class="form-control col-2">
13
+ <option selected="selected" value="100">Show 100</option>
14
+ <option value="500">Show 500</option>
15
+ <option value="1000">Show 1000</option>
16
+ <option value="all">All</option>
17
+ </select>
18
+ <div id="instance-statuses" class="float-right col-3">
19
+ <span id="service-status-passing" status="passing" class="badge mx-1 badge-success passing service-status">0</span>
20
+ <span id="service-status-warning" status="warning" class="badge mx-1 badge-warning warning service-status">0</span>
21
+ <span id="service-status-critical" status="critical" class="badge mx-1 badge-danger critical service-status">0</span>
22
+ <span id="service-status-total" status="total" class="badge mx-1 badge-dark service-status">0</span>
17
23
  </div>
18
24
  </div>
19
25
  <div id="instances-wrapper">
@@ -27,9 +33,10 @@
27
33
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
28
34
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
29
35
  <script src="js/utils.js"></script>
36
+ <script src="js/types.js"></script>
30
37
  <script src="js/nodes.js"></script>
31
38
  <script type="text/javascript">
32
- consulNodes = new ConsulNodes('<%= datasource %>','<%= refresh %>');
39
+ consulNodesManager = new ConsulNodesManager('<%= datasource %>');
33
40
  </script>
34
41
  </body>
35
42
  </html>
@@ -7,13 +7,13 @@
7
7
  <div class="form-group">
8
8
  <div class="form-check form-check-inline">
9
9
  <label class="form-check-label">
10
- <input id="showTagsInList" type="checkbox" title="show tags" onclick="consulService.showTags(this.checked)" class="form-check-input" />
10
+ <input id="showTagsInList" type="checkbox" title="show tags" class="form-check-input" />
11
11
  Show Tags
12
12
  </label>
13
13
  </div>
14
14
  <div class="form-check form-check-inline">
15
15
  <label class="form-check-label">
16
- <input id="showProxiesInList" type="checkbox" title="show Consul Connect Proxies" onclick="consulService.showProxies(this.checked)" class="form-check-input" />
16
+ <input id="showProxiesInList" type="checkbox" title="show Consul Connect Proxies" class="form-check-input" />
17
17
  Show Connect Proxies
18
18
  </label>
19
19
  </div>
@@ -32,14 +32,26 @@
32
32
  <div class="col-8 col-m-9">
33
33
  <h2 class="text-center" id="service-title"></h2>
34
34
  <div class="row mb-2">
35
- <div class="input-group float-left col-12">
36
- <input id="instance-filter" type="text" placeholder="filter nodes by name or tags" class="form-control" />
35
+ <div class="input-group float-left col-7">
36
+ <input id="instance-filter" type="text" placeholder="filter nodes by name, service or tags" class="form-control" >
37
+ </div>
38
+ <select id="max-display-selector" class="form-control col-2">
39
+ <option selected="selected" value="100">Show 100</option>
40
+ <option value="500">Show 500</option>
41
+ <option value="1000">Show 1000</option>
42
+ <option value="all">All</option>
43
+ </select>
44
+ <div id="instance-statuses" class="float-right col-3">
45
+ <span id="service-status-passing" status="passing" class="badge mx-1 badge-success passing service-status">0</span>
46
+ <span id="service-status-warning" status="warning" class="badge mx-1 badge-warning warning service-status">0</span>
47
+ <span id="service-status-critical" status="critical" class="badge mx-1 badge-danger critical service-status">0</span>
48
+ <span id="service-status-total" status="total" class="badge mx-1 badge-dark service-status">0</span>
37
49
  </div>
38
50
  </div>
39
51
  <div class="progress">
40
- <div id="service-progress-passing" status="passing" onclick="consulService.onClickFilter(this)" class="progress-status progress-bar bg-success" role="progressbar" style="width: 100%">passing</div>
41
- <div id="service-progress-warning" status="warning" onclick="consulService.onClickFilter(this)" class="progress-status progress-bar bg-warning" role="progressbar" style="width: 0%">warning</div>
42
- <div id="service-progress-critical" status="critical" onclick="consulService.onClickFilter(this)" class="progress-status progress-bar bg-danger" role="progressbar" style="width: 0%">critical</div>
52
+ <div id="service-progress-passing" status="passing" class="progress-status progress-bar bg-success" role="progressbar" style="width: 100%">passing</div>
53
+ <div id="service-progress-warning" status="warning" class="progress-status progress-bar bg-warning" role="progressbar" style="width: 0%">warning</div>
54
+ <div id="service-progress-critical" status="critical" class="progress-status progress-bar bg-danger" role="progressbar" style="width: 0%">critical</div>
43
55
  </div>
44
56
  <div id="instances-wrapper">
45
57
  <div id="instances-list" class="list-group"></div>
@@ -52,9 +64,10 @@
52
64
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
53
65
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
54
66
  <script src="js/utils.js"></script>
67
+ <script src="js/types.js"></script>
55
68
  <script src="js/service.js"></script>
56
69
  <script type="text/javascript">
57
- consulService = new ConsulService('<%= datasource %>','<%= refresh %>');
70
+ consulServiceManager = new ConsulServiceManager('<%= datasource %>');
58
71
  </script>
59
72
  <script src="vendors/highlight/highlight.pack.js"></script>
60
73
  </body>
@@ -91,7 +91,6 @@ td.serviceName {
91
91
 
92
92
  #service-wrapper .list-group-item:last-child, #instances-wrapper .list-group-item:last-child,
93
93
  #keys-wrapper .list-group-item:last-child {
94
- border-bottom-width: 0px;
95
94
  border-bottom-left-radius: 0px;
96
95
  border-bottom-right-radius: 0px;
97
96
  }
@@ -239,10 +238,15 @@ pre, code {
239
238
  margin-bottom: 0px;
240
239
  }
241
240
 
242
- .connect-enabled{
241
+ .service-list-item {
242
+ cursor: pointer;
243
+ }
244
+
245
+ .connect-enabled {
243
246
  float:right;
244
247
  border: 1px #ccc solid;
245
248
  }
246
- .connect-disabled{
249
+
250
+ .connect-disabled {
247
251
  display: none;
248
252
  }
@@ -1,132 +1,88 @@
1
- class ConsulKeys {
2
- constructor(ressourceURL, refresh) {
3
- this.ressourceURL = ressourceURL;
4
- this.fetchRessource();
5
- this.keysList = $("#keys-list");
6
- this.keysFilter = $("#keys-filter");
7
- this.keysFilter.keyup(debounce(this.filterService, 250));
8
- this.refresh = parseInt(refresh);
9
- this.keysFilterCounter = $("#keys-counter");
10
- this.keysFilterCount = 0;
11
- }
12
-
13
- fetchRessource() {
14
- $.ajax({url: this.ressourceURL, cache: false, dataType: "json", sourceObject: this, success: function(result){
15
- consulKeys.initRessource(result);
16
- }});
17
- }
18
-
19
- initRessource(data) {
20
- this.data = data;
21
- this.reloadKeysList();
22
- console.log('Data generated at: ' + data['generated_at']);
1
+ class ConsulKeysManager extends ConsulUIManager {
2
+ constructor(resourceURL) {
3
+ super(resourceURL);
4
+ this.codeDisplayer = new CodeDisplayer(
5
+ $("#kv-data"),
6
+ $("#kv-title"),
7
+ )
8
+ this.sideSelector = new KeySideSelector(
9
+ this.codeDisplayer,
10
+ $("#keys-filter"),
11
+ $("#keys-list"),
12
+ $("#keys-counter"),
13
+ "filter",
14
+ "key"
15
+ );
16
+ this.fetchResource();
17
+ }
23
18
 
24
- var urlParam = new URL(location.href).searchParams.get('key');
25
- if (urlParam) {
26
- var nodes = document.getElementById('keys-list').childNodes;
27
- for(var i in nodes) {
28
- if($(nodes[i]).find(".key-name").html() == urlParam) {
29
- var selectedElement = $(nodes[i])
30
- this.selectKey(selectedElement);
31
- selectedElement.focus()
32
- break;
33
- }
34
- }
35
- } else {
36
- this.selectKey(document.getElementById('keys-list').firstElementChild);
19
+ async initResource(data) {
20
+ this.sideSelector.data = data["kv"];
21
+ this.sideSelector.prepareData();
22
+ this.sideSelector.refreshList();
37
23
  }
24
+ }
38
25
 
39
- if(this.refresh > 0) {
40
- setTimeout(this.fetchRessource, this.refresh * 1000);
26
+ class KeySideSelector extends SideSelector {
27
+ constructor(
28
+ codeDisplayer,
29
+ filterElement,
30
+ listElement,
31
+ counterElement,
32
+ URLLabelFilter,
33
+ URLLabelSelected
34
+ ) {
35
+ super(
36
+ filterElement,
37
+ listElement,
38
+ counterElement,
39
+ URLLabelFilter,
40
+ URLLabelSelected,
41
+ false
42
+ );
43
+ this.codeDisplayer = codeDisplayer
41
44
  }
42
- }
43
45
 
44
- reloadKeysList() {
45
- this.keysList.html('');
46
- this.keysFilterCount = 0;
46
+ matchElement(key, keyData, filter) {
47
+ return key.match(filter);
48
+ }
47
49
 
48
- for (var key in this.data.kv) {
50
+ elementGenerator(key, data) {
51
+ var element = document.createElement("li");
49
52
 
50
- var listItem = document.createElement('button');
51
- listItem.setAttribute('type','button');
52
- listItem.setAttribute('onfocus','consulKeys.onClickServiceName(this)');
53
- listItem.setAttribute('onclick','consulKeys.onClickServiceName(this)');
54
- listItem.setAttribute('value',key);
55
- listItem.setAttribute('class','list-group-item list-group-item-action');
53
+ var CSSClass = "service-list-item list-group-item list-group-item-action";
56
54
 
57
- var serviceNameItem = document.createElement('div');
58
- serviceNameItem.setAttribute('class', 'key-name');
59
- serviceNameItem.appendChild(document.createTextNode(key));
60
- listItem.appendChild(serviceNameItem);
55
+ var obj = this;
56
+ element.addEventListener("focus", function () {
57
+ obj.onClickElement(this, key);
58
+ });
59
+ element.addEventListener("click", function () {
60
+ obj.onClickElement(this, key);
61
+ });
61
62
 
62
- this.keysFilterCount += 1;
63
- this.keysList.append(listItem);
64
- }
65
- this.keysFilterCounter.html(this.keysFilterCount);
66
- resizeWrapper('keys-wrapper', 'keys-list');
67
- this.filterService();
68
- }
63
+ element.setAttribute("value", key);
69
64
 
70
- filterService() {
71
- var filter = new RegExp(consulKeys.keysFilter.val());
72
- consulKeys.keysFilterCount = 0;
73
- consulKeys.keysList.children('button').each(function (){
74
- var ui = $(this);
75
- if(keyMatcher(this, filter)) {
76
- ui.removeClass('d-none');
77
- ui.addClass('d-block');
78
- consulKeys.keysFilterCount += 1;
79
- consulKeys.keysFilterCounter.html(consulKeys.keysFilterCount);
80
- } else {
81
- ui.removeClass('d-block');
82
- ui.addClass('d-none');
83
- }
84
- })
85
- }
65
+ element.setAttribute("class", CSSClass);
86
66
 
87
- onClickServiceName(source) {
88
- this.selectKey(source);
89
- this.selectedKeyName = $(source).find(".key-name").html()
90
- this.updateURL();
91
- }
67
+ var nameItem = document.createElement("div");
68
+ nameItem.setAttribute("class", "service-name");
69
+ nameItem.appendChild(document.createTextNode(key));
70
+ element.appendChild(nameItem);
92
71
 
93
- updateURL() {
94
- var newUrl = new URL(location.href);
95
- if (this.selectedKeyName) {
96
- newUrl.searchParams.set('key', this.selectedKeyName);
97
- } else {
98
- newUrl.searchParams.delete('key')
72
+ return element;
99
73
  }
100
- window.history.pushState({},"",newUrl.href);
101
- }
102
74
 
103
- selectKey(source) {
104
- if (this.selectedKey) {
105
- $(this.selectedKey).removeClass('active');
106
- }
107
- var serviceName = $(source).find(".key-name").html()
108
- this.selectedKey = source.closest( "button" );
109
- $(this.selectedKey).addClass('active');
110
- this.displayKey([serviceName]);
111
- }
112
-
113
- displayKey(key) {
114
- $("#kv-title").html(key);
115
- if(this.data.kv[key] != null) {
116
- var dataToDisplay = atob(this.data.kv[key]);
117
- } else {
118
- var dataToDisplay = 'NO DATA';
75
+ selectItem(element, key) {
76
+ super.selectItem(element, key);
77
+ if (this.data[key] != null) {
78
+ var dataToDisplay = atob(this.data[key]);
79
+ } else {
80
+ var dataToDisplay = 'NO DATA';
81
+ }
82
+ this.codeDisplayer.displayData(key, dataToDisplay);
119
83
  }
120
-
121
- $("#kv-data").text(dataToDisplay);
122
- $("#kv-data").removeClass();
123
-
124
- $('pre code').each(function(i, block) {
125
- hljs.highlightBlock(block);
126
- });
127
- resizeWrapper('data-wrapper', 'kv-data');
128
- }
129
84
  }
130
85
 
131
- $( window ).resize(resizeData);
132
- resizeData();
86
+
87
+ $(window).resize(resizeData);
88
+ resizeData();