소스 검색

AMBARI-9059 Show Upgrade progress in top nav. (ababiichuk)

aBabiichuk 10 년 전
부모
커밋
c1fd867e29

+ 17 - 0
ambari-web/app/app.js

@@ -47,6 +47,23 @@ module.exports = Em.Application.create({
    */
   upgradeState: 'INIT',
 
+  /**
+   * flag is true when upgrade process is running
+   * @returns {boolean}
+   */
+  upgradeInProgress: function() {
+    return ["IN_PROGRESS"].contains(this.get('upgradeState'));
+  }.property('upgradeState'),
+
+  /**
+   * flag is true when upgrade process is waiting for user action
+   * to procced, retry, perform manual steps etc.
+   * @returns {boolean}
+   */
+  upgradeHolding: function() {
+    return this.get('upgradeState').contains("HOLDING");
+  }.property('upgradeState'),
+
   /**
    * compute user access rights by permission type
    * types:

+ 219 - 18
ambari-web/app/assets/data/background_operations/list_on_start.json

@@ -1,55 +1,256 @@
 {
-  "href" : "http://192.168.56.101:8080/api/v1/clusters/perf/requests?to=end&page_size=10&fields=Requests",
+  "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests?to=end&page_size=10&fields=Requests&_=1420804171828",
+  "itemTotal" : "10",
   "items" : [
     {
-      "href" : "http://192.168.56.101:8080/api/v1/clusters/c1/requests/12",
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/17",
       "Requests" : {
         "aborted_task_count" : 0,
         "cluster_name" : "c1",
-        "completed_task_count" : 2,
-        "create_time" : 1414410974460,
-        "end_time" : 1414411113883,
+        "completed_task_count" : 3,
+        "create_time" : 1420732929053,
+        "end_time" : 1420733166162,
         "exclusive" : false,
         "failed_task_count" : 0,
-        "id" : 12,
+        "id" : 17,
         "inputs" : null,
         "operation_level" : null,
         "progress_percent" : 100.0,
         "queued_task_count" : 0,
-        "request_context" : "Install Services",
+        "request_context" : "Distribute repositories/install packages",
         "request_schedule" : null,
         "request_status" : "COMPLETED",
         "resource_filters" : [ ],
-        "start_time" : 1414410974489,
-        "task_count" : 2,
+        "start_time" : 1420732929071,
+        "task_count" : 3,
         "timed_out_task_count" : 0,
         "type" : "INTERNAL_REQUEST"
       }
     },
     {
-      "href" : "http://192.168.56.101:8080/api/v1/clusters/c1/requests/13",
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/18",
       "Requests" : {
         "aborted_task_count" : 0,
         "cluster_name" : "c1",
-        "completed_task_count" : 2,
-        "create_time" : 1414411114097,
-        "end_time" : 1414411129173,
+        "completed_task_count" : 3,
+        "create_time" : 1420741144265,
+        "end_time" : 1420741162446,
         "exclusive" : false,
         "failed_task_count" : 0,
-        "id" : 13,
+        "id" : 18,
         "inputs" : null,
         "operation_level" : null,
         "progress_percent" : 100.0,
         "queued_task_count" : 0,
-        "request_context" : "Start Added Services",
+        "request_context" : "Distribute repositories/install packages",
         "request_schedule" : null,
         "request_status" : "COMPLETED",
         "resource_filters" : [ ],
-        "start_time" : 1414411114179,
-        "task_count" : 2,
+        "start_time" : 1420741144295,
+        "task_count" : 3,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/19",
+      "Requests" : {
+        "aborted_task_count" : 20,
+        "cluster_name" : "c1",
+        "completed_task_count" : 21,
+        "create_time" : 1420741278556,
+        "end_time" : 1420742042708,
+        "exclusive" : false,
+        "failed_task_count" : 1,
+        "id" : 19,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 100.0,
+        "queued_task_count" : 0,
+        "request_context" : "Upgrading to 2.2.4.3-885",
+        "request_schedule" : null,
+        "request_status" : "FAILED",
+        "resource_filters" : [ ],
+        "start_time" : 1420741278615,
+        "task_count" : 21,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/20",
+      "Requests" : {
+        "aborted_task_count" : 20,
+        "cluster_name" : "c1",
+        "completed_task_count" : 21,
+        "create_time" : 1420742881366,
+        "end_time" : 1420742911600,
+        "exclusive" : false,
+        "failed_task_count" : 1,
+        "id" : 20,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 100.0,
+        "queued_task_count" : 0,
+        "request_context" : "Upgrading to 2.2.0.1-885",
+        "request_schedule" : null,
+        "request_status" : "FAILED",
+        "resource_filters" : [ ],
+        "start_time" : 1420742881426,
+        "task_count" : 21,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/21",
+      "Requests" : {
+        "aborted_task_count" : 20,
+        "cluster_name" : "c1",
+        "completed_task_count" : 20,
+        "create_time" : 1420743882836,
+        "end_time" : 1420801978445,
+        "exclusive" : false,
+        "failed_task_count" : 0,
+        "id" : 21,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 98.57142857142857,
+        "queued_task_count" : 0,
+        "request_context" : "Upgrading to 2.2.0.1-885",
+        "request_schedule" : null,
+        "request_status" : "HOLDING_FAILED",
+        "resource_filters" : [ ],
+        "start_time" : 1420743882894,
+        "task_count" : 21,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/22",
+      "Requests" : {
+        "aborted_task_count" : 0,
+        "cluster_name" : "c1",
+        "completed_task_count" : 3,
+        "create_time" : 1420801929946,
+        "end_time" : 1420801992902,
+        "exclusive" : false,
+        "failed_task_count" : 0,
+        "id" : 22,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 100.0,
+        "queued_task_count" : 0,
+        "request_context" : "Distribute repositories/install packages",
+        "request_schedule" : null,
+        "request_status" : "COMPLETED",
+        "resource_filters" : [ ],
+        "start_time" : 1420801978494,
+        "task_count" : 3,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/23",
+      "Requests" : {
+        "aborted_task_count" : 20,
+        "cluster_name" : "c1",
+        "completed_task_count" : 21,
+        "create_time" : 1420802322402,
+        "end_time" : 1420802372784,
+        "exclusive" : false,
+        "failed_task_count" : 1,
+        "id" : 23,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 100.0,
+        "queued_task_count" : 0,
+        "request_context" : "Upgrading to 2.2.0-2041",
+        "request_schedule" : null,
+        "request_status" : "FAILED",
+        "resource_filters" : [ ],
+        "start_time" : 1420802322463,
+        "task_count" : 21,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/24",
+      "Requests" : {
+        "aborted_task_count" : 0,
+        "cluster_name" : "c1",
+        "completed_task_count" : 3,
+        "create_time" : 1420802446657,
+        "end_time" : 1420802467535,
+        "exclusive" : false,
+        "failed_task_count" : 0,
+        "id" : 24,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 100.0,
+        "queued_task_count" : 0,
+        "request_context" : "Distribute repositories/install packages",
+        "request_schedule" : null,
+        "request_status" : "COMPLETED",
+        "resource_filters" : [ ],
+        "start_time" : 1420802446679,
+        "task_count" : 3,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/25",
+      "Requests" : {
+        "aborted_task_count" : 20,
+        "cluster_name" : "c1",
+        "completed_task_count" : 21,
+        "create_time" : 1420802506244,
+        "end_time" : 1420802526532,
+        "exclusive" : false,
+        "failed_task_count" : 1,
+        "id" : 25,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 100.0,
+        "queued_task_count" : 0,
+        "request_context" : "Upgrading to 2.2.0-2041",
+        "request_schedule" : null,
+        "request_status" : "FAILED",
+        "resource_filters" : [ ],
+        "start_time" : 1420802506371,
+        "task_count" : 21,
+        "timed_out_task_count" : 0,
+        "type" : "INTERNAL_REQUEST"
+      }
+    },
+    {
+      "href" : "http://162.216.151.112:8080/api/v1/clusters/c1/requests/26",
+      "Requests" : {
+        "aborted_task_count" : 0,
+        "cluster_name" : "c1",
+        "completed_task_count" : 9,
+        "create_time" : 1420802576635,
+        "end_time" : -1,
+        "exclusive" : false,
+        "failed_task_count" : 2,
+        "id" : 26,
+        "inputs" : null,
+        "operation_level" : null,
+        "progress_percent" : 42.857142857142854,
+        "queued_task_count" : 0,
+        "request_context" : "Upgrading to 2.2.1.0-2191",
+        "request_schedule" : null,
+        "request_status" : "FAILED",
+        "resource_filters" : [ ],
+        "start_time" : 1420802576700,
+        "task_count" : 21,
         "timed_out_task_count" : 0,
         "type" : "INTERNAL_REQUEST"
       }
     }
   ]
-}
+}

+ 13 - 0
ambari-web/app/controllers/global/background_operations_controller.js

@@ -188,6 +188,16 @@ App.BackgroundOperationsController = Em.Controller.extend({
     this.set('serviceTimestamp', App.dateTime());
   },
 
+  /**
+   * returns true if it's upgrade equest
+   * use this flag to exclude upgrade requests from bgo
+   * @param {object} request
+   * @returns {boolean}
+   */
+  isUpgradeRequest: function(request) {
+    var context = Em.get(request, 'Requests.request_context');
+    return context ? context.toLowerCase().contains('upgrading') : false;
+  },
   /**
    * Prepare, received from server, requests for host component popup
    * @param data
@@ -199,6 +209,9 @@ App.BackgroundOperationsController = Em.Controller.extend({
     var countGot = data.itemTotal;
    
     data.items.forEach(function (request) {
+      if (this.isUpgradeRequest(request)) {
+        return;
+      }
       var rq = this.get("services").findProperty('id', request.Requests.id);
       var isRunning = this.isRequestRunning(request);
       var requestParams = this.parseRequestContext(request.Requests.request_context);

+ 2 - 0
ambari-web/app/messages.js

@@ -44,6 +44,8 @@ Em.I18n.translations = {
   'app.aboutAmbari.getInvolved': 'Get involved!',
   'app.aboutAmbari.version': 'Version',
   'app.aboutAmbari.licensed': 'Licensed under the Apache License, Version 2.0',
+  'app.upgrade.inProgress': 'Upgrade: In Process',
+  'app.upgrade.holding': 'Upgrade: Action Required',
 
   'apply':'apply',
   'and':'and',

+ 47 - 0
ambari-web/app/styles/application.less

@@ -22,6 +22,25 @@
 @space-m: 10px;
 @space-l: 20px;
 
+@-webkit-keyframes orangePulse {
+  from { background-color: #fdb82f; }
+  50% { background-color: #fd910e; }
+  to { background-color: #fdb82f; }
+}
+
+@-moz-keyframes orangePulse {
+  from { background-color: #fdb82f; }
+  50% { background-color: #fd910e; }
+  to { background-color: #fdb82f; }
+}
+
+@keyframes orangePulse
+{
+  0% { background-color: #fdb82f; }
+  50% { background-color: #fd910e; }
+  100% { background-color: #fdb82f; }
+}
+
 @-webkit-keyframes greenPulse {
   from { background-color: #118fff; }
   50% { background-color: #006DCC; }
@@ -217,6 +236,34 @@ footer {
         animation-iteration-count: infinite;
       }
 
+      .upgrade-in-progress {
+        text-shadow: none;
+        background-color: #006DCC;
+        -webkit-animation-name: greenPulse;
+        -webkit-animation-duration: 1s;
+        -webkit-animation-iteration-count: infinite;
+        -moz-animation-name: greenPulse;
+        -moz-animation-duration: 1s;
+        -moz-animation-iteration-count: infinite;
+        animation-name: greenPulse;
+        animation-duration: 1s;
+        animation-iteration-count: infinite;
+      }
+
+      .upgrade-holding {
+        text-shadow: none;
+        background-color: @health-status-orange;
+        -webkit-animation-name: orangePulse;
+        -webkit-animation-duration: 1s;
+        -webkit-animation-iteration-count: infinite;
+        -moz-animation-name: orangePulse;
+        -moz-animation-duration: 1s;
+        -moz-animation-iteration-count: infinite;
+        animation-name: orangePulse;
+        animation-duration: 1s;
+        animation-iteration-count: infinite;
+      }
+
     }
     .top-nav-menu.nav {
       display: block;

+ 8 - 0
ambari-web/app/templates/application.hbs

@@ -44,6 +44,14 @@
                   {{allAlertsCount}} {{pluralize allAlertsCount singular="alert" plural="alerts"}}</span>
                 {{/if}}
               {{/with}}
+              {{#if App.upgradeInProgress}}
+                <span class="label upgrade-in-progress" {{action "openUpgradeDialog" target="App.router.mainAdminStackAndUpgradeController"}}>
+                  <i class="icon-cog"></i> {{t app.upgrade.inProgress}}</span>
+              {{/if}}
+              {{#if App.upgradeHolding}}
+                <span class="label upgrade-holding" {{action "openUpgradeDialog" target="App.router.mainAdminStackAndUpgradeController"}}>
+                  <i class="icon-pause"></i> {{t app.upgrade.holding}}</span>
+              {{/if}}
             </a>
           {{else}}
             <a class="logo"><img src="/img/logo-white.png" alt="Apache Ambari" title="Apache Ambari"></a>

+ 34 - 0
ambari-web/test/controllers/global/background_operations_test.js

@@ -153,6 +153,25 @@ describe('App.BackgroundOperationsController', function () {
     });
   });
 
+  describe('#isUpgradeRequest', function() {
+
+    it('defines if request is upgrade task (true)', function() {
+      expect(controller.isUpgradeRequest({Requests: {request_context: "upgrading"}})).to.be.true;
+    });
+
+    it('defines if request is upgrade task (true - with uppercase)', function() {
+      expect(controller.isUpgradeRequest({Requests: {request_context: "UPGRADING"}})).to.be.true;
+    });
+
+    it('defines if request is upgrade task (false)', function() {
+      expect(controller.isUpgradeRequest({Requests: {request_context: "install"}})).to.be.false;
+    });
+
+    it('defines if request is upgrade task (false - invalid param)', function() {
+      expect(controller.isUpgradeRequest({Requests: {}})).to.be.false;
+    });
+  });
+
   describe('#callBackForMostRecent()', function () {
     it('No requests exists', function () {
       var data = {
@@ -184,6 +203,21 @@ describe('App.BackgroundOperationsController', function () {
       expect(controller.get("services").mapProperty('id')).to.eql([1]);
     });
 
+    it('One request that is excluded', function () {
+      var data = {
+        items: [
+          {
+            Requests: {
+              id: 1,
+              request_context: 'upgrading'
+            }
+          }
+        ]
+      };
+      controller.callBackForMostRecent(data);
+      expect(controller.get("allOperationsCount")).to.equal(0);
+      expect(controller.get("services").mapProperty('id')).to.eql([]);
+    });
 
     it('One running request', function () {
       var data = {