This is an automated email from the ASF dual-hosted git repository.

smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 5c46e4c  KNOX-2259 KNOX-2260 KNOX-2261 - Fixed Impala/Kudu/HBase UI 
context path in service metadata (#282)
5c46e4c is described below

commit 5c46e4c1f4436de224bb6c5c408c3849d8ed784b
Author: Sandor Molnar <[email protected]>
AuthorDate: Mon Mar 9 21:52:48 2020 +0100

    KNOX-2259 KNOX-2260 KNOX-2261 - Fixed Impala/Kudu/HBase UI context path in 
service metadata (#282)
---
 .../src/main/resources/services/hbaseui/2.1.0/service.xml   |  4 ++--
 .../src/main/resources/services/impalaui/1.0.0/service.xml  |  2 +-
 .../src/main/resources/services/kuduui/1.0.0/service.xml    |  2 +-
 .../knox/gateway/service/metadata/KnoxMetadataResource.java |  4 +++-
 .../apache/knox/gateway/service/metadata/ServiceModel.java  | 13 +++++++++++--
 5 files changed, 18 insertions(+), 7 deletions(-)

diff --git 
a/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/service.xml
 
b/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/service.xml
index b5efb27..1063f33 100644
--- 
a/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/service.xml
+++ 
b/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/service.xml
@@ -18,9 +18,9 @@
 <service role="HBASEUI" name="hbaseui" version="2.1.0">
     <metadata>
         <type>UI</type>
-        <context>/hbase/webui</context>
+        
<context>/hbase/webui/master?&amp;host={{HOST}}&amp;port={{PORT}}</context>
         <shortDesc>HBase UI</shortDesc>
-        <description>The HBase Master web UI is a simple but useful tool, to 
get an overview of the current status of the cluster. 
+        <description>The HBase Master web UI is a simple but useful tool, to 
get an overview of the current status of the cluster. 
             From its page, you can get the version of the running HBase, its 
basic configuration, including the root HDFS path and ZooKeeper quorum, 
             load average of the cluster, and a table, region, and region 
server list.</description>
     </metadata>
diff --git 
a/gateway-service-definitions/src/main/resources/services/impalaui/1.0.0/service.xml
 
b/gateway-service-definitions/src/main/resources/services/impalaui/1.0.0/service.xml
index 1a17098..d6efa7c 100644
--- 
a/gateway-service-definitions/src/main/resources/services/impalaui/1.0.0/service.xml
+++ 
b/gateway-service-definitions/src/main/resources/services/impalaui/1.0.0/service.xml
@@ -18,7 +18,7 @@ limitations under the License.
 <service role="IMPALAUI" name="impalaui" version="1.0.0">
     <metadata>
         <type>UI</type>
-        <context>/impalaui</context>
+        
<context>/impalaui?scheme={{SCHEME}}&amp;host={{HOST}}&amp;port={{PORT}}</context>
         <shortDesc>Impala UI</shortDesc>
         <description>Each of the Impala daemons (impalad, statestored, and 
catalogd) includes a built-in web server that displays diagnostic and status 
information.</description>
     </metadata>
diff --git 
a/gateway-service-definitions/src/main/resources/services/kuduui/1.0.0/service.xml
 
b/gateway-service-definitions/src/main/resources/services/kuduui/1.0.0/service.xml
index 884982c..82f863c 100644
--- 
a/gateway-service-definitions/src/main/resources/services/kuduui/1.0.0/service.xml
+++ 
b/gateway-service-definitions/src/main/resources/services/kuduui/1.0.0/service.xml
@@ -18,7 +18,7 @@ limitations under the License.
 <service role="KUDUUI" name="kuduui" version="1.0.0">
     <metadata>
         <type>UI</type>
-        <context>/kuduui</context>
+        
<context>/kuduui?scheme={{SCHEME}}&amp;host={{HOST}}&amp;port={{PORT}}</context>
         <shortDesc>Kudu UI</shortDesc>
         <description>Kudu is a columnar storage manager developed for the 
Apache Hadoop platform. Kudu shares the common technical properties of Hadoop 
ecosystem applications: it runs on commodity hardware, is horizontally 
scalable, and supports highly available operation.</description>
     </metadata>
diff --git 
a/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/KnoxMetadataResource.java
 
b/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/KnoxMetadataResource.java
index 1bd0870..f66418f 100644
--- 
a/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/KnoxMetadataResource.java
+++ 
b/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/KnoxMetadataResource.java
@@ -215,7 +215,9 @@ public class KnoxMetadataResource {
 
   private Metadata getServiceMetadata(ServiceDefinitionRegistry 
serviceDefinitionRegistry, Service service) {
     final Optional<ServiceDefinitionPair> serviceDefinition = 
serviceDefinitionRegistry.getServiceDefinitions().stream()
-        .filter(serviceDefinitionPair -> 
serviceDefinitionPair.getService().getRole().equalsIgnoreCase(service.getRole())).findFirst();
+        .filter(serviceDefinitionPair -> 
serviceDefinitionPair.getService().getRole().equalsIgnoreCase(service.getRole()))
+        .filter(serviceDefinitionPair -> service.getVersion() == null || 
service.getVersion().toString().equalsIgnoreCase(serviceDefinitionPair.getService().getVersion()))
+        .findFirst();
     return serviceDefinition.isPresent() ? 
serviceDefinition.get().getService().getMetadata() : null;
   }
 
diff --git 
a/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/ServiceModel.java
 
b/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/ServiceModel.java
index e631a7d..c54352b 100644
--- 
a/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/ServiceModel.java
+++ 
b/gateway-service-metadata/src/main/java/org/apache/knox/gateway/service/metadata/ServiceModel.java
@@ -17,6 +17,8 @@
  */
 package org.apache.knox.gateway.service.metadata;
 
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.Locale;
 
 import javax.servlet.http.HttpServletRequest;
@@ -101,14 +103,21 @@ public class ServiceModel {
   }
 
   @XmlElement
-  public String getServiceUrl() {
+  public String getServiceUrl() throws MalformedURLException {
     String context = getContext();
     if ("HIVE".equals(getServiceName())) {
       return String.format(Locale.ROOT, 
"jdbc:hive2://%s:%d/;?hive.server2.transport.mode=http;hive.server2.thrift.http.path=/%s/%s%s",
 request.getServerName(),
           request.getServerPort(), gatewayPath, topologyName, context);
     } else {
+      final String backendUrlString = getBackendServiceUrl();
       if (context.indexOf("{{BACKEND_HOST}}") > -1) {
-        context = context.replace("{{BACKEND_HOST}}", getBackendServiceUrl());
+        context = context.replace("{{BACKEND_HOST}}", backendUrlString);
+      }
+      if (context.indexOf("{{SCHEME}}") > -1 || context.indexOf("{{HOST}}") > 
-1 || context.indexOf("{{PORT}}") > -1) {
+        final URL backendUrl = new URL(backendUrlString);
+          context = context.replace("{{SCHEME}}", backendUrl.getProtocol());
+          context = context.replace("{{HOST}}", backendUrl.getHost());
+          context = context.replace("{{PORT}}", 
String.valueOf(backendUrl.getPort()));
       }
       return String.format(Locale.ROOT, "%s://%s:%s/%s/%s%s", 
request.getScheme(), request.getServerName(), request.getServerPort(), 
gatewayPath, topologyName, context);
     }

Reply via email to