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> {{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> {{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> {{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> {{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.