You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ak...@apache.org on 2018/05/11 16:18:55 UTC

[ambari] branch trunk updated: AMBARI-23754. UI Issues for HDFS Metrics when having multiple namespaces (akovalenko)

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

akovalenko 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 aa59d05  AMBARI-23754. UI Issues for HDFS Metrics when having multiple namespaces (akovalenko)
aa59d05 is described below

commit aa59d053189a39b1fef0c7be635567b049aedc56
Author: Aleksandr Kovalenko <ak...@apache.org>
AuthorDate: Fri May 11 17:59:29 2018 +0300

    AMBARI-23754. UI Issues for HDFS Metrics when having multiple namespaces (akovalenko)
---
 .../app/controllers/main/service/info/metric.js    | 26 ++++++++--
 .../service/widgets/create/step2_controller.js     |  3 +-
 .../service/widgets/create/step3_controller.js     | 13 ++---
 .../service/widgets/create/wizard_controller.js    | 55 +++++++++++++++++++---
 .../app/mixins/common/widgets/widget_mixin.js      | 23 +++++----
 .../common/modal_popups/widget_browser_popup.hbs   |  5 +-
 .../app/templates/common/widget/gauge_widget.hbs   |  2 +-
 .../app/templates/common/widget/graph_widget.hbs   |  2 +-
 .../app/templates/common/widget/number_widget.hbs  |  2 +-
 .../templates/common/widget/template_widget.hbs    |  2 +-
 .../app/templates/main/service/info/metrics.hbs    |  2 +-
 ambari-web/app/utils/ajax/ajax.js                  |  5 ++
 .../widgets/create/step2_controller_test.js        |  4 +-
 13 files changed, 111 insertions(+), 33 deletions(-)

