You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2013/08/14 20:56:01 UTC

git commit: AMBARI-2899. NameNode HA Wizard: implement progress popup for tasks on progress pages. (Antonenko Alexander via yusaku)

Updated Branches:
  refs/heads/trunk 8b5583fee -> 1d93addee


AMBARI-2899. NameNode HA Wizard: implement progress popup for tasks on progress pages. (Antonenko Alexander via yusaku)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/1d93adde
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/1d93adde
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/1d93adde

Branch: refs/heads/trunk
Commit: 1d93addee9e89df2a70ea40060274faa74206d16
Parents: 8b5583f
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Wed Aug 14 11:55:16 2013 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Wed Aug 14 11:55:16 2013 -0700

----------------------------------------------------------------------
 .../highAvailability/progress_controller.js     | 40 ++++++++++++++++++--
 ambari-web/app/styles/application.less          | 24 +++++++++---
 .../main/admin/highAvailability/progress.hbs    |  2 +-
 .../admin/highAvailability/progress_view.js     | 17 ++++++++-
 4 files changed, 72 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/1d93adde/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
index 3bf3c94..a6f4a27 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
@@ -27,6 +27,7 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
   currentTaskId: null,
   POLL_INTERVAL: 4000,
   isSubmitDisabled: true,
+  serviceTimestamp: null,
 
   loadStep: function () {
     this.clearStep();
@@ -48,17 +49,41 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
         status: 'PENDING',
         id: i,
         command: commands[i],
-        showRetry: false
+        showRetry: false,        
+        name: Em.I18n.t('admin.highAvailability.wizard.step' + currentStep + '.task' + i + '.title'),
+        displayName: Em.I18n.t('admin.highAvailability.wizard.step' + currentStep + '.task' + i + '.title'),
+        progress: 0,
+        isRunning: false,
+        hosts: []
       }));
     }
   },
 
+  services: function(){
+    return this.get('tasks');
+  }.property('tasks'),
+
   loadTasks: function () {
     //load and set tasks statuses form server
   },
 
   setTaskStatus: function (taskId, status) {
-    this.get('tasks').findProperty('id', taskId).set('status', status)
+    this.get('tasks').findProperty('id', taskId).set('status', status);
+  },
+
+  setTaskLogs: function (taskId, tasks) {
+    var hosts = [];
+    tasks.forEach(function (task) {
+      hosts.push(
+       {
+          name: task.Tasks.host_name,
+          publicName: task.Tasks.host_name,
+          logTasks: [task]
+        }
+      );
+    });
+    this.get('tasks').findProperty('id', taskId).set('hosts', hosts);
+    this.set('serviceTimestamp', new Date().getTime());
   },
 
   showRetry: function (taskId) {
@@ -212,18 +237,27 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
       if (!tasks.someProperty('Tasks.status', 'PENDING') && !tasks.someProperty('Tasks.status', 'QUEUED') && !tasks.someProperty('Tasks.status', 'IN_PROGRESS')) {
         if (tasks.someProperty('Tasks.status', 'FAILED')) {
           this.setTaskStatus(currentTaskId, 'FAILED');
+          this.showRetry(currentTaskId);
         } else {
           this.setTaskStatus(currentTaskId, 'COMPLETED');
         }
         this.set('currentRequestIds', []);
       } else {
-        var progress = Math.round((tasks.filterProperty('Tasks.status', 'COMPLETED').length + tasks.filterProperty('Tasks.status', 'IN_PROGRESS').length / 2) / tasks.length * 100);
+        var actionsPerHost = tasks.length;
+        var completedActions = tasks.filterProperty('Tasks.status', 'COMPLETED').length
+          + tasks.filterProperty('Tasks.status', 'FAILED').length
+          + tasks.filterProperty('Tasks.status', 'ABORTED').length
+          + tasks.filterProperty('Tasks.status', 'TIMEDOUT').length;
+        var queuedActions = tasks.filterProperty('Tasks.status', 'QUEUED').length;
+        var inProgressActions = tasks.filterProperty('Tasks.status', 'IN_PROGRESS').length;
+        var progress = Math.ceil(((queuedActions * 0.09) + (inProgressActions * 0.35) + completedActions ) / actionsPerHost * 100);
         this.get('tasks').findProperty('id', currentTaskId).set('progress', progress);
         this.setTaskStatus(currentTaskId, 'IN_PROGRESS');
         window.setTimeout(function () {
           self.doPolling()
         }, self.POLL_INTERVAL);
       }
+      this.setTaskLogs(currentTaskId, tasks);
       this.set('logs', []);
     }
   },

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/1d93adde/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 90dbd5b..67be4f2 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -452,16 +452,28 @@ h1 {
       i {
         font-size: 20px;
       }
+      .not-active-link{
+        text-decoration: none;
+        pointer-events: none;
+        color: black;
+        cursor: default;
+      }
+      .active-link{
+        pointer-events: auto;
+        color: #0088cc;
+        cursor: pointer;
+      }
+      .retry {
+        cursor: pointer;
+        margin-left: 15px;
+        i {
+          font-size: 14px;
+        }
+      }
     }
     .row {
       margin-left: 0;
     }
