Repository: ambari Updated Branches: refs/heads/trunk 8e39a705c -> 61dc3344a
AMBARI-10878. Create Widget: Integrate creating widgets comprising of host component metrics. (jaimin) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/61dc3344 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/61dc3344 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/61dc3344 Branch: refs/heads/trunk Commit: 61dc3344a55e90bf2f5a9d513d7925c7e8d2ddce Parents: 8e39a70 Author: Jaimin Jetly <jai...@hortonworks.com> Authored: Thu Apr 30 16:34:30 2015 -0700 Committer: Jaimin Jetly <jai...@hortonworks.com> Committed: Thu Apr 30 16:34:37 2015 -0700 ---------------------------------------------------------------------- .../service/widgets/create/wizard_controller.js | 25 ++++++++++++++++++-- .../app/mixins/common/widgets/widget_mixin.js | 9 +++++++ ambari-web/app/models/service/yarn.js | 10 ++++++-- .../service/widgets/create/expression_view.js | 21 ++++++++++++---- 4 files changed, 56 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/61dc3344/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 263f8d8..edb1b13 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 @@ -220,6 +220,7 @@ App.WidgetWizardController = App.WizardController.extend({ * @param {object} json */ loadAllMetricsFromServerCallback: function (json) { + var self = this; var result = []; var metrics = {}; @@ -230,7 +231,7 @@ App.WidgetWizardController = App.WizardController.extend({ for (var level in data[componentName]) { metrics = data[componentName][level][0]['metrics']['default']; for (var widgetId in metrics) { - result.push({ + var metricObj = { widget_id: widgetId, point_in_time: metrics[widgetId].pointInTime, temporal: metrics[widgetId].temporal, @@ -239,7 +240,11 @@ App.WidgetWizardController = App.WizardController.extend({ type: data[componentName][level][0]["type"].toUpperCase(), component_name: componentName, service_name: service.StackServices.service_name - }); + }; + result.push(metricObj); + if (metricObj.level === 'HOSTCOMPONENT') { + self.insertHostComponentCriteria(metricObj); + } } } } @@ -249,6 +254,22 @@ App.WidgetWizardController = App.WizardController.extend({ }, /** + * + * @param metricObj {Object} + */ + insertHostComponentCriteria: function (metricObj) { + switch (metricObj.component_name) { + case 'NAMENODE': + metricObj.host_component_criteria = 'host_components/metrics/dfs/FSNamesystem/HAState=active'; + break; + case 'RESOURCEMANAGER': + metricObj.host_component_criteria = 'host_components/HostRoles/ha_state=ACTIVE'; + break; + default: + } + }, + + /** * post widget definition to server * @returns {$.ajax} */ http://git-wip-us.apache.org/repos/asf/ambari/blob/61dc3344/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 23f3c9f..ada72c9 100644 --- a/ambari-web/app/mixins/common/widgets/widget_mixin.js +++ b/ambari-web/app/mixins/common/widgets/widget_mixin.js @@ -155,6 +155,15 @@ App.WidgetMixin = Ember.Mixin.create({ } } break; + case 'RESOURCEMANAGER': + if (metric.host_component_criteria === 'host_components/HostRoles/ha_state=ACTIVE') { + //if (metric.host_component_criteria) + var yarn = App.YARNService.find().objectAt(0); + if (!yarn.get('isRMHaEnabled')) { + metric.host_component_criteria = 'host_components/HostRoles/component_name=RESOURCEMANAGER'; + } + } + break; } }, http://git-wip-us.apache.org/repos/asf/ambari/blob/61dc3344/ambari-web/app/models/service/yarn.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/service/yarn.js b/ambari-web/app/models/service/yarn.js index 0c38d89..eb33886 100644 --- a/ambari-web/app/models/service/yarn.js +++ b/ambari-web/app/models/service/yarn.js @@ -23,6 +23,12 @@ App.YARNService = App.Service.extend({ resourceManager: function() { return this.get('hostComponents').findProperty('componentName', 'RESOURCEMANAGER'); }.property('hostComponents'), + isRMHaEnabled: function() { + return this.get('hostComponents').filterProperty('componentName', 'RESOURCEMANAGER').length > 1; + }.property('hostComponents'), + activeResourceManager: function() { + return this.get('hostComponents').filterProperty('componentName', 'RESOURCEMANAGER').findProperty('haStatus', 'ACTIVE'); + }.property('hostComponents'), appTimelineServer: function() { return this.get('hostComponents').findProperty('componentName', 'APP_TIMELINE_SERVER'); }.property('hostComponents'), @@ -44,9 +50,9 @@ App.YARNService = App.Service.extend({ appsKilled: DS.attr('number'), appsFailed: DS.attr('number'), ahsWebPort: function() { - var yarnConf = App.db.getConfigs().findProperty('type', 'yarn-site') + var yarnConf = App.db.getConfigs().findProperty('type', 'yarn-site'); if(yarnConf){ - return yarnConf.properties['yarn.timeline-service.webapp.address'].match(/:(\d+)/)[1];; + return yarnConf.properties['yarn.timeline-service.webapp.address'].match(/:(\d+)/)[1]; } return "8188"; }.property(), http://git-wip-us.apache.org/repos/asf/ambari/blob/61dc3344/ambari-web/app/views/main/service/widgets/create/expression_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/service/widgets/create/expression_view.js b/ambari-web/app/views/main/service/widgets/create/expression_view.js index d311403..8e8b8ce 100644 --- a/ambari-web/app/views/main/service/widgets/create/expression_view.js +++ b/ambari-web/app/views/main/service/widgets/create/expression_view.js @@ -195,13 +195,19 @@ App.WidgetWizardExpressionView = Em.View.extend({ placeholder_text: Em.I18n.t('dashboard.widgets.wizard.step2.selectMetric'), no_results_text: Em.I18n.t('widget.create.wizard.step2.noMetricFound') }).change(function (event, obj) { - self.set('parentView.selectedMetric', Em.Object.create({ + var filteredComponentMetrics = self.get('controller.filteredMetrics').filterProperty('component_name', self.get('selectedComponent.componentName')).filterProperty('level',self.get('selectedComponent.level')); + var filteredMetric = filteredComponentMetrics.findProperty('name', obj.selected); + var selectedMetric = Em.Object.create({ name: obj.selected, componentName: self.get('selectedComponent.componentName'), serviceName: self.get('selectedComponent.serviceName'), - metricPath: self.get('controller.filteredMetrics').findProperty('name', obj.selected).widget_id, + metricPath: filteredMetric.widget_id, isMetric: true - })); + }); + if (self.get('selectedComponent.hostComponentCriteria')) { + selectedMetric.hostComponentCriteria = self.get('selectedComponent.hostComponentCriteria'); + } + self.set('parentView.selectedMetric', selectedMetric); }); }, @@ -271,6 +277,7 @@ App.WidgetWizardExpressionView = Em.View.extend({ component_name: metric.component_name, level: metric.level, count: 1, + hostComponentCriteria: metric.host_component_criteria, metrics: [metric.name] }; } @@ -290,7 +297,7 @@ App.WidgetWizardExpressionView = Em.View.extend({ if (servicesMap[serviceName].components[componentId].component_name === 'HBASE_MASTER' && servicesMap[serviceName].components[componentId].level === 'HOSTCOMPONENT') continue; - components.push(Em.Object.create({ + var component = Em.Object.create({ componentName: servicesMap[serviceName].components[componentId].component_name, level: servicesMap[serviceName].components[componentId].level, displayName: function() { @@ -307,7 +314,11 @@ App.WidgetWizardExpressionView = Em.View.extend({ selected: false, id: componentId, serviceName: serviceName - })); + }); + if (component.get('level') === 'HOSTCOMPONENT') { + component.set('hostComponentCriteria', servicesMap[serviceName].components[componentId].hostComponentCriteria); + } + components.push(component); } result.push(Em.Object.create({ serviceName: serviceName,