You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by sm...@apache.org on 2020/03/09 20:52:57 UTC

[knox] branch master updated: KNOX-2259 KNOX-2260 KNOX-2261 - Fixed Impala/Kudu/HBase UI context path in service metadata (#282)

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 <sm...@apache.org>
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);
     }