This is an automated email from the ASF dual-hosted git repository.

atkach pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new fd4176e  AMBARI-23358 Service page layout updates
fd4176e is described below

commit fd4176e7d698d6ec31ae91ac9a266643b16ac670
Author: Andrii Tkach <[email protected]>
AuthorDate: Mon Mar 26 15:12:21 2018 +0300

    AMBARI-23358 Service page layout updates
---
 ambari-web/app/assets/index.html                   |   2 +-
 ambari-web/app/messages.js                         |   1 +
 ambari-web/app/styles/application.less             |  10 +-
 .../templates/main/alerts/definition_details.hbs   | 161 +++++++++++----------
 .../main/charts/heatmap/heatmap_host_detail.hbs    |   4 +
 .../app/views/common/widget/heatmap_widget_view.js |   2 +-
 .../app/views/main/charts/heatmap/heatmap_host.js  |  35 +++--
 .../common/widget/heatmap_widget_view_test.js      |   4 +-
 .../views/main/charts/heatmap/heatmap_host_test.js |  40 ++++-
 9 files changed, 161 insertions(+), 98 deletions(-)

diff --git a/ambari-web/app/assets/index.html b/ambari-web/app/assets/index.html
index efd3c64..539a3e2 100644
--- a/ambari-web/app/assets/index.html
+++ b/ambari-web/app/assets/index.html
@@ -44,7 +44,7 @@
     <!-- ApplicationView -->
     </div>
     <footer>
-        <div class="container">
+        <div class="container footer-links">
             <a data-qa="license-link" 
href="http://www.apache.org/licenses/LICENSE-2.0"; target="_blank">Licensed 
under the Apache License, Version 2.0</a>.<br>
             <a data-qa="third-party-link" href="/licenses/NOTICE.txt" 