-    .retry {
-      margin-left: 15px;
-      i {
-        font-size: 14px;
-      }
-    }
   }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/1d93adde/ambari-web/app/templates/main/admin/highAvailability/progress.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/highAvailability/progress.hbs b/ambari-web/app/templates/main/admin/highAvailability/progress.hbs
index 48c8f02..c97d169 100644
--- a/ambari-web/app/templates/main/admin/highAvailability/progress.hbs
+++ b/ambari-web/app/templates/main/admin/highAvailability/progress.hbs
@@ -23,7 +23,7 @@
   {{#view view.taskView contentBinding="task"}}
   <div class="item">
     <i {{bindAttr class="view.icon view.iconColor"}}></i>
-    <a href="javascript:void(0)">{{task.title}}</a>
+    <a {{bindAttr class="view.linkClass"}} {{action "hostsLogPopup" task target="view"}} >{{task.title}}</a>
     {{#if task.showRetry}}
     <a {{action retryTask target="controller"}} class="btn btn-primary retry">
       <i class="icon-repeat icon-white"></i>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/1d93adde/ambari-web/app/views/main/admin/highAvailability/progress_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/highAvailability/progress_view.js b/ambari-web/app/views/main/admin/highAvailability/progress_view.js
index 55d157b..98c36c6 100644
--- a/ambari-web/app/views/main/admin/highAvailability/progress_view.js
+++ b/ambari-web/app/views/main/admin/highAvailability/progress_view.js
@@ -30,6 +30,7 @@ App.HighAvailabilityProgressPageView = Em.View.extend({
   taskView: Em.View.extend({
     icon: '',
     iconColor: '',
+    linkClass: '',
 
     didInsertElement: function () {
       this.onStatus();
@@ -40,6 +41,7 @@ App.HighAvailabilityProgressPageView = Em.View.extend({
     }.property('content.progress'),
 
     onStatus: function () {
+      this.set('linkClass', 'active-link');
       if (this.get('content.status') === 'IN_PROGRESS') {
         this.set('icon', 'icon-cog');
         this.set('iconColor', 'text-info');
@@ -52,11 +54,24 @@ App.HighAvailabilityProgressPageView = Em.View.extend({
       } else {
         this.set('icon', 'icon-cog');
         this.set('iconColor', '');
+        this.set('linkClass', 'not-active-link');
       }
     }.observes('content.status'),
 
     showProgressBar: function () {
       return this.get('content.status') === "IN_PROGRESS";
-    }.property('content.status')
+    }.property('content.status'),
+
+    /**
+     * open popup with list of hosts, that associated to service
+     * @param event
+     */
+    hostsLogPopup: function(event){
+      if(event.contexts[0].linkClass != "not-active-link"){
+        var serviceName = event.contexts[0].title;
+        var controller = this.get("controller");
+        App.HostPopup.initPopup(serviceName, controller);
+      }
+    }
   })
 });