AMBARI-20254. Service Alert Popup - Unexpected User Experience. (Vivek 
Subramanian via yusaku)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 6910263850c504195477a1d67adaa1820646975c
Parents: c5d2d5b
Author: Yusaku Sako <yus...@hortonworks.com>
Authored: Wed Mar 8 11:30:36 2017 -0800
Committer: Yusaku Sako <yus...@hortonworks.com>
Committed: Wed Mar 8 11:30:36 2017 -0800

----------------------------------------------------------------------
 .../controllers/main/service/info/summary.js    | 43 ++++++++------------
 .../app/models/alerts/alert_definition.js       | 10 +++++
 ambari-web/app/styles/alerts.less               | 10 ++++-
 .../main/service/info/service_alert_popup.hbs   | 19 ++++-----
 4 files changed, 44 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/controllers/main/service/info/summary.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/summary.js 
b/ambari-web/app/controllers/main/service/info/summary.js
index b3d7b35..7327255 100644
--- a/ambari-web/app/controllers/main/service/info/summary.js
+++ b/ambari-web/app/controllers/main/service/info/summary.js
@@ -369,7 +369,7 @@ App.MainServiceInfoSummaryController = 
Em.Controller.extend(App.WidgetSectionMix
     return App.ModalPopup.show({
       header: 
Em.I18n.t('services.service.summary.alerts.popup.header').format(context.get('displayName')),
       autoHeight: false,
-      classNames: ['forty-percent-width-modal'],
+      classNames: ['sixty-percent-width-modal'],
       bodyClass: Em.View.extend({
         templateName: 
require('templates/main/service/info/service_alert_popup'),
         classNames: ['service-alerts'],
@@ -377,43 +377,36 @@ App.MainServiceInfoSummaryController = 
Em.Controller.extend(App.WidgetSectionMix
         didInsertElement: function () {
           Em.run.next(this, function () {
             App.tooltip(this.$(".timeago"));
+            App.tooltip(this.$(".definition-latest-text"), {placement: 
'bottom'});
           });
         },
         willDestroyElement:function () {
           this.$(".timeago").tooltip('destroy');
+          this.$(".definition-latest-text").tooltip('destroy');
         },
         alerts: function () {
           var property = context.get('componentName') ? 'componentName' : 
'serviceName';
           var serviceDefinitions = 
this.get('controller.content').filterProperty(property, context.get(property));
           // definitions should be sorted in order: critical, warning, ok, 
unknown, other
-          var definitionTypes = {
-            "isCritical": [],
-            "isWarning": [],
-            "isOK": [],
-            "isUnknown": []
-          };
-          var others = [];
+          var criticalDefinitions = [], warningDefinitions = [], okDefinitions 
= [], unknownDefinitions = [];
           serviceDefinitions.forEach(function (definition) {
-            definition.set('isCollapsed', true);
-            var pushed = false; // make sure each definition gets pushed only 
one time
-            Object.keys(definitionTypes).forEach(function (type) {
-              if (!pushed && definition.get(type)) {
-                definitionTypes[type].push(definition);
-                pushed = true;
-              }
-            });
-            if (!pushed) {
-              others.push(definition);
+            if (definition.get('isCritical')) {
+              criticalDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
+            } else if (definition.get('isWarning')) {
+              warningDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
+            } else if (definition.get('isOK')) {
+              okDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
+            } else if (definition.get('isUnknown')) {
+              unknownDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
             }
           });
-          serviceDefinitions = 
definitionTypes.isCritical.concat(definitionTypes.isWarning, 
definitionTypes.isOK, definitionTypes.isUnknown, others);
-
+          serviceDefinitions = criticalDefinitions.concat(warningDefinitions, 
okDefinitions, unknownDefinitions, serviceDefinitions);
           return serviceDefinitions;
         }.property('controller.content'),
-        onToggleBlock: function (alert) {
-          this.$('#' + alert.context.clientId).toggle('blind', 500);
-          alert.context.toggleProperty('isCollapsed');
-        },
         gotoAlertDetails: function (e) {
           if (e && e.context) {
             this.get('parentView').hide();
@@ -865,4 +858,4 @@ App.MainServiceInfoSummaryController = 
Em.Controller.extend(App.WidgetSectionMix
     App.router.route('main' + event.context.href);
   }
 
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/models/alerts/alert_definition.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/alerts/alert_definition.js 
b/ambari-web/app/models/alerts/alert_definition.js
index 4da7199..d8a6a3f 100644
--- a/ambari-web/app/models/alerts/alert_definition.js
+++ b/ambari-web/app/models/alerts/alert_definition.js
@@ -160,6 +160,16 @@ App.AlertDefinition = DS.Model.extend({
     return text;
   }.property('summary'),
 
+  latestTextSummary: function () {
+    var latestText = this.get('latestText');
+    var ellipsis = '...';
+    var summaryLength = 400;
+    if(latestText.length > summaryLength) {
+      latestText = latestText.substring(0, summaryLength - ellipsis.length) + 
ellipsis;
+    }
+    return latestText;
+  }.property('latestText'),
+
   isAmbariService: Em.computed.equal('service._id', 'AMBARI'),
 
   isAmbariAgentComponent: Em.computed.equal('componentName', 'AMBARI_AGENT'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/styles/alerts.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/alerts.less 
b/ambari-web/app/styles/alerts.less
index e31ea30..d31ba47 100644
--- a/ambari-web/app/styles/alerts.less
+++ b/ambari-web/app/styles/alerts.less
@@ -551,6 +551,14 @@
   }
 }
 
+.sixty-percent-width-modal {
+  .definition-latest-text {
+    overflow-x: auto;
+    text-overflow: inherit;
+    white-space: normal;
+  }
+}
+
 /*****end styles for manage alerts popup*****/
 
 /*****start styles for alerts popup*****/
@@ -566,7 +574,7 @@
 }
 
 .service-alerts {
-  max-height: 246px;
+  max-height: 400px;
 }
 
 .instance-text {

http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/service_alert_popup.hbs 
b/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
index 6ab6b3f..253c624 100644
--- a/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
+++ b/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
@@ -21,20 +21,15 @@
     {{#each alert in view.alerts}}
       <li class="alert-list-wrap">
         <div class="row-fluid">
-          <div class="span8 name-text">
-            <div class="accordion-group block">
-              <div class="accordion-heading" {{action "onToggleBlock" alert 
target="view"}}>
-                <i {{bindAttr class=":pull-left :accordion-toggle 
alert.isCollapsed:icon-caret-right:icon-caret-down"}}></i>
-                <a class="accordion-toggle" href="#" {{action 
"gotoAlertDetails" alert target="view"}}>{{alert.label}}</a>
-              </div>
-              <div id="{{unbound alert.clientId}}" class="accordion-body 
collapse in" style="display: none">
-                <div class="accordion-inner definition-latest-text">
-                  {{alert.latestText}}
-                </div>
-              </div>
+          <div class="span9 name-text">
+            <div>
+              <a href="#" {{action "gotoAlertDetails" alert 
target="view"}}>{{alert.label}}</a>
+            </div>
+            <div class="definition-latest-text" {{bindAttr 
data-original-title="alert.latestText"}}>
+              {{alert.latestTextSummary}}
             </div>
           </div>
-          <div class="span4 status-col" rel="alert-status-tooltip" >
+          <div class="span3 status-col" rel="alert-status-tooltip" >
             {{view App.AlertDefinitionSummary contentBinding="alert"}}
             <span class="timeago" {{bindAttr 
data-original-title="alert.lastTriggeredVerboseDisplay"}}>
               <span class="status-icon">{{{alert.status}}}</span>

Reply via email to