You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2015/05/07 17:30:13 UTC
ambari git commit: AMBARI-10996 Bring back the custom time range
control that sets it for all graph widgets shown. (atkach)
Repository: ambari
Updated Branches:
refs/heads/trunk 629d8cd5c -> c8030852a
AMBARI-10996 Bring back the custom time range control that sets it for all graph widgets shown. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c8030852
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c8030852
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c8030852
Branch: refs/heads/trunk
Commit: c8030852a50982144e514deab76e73cb48d0c7fb
Parents: 629d8cd
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Thu May 7 16:20:09 2015 +0300
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Thu May 7 18:21:32 2015 +0300
----------------------------------------------------------------------
.../controllers/main/service/info/summary.js | 11 +++-
.../service/widgets/create/step2_controller.js | 66 +++++++++-----------
.../service/widgets/create/wizard_controller.js | 9 +--
.../main/service/widgets/edit_controller.js | 12 +---
.../app/mixins/common/widgets/widget_mixin.js | 2 +-
.../app/mixins/common/widgets/widget_section.js | 3 +-
ambari-web/app/models/widget.js | 5 --
ambari-web/app/routes/add_widget.js | 4 +-
ambari-web/app/routes/main.js | 1 -
.../app/templates/main/service/info/summary.hbs | 4 +-
.../views/common/widget/graph_widget_view.js | 7 ++-
.../app/views/main/service/info/summary.js | 43 +++++--------
.../main/service/widgets/create/step2_view.js | 1 +
.../widgets/create/step2_controller_test.js | 37 +++++++++++
14 files changed, 109 insertions(+), 96 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/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 3545d92..f29712a 100644
--- a/ambari-web/app/controllers/main/service/info/summary.js
+++ b/ambari-web/app/controllers/main/service/info/summary.js
@@ -77,6 +77,13 @@ App.MainServiceInfoSummaryController = Em.Controller.extend(App.WidgetSectionMix
],
/**
+ * @type {boolean}
+ */
+ showTimeRangeControl: function () {
+ return this.get('isServiceWithEnhancedWidgets') && this.get('widgets').filterProperty('widgetType', 'GRAPH').length > 0;
+ }.property('isServiceWithEnhancedWidgets', 'widgets.length'),
+
+ /**
* Set initial Ranger plugins data
* @method setRangerPlugins
*/
@@ -354,7 +361,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend(App.WidgetSectionMix
* @param {object|null} data
*/
loadAllSharedWidgetsSuccessCallback: function (data) {
- var widgetIds = this.get('widgets') ? this.get('widgets').mapProperty('id'): [];
+ var widgetIds = this.get('widgets').mapProperty('id');
if (data.items[0] && data.items.length) {
this.set("allSharedWidgets",
data.items.filter(function (widget) {
@@ -404,7 +411,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend(App.WidgetSectionMix
* @param {object|null} data
*/
loadMineWidgetsSuccessCallback: function (data) {
- var widgetIds = this.get('widgets') ? this.get('widgets').mapProperty('id'): [];
+ var widgetIds = this.get('widgets').mapProperty('id');
if (data.items[0] && data.items.length) {
this.set("mineWidgets",
data.items.filter(function (widget) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
----------------------------------------------------------------------
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 8dddb08..28a86d5 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
@@ -236,14 +236,6 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
this.set('widgetProperties', this.get('content.widgetProperties'));
this.set('widgetValues', this.get('content.widgetValues'));
this.set('widgetMetrics', this.get('content.widgetMetrics'));
- this.set('expressions', this.get('content.expressions').map(function (item) {
- return Em.Object.create(item);
- }, this));
- this.set('dataSets', this.get('content.dataSets').map(function (item) {
- item.expression = Em.Object.create(item.expression);
- return Em.Object.create(item);
- }, this));
- this.set('templateValue', this.get('content.templateValue'));
if (this.get('expressions.length') === 0) {
this.addExpression(null, true);
}
@@ -262,6 +254,7 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
values: [],
metrics: []
};
+
if (this.get('expressions').length > 0 && this.get('dataSets').length > 0) {
switch (widgetType) {
case 'GAUGE':
@@ -404,43 +397,42 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
/**
* convert data with model format to editable format
* Note: in order to edit widget expression it should be converted to editable format
- * @param {App.Widget} content
- * @param {Ember.Controller} widgetController
*/
- convertData: function(content, widgetController) {
+ convertData: function() {
var self = this;
var expressionId = 0;
+ var widgetValues = this.get('content.widgetValues');
+ var widgetMetrics = this.get('content.widgetMetrics');
this.get('expressions').clear();
this.get('dataSets').clear();
- switch (content.get('widgetType')) {
- case 'NUMBER':
- case 'GAUGE':
- var id = this.addExpression(null, true);
- this.get('expressions').findProperty('id', id).set('data', this.parseValue(content.get('values')[0].value, content.get('metrics'))[0]);
- break;
- case 'TEMPLATE':
- this.parseValue(content.get('values')[0].value, content.get('metrics')).forEach(function(item, index) {
- var id = this.addExpression(null, (index === 0));
- this.get('expressions').findProperty('id', id).set('data', item);
- }, this);
- this.set('templateValue', content.get('values')[0].value.replace(this.get('EXPRESSION_REGEX'), function(){
- return '{{' + self.get('EXPRESSION_PREFIX') + ++expressionId + '}}';
- }));
- break;
- case 'GRAPH':
- content.get('values').forEach(function (value, index) {
- var id = this.addDataSet(null, (index === 0));
- var dataSet = this.get('dataSets').findProperty('id', id);
- dataSet.set('label', value.name);
- dataSet.set('expression.data', this.parseValue(value.value, content.get('metrics'))[0]);
- }, this);
- break;
+ if (widgetValues.length > 0) {
+ switch (this.get('content.widgetType')) {
+ case 'NUMBER':
+ case 'GAUGE':
+ var id = this.addExpression(null, true);
+ this.get('expressions').findProperty('id', id).set('data', this.parseValue(widgetValues[0].value, widgetMetrics)[0]);
+ break;
+ case 'TEMPLATE':
+ this.parseValue(widgetValues[0].value, widgetMetrics).forEach(function (item, index) {
+ var id = this.addExpression(null, (index === 0));
+ this.get('expressions').findProperty('id', id).set('data', item);
+ }, this);
+ this.set('templateValue', widgetValues[0].value.replace(this.get('EXPRESSION_REGEX'), function () {
+ return '{{' + self.get('EXPRESSION_PREFIX') + ++expressionId + '}}';
+ }));
+ break;
+ case 'GRAPH':
+ widgetValues.forEach(function (value, index) {
+ var id = this.addDataSet(null, (index === 0));
+ var dataSet = this.get('dataSets').findProperty('id', id);
+ dataSet.set('label', value.name);
+ dataSet.set('expression.data', this.parseValue(value.value, widgetMetrics)[0]);
+ }, this);
+ break;
+ }
}
- widgetController.save('templateValue', this.get('templateValue'));
- widgetController.save('expressions', this.get('expressions'));
- widgetController.save('dataSets', this.get('dataSets'));
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
----------------------------------------------------------------------
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 e660a2a..9e1744f 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
@@ -34,7 +34,7 @@ App.WidgetWizardController = App.WizardController.extend({
content: Em.Object.create({
controllerName: 'widgetWizardController',
widgetService: null,
- widgetType: '',
+ widgetType: "",
/**
* @type {number}
@@ -87,11 +87,8 @@ App.WidgetWizardController = App.WizardController.extend({
* }]
*/
widgetValues: [],
- expressions: [],
- dataSets: [],
- templateValue: null,
- widgetName: null,
- widgetDescription: null,
+ widgetName: "",
+ widgetDescription: "",
widgetAuthor: function () {
return App.router.get('loginName');
}.property('App.router.loginName'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/controllers/main/service/widgets/edit_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/widgets/edit_controller.js b/ambari-web/app/controllers/main/service/widgets/edit_controller.js
index 50860ea..d57711f 100644
--- a/ambari-web/app/controllers/main/service/widgets/edit_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/edit_controller.js
@@ -75,9 +75,6 @@ App.WidgetEditController = App.WidgetWizardController.extend({
* }]
*/
widgetValues: [],
- expressions: [],
- dataSets: [],
- templateValue: null,
widgetName: null,
widgetDescription: null,
widgetScope: null,
@@ -91,12 +88,9 @@ App.WidgetEditController = App.WidgetWizardController.extend({
type: 'sync',
callback: function () {
this.load('widgetType');
- this.load('widgetProperties');
- this.load('widgetValues');
- this.load('widgetMetrics');
- this.load('expressions');
- this.load('dataSets');
- this.load('templateValue');
+ this.load('widgetProperties', true);
+ this.load('widgetValues', true);
+ this.load('widgetMetrics', true);
}
},
{
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/mixins/common/widgets/widget_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/widgets/widget_mixin.js b/ambari-web/app/mixins/common/widgets/widget_mixin.js
index 4acf838..6a15e57 100644
--- a/ambari-web/app/mixins/common/widgets/widget_mixin.js
+++ b/ambari-web/app/mixins/common/widgets/widget_mixin.js
@@ -121,7 +121,7 @@ App.WidgetMixin = Ember.Mixin.create({
});
}
}
- }.observes('customTimeRange'),
+ }.observes('customTimeRange', 'content.properties.time_range'),
/**
* get data formatted for request
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/mixins/common/widgets/widget_section.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/widgets/widget_section.js b/ambari-web/app/mixins/common/widgets/widget_section.js
index 8ba6fd5..e147f5f 100644
--- a/ambari-web/app/mixins/common/widgets/widget_section.js
+++ b/ambari-web/app/mixins/common/widgets/widget_section.js
@@ -93,10 +93,9 @@ App.WidgetSectionMixin = Ember.Mixin.create({
if (this.get('isWidgetsLoaded')) {
if (this.get('activeWidgetLayout.widgets')) {
return this.get('activeWidgetLayout.widgets').toArray();
- } else {
- return [];
}
}
+ return [];
}.property('isWidgetsLoaded'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/models/widget.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/widget.js b/ambari-web/app/models/widget.js
index 8adb8a4..a618c2e 100644
--- a/ambari-web/app/models/widget.js
+++ b/ambari-web/app/models/widget.js
@@ -133,11 +133,6 @@ App.WidgetType.FIXTURES = [
value: 'LINE'
},
{
- name : 'time_range',
- isRequired: true,
- value: "1"
- },
- {
name : 'display_unit',
isRequired: false,
value: '',
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/routes/add_widget.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/add_widget.js b/ambari-web/app/routes/add_widget.js
index 7973022..0333b99 100644
--- a/ambari-web/app/routes/add_widget.js
+++ b/ambari-web/app/routes/add_widget.js
@@ -134,8 +134,8 @@ module.exports = App.WizardRoute.extend({
widgetWizardController.save('expressions', widgetStep2controller.get('expressions'));
widgetWizardController.save('dataSets', widgetStep2controller.get('dataSets'));
widgetWizardController.save('templateValue', widgetStep2controller.get('templateValue'));
- widgetWizardController.save('widgetName', null);
- widgetWizardController.save('widgetDescription', null);
+ widgetWizardController.save('widgetName', "");
+ widgetWizardController.save('widgetDescription', "");
widgetWizardController.save('widgetScope', null);
router.transitionTo('step3');
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/routes/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index 160afa5..45a9102 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -588,7 +588,6 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
widgetController.save('widgetAuthor', context.get('author'));
widgetController.save('widgetId', context.get('id'));
widgetController.save('allMetrics', []);
- router.get('widgetWizardStep2Controller').convertData(context, widgetController);
}
router.transitionTo('editWidget');
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/templates/main/service/info/summary.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary.hbs b/ambari-web/app/templates/main/service/info/summary.hbs
index 6591523..740368d 100644
--- a/ambari-web/app/templates/main/service/info/summary.hbs
+++ b/ambari-web/app/templates/main/service/info/summary.hbs
@@ -79,7 +79,7 @@
<div class="box">
<div class="box-header">
<h4>{{t services.service.metrics}}</h4>
- {{#unless isServiceWithEnhancedWidgets}}
+ {{#if showTimeRangeControl}}
<div class="btn-group pull-right">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
{{view.currentTimeRange.name}} <span class="caret"></span>
@@ -90,7 +90,7 @@
{{/each}}
</ul>
</div>
- {{/unless}}
+ {{/if}}
{{#if isServiceWithEnhancedWidgets}}
<div class="btn-group pull-right actions">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/views/common/widget/graph_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/widget/graph_widget_view.js b/ambari-web/app/views/common/widget/graph_widget_view.js
index a0a9e8e..3d4776e 100644
--- a/ambari-web/app/views/common/widget/graph_widget_view.js
+++ b/ambari-web/app/views/common/widget/graph_widget_view.js
@@ -44,7 +44,12 @@ App.GraphWidgetView = Em.View.extend(App.WidgetMixin, {
* @type {number}
*/
timeRange: function () {
- return this.get('customTimeRange') || parseInt(this.get('content.properties.time_range')) * this.get('TIME_FACTOR');
+ var timeRange = parseInt(this.get('content.properties.time_range'));
+ if (isNaN(timeRange)) {
+ //1h - default time range
+ timeRange = 1;
+ }
+ return this.get('customTimeRange') || timeRange * this.get('TIME_FACTOR');
}.property('content.properties.time_range', 'customTimeRange'),
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/views/main/service/info/summary.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/info/summary.js b/ambari-web/app/views/main/service/info/summary.js
index 280e3e5..515ed98 100644
--- a/ambari-web/app/views/main/service/info/summary.js
+++ b/ambari-web/app/views/main/service/info/summary.js
@@ -441,16 +441,17 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
/**
* time range options for service metrics, a dropdown will list all options
+ * value set in hours
*/
timeRangeOptions: [
- {index: 0, name: Em.I18n.t('graphs.timeRange.hour'), seconds: 3600},
- {index: 1, name: Em.I18n.t('graphs.timeRange.twoHours'), seconds: 7200},
- {index: 2, name: Em.I18n.t('graphs.timeRange.fourHours'), seconds: 14400},
- {index: 3, name: Em.I18n.t('graphs.timeRange.twelveHours'), seconds: 43200},
- {index: 4, name: Em.I18n.t('graphs.timeRange.day'), seconds: 86400},
- {index: 5, name: Em.I18n.t('graphs.timeRange.week'), seconds: 604800},
- {index: 6, name: Em.I18n.t('graphs.timeRange.month'), seconds: 2592000},
- {index: 7, name: Em.I18n.t('graphs.timeRange.year'), seconds: 31104000}
+ {index: 0, name: Em.I18n.t('graphs.timeRange.hour'), value: '1'},
+ {index: 1, name: Em.I18n.t('graphs.timeRange.twoHours'), value: '2'},
+ {index: 2, name: Em.I18n.t('graphs.timeRange.fourHours'), value: '4'},
+ {index: 3, name: Em.I18n.t('graphs.timeRange.twelveHours'), value: '12'},
+ {index: 4, name: Em.I18n.t('graphs.timeRange.day'), value: '24'},
+ {index: 5, name: Em.I18n.t('graphs.timeRange.week'), value: '168'},
+ {index: 6, name: Em.I18n.t('graphs.timeRange.month'), value: '720'},
+ {index: 7, name: Em.I18n.t('graphs.timeRange.year'), value: '8760'}
],
currentTimeRangeIndex: 0,
@@ -460,28 +461,14 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
/**
* onclick handler for a time range option
+ * @param {object} event
*/
setTimeRange: function (event) {
- var self = this;
- if (event && event.context) {
- self.postUserPref(self.get('persistKey'), event.context.index);
- self.set('currentTimeRangeIndex', event.context.index);
- var svcName = self.get('service.serviceName');
- if (svcName) {
- var result = [], graphObjects = [], chunkSize = this.get('chunkSize');
- var allServices = require('data/service_graph_config').getServiceGraphConfig();
- allServices[svcName.toLowerCase()].forEach(function(graphName) {
- graphObjects.push(App["ChartServiceMetrics" + graphName].extend({
- currentTimeIndex : event.context.index
- }));
- });
- while(graphObjects.length) {
- result.push(graphObjects.splice(0, chunkSize));
- }
- self.set('serviceMetricGraphs', result);
- self.set('isServiceMetricLoaded', true);
- }
- }
+ this.set('currentTimeRangeIndex', event.context.index);
+
+ this.get('controller.widgets').filterProperty('widgetType', 'GRAPH').forEach(function (widget) {
+ widget.set('properties.time_range', event.context.value);
+ }, this);
},
loadServiceSummary: function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/app/views/main/service/widgets/create/step2_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/widgets/create/step2_view.js b/ambari-web/app/views/main/service/widgets/create/step2_view.js
index d8954ee..fb359a1 100644
--- a/ambari-web/app/views/main/service/widgets/create/step2_view.js
+++ b/ambari-web/app/views/main/service/widgets/create/step2_view.js
@@ -51,6 +51,7 @@ App.WidgetWizardStep2View = Em.View.extend({
didInsertElement: function () {
var controller = this.get('controller');
this.ensureTooltip();
+ controller.convertData();
controller.initWidgetData();
controller.renderProperties();
controller.updateExpressions();
http://git-wip-us.apache.org/repos/asf/ambari/blob/c8030852/ambari-web/test/controllers/main/service/widgets/create/step2_controller_test.js
----------------------------------------------------------------------
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 5960dfa..69a9650 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
@@ -275,4 +275,41 @@ describe('App.WidgetWizardStep2Controller', function () {
});
});
+ describe("#initWidgetData()", function() {
+ it("new data", function() {
+ controller.set('expressions', []);
+ controller.set('dataSets', []);
+ controller.get('content').setProperties({
+ widgetProperties: {a:1},
+ widgetValues: [1],
+ widgetMetrics: [2]
+ });
+
+ controller.initWidgetData();
+
+ expect(controller.get('widgetProperties')).to.eql({a:1});
+ expect(controller.get('widgetValues')).to.eql([]);
+ expect(controller.get('widgetMetrics')).to.eql([]);
+ expect(controller.get('expressions')).to.not.be.empty;
+ expect(controller.get('dataSets')).to.not.be.empty;
+ });
+ it("previously edited", function() {
+ controller.set('expressions', [{}]);
+ controller.set('dataSets', [{}]);
+ controller.get('content').setProperties({
+ widgetProperties: {a:1},
+ widgetValues: [1],
+ widgetMetrics: [2]
+ });
+
+ controller.initWidgetData();
+
+ expect(controller.get('widgetProperties')).to.eql({a:1});
+ expect(controller.get('widgetValues')).to.eql([1]);
+ expect(controller.get('widgetMetrics')).to.eql([2]);
+ expect(controller.get('expressions')).to.not.be.empty;
+ expect(controller.get('dataSets')).to.not.be.empty;
+ });
+ });
+
});