diff --git a/ambari-web/app/controllers/main/service/info/metric.js b/ambari-web/app/controllers/main/service/info/metric.js
index b9e0fb1..349f1ef 100644
--- a/ambari-web/app/controllers/main/service/info/metric.js
+++ b/ambari-web/app/controllers/main/service/info/metric.js
@@ -103,6 +103,8 @@ App.MainServiceInfoMetricsController = Em.Controller.extend(App.WidgetSectionMix
           return Em.Object.create({
             id: widgetId,
             widgetName: widgetName,
+            tag: widget.WidgetInfo.tag,
+            metrics: widget.WidgetInfo.metrics,
             description: widget.WidgetInfo.description,
             widgetType: widgetType,
             iconPath: "/img/widget-" + widgetType.toLowerCase() + ".png",
@@ -152,6 +154,8 @@ App.MainServiceInfoMetricsController = Em.Controller.extend(App.WidgetSectionMix
           return Em.Object.create({
             id: widget.WidgetInfo.id,
             widgetName: widgetName,
+            tag: widget.WidgetInfo.tag,
+            metrics: widget.WidgetInfo.metrics,
             description: widget.WidgetInfo.description,
             widgetType: widgetType,
             iconPath: "/img/widget-" + widgetType.toLowerCase() + ".png",
@@ -209,7 +213,8 @@ App.MainServiceInfoMetricsController = Em.Controller.extend(App.WidgetSectionMix
    */
   hideWidget: function (event) {
     var widgetToHide = event.context;
-    var activeLayout = this.get('activeWidgetLayout');
+    var widgetLayout = event.context.nsLayout;
+    var activeLayout = widgetLayout || this.get('activeWidgetLayout');
     var widgetIds = activeLayout.get('widgets').map(function (widget) {
       return {
         "id": widget.get("id")
@@ -403,11 +408,11 @@ App.MainServiceInfoMetricsController = Em.Controller.extend(App.WidgetSectionMix
         activeStatus: '',
 
         content: function () {
+          var content = [];
           if (this.get('parentView.isShowMineOnly')) {
-            return this.get('controller.mineWidgets');
+            content = this.get('controller.mineWidgets');
           } else {
             // merge my widgets and all shared widgets, no duplicated is allowed
-            var content = [];
             var widgetMap = {};
             var allWidgets = this.get('controller.allSharedWidgets').concat(this.get('controller.mineWidgets'));
             allWidgets.forEach(function(widget) {
@@ -416,8 +421,21 @@ App.MainServiceInfoMetricsController = Em.Controller.extend(App.WidgetSectionMix
                 widgetMap[widget.get("id")] = true;
               }
             });
-            return content;
           }
+
+          //remove NameNode widgets with no tag if federation is enabled
+          if (App.get('hasNameNodeFederation')) {
+            content = content.filter(function (w) {
+              var parsedMetric;
+              try {
+                parsedMetric = JSON.parse(w.metrics);
+              } catch (e) {
+              }
+              return w.tag || !(parsedMetric && parsedMetric.someProperty('component_name', 'NAMENODE'));
+            });
+          }
+
+          return content;
         }.property('controller.allSharedWidgets.length', 'controller.isAllSharedWidgetsLoaded',
           'controller.mineWidgets.length', 'controller.isMineWidgetsLoaded', 'parentView.isShowMineOnly'),
 
diff --git a/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js b/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
index 15cb627..7107e52 100644
--- a/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
@@ -399,7 +399,8 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
             "name": element.name,
             "service_name": element.serviceName,
             "component_name": element.componentName,
-            "metric_path": element.metricPath
+            "metric_path": element.metricPath,
+            "tag": element.tag
           };
           if (element.hostComponentCriteria) {
             metricObj.host_component_criteria = element.hostComponentCriteria;
diff --git a/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js b/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js
index 10d0b33..78dd974 100644
--- a/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/create/step3_controller.js
@@ -191,11 +191,6 @@ App.WidgetWizardStep3Controller = Em.Controller.extend({
         description: this.get('widgetDescription') || "",
         scope: this.get('widgetScope').toUpperCase(),
         author: this.get('widgetAuthor'),
-        metrics: this.get('widgetMetrics').map(function (metric) {
-          delete metric.data;
-          delete metric.tag;
-          return metric;
-        }),
         values: this.get('widgetValues').map(function (value) {
           delete value.computedValue;
           return value;
@@ -205,7 +200,13 @@ App.WidgetWizardStep3Controller = Em.Controller.extend({
     };
 
     this.get('widgetMetrics').forEach(function (metric) {
-      if (metric.tag) widgetData.tag = metric.tag;
+      if (metric.tag) widgetData.WidgetInfo.tag = metric.tag;
+    });
+
+    widgetData.WidgetInfo.metrics = this.get('widgetMetrics').map(function (metric) {
+      delete metric.data;
+      delete metric.tag;
+      return metric;
     });
 
     return widgetData;
diff --git a/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js b/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
index a46c5e4..8bdcceb 100644
--- a/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
@@ -347,20 +347,61 @@ App.WidgetWizardController = App.WizardController.extend({
   },
 
   /**
-   * assign created widget to active layout if it present
+   * assign created widget to active layout if it present or to appropriate nameservice layout and all-nameservices layout
    * @param data
+   * @param requestObject
+   * @param requestData
    */
-  postWidgetDefinitionSuccessCallback: function (data) {
+  postWidgetDefinitionSuccessCallback: function (data, requestObject, requestData) {
     if (Em.isNone(this.get('content.layout'))) return;
-    var widgets = this.get('content.layout.widgets').map(function(item){
+    var mainServiceInfoMetricsController = App.router.get('mainServiceInfoMetricsController');
+    var self = this;
+    var layout = this.get('content.layout');
+    var newWidgeet = data.resources[0].WidgetInfo;
+    var tag = requestData.data.WidgetInfo.tag;
+
+    if (tag) {
+      this.loadLayoutByName(mainServiceInfoMetricsController.get('userLayoutName') + '_nameservice_' + tag).done(function (data) {
+        data.items[0].WidgetLayoutInfo.widgets = data.items[0].WidgetLayoutInfo.widgets.map(function(w) {
+          return w.WidgetInfo.id;
+        });
+        layout = data.items[0].WidgetLayoutInfo;
+        self.addWidgetToLayout(newWidgeet, layout).done(function () {
+          self.loadLayoutByName(mainServiceInfoMetricsController.get('userLayoutName') + '_nameservice_all').done(function (data) {
+            data.items[0].WidgetLayoutInfo.widgets = data.items[0].WidgetLayoutInfo.widgets.map(function(w) {
+              return w.WidgetInfo.id;
+            });
+            self.addWidgetToLayout(newWidgeet, data.items[0].WidgetLayoutInfo).done(function () {
+              mainServiceInfoMetricsController.updateActiveLayout();
+            });
+          });
+        });
+      });
+    } else {
+      this.addWidgetToLayout(newWidgeet, layout).done(function () {
+        mainServiceInfoMetricsController.updateActiveLayout();
+      });
+    }
+  },
+
+  addWidgetToLayout: function (newWidget, layout) {
+    var mainServiceInfoMetricsController = App.router.get('mainServiceInfoMetricsController');
+    var widgets = layout.widgets.map(function(item){
       return Em.Object.create({id: item});
     });
     widgets.pushObject(Em.Object.create({
-      id: data.resources[0].WidgetInfo.id
+      id: newWidget.id
     }));
-    var mainServiceInfoSummaryController = App.router.get('mainServiceInfoSummaryController');
-    mainServiceInfoSummaryController.saveWidgetLayout(widgets, Em.Object.create(this.get('content.layout'))).done(function() {
-      mainServiceInfoSummaryController.updateActiveLayout();
+    return mainServiceInfoMetricsController.saveWidgetLayout(widgets, Em.Object.create(layout));
+  },
+
+  loadLayoutByName: function (name) {
+    return App.ajax.send({
+      name: 'widget.layout.name.get',
+      sender: this,
+      data: {
+        name: name
+      }
     });
   },
 
diff --git a/ambari-web/app/mixins/common/widgets/widget_mixin.js b/ambari-web/app/mixins/common/widgets/widget_mixin.js
index 0d24f01..be41b40 100644
--- a/ambari-web/app/mixins/common/widgets/widget_mixin.js
+++ b/ambari-web/app/mixins/common/widgets/widget_mixin.js
@@ -564,7 +564,8 @@ App.WidgetMixin = Ember.Mixin.create({
     this.get('controller').hideWidget(
       {
         context: Em.Object.create({
-          id: event.context
+          id: event.contexts[0],
+          nsLayout: event.contexts[1]
         })
       }
     );
@@ -591,7 +592,7 @@ App.WidgetMixin = Ember.Mixin.create({
    * @returns {{WidgetInfo: {widget_name: *, widget_type: *, description: *, scope: *, metrics: *, values: *, properties: *}}}
    */
   collectWidgetData: function () {
-    return {
+    var widgetData = {
       WidgetInfo: {
         widget_name: this.get('content.widgetName'),
         widget_type: this.get('content.widgetType'),
@@ -610,6 +611,12 @@ App.WidgetMixin = Ember.Mixin.create({
         properties: this.get('content.properties')
       }
     };
+
+    this.get('content.metrics').forEach(function (metric) {
+      if (metric.tag) widgetData.WidgetInfo.tag = metric.tag;
+    });
+
+    return widgetData;
   },
 
   /**
@@ -640,9 +647,9 @@ App.WidgetMixin = Ember.Mixin.create({
     widgets.pushObject(Em.Object.create({
       id: data.resources[0].WidgetInfo.id
     }));
-    var mainServiceInfoSummaryController =  App.router.get('mainServiceInfoSummaryController');
-    mainServiceInfoSummaryController.saveWidgetLayout(widgets).done(function(){
-      mainServiceInfoSummaryController.updateActiveLayout();
+    var mainServiceInfoMetricsController =  App.router.get('mainServiceInfoMetricsController');
+    mainServiceInfoMetricsController.saveWidgetLayout(widgets).done(function(){
+      mainServiceInfoMetricsController.updateActiveLayout();
     });
   },
 
@@ -656,9 +663,9 @@ App.WidgetMixin = Ember.Mixin.create({
     widgets.pushObject(Em.Object.create({
       id: id
     }));
-    var mainServiceInfoSummaryController =  App.router.get('mainServiceInfoSummaryController');
-    mainServiceInfoSummaryController.saveWidgetLayout(widgets).done(function() {
-      mainServiceInfoSummaryController.getActiveWidgetLayout().done(function() {
+    var mainServiceInfoMetricsController =  App.router.get('mainServiceInfoMetricsController');
+    mainServiceInfoMetricsController.saveWidgetLayout(widgets).done(function() {
+      mainServiceInfoMetricsController.getActiveWidgetLayout().done(function() {
         var newWidget = App.Widget.find().findProperty('id', id);
         controller.editWidget(newWidget);
       });
diff --git a/ambari-web/app/templates/common/modal_popups/widget_browser_popup.hbs b/ambari-web/app/templates/common/modal_popups/widget_browser_popup.hbs
index 9910d07..52de96b 100644
--- a/ambari-web/app/templates/common/modal_popups/widget_browser_popup.hbs
+++ b/ambari-web/app/templates/common/modal_popups/widget_browser_popup.hbs
@@ -51,7 +51,10 @@
                   </div>
                   <div class="col-md-8">
                     <div class="label-description">
-                      <p class="label-text">{{widget.widgetName}}</p>
+                      <p class="label-text">
+                        {{widget.widgetName}}
+                        {{#if widget.tag}} - {{widget.tag}}{{/if}}
+                      </p>
                       <p class="is-shared-icon pull-right">
                         {{#if widget.isShared}}
                           <i class="glyphicon glyphicon-group" rel="shared-icon-tooltip"
diff --git a/ambari-web/app/templates/common/widget/gauge_widget.hbs b/ambari-web/app/templates/common/widget/gauge_widget.hbs
index 3524d15..04caf3d 100644
--- a/ambari-web/app/templates/common/widget/gauge_widget.hbs
+++ b/ambari-web/app/templates/common/widget/gauge_widget.hbs
@@ -40,7 +40,7 @@
           </li>
         {{/if}}
         <li>
-          <a href="#" {{action hideWidget view.id target="view"}}>
+          <a href="#" {{action hideWidget view.id view.nsLayout target="view"}}>
             <i class="icon-trash"></i>&nbsp;{{t common.delete}}
           </a>
         </li>
diff --git a/ambari-web/app/templates/common/widget/graph_widget.hbs b/ambari-web/app/templates/common/widget/graph_widget.hbs
index 0f33694..01bb1ad 100644
--- a/ambari-web/app/templates/common/widget/graph_widget.hbs
+++ b/ambari-web/app/templates/common/widget/graph_widget.hbs
@@ -49,7 +49,7 @@
           </li>
         {{/if}}
         <li>
-          <a href="#" {{action hideWidget view.id target="view"}}>
+          <a href="#" {{action hideWidget view.id view.nsLayout target="view"}}>
             <i class="icon-trash"></i>&nbsp;{{t common.delete}}
           </a>
         </li>
diff --git a/ambari-web/app/templates/common/widget/number_widget.hbs b/ambari-web/app/templates/common/widget/number_widget.hbs
index 3b7555d..d220db1 100644
--- a/ambari-web/app/templates/common/widget/number_widget.hbs
+++ b/ambari-web/app/templates/common/widget/number_widget.hbs
@@ -40,7 +40,7 @@
           </li>
         {{/if}}
         <li>
-          <a href="#" {{action hideWidget view.id target="view"}}>
+          <a href="#" {{action hideWidget view.id view.nsLayout target="view"}}>
             <i class="icon-trash"></i>&nbsp;{{t common.delete}}
           </a>
         </li>
diff --git a/ambari-web/app/templates/common/widget/template_widget.hbs b/ambari-web/app/templates/common/widget/template_widget.hbs
index 500bde1..bef74f3 100644
--- a/ambari-web/app/templates/common/widget/template_widget.hbs
+++ b/ambari-web/app/templates/common/widget/template_widget.hbs
@@ -40,7 +40,7 @@
           </li>
         {{/if}}
         <li>
-          <a href="#" {{action hideWidget view.id target="view"}}>
+          <a href="#" {{action hideWidget view.id view.nsLayout target="view"}}>
             <i class="icon-trash"></i>&nbsp;{{t common.delete}}
           </a>
         </li>
diff --git a/ambari-web/app/templates/main/service/info/metrics.hbs b/ambari-web/app/templates/main/service/info/metrics.hbs
index 3afecc3..280de17 100644
--- a/ambari-web/app/templates/main/service/info/metrics.hbs
+++ b/ambari-web/app/templates/main/service/info/metrics.hbs
@@ -118,7 +118,7 @@
             <div id="ns_widget_layout" class="thumbnails">
               {{#each widget in controller.selectedNSWidgetLayout.widgets}}
                 <div class="widget span2p4" {{bindAttr id="widget.id"}}>
-                  {{view widget.viewClass contentBinding="widget" idBinding="widget.id"}}
+                  {{view widget.viewClass nsLayoutBinding="controller.selectedNSWidgetLayout" contentBinding="widget" idBinding="widget.id"}}
                 </div>
               {{/each}}
             </div>
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 24e4034..7d80193 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -3009,6 +3009,11 @@ var urls = {
     mock: '/data/widget_layouts/{serviceName}/default_dashboard.json'
   },
 
+  'widget.layout.name.get': {
+    real: '/clusters/{clusterName}/widget_layouts?WidgetLayoutInfo/layout_name={name}',
+    mock: '/data/widget_layouts/{serviceName}/default_dashboard.json'
+  },
+
   'widget.layout.delete': {
     real: '/clusters/{clusterName}/widget_layouts/{layoutId}',
     type: 'DELETE'
diff --git a/ambari-web/test/controllers/main/service/widgets/create/step2_controller_test.js b/ambari-web/test/controllers/main/service/widgets/create/step2_controller_test.js
index 1b002790..856a09d 100644
--- a/ambari-web/test/controllers/main/service/widgets/create/step2_controller_test.js
+++ b/ambari-web/test/controllers/main/service/widgets/create/step2_controller_test.js
@@ -717,6 +717,7 @@ describe('App.WidgetWizardStep2Controller', function () {
           serviceName: 'S1',
           componentName: 'C1',
           metricPath: 'mp',
+          tag: 'tag',
           hostComponentCriteria: 'hcc',
           isMetric: true
         },
@@ -734,7 +735,8 @@ describe('App.WidgetWizardStep2Controller', function () {
             "service_name": "S1",
             "component_name": "C1",
             "metric_path": "mp",
-            "host_component_criteria": "hcc"
+            "host_component_criteria": "hcc",
+            tag: 'tag'
           }
         ],
         value: '${m1+10}'

-- 
To stop receiving notification emails like this one, please contact
akovalenko@apache.org.