target="_blank">See third-party tools/resources that Ambari uses and their 
respective authors</a>
          </div>
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 3efe86a..9b30f8f 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1204,6 +1204,7 @@ Em.I18n.translations = {
   'alerts.definition.details.notification': 'Notification',
   'alerts.definition.details.noAlerts': 'No alert instances to display',
   'alerts.definition.details.configs.thresholdsErrorMsg': 'Critical threshold 
should be larger than warning threshold',
+  'alerts.definition.details.infoSection': 'Alert Info',
 
   'alerts.notifications.error.email': 'Must be a valid email address',
   'alerts.notifications.error.integer': 'Must be an integer',
diff --git a/ambari-web/app/styles/application.less 
b/ambari-web/app/styles/application.less
index 0d70ce4..43415dc 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -79,6 +79,9 @@ footer {
   color: #666;
   margin-top: -1 * @footer-height - 1;
   height: @footer-height - 60px;
+  .footer-links {
+    font-size: @smaller-font-size;
+  }
 }
 
 .editable-list-container {
@@ -388,6 +391,11 @@ table.diff {
   }
 }
 
+.row.no-vertical-padding {
+  padding-top: 0;
+  padding-bottom: 0;
+}
+
 .ru-badge {
   text-align: center;
   a:hover {
@@ -853,7 +861,7 @@ a:focus {
   }
 
   .col-md-3 {
-    min-height: 100px;
+    min-height: 80px;
     margin-left: 2px;
     min-width: 180px;
   }
diff --git a/ambari-web/app/templates/main/alerts/definition_details.hbs 
b/ambari-web/app/templates/main/alerts/definition_details.hbs
index 6991efe..7423cb0 100644
--- a/ambari-web/app/templates/main/alerts/definition_details.hbs
+++ b/ambari-web/app/templates/main/alerts/definition_details.hbs
@@ -67,11 +67,11 @@
     <div class="col-md-8">
     <div class="panel panel-default">
       <div class="panel-heading">
-        <div class="row">
-          <div class="pull-left col-md-7">
+        <div class="row no-vertical-padding">
+          <div class="col-md-7">
             <h4 class="panel-title">{{t common.configuration}}</h4>
           </div>
-          <div class="pull-right col-md-5">
+          <div class="col-md-5">
             {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
               {{#unless 
App.router.mainAlertDefinitionConfigsController.canEdit}}
                 <a href="#" {{action editConfigs 
target="App.router.mainAlertDefinitionConfigsController"}} class="pull-right 
btn btn-link">
@@ -101,97 +101,102 @@
 
     {{! Right column }}
     <div class="col-md-4 right-column">
-      <div class="properties-list background-text">
-        <div class="row">
-          <div class="col-md-5 property-name">{{t alerts.table.state}}:</div>
-          <div class="col-md-7">
-            {{#if controller.content.enabled}}
-              {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
-                <a href="#" {{action "toggleState" controller.content 
target="controller"}} {{bindAttr 
class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
+      <div class="panel panel-default">
+        <div class="panel-heading">
+          <h4 class="panel-title">{{t 
alerts.definition.details.infoSection}}</h4>
+        </div>
+        <div class="properties-list background-text panel-body">
+          <div class="row">
+            <div class="col-md-5 property-name">{{t alerts.table.state}}:</div>
+            <div class="col-md-7">
+              {{#if controller.content.enabled}}
+                {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+                  <a href="#" {{action "toggleState" controller.content 
target="controller"}} {{bindAttr 
class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
                   <span
-                      class="enable-disable-button" {{translateAttr 
data-original-title="alerts.table.state.enabled.tooltip"}}>
+                    class="enable-disable-button" {{translateAttr 
data-original-title="alerts.table.state.enabled.tooltip"}}>
                     {{view.enabledDisplay}}
                   </span>
-                </a>
+                  </a>
+                {{else}}
+                  {{view.enabledDisplay}}
+                {{/isAuthorized}}
               {{else}}
-                {{view.enabledDisplay}}
-              {{/isAuthorized}}
-            {{else}}
-              {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
-                <a href="#" {{action "toggleState" controller.content 
target="controller"}} {{bindAttr 
class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
+                {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+                  <a href="#" {{action "toggleState" controller.content 
target="controller"}} {{bindAttr 
class="controller.content.enabled:alert-definition-enable:alert-definition-disable"}}>
                   <span
-                      class="enable-disable-button" {{translateAttr 
data-original-title="alerts.table.state.disabled.tooltip"}}>
+                    class="enable-disable-button" {{translateAttr 
data-original-title="alerts.table.state.disabled.tooltip"}}>
                     {{view.disabledDisplay}}
                   </span>
-                </a>
-              {{else}}
-                {{view.disabledDisplay}}
-              {{/isAuthorized}}
-            {{/if}}
-          </div>
-        </div>
-        {{#if controller.content.serviceDisplayName}}
-          <div class="row">
-            <div class="col-md-5 property-name">{{t common.service}}:</div>
-            <div 
class="col-md-7"><span>{{controller.content.serviceDisplayName}}</span></div>
-          </div>
-        {{/if}}
-        {{#if controller.content.componentNameFormatted}}
-          <div class="row">
-            <div class="col-md-5 property-name">{{t common.component}}:</div>
-            <div 
class="col-md-7">{{controller.content.componentNameFormatted}}</div>
-          </div>
-        {{/if}}
-        <div class="row">
-          <div class="col-md-5 property-name">{{t common.type}}:</div>
-          <div class="col-md-7">
-            <span {{bindAttr class=":type-icon  
controller.content.typeIconClass"}}></span> {{controller.content.type}}
+                  </a>
+                {{else}}
+                  {{view.disabledDisplay}}
+                {{/isAuthorized}}
+              {{/if}}
+            </div>
           </div>
-        </div>
-        {{#if controller.groupsList.length}}
+          {{#if controller.content.serviceDisplayName}}
+            <div class="row">
+              <div class="col-md-5 property-name">{{t common.service}}:</div>
+              <div 
class="col-md-7"><span>{{controller.content.serviceDisplayName}}</span></div>
+            </div>
+          {{/if}}
+          {{#if controller.content.componentNameFormatted}}
+            <div class="row">
+              <div class="col-md-5 property-name">{{t common.component}}:</div>
+              <div 
class="col-md-7">{{controller.content.componentNameFormatted}}</div>
+            </div>
+          {{/if}}
           <div class="row">
-            <div class="col-md-5 property-name">{{t 
alerts.definition.details.groups}}:</div>
+            <div class="col-md-5 property-name">{{t common.type}}:</div>
             <div class="col-md-7">
-              <ul class="list-unstyled">
-                {{#each groupName in controller.groupsList}}
-                  <li>{{groupName}}</li>
-                {{/each}}
-              </ul>
+              <span {{bindAttr class=":type-icon  
controller.content.typeIconClass"}}></span> {{controller.content.type}}
             </div>
           </div>
-        {{/if}}
-        <div class="row">
-          <div class="col-md-5 property-name">{{t 
alerts.table.header.lastTrigger}}:</div>
-          <div 
class="col-md-7">{{controller.content.lastTriggeredFormatted}}</div>
-        </div>
-        {{#unless controller.content.isTypeAggregate}}
+          {{#if controller.groupsList.length}}
+            <div class="row">
+              <div class="col-md-5 property-name">{{t 
alerts.definition.details.groups}}:</div>
+              <div class="col-md-7">
+                <ul class="list-unstyled">
+                  {{#each groupName in controller.groupsList}}
+                    <li>{{groupName}}</li>
+                  {{/each}}
+                </ul>
+              </div>
+            </div>
+          {{/if}}
           <div class="row">
-            <div class="col-md-5 property-name">{{t 
alerts.table.header.repeatTolerance}}:</div>
-            <div class="col-md-7">
-              {{#if controller.content.repeat_tolerance_enabled}}
-                <span>
-                  {{controller.content.repeat_tolerance}}
-                </span>
-              {{else}}
-                <span>
+            <div class="col-md-5 property-name">{{t 
alerts.table.header.lastTrigger}}:</div>
+            <div 
class="col-md-7">{{controller.content.lastTriggeredFormatted}}</div>
+          </div>
+          {{#unless controller.content.isTypeAggregate}}
+            <div class="row">
+              <div class="col-md-5 property-name">{{t 
alerts.table.header.repeatTolerance}}:</div>
+              <div class="col-md-7">
+                {{#if controller.content.repeat_tolerance_enabled}}
+                  <span>
+                    {{controller.content.repeat_tolerance}}
+                  </span>
+                {{else}}
+                  <span>
                   {{controller.globalAlertsRepeatTolerance}}
-                  {{t alerts.table.header.default}}
+                    {{t alerts.table.header.default}}
                 </span>
-              {{/if}}
-              {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
-                <a href="#" {{action editRepeatTolerance target="controller"}} 
class="edit-description-button">
-                  <i class="glyphicon glyphicon-pencil"></i>
-                </a>
-              {{/isAuthorized}}
+                {{/if}}
+                {{#isAuthorized "SERVICE.TOGGLE_ALERTS"}}
+                  <a href="#" {{action editRepeatTolerance 
target="controller"}} class="edit-description-button">
+                    <i class="glyphicon glyphicon-pencil"></i>
+                  </a>
+                {{/isAuthorized}}
+              </div>
             </div>
-          </div>
-        {{/unless}}
-        {{#if controller.content.hasHelpUrl}}
-          <div class="row">
-            <div class="col-md-5 property-name">{{t 
alerts.table.header.helpUrl}}:</div>
-            <div class="col-md-7"><label for=""><a {{bindAttr 
href="controller.content.helpUrl"}} target="_blank">{{t 
common.link}}</a></label></div>
-          </div>
-        {{/if}}
+          {{/unless}}
+          {{#if controller.content.hasHelpUrl}}
+            <div class="row">
+              <div class="col-md-5 property-name">{{t 
alerts.table.header.helpUrl}}:</div>
+              <div class="col-md-7"><label for=""><a {{bindAttr 
href="controller.content.helpUrl"}} target="_blank">{{t 
common.link}}</a></label></div>
+            </div>
+          {{/if}}
+        </div>
       </div>
     </div>
   </div>
diff --git 
a/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs 
b/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs
index c2311e3..e158b64 100644
--- a/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs
+++ b/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs
@@ -24,6 +24,10 @@
   </thead>
   <tbody>
   <tr>
+    <td>{{view.details.metricName}}</td>
+    <td>{{view.details.metricValue}}</td>
+  </tr>
+  <tr>
     <td>{{t common.os}}</td>
     <td>{{view.details.osType}}</td>
   </tr>
diff --git a/ambari-web/app/views/common/widget/heatmap_widget_view.js 
b/ambari-web/app/views/common/widget/heatmap_widget_view.js
index 6fbb7e7..cc2a7c4 100644
--- a/ambari-web/app/views/common/widget/heatmap_widget_view.js
+++ b/ambari-web/app/views/common/widget/heatmap_widget_view.js
@@ -91,7 +91,7 @@ App.HeatmapWidgetView = Em.View.extend(App.WidgetMixin, {
       }
 
       var metricObject = App.MainChartHeatmapMetric.create({
-        name: this.get('content.displayName'),
+        name: this.get('content.widgetName'),
         units: this.get('content.properties.display_unit'),
         maximumValue: this.get('controller.inputMaximum'),
         hostNames: hostNames,
diff --git a/ambari-web/app/views/main/charts/heatmap/heatmap_host.js 
b/ambari-web/app/views/main/charts/heatmap/heatmap_host.js
index b324570..78c1970 100644
--- a/ambari-web/app/views/main/charts/heatmap/heatmap_host.js
+++ b/ambari-web/app/views/main/charts/heatmap/heatmap_host.js
@@ -15,9 +15,9 @@
  * the License.
  */
 
-var date = require('utils/date/date');
-
-var App = require('app');
+const date = require('utils/date/date');
+const numberUtils = require('utils/number_utils');
+const App = require('app');
 
 App.MainChartsHeatmapHostView = Em.View.extend({
   templateName: require('templates/main/charts/heatmap/heatmap_host'),
@@ -70,6 +70,25 @@ App.MainChartsHeatmapHostView = Em.View.extend({
   },
 
   /**
+   *
+   * @param {string} number
+   * @param {string} units
+   * @returns {string}
+   */
+  convertValue: function(number, units) {
+    if (Number.isFinite(Number(number)) && Number(number) > 0) {
+      if (units === 'MB') {
+        return (Number(number) / numberUtils.BYTES_IN_MB).toFixed(2) + units;
+      } else if (units === 'ms') {
+        return date.timingFormat(number);
+      } else {
+        return number + units;
+      }
+    }
+    return number;
+  },
+
+  /**
    * get relative usage of metric in percents
    * @param {number} total
    * @param {number} free
@@ -143,14 +162,10 @@ App.MainChartsHeatmapHostView = Em.View.extend({
         if (Em.isNone(value)) {
           value = this.t('charts.heatmap.unknown');
         } else {
-          if (metricName === 'Garbage Collection Time') {
-            value = date.timingFormat(parseInt(value));
+          if (isNaN(Number(value))) {
+            value = this.t('charts.heatmap.unknown');
           } else {
-            if (isNaN(value)) {
-              value = this.t('charts.heatmap.unknown');
-            } else {
-              value = value + selectedMetric.get('units');
-            }
+            value = this.convertValue(value, selectedMetric.get('units'));
           }
         }
         view.set('details.metricName', metricName);
diff --git a/ambari-web/test/views/common/widget/heatmap_widget_view_test.js 
b/ambari-web/test/views/common/widget/heatmap_widget_view_test.js
index 7ed9256..5af6e66 100644
--- a/ambari-web/test/views/common/widget/heatmap_widget_view_test.js
+++ b/ambari-web/test/views/common/widget/heatmap_widget_view_test.js
@@ -124,7 +124,7 @@ describe('App.HeatmapWidgetView', function () {
         isLoaded: true,
         racks: [],
         content: Em.Object.create({
-          displayName: 'm1',
+          widgetName: 'm1',
           properties: {
             display_unit: 'u1'
           }
@@ -152,7 +152,7 @@ describe('App.HeatmapWidgetView', function () {
           isLoaded: true
         }],
         content: Em.Object.create({
-          displayName: 'm1',
+          widgetName: 'm1',
           properties: {
             display_unit: 'u1'
           }
diff --git a/ambari-web/test/views/main/charts/heatmap/heatmap_host_test.js 
b/ambari-web/test/views/main/charts/heatmap/heatmap_host_test.js
index e7fe267..3f7dc62 100644
--- a/ambari-web/test/views/main/charts/heatmap/heatmap_host_test.js
+++ b/ambari-web/test/views/main/charts/heatmap/heatmap_host_test.js
@@ -430,14 +430,14 @@ describe('App.MainChartsHeatmapHostView', function () {
     var viewObject;
 
     beforeEach(function () {
-      sinon.stub(date, 'timingFormat').returns('time');
+      sinon.stub(view, 'convertValue').returns('converted');
       viewObject = Em.Object.create({
         details: {}
       });
     });
 
     afterEach(function () {
-      date.timingFormat.restore();
+      view.convertValue.restore();
     });
 
     it("selected metric is null", function () {
@@ -470,14 +470,15 @@ describe('App.MainChartsHeatmapHostView', function () {
     it("metric name is 'Garbage Collection Time'", function () {
       view.set('controller.selectedMetric', Em.Object.create({
         name: 'Garbage Collection Time',
+        units: 'ms',
         hostToValueMap: {
-          host1: 'val'
+          host1: '111'
         }
       }));
       view.setMetric(viewObject, {hostName: 'host1'});
       expect(viewObject.get('details')).to.eql({
         metricName: 'Garbage Collection Time',
-        metricValue: 'time'
+        metricValue: 'converted'
       });
     });
 
@@ -506,8 +507,37 @@ describe('App.MainChartsHeatmapHostView', function () {
       view.setMetric(viewObject, {hostName: 'host1'});
       expect(viewObject.get('details')).to.eql({
         metricName: 'm1',
-        metricValue: '10mb'
+        metricValue: 'converted'
       });
     });
   });
+
+  describe('#convertValue', function() {
+    beforeEach(function() {
+      sinon.stub(date, 'timingFormat').returns('time');
+    });
+    afterEach(function() {
+      date.timingFormat.restore();
+    });
+
+    it('should return null', function() {
+      expect(view.convertValue(null, null)).to.be.null;
+    });
+
+    it('should return 40', function() {
+      expect(view.convertValue('40', '')).to.be.equal('40');
+    });
+
+    it('should return 40%', function() {
+      expect(view.convertValue('40', '%')).to.be.equal('40%');
+    });
+
+    it('should return 1MB', function() {
+      expect(view.convertValue('1048576', 'MB')).to.be.equal('1.00MB');
+    });
+
+    it('should return time', function() {
+      expect(view.convertValue('1', 'ms')).to.be.equal('time');
+    });
+  });
 });

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to