Преглед изворни кода

HUE-3281 [responsive] Integrate back the polling of jobs

In order too update:
- the Job counter
- the progress of MR jobs in Hive queries
Romain Rigaux пре 8 година
родитељ
комит
aaccda7

+ 3 - 1
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -77,10 +77,12 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
                 ${ _('Job Browser') }
               </a>
             </li>
-            <li data-bind="css: {'active': interface() === 'apps'}"><a class="pointer" data-bind="click: function(){ interface('apps') }">${ _('Apps') }</a></li>
+            <li data-bind="css: {'active': interface() === 'dashboard'}"><a class="pointer" data-bind="click: function(){ interface('apps') }">${ _('Dashboard') }</a></li>
+            <li data-bind="css: {'active': interface() === 'apps'}"><a class="pointer" data-bind="click: function(){ interface('apps') }">${ _('Jobs') } <div id="jobBrowserCount" class="jobs-badge" style="display:none;">0</div></a></li>
             <li data-bind="css: {'active': interface() === 'workflows'}"><a class="pointer" data-bind="click: function(){ interface('workflows') }">${ _('Workflows') }</a></li>
             <li data-bind="css: {'active': interface() === 'schedules'}"><a class="pointer" data-bind="click: function(){ interface('schedules') }">${ _('Schedules') }</a></li>
             <li data-bind="css: {'active': interface() === 'bundles'}"><a class="pointer" data-bind="click: function(){ interface('bundles') }">${ _('Bundles') }</a></li>
+            <li data-bind="css: {'active': interface() === 'slas'}"><a class="pointer" data-bind="click: function(){ interface('apps') }">${ _('SLAs') }</a></li>
             </ul>
           % if not hiveserver2_impersonation_enabled:
             <div class="pull-right alert alert-warning" style="margin-top: 4px">${ _("Hive jobs are running as the 'hive' user") }</div>

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_coordinator.mako

@@ -137,7 +137,7 @@ ${ layout.menubar(section='coordinators', dashboard=True) }
                 </div>
                 % endif
               </li>
-              <li class="nav-header">${ _('Edit') }</li>
+              <li class="nav-header">${ _('Synchronize') }</li>
               <li class="white">
                 <div class="btn-group" style="margin-left: 0; margin-bottom: 5px">
                   % if has_job_edition_permission(oozie_coordinator, user):

+ 2 - 1
desktop/core/src/desktop/templates/assist.mako

@@ -1406,10 +1406,11 @@ from notebook.conf import ENABLE_QUERY_BUILDER
                 apiHelper: self.apiHelper
               }),
               apiHelper: self.apiHelper,
-              name: '${ _("GIT") }',
+              name: '${ _("Git") }',
               type: 'git',
               icon: 'fa-github',
               minHeight: 50,
+              showNavSearch: false,
               rightAlignIcon: true
             }));
           }

+ 1 - 0
desktop/core/src/desktop/templates/common_header_footer_components.mako

@@ -19,6 +19,7 @@ from django.template.defaultfilters import escape, escapejs
 
 from desktop import conf
 from desktop.lib.i18n import smart_unicode
+
 from metadata.conf import has_optimizer, OPTIMIZER
 %>
 

+ 32 - 1
desktop/core/src/desktop/templates/responsive.mako

@@ -314,7 +314,6 @@ ${ hueIcons.symbols() }
         <li data-bind="click: function () { onePageViewModel.currentApp('jobbrowser') }"><a href="javascript: void(0);">Jobs</a></li>
         <li><a href="javascript: void(0);">HBase</a></li>
         <li><a href="javascript: void(0);">Security</a></li>
-        <li><a href="javascript: void(0);">SLAs</a></li>
         <li class="header">&nbsp;</li>
         <li class="header" style="padding-left: 4px; border-bottom: 1px solid #DDD; padding-bottom: 3px;">${ _('Apps') }</li>
         <li><a href="javascript: void(0);">Custom App 1</a></li>
@@ -1069,6 +1068,38 @@ ${ assist.assistPanel() }
       return topNavViewModel;
     })(onePageViewModel);
 
+    % if 'jobbrowser' in apps:
+      var JB_CHECK_INTERVAL_IN_MILLIS = 30000;
+      var checkJobBrowserStatusIdx = window.setTimeout(checkJobBrowserStatus, 10);
+      var lastJobBrowserRequest = null;
+
+      function checkJobBrowserStatus(){
+        if (lastJobBrowserRequest !== null && lastJobBrowserRequest.readyState < 4) {
+          return;
+        }
+        window.clearTimeout(checkJobBrowserStatusIdx);
+        lastJobBrowserRequest = $.post("/jobbrowser/jobs/", {
+            "format": "json",
+            "state": "running",
+            "user": "${user.username}"
+          },
+          function(data) {
+            if (data != null && data.jobs != null) {
+              huePubSub.publish('jobbrowser.data', data.jobs);
+              if (data.jobs.length > 0){
+                $("#jobBrowserCount").show().text(data.jobs.length);
+              } else {
+                $("#jobBrowserCount").hide();
+              }
+            }
+          checkJobBrowserStatusIdx = window.setTimeout(checkJobBrowserStatus, JB_CHECK_INTERVAL_IN_MILLIS);
+        }).fail(function () {
+          window.clearTimeout(checkJobBrowserStatusIdx);
+        });
+      }
+      huePubSub.subscribe('check.job.browser', checkJobBrowserStatus);
+    % endif
+
     window.hueDebug = {
       viewModel: function (element) {
         return element ? ko.dataFor(element) : window.hueDebug.onePageViewModel;

+ 1 - 1
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -1960,7 +1960,7 @@ var EditorViewModel = (function() {
               self.snippets()[0].queries.unshift(ko.mapping.fromJS(data));
             }
 
-            if (self.coordinatorUuid()) {
+            if (self.coordinatorUuid() && self.schedulerViewModel) {
               self.saveScheduler();
               self.schedulerViewModel.coordinator.refreshParameters();
             }

+ 8 - 3
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -599,10 +599,15 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_
       <div class="tab-pane" id="scheduleTab">
         <!-- ko if: isSaved() -->
         <!-- ko if: schedulerViewModelIsLoaded() && schedulerViewModel.coordinator.isDirty() -->
-        <a data-bind="click: $root.saveNotebook">${ _('Changes not saved') }</a>
+          <a data-bind="click: $root.saveNotebook">${ _('Save changes') }</a>
         <!-- /ko -->
-        <!-- ko if: schedulerViewModelIsLoaded() && ! schedulerViewModel.coordinator.isDirty() -->
-        <a data-bind="click: showSubmitPopup">${ _('Start') }</a>
+        <!-- ko if: schedulerViewModelIsLoaded() && ! schedulerViewModel.coordinator.isDirty() && ! viewSchedulerId()-->
+          <a data-bind="click: showSubmitPopup">${ _('Start') }</a>
+        <!-- /ko -->
+        <!-- ko if: schedulerViewModelIsLoaded() && viewSchedulerId()-->
+          <a data-bind="click: showSubmitPopup">${ _('View') }</a>
+          ##<a data-bind="click: showSubmitPopup">${ _('Synchronize') }</a>
+          <a data-bind="click: showSubmitPopup">${ _('Stop') }</a>
         <!-- /ko -->
         <br>
         <br>