You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@knox.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2024/01/31 10:02:00 UTC

[jira] [Work logged] (KNOX-3003) Group UI services of the same type

     [ https://issues.apache.org/jira/browse/KNOX-3003?focusedWorklogId=902772&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-902772 ]

ASF GitHub Bot logged work on KNOX-3003:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 31/Jan/24 10:01
            Start Date: 31/Jan/24 10:01
    Worklog Time Spent: 10m 
      Work Description: smolnar82 opened a new pull request, #838:
URL: https://github.com/apache/knox/pull/838

   ## What changes were proposed in this pull request?
   
   There are two important pieces of this PR:
   1. the `getTopologies` REST API endpoint in `KnoxMetadataResource` was modified in a way such that it includes only one item per service role (IMPALAUI, WEBHDFS, HUE, HBASEUI, etc...) with a list of service URLs from now on. In previous versions it was different: the response had `N` items per service role with a unique service URL.
   
   ```
   $ curl -H 'Accept: application/json' -iku admin:admin-password https://localhost:8443/gateway/sandbox/api/v1/metadata/topologies?name=sandbox
   HTTP/1.1 200 OK
   Date: Wed, 31 Jan 2024 09:32:09 GMT
   Set-Cookie: KNOXSESSIONID=node0pafwbogn50gjy2zjiaxuchwx0.node0; Path=/gateway/sandbox; Secure; HttpOnly
   Expires: Thu, 01 Jan 1970 00:00:00 GMT
   Set-Cookie: rememberMe=deleteMe; Path=/gateway/sandbox; Max-Age=0; Expires=Tue, 30-Jan-2024 09:32:09 GMT; SameSite=lax
   Content-Type: application/json
   Transfer-Encoding: chunked
   
   {
       "topologyInformations": {
           "topologyInformation": [
               {
                   "topology": "sandbox",
                   "pinned": false,
                   "apiServicesViewVersion": "v1",
                   "apiServices": {
                       "service": [
                           {
                               "context": "/webhdfs",
                               "description": "An HTTP REST API which supports the complete FileSystem interface for HDFS.",
                               "samples": {
                                   "sample": [
                                       {
                                           "description": "List all files under 'testPath'",
                                           "value": "curl -iv -X GET \"https://localhost:8443/gateway/sandbox/webhdfs/v1/testPath?op=LISTSTATUS\""
                                       },
                                       {
                                           "description": "Rename a File/Directory under ",
                                           "value": "curl -iv -X PUT \"https://localhost:8443/gateway/sandbox/webhdfs/v1/testPath/testFile?op=RENAME&destination=testPath/renamedFile\""
                                       },
                                       {
                                           "description": "Get Home Directory",
                                           "value": "curl -iv -X GET \"https://localhost:8443/gateway/sandbox/webhdfs/v1/?op=GETHOMEDIRECTORY\""
                                       },
                                       {
                                           "description": "You may check out Apache WebHDFS's REST API documentation here",
                                           "value": "https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/WebHDFS.html"
                                       }
                                   ]
                               },
                               "serviceName": "WEBHDFS",
                               "serviceUrls": [
                                   "https://localhost:8443/gateway/sandbox/webhdfs"
                               ],
                               "shortDesc": "Web HDFS",
                               "type": "API",
                               "version": ""
                           }
                       ]
                   },
                   "uiServices": {
                       "service": [
                           {
                               "context": "/hbase/webui/master?&host={{HOST}}&port={{PORT}}",
                               "description": "The HBase Master web UI is a simple but useful tool, to get an overview of the current status of the cluster...",
                               "samples": {
                                   "sample": []
                               },
                               "serviceName": "HBASEUI",
                               "serviceUrls": [
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost1&port=8889",
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost10&port=8889",
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost11&port=8889",
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost12&port=8889",
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost13&port=8889",
                                   ...
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost6&port=8889",
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost7&port=8889",
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost8&port=8889",
                                   "https://localhost:8443/gateway/sandbox/hbase/webui/master?&host=localhost9&port=8889"
                               ],
                               "shortDesc": "HBase UI",
                               "type": "UI",
                               "version": "2.1.0"
                           },
                           {
                               "context": "/hdfs/?host={{BACKEND_HOST}}",
                               "description": "The namenode UI or the namenode web interface is used to monitor the status of the namenode.",
                               "samples": {
                                   "sample": []
                               },
                               "serviceName": "HDFSUI",
                               "serviceUrls": [
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost10:8889",
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost11:8889",
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost12:8889",
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost13:8889",
                                   ...
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost6:8889",
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost7:8889",
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost8:8889",
                                   "https://localhost:8443/gateway/sandbox/hdfs/?host=http://localhost9:8889"
                               ],
                               "shortDesc": "HDFS Namenode UI",
                               "type": "UI",
                               "version": ""
                           },
                           {
                               "context": "/hue/",
                               "description": "Hue UI is a Web interface for analyzing data with Apache Hadoop",
                               "samples": {
                                   "sample": []
                               },
                               "serviceName": "HUE",
                               "serviceUrls": [
                                   "https://localhost:8443/gateway/sandbox/hue/"
                               ],
                               "shortDesc": "Hue UI",
                               "type": "UI",
                               "version": ""
                           },
                           {
                               "context": "/impalaui?scheme={{SCHEME}}&host={{HOST}}&port={{PORT}}",
                               "description": "Each of the Impala daemons (impalad, statestored, and catalogd) includes a built-in web server that displays diagnostic and status information.",
                               "samples": {
                                   "sample": []
                               },
                               "serviceName": "IMPALAUI",
                               "serviceUrls": [
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost1&port=8889",
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost10&port=8889",
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost11&port=8889",
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost12&port=8889",
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost13&port=8889",
                                   ...
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost6&port=8889",
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost7&port=8889",
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost8&port=8889",
                                   "https://localhost:8443/gateway/sandbox/impalaui?scheme=http&host=localhost9&port=8889"
                               ],
                               "shortDesc": "Impala UI",
                               "type": "UI",
                               "version": ""
                           }
                       ]
                   }
               }
           ]
       }
   }
   ```
   
   2. The Knox Home page is also modified: if a service role has more than one service URL, the number of instances is visible next to the service role name within the `Topologies` section. Clicking the service icon or the service name will result in a modal window that lists all instances of the given service role.
   I also added a filter box where end-users can search by hostname and/or port to make it easier for them to narrow down those instances precisely for what they are looking for.
   <img width="1775" alt="Screenshot 2024-01-31 at 10 56 22" src="https://github.com/apache/knox/assets/34065904/3dda9ddf-7314-41f3-8198-e0729cf7d5d1">
   <img width="1777" alt="Screenshot 2024-01-31 at 10 59 15" src="https://github.com/apache/knox/assets/34065904/8bfb95dc-4b18-4feb-9945-f7974dbc766c">
   
   ## How was this patch tested?
   
   Updated existing unit tests to cover the changes in `ServiceModel` and tested the new feature E2E locally (see sample JSON response and the new Home page layout above).




Issue Time Tracking
-------------------

            Worklog Id:     (was: 902772)
    Remaining Estimate: 0h
            Time Spent: 10m

> Group UI services of the same type
> ----------------------------------
>
>                 Key: KNOX-3003
>                 URL: https://issues.apache.org/jira/browse/KNOX-3003
>             Project: Apache Knox
>          Issue Type: Improvement
>          Components: Homepage
>    Affects Versions: 2.0.0, 1.6.0, 1.6.1
>            Reporter: Sandor Molnar
>            Assignee: Sandor Molnar
>            Priority: Critical
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Currently, if a UI service has multiple instances with different URLs in a given topology, that UI service will be listed on the Knox Home page as many times as the number of URLs it has. This makes the user experience a lot worse if we are talking about hundreds of occurrences of this case.
> We learned from some real-life use cases that IMPALA is one of these services, and there are 1000+ node clusters out there with more than 100 Impala Daemon roles. In that particular case, the Knox Home page was a mess.
> To address this issue, the following UI improvement should be implemented:
>  * if a UI service has more than one URL in the given topology, individual tiles should not be displayed. Instead, one "group" tile must be added with a clear indication this is a group of URLs of the same service.
>  * clicking the group tile should open a modal window with separate tiles for each service URL
>  * in this modal window, a search field will be added to give our end-users the chance to narrow down results (by hostname for instance)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)