Explorar o código

HUE-9127 [frontend] Add ability to set a custom dashboard app

Johan Ahlen %!s(int64=5) %!d(string=hai) anos
pai
achega
58c1dea2a1

+ 7 - 0
desktop/core/src/desktop/conf.py

@@ -1907,6 +1907,13 @@ ENABLE_CONNECTORS = Config(
   help=_('Turn on the Connector configuration and usage.')
 )
 
+CUSTOM_DASHBOARD_URL = Config(
+  key='custom_dashboard_url',
+  default='',
+  type=coerce_string,
+  help=_('Custom URL to use for the dashboard application and editor result charting')
+)
+
 CONNECTORS_BLACKLIST = Config(
   key='connectors_blacklist',
   default='',

+ 15 - 0
desktop/core/src/desktop/js/apps/notebook/snippet.js

@@ -2748,6 +2748,21 @@ class Snippet {
     self.refreshHistory = notebook.fetchHistory;
   }
 
+  dashboardRedirect() {
+    const statement =
+      this.selectedStatement() ||
+      (this.positionStatement() && this.positionStatement().statement) ||
+      this.statement_raw();
+    window.open(
+      window.CUSTOM_DASHBOARD_URL +
+        '?db=' +
+        window.encodeURIComponent(this.database()) +
+        '&query=' +
+        window.encodeURIComponent(statement),
+      '_blank'
+    );
+  }
+
   renderMarkdown() {
     return this.statement_raw().replace(/([^$]*)([$]+[^$]*[$]+)?/g, (a, textRepl, code) => {
       return markdown.toHTML(textRepl).replace(/^<p>|<\/p>$/g, '') + (code ? code : '');

+ 13 - 0
desktop/core/src/desktop/js/ko/components/ko.sidebar.js

@@ -360,6 +360,19 @@ class Sidebar {
 
         ['editor', 'dashboard', 'scheduler', 'sdkapps'].forEach(appName => {
           const config = appConfig[appName];
+          if (window.CUSTOM_DASHBOARD_URL && appName === 'dashboard') {
+            appsItems.push(
+              new SidebarItem({
+                displayName: I18n('Dashboard'),
+                click: () => {
+                  window.open(window.CUSTOM_DASHBOARD_URL, '_blank');
+                },
+                icon: 'dashboard',
+                type: 'dashboard'
+              })
+            );
+            return;
+          }
           if (config && config.interpreters.length) {
             if (config.interpreters.length === 1) {
               appsItems.push(

+ 4 - 2
desktop/core/src/desktop/templates/global_js_constants.mako

@@ -19,8 +19,9 @@
 
   from desktop import conf
   from desktop.auth.backend import is_admin, is_org_admin
-  from desktop.conf import APP_SWITCHER_ALTUS_BASE_URL, APP_SWITCHER_MOW_BASE_URL, DISPLAY_APP_SWITCHER, IS_K8S_ONLY, IS_MULTICLUSTER_ONLY, \
-      USE_DEFAULT_CONFIGURATION, USE_NEW_SIDE_PANELS, VCS, ENABLE_GIST, ENABLE_LINK_SHARING
+  from desktop.conf import APP_SWITCHER_ALTUS_BASE_URL, APP_SWITCHER_MOW_BASE_URL, CUSTOM_DASHBOARD_URL, \
+      DISPLAY_APP_SWITCHER, IS_K8S_ONLY, IS_MULTICLUSTER_ONLY, USE_DEFAULT_CONFIGURATION, USE_NEW_SIDE_PANELS, \
+      VCS, ENABLE_GIST, ENABLE_LINK_SHARING
   from desktop.models import hue_version, _get_apps, get_cluster_config
 
   from beeswax.conf import DOWNLOAD_BYTES_LIMIT, DOWNLOAD_ROW_LIMIT, LIST_PARTITIONS_LIMIT, CLOSE_SESSIONS
@@ -77,6 +78,7 @@
   window.HAS_MULTI_CLUSTER = '${ get_cluster_config(user)['has_computes'] }' === 'True';
 
   window.HAS_SQL_DASHBOARD = '${ HAS_SQL_ENABLED.get() }' === 'True';
+  window.CUSTOM_DASHBOARD_URL = '${ CUSTOM_DASHBOARD_URL.get() }';
 
   window.DROPZONE_HOME_DIR = '${ user.get_home_directory() if not user.is_anonymous() else "" }';
 

+ 7 - 0
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -1841,6 +1841,12 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
       </a>
     </div>
 
+    <!-- ko if: window.CUSTOM_DASHBOARD_URL -->
+    <a class="snippet-side-btn" href="javascript: void(0)" data-bind="click: dashboardRedirect.bind($data)" title="${ _('Dashboard') }">
+      <i class="hcha fa-fw hcha-bar-chart"></i>
+    </a>
+    <!-- /ko -->
+    <!-- ko ifnot: window.CUSTOM_DASHBOARD_URL -->
     <div class="dropdown">
       <a class="snippet-side-btn" style="padding-right:0" href="javascript: void(0)" data-bind="css: {'active': $data.showChart }, click: function() { $data.showChart(true); }" >
         <i class="hcha fa-fw hcha-bar-chart" data-bind="visible: chartType() == window.HUE_CHARTS.TYPES.BARCHART" title="${ _('Bars') }"></i>
@@ -1887,6 +1893,7 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
         </li>
       </ul>
     </div>
+    <!-- /ko -->
 
     <div>
       <a class="snippet-side-btn" href="javascript:void(0)" data-bind="click: function(){ huePubSub.publish('chart.hard.reset'); isResultSettingsVisible(! isResultSettingsVisible()) }, css: { 'blue' : isResultSettingsVisible }" title="${ _('Columns') }">