From fd0024b4122584e1f4d1e437fc35f6d7f1775c01 Mon Sep 17 00:00:00 2001 From: Paul-Hadrien Bourquin Date: Fri, 2 Oct 2020 19:05:36 +0200 Subject: [PATCH] Add decorator for service & node name to allow using node metadata In case meta needs to be used in place of node.name --- samples/consul-ui/decorators.js.erb | 7 +++++++ samples/consul-ui/js/nodes.js | 2 +- samples/consul-ui/js/service.js | 2 +- samples/consul-ui/js/utils.js | 13 ++++++++----- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/samples/consul-ui/decorators.js.erb b/samples/consul-ui/decorators.js.erb index 113749d..c0c8e2a 100644 --- a/samples/consul-ui/decorators.js.erb +++ b/samples/consul-ui/decorators.js.erb @@ -36,6 +36,13 @@ function usefullLinksGenerator(instance, serviceName, node_meta_info) { return top; } +/** + * createNodeDisplayElement resolves and displays the node name. + */ +function createNodeDisplayElement(nodeName, nodemeta) { + return document.createTextNode(nodeName); +} + /** * serviceInstanceDecorator is called to decorate an instance. */ diff --git a/samples/consul-ui/js/nodes.js b/samples/consul-ui/js/nodes.js index 73a8bcb..fe86592 100644 --- a/samples/consul-ui/js/nodes.js +++ b/samples/consul-ui/js/nodes.js @@ -71,7 +71,7 @@ class NodeMainSelector extends MainSelector { content.setAttribute('class', 'instance-content'); var contentHead = document.createElement('div'); contentHead.setAttribute('class', 'instance-content-header'); - contentHead.appendChild(nodeNameGenator(node['Node']['Name'], node['Node']['Address'])); + contentHead.appendChild(nodeNameGenator(node['Node'])); contentHead.appendChild(nodeAddressGenator(node['Node']['Address'])); contentHead.appendChild(nodeMetaGenerator(node['Node']['Meta'])); content.appendChild(contentHead); diff --git a/samples/consul-ui/js/service.js b/samples/consul-ui/js/service.js index 7401762..c13b5c9 100644 --- a/samples/consul-ui/js/service.js +++ b/samples/consul-ui/js/service.js @@ -304,8 +304,8 @@ class ServiceMainSelector extends MainSelector { element.setAttribute("class", "list-group-item service-instance"); var state = nodeState(instance.checks); element.appendChild(weightsGenerator(instance.weights, state)); - element.appendChild(serviceTitleGenerator(instance, serviceName)); var node_info = this.nodes[instance.name]; + element.appendChild(serviceTitleGenerator(instance, serviceName, node_info)); if (node_info != null) { node_info = node_info.meta; element.appendChild(nodeMetaGenerator(node_info, instance.sMeta)); diff --git a/samples/consul-ui/js/utils.js b/samples/consul-ui/js/utils.js index 6c6a036..e2ca5fb 100644 --- a/samples/consul-ui/js/utils.js +++ b/samples/consul-ui/js/utils.js @@ -63,7 +63,7 @@ function nodeState(checks) { supported_protocols = ['https', 'http', 'sftp', 'ftp', 'ssh', 'telnet'] -function serviceTitleGenerator(instance, serviceName) { +function serviceTitleGenerator(instance, serviceName, node_info) { var protocol = null; for (i in supported_protocols) { var protoc = supported_protocols[i] @@ -86,7 +86,10 @@ function serviceTitleGenerator(instance, serviceName) { instanceLink.setAttribute('target', '_blank'); } - instanceLink.appendChild(document.createTextNode(instance.name + appendPort)); + var nodemeta = (node_info != null) ? node_info.meta : null; + instanceLink.appendChild(createNodeDisplayElement(instance.name, nodemeta)); + instanceLink.appendChild(document.createTextNode(appendPort)); + const nodeInfo = document.createElement('a'); nodeInfo.appendChild(document.createTextNode('\u24D8')); nodeInfo.setAttribute('title', 'Click to see details of Node: ' + instance.name + @@ -103,7 +106,7 @@ function serviceTitleGenerator(instance, serviceName) { return htmlTitle; } -function nodeNameGenator(nodename, nodeaddr) { +function nodeNameGenator(node) { var protocol = 'ssh://' var htmlTitle = document.createElement('h5'); @@ -111,10 +114,10 @@ function nodeNameGenator(nodename, nodeaddr) { var instanceLink = document.createElement('a'); instanceLink.setAttribute('class', 'instance-name'); if (protocol != null) { - instanceLink.setAttribute('href', protocol + nodeaddr); + instanceLink.setAttribute('href', protocol + node['Address']); instanceLink.setAttribute('target', '_blank'); } - instanceLink.appendChild(document.createTextNode(nodename)); + instanceLink.appendChild(createNodeDisplayElement(node['Name'], node['Meta'])); htmlTitle.appendChild(instanceLink); return htmlTitle;