You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2015/04/16 22:15:49 UTC
[1/2] ambari git commit: AMBARI-10547. Integrate displaying defined
Number widget type from the API on service summary page. (jaimin)
Repository: ambari
Updated Branches:
refs/heads/trunk c7e310d62 -> 6dae33e54
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/mixins/common/widget_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/widget_mixin.js b/ambari-web/app/mixins/common/widget_mixin.js
index 48fbf8f..7667bf4 100644
--- a/ambari-web/app/mixins/common/widget_mixin.js
+++ b/ambari-web/app/mixins/common/widget_mixin.js
@@ -24,13 +24,13 @@ App.WidgetMixin = Ember.Mixin.create({
* @type {RegExp}
* @const
*/
- EXPRESSION_REGEX: /\$\{([\w\.\+\-\*\/\(\)\:\=\[\]]*)\}/g,
+ EXPRESSION_REGEX: /\$\{([\w\s\.\,\+\-\*\/\(\)\:\=\[\]]*)\}/g,
/**
* @type {RegExp}
* @const
*/
- MATH_EXPRESSION_REGEX: /^[\d\+\-\*\/\(\)\.]+$/,
+ MATH_EXPRESSION_REGEX: /^[\d\s\+\-\*\/\(\)\.]+$/,
/**
* @type {RegExp}
@@ -59,36 +59,15 @@ App.WidgetMixin = Ember.Mixin.create({
this.loadMetrics();
},
- /**
- * draw widget
- */
- drawWidget: function () {
- if (this.get('isLoaded')) {
- this.calculateValues();
- this.set('value', this.get('content.values')[0] && this.get('content.values')[0].computedValue);
- }
- },
-
- /**
- * callback on metrics loaded
- */
- onMetricsLoaded: function () {
- var self = this;
- this.set('isLoaded', true);
- this.drawWidget();
- setTimeout(function() {
- self.loadMetrics();
- }, App.contentUpdateInterval);
- },
/**
* load metrics
*/
loadMetrics: function () {
var requestData = this.getRequestData(this.get('content.metrics')),
- request,
- requestCounter = 0,
- self = this;
+ request,
+ requestCounter = 0,
+ self = this;
for (var i in requestData) {
request = requestData[i];
@@ -108,23 +87,106 @@ App.WidgetMixin = Ember.Mixin.create({
},
/**
- * extract expressions
- * Example:
- * input: "${a/b} equal ${b+a}"
- * expressions: ['a/b', 'b+a']
- *
- * @param {object} input
- * @returns {Array}
+ * get data formatted for request
+ * @param {Array} metrics
*/
- extractExpressions: function (input) {
- var pattern = this.get('EXPRESSION_REGEX'),
- expressions = [],
- match;
+ getRequestData: function (metrics) {
+ var requestsData = {};
- while (match = pattern.exec(input.value)) {
- expressions.push(match[1]);
+ metrics.forEach(function (metric, index) {
+ var key;
+ if (metric.host_component_criteria) {
+ key = metric.service_name + '_' + metric.component_name + '_' + metric.host_component_criteria;
+ } else {
+ key = metric.service_name + '_' + metric.component_name;
+ }
+ var requestMetric = $.extend({}, metric);
+
+ if (requestsData[key]) {
+ requestsData[key]["metric_paths"].push(requestMetric["metric_path"]);
+ } else {
+ requestMetric["metric_paths"] = [requestMetric["metric_path"]];
+ delete requestMetric["metric_path"];
+ requestsData[key] = requestMetric;
+ }
+ }, this);
+ return requestsData;
+ },
+
+ /**
+ * make GET call to server in order to fetch service-component metrics
+ * @param {object} request
+ * @returns {$.ajax}
+ */
+ getServiceComponentMetrics: function (request) {
+ return App.ajax.send({
+ name: 'widgets.serviceComponent.metrics.get',
+ sender: this,
+ data: {
+ serviceName: request.service_name,
+ componentName: request.component_name,
+ metricPaths: request.metric_paths.join(',')
+ },
+ success: 'getMetricsSuccessCallback'
+ });
+ },
+
+ /**
+ * make GET call to server in order to fetch host-component metrics
+ * @param {object} request
+ * @returns {$.ajax}
+ */
+ getHostComponentMetrics: function (request) {
+ return App.ajax.send({
+ name: 'widgets.hostComponent.metrics.get',
+ sender: this,
+ data: {
+ serviceName: request.service_name,
+ componentName: request.component_name,
+ metricPaths: request.metric_paths.join(','),
+ hostComponentCriteria: 'host_components/HostRoles/' + request.host_component_criteria
+ },
+ success: 'getMetricsSuccessCallback'
+ });
+ },
+
+ /**
+ * callback on getting aggregated metrics and host component metrics
+ * @param data
+ */
+ getMetricsSuccessCallback: function (data) {
+ var metrics = [];
+
+ this.get('content.metrics').forEach(function (_metric) {
+ if (!Em.isNone(Em.get(data, _metric.metric_path.replace(/\//g, '.')))) {
+ _metric.data = Em.get(data, _metric.metric_path.replace(/\//g, '.'));
+ this.get('metrics').pushObject(_metric);
+ }
+ }, this);
+ },
+
+
+ /**
+ * callback on metrics loaded
+ */
+ onMetricsLoaded: function () {
+ var self = this;
+ this.set('isLoaded', true);
+ this.drawWidget();
+ setTimeout(function() {
+ self.loadMetrics();
+ }, App.contentUpdateInterval);
+ },
+
+
+ /**
+ * draw widget
+ */
+ drawWidget: function () {
+ if (this.get('isLoaded')) {
+ this.calculateValues();
+ this.set('value', this.get('content.values')[0] && this.get('content.values')[0].computedValue);
}
- return expressions;
},
/**
@@ -142,6 +204,28 @@ App.WidgetMixin = Ember.Mixin.create({
}, this);
},
+
+ /**
+ * extract expressions
+ * Example:
+ * input: "${a/b} equal ${b+a}"
+ * expressions: ['a/b', 'b+a']
+ *
+ * @param {object} input
+ * @returns {Array}
+ */
+ extractExpressions: function (input) {
+ var pattern = this.get('EXPRESSION_REGEX'),
+ expressions = [],
+ match;
+
+ while (match = pattern.exec(input.value)) {
+ expressions.push(match[1]);
+ }
+ return expressions;
+ },
+
+
/**
* compute expression
* @param expressions
@@ -176,80 +260,6 @@ App.WidgetMixin = Ember.Mixin.create({
return result;
},
- /**
- * get data formatted for request
- * @param {Array} metrics
- */
- getRequestData: function (metrics) {
- var requestsData = {};
-
- metrics.forEach(function (metric) {
- var key = metric.service_name + '_' + metric.component_name + '_' + metric.host_component_criteria;
- var requestMetric = $.extend({}, metric);
-
- if (requestsData[key]) {
- requestsData[key]["widget_ids"].push(requestMetric["widget_id"]);
- } else {
- requestMetric["widget_ids"] = [requestMetric["widget_id"]];
- delete requestMetric["widget_id"];
- requestsData[key] = requestMetric;
- }
- }, this);
- return requestsData;
- },
-
- /**
- * make GET call to server in order to fetch service-component metrics
- * @param {object} request
- * @returns {$.ajax}
- */
- getServiceComponentMetrics: function (request) {
- return App.ajax.send({
- name: 'widgets.serviceComponent.metrics.get',
- sender: this,
- data: {
- serviceName: request.service_name,
- componentName: request.component_name,
- widgetIds: request.widget_ids.join(',')
- },
- success: 'getServiceComponentMetricsSuccessCallback'
- });
- },
-
- getServiceComponentMetricsSuccessCallback: function (data, opt, params) {
- var metrics = [];
-
- this.get('content.metrics').forEach(function (_metric) {
- if (!Em.isNone(Em.get(data, _metric.widget_id.replace(/\//g, '.')))) {
- _metric.data = Em.get(data, _metric.widget_id.replace(/\//g, '.'));
- this.get('metrics').pushObject(_metric);
- }
- }, this);
- },
-
- /**
- * make GET call to server in order to fetch host-component metrics
- * @param {object} request
- * @returns {$.ajax}
- */
- getHostComponentMetrics: function (request) {
- return App.ajax.send({
- name: 'widgets.hostComponent.metrics.get',
- sender: this,
- data: {
- serviceName: request.service_name,
- componentName: request.component_name,
- widgetIds: request.widget_ids.join(','),
- hostComponentCriteria: 'host_components/HostRoles/' + request.host_component_criteria
- },
- success: 'getHostComponentMetricsSuccessCallback'
- });
- },
-
- getHostComponentMetricsSuccessCallback: function () {
- //TODO push data to metrics after response structure approved
- },
-
/*
* make call when clicking on "remove icon" on widget
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/models/widget.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/widget.js b/ambari-web/app/models/widget.js
index 6147bf5..99c86d0 100644
--- a/ambari-web/app/models/widget.js
+++ b/ambari-web/app/models/widget.js
@@ -32,17 +32,17 @@ App.Widget = DS.Model.extend({
*/
widgetType: DS.attr('string'),
displayName: DS.attr('string'),
+ description: DS.attr('string'),
serviceName: DS.attr('string'),
- componentName: DS.attr('string'),
timeCreated: DS.attr('number'),
sectionName: DS.attr('string'),
author: DS.attr('string'),
+ scope: DS.attr('string'),
properties: DS.attr('object'),
expression: DS.attr('array'),
metrics: DS.attr('array'),
values: DS.attr('array'),
- isVisible: DS.attr('boolean'),
-
+ isVisible: DS.attr('boolean', {defaultValue: true}),
/**
* @type {number}
* @default 0
@@ -69,6 +69,8 @@ App.Widget = DS.Model.extend({
}.property('widgetType')
});
+App.Widget.FIXTURES = [];
+
App.WidgetType = DS.Model.extend({
name: DS.attr('string'),
displayName: DS.attr('string'),
@@ -77,8 +79,6 @@ App.WidgetType = DS.Model.extend({
});
-App.Widget.FIXTURES = [];
-
App.WidgetType.FIXTURES = [
{
id: 1,
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/models/widget_layout.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/widget_layout.js b/ambari-web/app/models/widget_layout.js
index 2c29670..7427375 100644
--- a/ambari-web/app/models/widget_layout.js
+++ b/ambari-web/app/models/widget_layout.js
@@ -20,8 +20,9 @@ var App = require('app');
App.WidgetLayout = DS.Model.extend({
layoutName: DS.attr('string'),
+ displayName: DS.attr('string'),
sectionName: DS.attr('string'),
- widgetLayoutInfo: DS.attr('string'),
+ widgets: DS.hasMany('App.Widget'),
scope: DS.attr('string'),
user: DS.attr('string')
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/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 81e1e6d..2c2668c 100644
--- a/ambari-web/app/templates/main/service/info/summary.hbs
+++ b/ambari-web/app/templates/main/service/info/summary.hbs
@@ -90,7 +90,7 @@
{{/each}}
</ul>
</div>
- {{#if App.supports.customizedWidgets}}
+ {{#if isServiceWithEnhancedWidgets}}
<div class="btn-group pull-right actions">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
{{t common.actions}} <span class="caret"></span>
@@ -122,7 +122,7 @@
{{/if}}
</div>
<div>
- {{#if App.supports.customizedWidgets}}
+ {{#if isServiceWithEnhancedWidgets}}
<div id="widget_layout" class="row-fluid">
{{#each widget in controller.widgets}}
<div class="widget span2p4" {{bindAttr id="widget.id"}}>
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index e7d28bc..f82263d 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -2421,6 +2421,11 @@ var urls = {
mock: '/data/widget_layouts/HBASE/stack_layout.json'
},
+ 'widget.layout.get': {
+ real: '/clusters/{clusterName}/widget_layouts?WidgetLayoutInfo/layout_name={layoutName}',
+ mock: '/data/widget_layouts/{serviceName}/default_dashboard.json'
+ },
+
'widgets.layout.userDefined.get': {
real: '/users/{loginName}/widget_layouts?section_name={sectionName}',
mock: '/data/widget_layouts/HBASE/empty_user_layout.json'
@@ -2453,12 +2458,12 @@ var urls = {
},
'widgets.serviceComponent.metrics.get': {
- real: '/clusters/{clusterName}/services/{serviceName}/components/{componentName}?fields={widgetIds}',
+ real: '/clusters/{clusterName}/services/{serviceName}/components/{componentName}?fields={metricPaths}',
mock: '/data/metrics/{serviceName}/Append_num_ops_&_Delete_num_ops.json'
},
'widgets.hostComponent.metrics.get': {
- real: '/clusters/{clusterName}/services/{serviceName}/components/{componentName}?{hostComponentCriteria}&fields={widgetIds}',
+ real: '/clusters/{clusterName}/services/{serviceName}/components/{componentName}?{hostComponentCriteria}&fields={metricPaths}',
mock: '/data/metrics/{serviceName}/Append_num_ops.json'
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/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 e886b9b..8baa8cc 100644
--- a/ambari-web/app/views/common/widget/graph_widget_view.js
+++ b/ambari-web/app/views/common/widget/graph_widget_view.js
@@ -56,19 +56,20 @@ App.GraphWidgetView = Em.View.extend(App.WidgetMixin, {
calculateValues: function () {
var metrics = this.get('metrics');
var seriesData = [];
-
- this.get('content.values').forEach(function (value) {
- var expression = this.extractExpressions(value)[0];
- var computedExpressions;
-
- if (expression) {
- computedExpressions = this.computeExpression(expression, metrics);
- seriesData.push({
- name: value.name,
- data: computedExpressions[value.value.match(this.get('EXPRESSION_REGEX'))[0]]
- });
- }
- }, this);
+ if (this.get('content.values')) {
+ this.get('content.values').forEach(function (value) {
+ var expression = this.extractExpressions(value)[0];
+ var computedExpressions;
+
+ if (expression) {
+ computedExpressions = this.computeExpression(expression, metrics);
+ seriesData.push({
+ name: value.name,
+ data: computedExpressions[value.value.match(this.get('EXPRESSION_REGEX'))[0]]
+ });
+ }
+ }, this);
+ }
return seriesData;
},
@@ -124,9 +125,9 @@ App.GraphWidgetView = Em.View.extend(App.WidgetMixin, {
data: {
serviceName: request.service_name,
componentName: request.component_name,
- widgetIds: this.addTimeProperties(request.widget_ids).join(',')
+ metricPaths: this.addTimeProperties(request.metric_paths).join(',')
},
- success: 'getServiceComponentMetricsSuccessCallback'
+ success: 'getMetricsSuccessCallback'
});
},
@@ -142,10 +143,10 @@ App.GraphWidgetView = Em.View.extend(App.WidgetMixin, {
data: {
serviceName: request.service_name,
componentName: request.component_name,
- widgetIds: this.addTimeProperties(request.widget_ids).join(','),
+ metricPaths: this.addTimeProperties(request.metric_paths).join(','),
hostComponentCriteria: 'host_components/HostRoles/' + request.host_component_criteria
},
- success: 'getHostComponentMetricsSuccessCallback'
+ success: 'getMetricsSuccessCallback'
});
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/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 af3e359..d88cf8a 100644
--- a/ambari-web/app/views/main/service/info/summary.js
+++ b/ambari-web/app/views/main/service/info/summary.js
@@ -380,7 +380,33 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
* list of static actions of widget
* @type {Array}
*/
- staticWidgetActions: [
+ staticGeneralWidgetActions: [
+ Em.Object.create({
+ label: Em.I18n.t('dashboard.widgets.actions.browse'),
+ class: 'icon-th',
+ action: 'goToWidgetsBrowser',
+ isAction: true
+ })
+ ],
+
+ /**
+ *list of static actions of widget accessible to Admin/Operator privelege
+ * @type {Array}
+ */
+
+ staticAdminPrivelegeWidgetActions: [
+ Em.Object.create({
+ label: Em.I18n.t('dashboard.widgets.create'),
+ class: 'icon-plus',
+ action: 'createWidget',
+ isAction: true
+ })
+ ],
+
+ /**
+ * List of static actions related to widget layout
+ */
+ staticWidgetLayoutActions: [
Em.Object.create({
label: Em.I18n.t('dashboard.widgets.layout.save'),
class: 'icon-download-alt',
@@ -392,18 +418,6 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
class: 'icon-file',
isAction: true,
layouts: App.WidgetLayout.find()
- }),
- Em.Object.create({
- label: Em.I18n.t('dashboard.widgets.create'),
- class: 'icon-plus',
- action: 'createWidget',
- isAction: true
- }),
- Em.Object.create({
- label: Em.I18n.t('dashboard.widgets.actions.browse'),
- class: 'icon-th',
- action: 'goToWidgetsBrowser',
- isAction: true
})
],
@@ -412,7 +426,13 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
*/
widgetActions: function() {
var options = [];
- options.pushObjects(this.get('staticWidgetActions'));
+ if (App.isAccessible('MANAGER')) {
+ if (App.supports.customizedWidgetLayout) {
+ options.pushObjects(this.get('staticWidgetLayoutActions'));
+ }
+ options.pushObjects(this.get('staticAdminPrivelegeWidgetActions'));
+ }
+ options.pushObjects(this.get('staticGeneralWidgetActions'));
return options;
}.property(''),
@@ -531,10 +551,8 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
var isMetricsSupported = svcName != 'STORM' || App.get('isStormMetricsSupported');
if (App.get('supports.customizedWidgets')) {
- var serviceName = this.get('controller.content.serviceName');
- var stackService = App.StackService.find().findProperty('serviceName', serviceName);
- if (stackService.get('isServiceWithWidgets')) {
- this.get('controller').loadWidgets();
+ this.get('controller').loadActiveWidgetLayout();
+ if (App.supports.customizedWidgetLayout) {
this.get('controller').loadWidgetLayouts();
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/test/controllers/main/service/info/summary_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/info/summary_test.js b/ambari-web/test/controllers/main/service/info/summary_test.js
index 8ce848c..fa626ef 100644
--- a/ambari-web/test/controllers/main/service/info/summary_test.js
+++ b/ambari-web/test/controllers/main/service/info/summary_test.js
@@ -227,77 +227,39 @@ describe('App.MainServiceInfoSummaryController', function () {
});
- describe("#loadWidgets()", function () {
+ describe("#loadActiveWidgetLayout() for Enhanced Dashboard", function () {
before(function () {
- controller = App.MainServiceInfoSummaryController.create();
sinon.stub(App.ajax, 'send');
});
after(function () {
App.ajax.send.restore();
});
it("make GET call", function () {
- controller.loadWidgets();
- expect(App.ajax.send.getCall(0).args[0].name).to.equal('widgets.layout.userDefined.get');
+ var controller = App.MainServiceInfoSummaryController.create({
+ isServiceWithEnhancedWidgets: true,
+ content: Em.Object.create({serviceName: 'HDFS'})
+ });
+ controller.loadActiveWidgetLayout();
+ expect(App.ajax.send.getCall(0).args[0].name).to.equal('widget.layout.get');
});
});
- describe("#loadWidgetsSuccessCallback()", function () {
+ describe("#loadActiveWidgetLayoutSuccessCallback()", function () {
beforeEach(function () {
- controller = App.MainServiceInfoSummaryController.create();
- sinon.stub(App.widgetMapper, 'map');
- sinon.stub(controller, 'loadStackWidgetsLayout');
+ sinon.stub( App.widgetLayoutMapper, 'map');
});
afterEach(function () {
- App.widgetMapper.map.restore();
- controller.loadStackWidgetsLayout.restore();
- });
- it("empty data", function () {
- controller.loadWidgetsSuccessCallback({items: []});
- expect(controller.loadStackWidgetsLayout.calledOnce).to.be.true;
+ App.widgetLayoutMapper.map.restore();
});
- it("filled data", function () {
- controller.loadWidgetsSuccessCallback({items: ['1']});
- expect(App.widgetMapper.map.calledWith('1')).to.be.true;
+ it("isWidgetLayoutsLoaded should be set to true", function () {
+ var controller = App.MainServiceInfoSummaryController.create({
+ isServiceWithEnhancedWidgets: true,
+ content: Em.Object.create({serviceName: 'HDFS'})
+ });
+ controller.loadActiveWidgetLayoutSuccessCallback({items:[true]});
+ expect(controller.get('isWidgetsLoaded')).to.be.true;
});
- });
- describe("#loadStackWidgetsLayout()", function () {
- before(function () {
- controller = App.MainServiceInfoSummaryController.create();
- sinon.stub(App.ajax, 'send');
- });
- after(function () {
- App.ajax.send.restore();
- });
- it("make GET call", function () {
- controller.loadStackWidgetsLayout();
- expect(App.ajax.send.getCall(0).args[0].name).to.equal('widgets.layout.stackDefined.get');
- });
});
- describe("#loadStackWidgetsLayoutSuccessCallback()", function () {
- before(function () {
- controller = App.MainServiceInfoSummaryController.create();
- sinon.stub(App.widgetMapper, 'map');
- });
- after(function () {
- App.widgetMapper.map.restore();
- });
- it("make GET call", function () {
- var data = {
- artifact_data: {
- layouts: [
- {
- section_name: 'S1_SUMMARY'
- }
- ]
- }
- };
- controller.set('content', Em.Object.create({serviceName: 'S1'}));
- controller.loadStackWidgetsLayoutSuccessCallback(data);
- expect(App.widgetMapper.map.calledWith({
- section_name: 'S1_SUMMARY'
- })).to.be.true;
- });
- });
});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/test/mappers/stack_service_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/stack_service_mapper_test.js b/ambari-web/test/mappers/stack_service_mapper_test.js
index 1b6ccfa..0d13925 100644
--- a/ambari-web/test/mappers/stack_service_mapper_test.js
+++ b/ambari-web/test/mappers/stack_service_mapper_test.js
@@ -178,8 +178,8 @@ describe('App.stackServiceMapper', function () {
stackName: "HDP",
isInstalled: false,
isInstallable: true,
+ isServiceWithWidgets: false,
serviceCheckSupported: true,
- isServiceWithWidgets: true,
requiredServices: ["ZOOKEEPER"]
},
componentResult = {
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/test/mixins/common/widget_mixin_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/widget_mixin_test.js b/ambari-web/test/mixins/common/widget_mixin_test.js
index edb5359..9ef82a4 100644
--- a/ambari-web/test/mixins/common/widget_mixin_test.js
+++ b/ambari-web/test/mixins/common/widget_mixin_test.js
@@ -95,26 +95,26 @@ describe('App.WidgetMixin', function() {
var data = [
{
"name": "regionserver.Server.percentFilesLocal",
- "widget_id": "metrics/hbase/regionserver/percentFilesLocal",
+ "metric_path": "metrics/hbase/regionserver/percentFilesLocal",
"service_name": "HBASE",
"component_name": "HBASE_REGIONSERVER"
},
{
"name": "regionserver.Server.percentFilesLocal2",
- "widget_id": "w2",
+ "metric_path": "w2",
"service_name": "HBASE",
"component_name": "HBASE_REGIONSERVER"
},
{
"name": "regionserver.Server.percentFilesLocal",
- "widget_id": "metrics/hbase/regionserver/percentFilesLocal",
+ "metric_path": "metrics/hbase/regionserver/percentFilesLocal",
"service_name": "HBASE",
"component_name": "HBASE_REGIONSERVER",
"host_component_criteria": 'c1'
},
{
"name": "regionserver.Server.percentFilesLocal",
- "widget_id": "metrics/hbase/regionserver/percentFilesLocal",
+ "metric_path": "metrics/hbase/regionserver/percentFilesLocal",
"service_name": "HDFS",
"component_name": "DATANODE",
"host_component_criteria": 'c1'
@@ -122,11 +122,11 @@ describe('App.WidgetMixin', function() {
];
expect(mixinObject.getRequestData(data)).to.eql({
- "HBASE_HBASE_REGIONSERVER_undefined": {
+ "HBASE_HBASE_REGIONSERVER": {
"name": "regionserver.Server.percentFilesLocal",
"service_name": "HBASE",
"component_name": "HBASE_REGIONSERVER",
- "widget_ids": [
+ "metric_paths": [
"metrics/hbase/regionserver/percentFilesLocal",
"w2"
]
@@ -136,7 +136,7 @@ describe('App.WidgetMixin', function() {
"service_name": "HBASE",
"component_name": "HBASE_REGIONSERVER",
"host_component_criteria": "c1",
- "widget_ids": [
+ "metric_paths": [
"metrics/hbase/regionserver/percentFilesLocal"
]
},
@@ -145,7 +145,7 @@ describe('App.WidgetMixin', function() {
"service_name": "HDFS",
"component_name": "DATANODE",
"host_component_criteria": "c1",
- "widget_ids": [
+ "metric_paths": [
"metrics/hbase/regionserver/percentFilesLocal"
]
}
@@ -165,7 +165,7 @@ describe('App.WidgetMixin', function() {
var request = {
service_name: 'S1',
component_name: 'C1',
- widget_ids: ['w1', 'w2']
+ metric_paths: ['w1', 'w2']
};
mixinObject.getServiceComponentMetrics(request);
expect(App.ajax.send.getCall(0).args[0]).to.eql({
@@ -174,14 +174,14 @@ describe('App.WidgetMixin', function() {
data: {
serviceName: 'S1',
componentName: 'C1',
- widgetIds: 'w1,w2'
+ metricPaths: 'w1,w2'
},
- success: 'getServiceComponentMetricsSuccessCallback'
+ success: 'getMetricsSuccessCallback'
})
});
});
- describe("#getServiceComponentMetricsSuccessCallback()", function () {
+ describe("#getMetricsSuccessCallback()", function () {
var mixinObject = mixinClass.create();
it("", function () {
var data = {
@@ -197,11 +197,11 @@ describe('App.WidgetMixin', function() {
};
mixinObject.set('content.metrics', [
{
- widget_id: 'metrics/hbase/ipc/IPC/numOpenConnections'
+ metric_path: 'metrics/hbase/ipc/IPC/numOpenConnections'
}
]);
- mixinObject.getServiceComponentMetricsSuccessCallback(data);
- expect(mixinObject.get('metrics').findProperty('widget_id', 'metrics/hbase/ipc/IPC/numOpenConnections').data).to.equal(11.5);
+ mixinObject.getMetricsSuccessCallback(data);
+ expect(mixinObject.get('metrics').findProperty('metric_path', 'metrics/hbase/ipc/IPC/numOpenConnections').data).to.equal(11.5);
});
});
@@ -217,7 +217,7 @@ describe('App.WidgetMixin', function() {
var request = {
service_name: 'S1',
component_name: 'C1',
- widget_ids: ['w1', 'w2'],
+ metric_paths: ['w1', 'w2'],
host_component_criteria: 'c1'
};
mixinObject.getHostComponentMetrics(request);
@@ -227,10 +227,10 @@ describe('App.WidgetMixin', function() {
data: {
serviceName: 'S1',
componentName: 'C1',
- widgetIds: 'w1,w2',
+ metricPaths: 'w1,w2',
hostComponentCriteria: 'host_components/HostRoles/c1'
},
- success: 'getHostComponentMetricsSuccessCallback'
+ success: 'getMetricsSuccessCallback'
})
});
});
[2/2] ambari git commit: AMBARI-10547. Integrate displaying defined
Number widget type from the API on service summary page. (jaimin)
Posted by ja...@apache.org.
AMBARI-10547. Integrate displaying defined Number widget type from the API on service summary page. (jaimin)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6dae33e5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6dae33e5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6dae33e5
Branch: refs/heads/trunk
Commit: 6dae33e54caeb42cf3bda5f8b8c88e1917f5b73d
Parents: c7e310d
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Thu Apr 16 13:14:56 2015 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Thu Apr 16 13:14:56 2015 -0700
----------------------------------------------------------------------
.../HBASE/0.96.0.2.0/metrics.json | 14 +-
.../HBASE/0.96.0.2.0/widgets.json | 12 +-
.../HBASE/1.1.0.2.3/metrics.json | 27 +-
.../HBASE/1.1.0.2.3/widgets.json | 598 +++++++++++++------
.../stacks/HDP/2.3/services/HBASE/widgets.json | 434 ++++++++++++++
.../widget_layouts/HBASE/default_dashboard.json | 278 +++++----
ambari-web/app/config.js | 1 +
.../controllers/main/service/info/summary.js | 116 ++--
ambari-web/app/mappers/stack_service_mapper.js | 2 +-
ambari-web/app/mappers/widget_layout_mapper.js | 54 +-
ambari-web/app/mappers/widget_mapper.js | 4 +-
ambari-web/app/mixins/common/widget_mixin.js | 238 ++++----
ambari-web/app/models/widget.js | 10 +-
ambari-web/app/models/widget_layout.js | 3 +-
.../app/templates/main/service/info/summary.hbs | 4 +-
ambari-web/app/utils/ajax/ajax.js | 9 +-
.../views/common/widget/graph_widget_view.js | 35 +-
.../app/views/main/service/info/summary.js | 54 +-
.../main/service/info/summary_test.js | 72 +--
.../test/mappers/stack_service_mapper_test.js | 2 +-
.../test/mixins/common/widget_mixin_test.js | 36 +-
21 files changed, 1378 insertions(+), 625 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metrics.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metrics.json b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metrics.json
index 627667b..84efc2f 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metrics.json
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metrics.json
@@ -797,32 +797,32 @@
},
"metrics/hbase/regionserver/Server/Get_95th_percentile": {
"metric": "regionserver.Server.Get_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/ScanNext_95th_percentile": {
"metric": "regionserver.Server.ScanNext_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Mutate_95th_percentile": {
"metric": "regionserver.Server.Mutate_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Increment_95th_percentile": {
"metric": "regionserver.Server.Increment_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Append_95th_percentile": {
"metric": "regionserver.Server.Append_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Delete_95th_percentile": {
"metric": "regionserver.Server.Delete_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/percentFilesLocal": {
@@ -1837,7 +1837,7 @@
},
"metrics/hbase/regionserver/percentFilesLocal": {
"metric": "regionserver.Server.percentFilesLocal",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/fsWriteLatency_avg_time": {
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/widgets.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/widgets.json b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/widgets.json
index ece1b03..c0e9821 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/widgets.json
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/widgets.json
@@ -14,7 +14,7 @@
"metrics": [
{
"name": "regionserver.Server.Get_num_ops",
- "metric_path": "metrics/jvm/gcCount",
+ "metric_path": "metrics/hbase/regionserver/Server/Get_num_ops",
"service_name": "HBASE",
"component_name": "HBASE_REGIONSERVER"
},
@@ -52,7 +52,7 @@
"values": [
{
"name": "Read Requests",
- "value": "${regionserver.Server.Get_num_ops + regionserver.Server.ScanNext_num_ops}"
+ "value": "${regionserver.Server.Get_num_ops}"
},
{
"name": "Write Requests",
@@ -77,18 +77,12 @@
"metric_path": "metrics/hbase/regionserver/Server/Get_95th_percentile",
"service_name": "HBASE",
"component_name": "HBASE_REGIONSERVER"
- },
- {
- "name": "regionserver.Server.ScanNext_95th_percentile",
- "metric_path": "metrics/hbase/regionserver/Server/ScanNext_95th_percentile",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
}
],
"values": [
{
"name": "95% Read Latency",
- "value": "${regionserver.Server.Get_95th_percentile + regionserver.Server.ScanNext_95th_percentile}"
+ "value": "${regionserver.Server.Get_95th_percentile}"
}
],
"properties": {
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/metrics.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/metrics.json b/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/metrics.json
index 7bbf7be..84efc2f 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/metrics.json
+++ b/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/metrics.json
@@ -770,6 +770,11 @@
"pointInTime": false,
"temporal": true
},
+ "metrics/hbase/regionserver/Server/ScanNext_num_ops": {
+ "metric": "regionserver.Server.ScanNext_num_ops",
+ "pointInTime": false,
+ "temporal": true
+ },
"metrics/hbase/regionserver/Server/Append_num_ops": {
"metric": "regionserver.Server.Append_num_ops",
"pointInTime": false,
@@ -785,29 +790,39 @@
"pointInTime": false,
"temporal": true
},
+ "metrics/hbase/regionserver/Server/Increment_num_ops": {
+ "metric": "regionserver.Server.Increment_num_ops",
+ "pointInTime": false,
+ "temporal": true
+ },
"metrics/hbase/regionserver/Server/Get_95th_percentile": {
"metric": "regionserver.Server.Get_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
+ "temporal": true
+ },
+ "metrics/hbase/regionserver/Server/ScanNext_95th_percentile": {
+ "metric": "regionserver.Server.ScanNext_95th_percentile",
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Mutate_95th_percentile": {
"metric": "regionserver.Server.Mutate_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Increment_95th_percentile": {
"metric": "regionserver.Server.Increment_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Append_95th_percentile": {
"metric": "regionserver.Server.Append_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/Delete_95th_percentile": {
"metric": "regionserver.Server.Delete_95th_percentile",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/Server/percentFilesLocal": {
@@ -1822,7 +1837,7 @@
},
"metrics/hbase/regionserver/percentFilesLocal": {
"metric": "regionserver.Server.percentFilesLocal",
- "pointInTime": false,
+ "pointInTime": true,
"temporal": true
},
"metrics/hbase/regionserver/fsWriteLatency_avg_time": {
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/widgets.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/widgets.json b/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/widgets.json
index a64a2c8..bdb4338 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/widgets.json
+++ b/ambari-server/src/main/resources/common-services/HBASE/1.1.0.2.3/widgets.json
@@ -1,192 +1,434 @@
{
"layouts": [
- {
- "layout_name": "default_hbase_layout",
- "section_name": "HBASE_SUMMARY",
- "widgetLayoutInfo": [
- {
- "widget_name": "RS_READS_WRITES",
- "display_name": "RegionServer Reads and Writes",
- "description": "This widget shows all the read requests and write requests on all regions for a RegionServer",
- "widget_type": "GRAPH",
- "is_visible": true,
- "metrics": [
- {
- "name": "regionserver.Server.Get_num_ops",
- "ambari_id": "metrics/hbase/regionserver/Server/Get_num_ops",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER",
- "host_component_criteria": "isActive=true"
- },
- {
- "name": "regionserver.Server.Scan_num_ops",
- "ambari_id": "metrics/hbase/regionserver/Server/Scan_num_ops",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
- },
- {
- "name": "regionserver.Server.Append_num_ops",
- "ambari_id": "metrics/hbase/regionserver/Server/Append_num_ops",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
- },
- {
- "name": "regionserver.Server.Delete_num_ops",
- "ambari_id": "metrics/hbase/regionserver/Server/Delete_num_ops",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
- },
- {
- "name": "regionserver.Server.Increment_num_ops",
- "ambari_id": "metrics/hbase/regionserver/Server/Increment_num_ops",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
- },
- {
- "name": "regionserver.Server.Mutate_num_ops",
- "ambari_id": "metrics/hbase/regionserver/Server/Mutate_num_ops",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
+ {
+ "layout_name": "default_hbase_dashboard",
+ "display_name": "Standard HBase Dashboard",
+ "section_name": "HBASE_SUMMARY",
+ "widgetLayoutInfo": [
+ {
+ "widget_name": "RS_READS_WRITES",
+ "display_name": "RegionServer Reads and Writes",
+ "description": "This widget shows all the read requests and write requests on all regions for a RegionServer",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.Get_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Get_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.ScanNext_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/ScanNext_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Append_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Append_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Delete_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Delete_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Increment_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Increment_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Mutate_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Mutate_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Read Requests",
+ "value": "${regionserver.Server.Get_num_ops + regionserver.Server.ScanNext_num_ops}"
+ },
+ {
+ "name": "Write Requests",
+ "value": "${regionserver.Server.Append_num_ops + regionserver.Server.Delete_num_ops + regionserver.Server.Increment_num_ops + regionserver.Server.Mutate_num_ops}"
+ }
+ ],
+ "properties": {
+ "display_unit": "Requests",
+ "graph_type": "LINE",
+ "time_range": "86400000"
}
- ],
- "values": [
- {
- "name": "Read Requests",
- "value": "`${regionserver.Server.Get_num_ops + regionserver.Server.Scan_num_ops}`"
- },
- {
- "name": "Write Requests",
- "value": "`${metrics.hbase.regionserver.Server.Append_num_ops + metrics.hbase.regionserver.Server.Delete_num_ops + metrics.hbase.regionserver.Server.Increment_num_ops + metrics.hbase.regionserver.Server.Mutate_num_ops}`"
+ },
+ {
+ "widget_name": "READ_LATENCY_95",
+ "display_name": "95% Read Latency",
+ "description": "This widget shows 95th percentile of the read latency.",
+ "widget_type": "NUMBER",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.Get_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Get_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.ScanNext_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/ScanNext_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "95% Read Latency",
+ "value": "${regionserver.Server.Get_95th_percentile + regionserver.Server.ScanNext_95th_percentile}"
+ }
+ ],
+ "properties": {
+ "display_unit": "%"
}
- ],
- "properties": {
- "display_unit": "Requests",
- "graph_type": "LINE",
- "time_ranger": "1 week"
- }
- },
- {
- "widget_name": "OPEN_CONNECTIONS",
- "display_name": "Open Connections",
- "description": "This widget shows number of current open connections",
- "widget_type": "GRAPH",
- "is_visible": true,
- "metrics": [
- {
- "name": "ipc.IPC.numOpenConnections",
- "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "widget_name": "WRITE_LATENCY_95",
+ "display_name": "95% Write Latency",
+ "description": "This widget shows 95th percentile of the write latency.",
+ "widget_type": "NUMBER",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.Mutate_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Mutate_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Increment_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Increment_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Append_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Append_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Delete_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Delete_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "95% Write Latency",
+ "value": "${regionserver.Server.Mutate_95th_percentile + regionserver.Server.Increment_95th_percentile + regionserver.Server.Append_95th_percentile + regionserver.Server.Delete_95th_percentile}"
+ }
+ ],
+ "properties": {
+ "display_unit": "%"
}
- ],
- "values": [
- {
- "name": "Open Connections",
- "value": "`${ipc.IPC.numOpenConnections}`"
+ },
+ {
+ "widget_name": "OPEN_CONNECTIONS",
+ "display_name": "Open Connections",
+ "description": "This widget shows number of current open connections",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "ipc.IPC.numOpenConnections",
+ "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections",
+ "category": "",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Open Connections",
+ "value": "${ipc.IPC.numOpenConnections}"
+ }
+ ],
+ "properties": {
+ "display_unit": "Connections",
+ "graph_type": "LINE",
+ "time_range": "86400000"
}
- ],
- "properties": {
- "display_unit": "Connections",
- "graph_type": "STACK",
- "time_ranger": "1 hour"
- }
- },
- {
- "widget_name": "ACTIVE_HANDLER",
- "display_name": "Active Handlers vs Calls in General Queue",
- "widget_type": "GRAPH",
- "is_visible": true,
- "metrics": [
- {
- "name": "ipc.IPC.numOpenConnections",
- "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
- },
- {
- "name": "ipc.IPC.numCallsInGeneralQueue",
- "ambari_id": "metrics/hbase/ipc/IPC/numOpenConnections",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "widget_name": "ACTIVE_HANDLER",
+ "display_name": "Active Handlers vs Calls in General Queue",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "ipc.IPC.numOpenConnections",
+ "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "ipc.IPC.numCallsInGeneralQueue",
+ "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Active Handlers",
+ "value": "${ipc.IPC.numActiveHandler}"
+ },
+ {
+ "name": "Calls in General Queue",
+ "value": "${ipc.IPC.numCallsInGeneralQueue}"
+ }
+ ],
+ "properties": {
+ "graph_type": "LINE",
+ "time_range": "86400000"
}
- ],
- "values": [
- {
- "name": "Active Handlers",
- "value": "`${ipc.IPC.numActiveHandler}`"
- },
- {
- "name": "Calls in General Queue",
- "value": "`${ipc.IPC.numCallsInGeneralQueue}`"
+ },
+ {
+ "widget_name": "FILES_LOCAL",
+ "display_name": "Files Local",
+ "description": "This widget shows percentage of files local.",
+ "widget_type": "NUMBER",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.percentFilesLocal",
+ "metric_path": "metrics/hbase/regionserver/percentFilesLocal",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Files Local",
+ "value": "${regionserver.Server.percentFilesLocal}"
+ }
+ ],
+ "properties": {
+ "display_unit": "%"
}
- ],
- "properties": {
- "graph_type": "LINE",
- "time_ranger": "1 hour"
- }
- },
- {
- "widget_name": "FILES_LOCAL",
- "display_name": "Files Local",
- "description": "This widget shows percentage of files local.",
- "widget_type": "NUMBER",
- "is_visible": true,
- "metrics": [
- {
- "name": "regionserver.Server.percentFilesLocal",
- "ambari_id": "metrics/hbase/regionserver/percentFilesLocal",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "widget_name": "UPDATES_BLOCKED_TIME",
+ "display_name": "Updates Blocked Time",
+ "description": "Number of milliseconds updates have been blocked so the memstore can be flushed",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.updatesBlockedTime",
+ "metric_path": "metrics/hbase/regionserver/Server/updatesBlockedTime",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Updates Blocked Time",
+ "value": "${regionserver.Server.updatesBlockedTime}"
+ }
+ ],
+ "properties": {
+ "display_unit": "ms",
+ "graph_type": "LINE",
+ "time_range": "86400000"
}
- ],
- "values": [
- {
- "name": "Files Local",
- "value": "`${regionserver.Server.percentFilesLocal}`"
+ },
+ {
+ "widget_name": "RS_HOST_METRICS",
+ "display_name": "ReqionServer System Metrics",
+ "description": "ReqionServer widget for Host CPU, Network and Disk Utilization",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "cpu_idle",
+ "metric_path": "metrics/cpu/cpu_idle",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "disk_free",
+ "metric_path": "metrics/disk/disk_free",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "pkts_in",
+ "metric_path": "metrics/network/pkts_in",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "pkts_out",
+ "metric_path": "metrics/network/pkts_out",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "CPU Idle",
+ "value": "${cpu_idle}"
+ },
+ {
+ "name": "Disk Free",
+ "value": "${disk_free}"
+ },
+ {
+ "name": "Network Packets In/Out",
+ "value": "${pkts_in + pkts_out}"
+ }
+ ],
+ "properties": {
+ "graph_type": "LINE",
+ "time_range": "86400000"
}
- ],
- "properties": {
- "display_unit": "%"
}
- },
- {
- "widget_name": "UPDATED_BLOCKED_TIME",
- "display_name": "Updated Blocked Time",
- "description": "",
- "widget_type": "GRAPH",
- "is_visible": true,
- "metrics": [
- {
- "name": "regionserver.Server.updatesBlockedTime",
- "ambari_id": "metrics/hbase/regionserver/Server/updatesBlockedTime",
- "category": "",
- "service_name": "HBASE",
- "component_name": "HBASE_REGIONSERVER"
+ ]
+ },
+ {
+ "layout_name": "default_hbase_heatmap",
+ "display_name": "HBase Heatmaps",
+ "section_name": "HBASE_HEATMAPS",
+ "widgetLayoutInfo": [
+ {
+ "widget_name": "HBASE_COMPACTION_QUEUE_SIZE",
+ "display_name": "HBase Compaction Queue Size",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.compactionQueueLength",
+ "metric_path": "metrics/hbase/regionserver/compactionQueueSize",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Compaction Queue Size",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.compactionQueueLength} "
+ }
+ ],
+ "properties": {
+ "display_unit": "",
+ "max_limit": "10"
+ }
+ },
+ {
+ "widget_name": "HBASE_MEMSTORE_SIZES",
+ "display_name": "HBase Memstore Sizes",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.memStoreSize",
+ "metric_path": "metrics/hbase/regionserver/memstoreSize",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Memstore Sizes",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.memStoreSize}"
+ }
+ ],
+ "properties": {
+ "display_unit": "B",
+ "max_limit": "104857600"
+ }
+ },
+ {
+ "widget_name": "HBASE_READ_REQUEST",
+ "display_name": "HBase Read Request Count",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.readRequestCount",
+ "metric_path": "metrics/hbase/regionserver/readRequestsCount",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Read Request Count",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.readRequestCount}"
+ }
+ ],
+ "properties": {
+ "max_limit": "200"
+ }
+ },
+ {
+ "widget_name": "HBASE_WRITE_REQUEST",
+ "display_name": "HBase Write Request Count",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.writeRequestCount",
+ "metric_path": "metrics/hbase/regionserver/writeRequestsCount",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Write Request Count",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.writeRequestCount}"
+ }
+ ],
+ "properties": {
+ "max_limit": "200"
}
- ],
- "values": [
- {
- "name": "Updated Blocked Time",
- "value": "`${regionserver.Server.updatesBlockedTime}`"
+ },
+ {
+ "widget_name": "HBASE_REGIONS",
+ "display_name": "HBase Regions",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.regionCount",
+ "metric_path": "metrics/hbase/regionserver/regions",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Regions",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.regionCount}"
+ }
+ ],
+ "properties": {
+ "max_limit": "10"
}
- ],
- "properties": {
- "display_unit": "seconds",
- "graph_type": "LINE",
- "time_ranger": "1 day"
}
- }
- ]
- }
-]
-}
+ ]
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/widgets.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/widgets.json b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/widgets.json
new file mode 100644
index 0000000..bdb4338
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/widgets.json
@@ -0,0 +1,434 @@
+{
+ "layouts": [
+ {
+ "layout_name": "default_hbase_dashboard",
+ "display_name": "Standard HBase Dashboard",
+ "section_name": "HBASE_SUMMARY",
+ "widgetLayoutInfo": [
+ {
+ "widget_name": "RS_READS_WRITES",
+ "display_name": "RegionServer Reads and Writes",
+ "description": "This widget shows all the read requests and write requests on all regions for a RegionServer",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.Get_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Get_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.ScanNext_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/ScanNext_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Append_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Append_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Delete_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Delete_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Increment_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Increment_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Mutate_num_ops",
+ "metric_path": "metrics/hbase/regionserver/Server/Mutate_num_ops",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Read Requests",
+ "value": "${regionserver.Server.Get_num_ops + regionserver.Server.ScanNext_num_ops}"
+ },
+ {
+ "name": "Write Requests",
+ "value": "${regionserver.Server.Append_num_ops + regionserver.Server.Delete_num_ops + regionserver.Server.Increment_num_ops + regionserver.Server.Mutate_num_ops}"
+ }
+ ],
+ "properties": {
+ "display_unit": "Requests",
+ "graph_type": "LINE",
+ "time_range": "86400000"
+ }
+ },
+ {
+ "widget_name": "READ_LATENCY_95",
+ "display_name": "95% Read Latency",
+ "description": "This widget shows 95th percentile of the read latency.",
+ "widget_type": "NUMBER",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.Get_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Get_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.ScanNext_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/ScanNext_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "95% Read Latency",
+ "value": "${regionserver.Server.Get_95th_percentile + regionserver.Server.ScanNext_95th_percentile}"
+ }
+ ],
+ "properties": {
+ "display_unit": "%"
+ }
+ },
+ {
+ "widget_name": "WRITE_LATENCY_95",
+ "display_name": "95% Write Latency",
+ "description": "This widget shows 95th percentile of the write latency.",
+ "widget_type": "NUMBER",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.Mutate_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Mutate_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Increment_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Increment_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Append_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Append_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "regionserver.Server.Delete_95th_percentile",
+ "metric_path": "metrics/hbase/regionserver/Server/Delete_95th_percentile",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "95% Write Latency",
+ "value": "${regionserver.Server.Mutate_95th_percentile + regionserver.Server.Increment_95th_percentile + regionserver.Server.Append_95th_percentile + regionserver.Server.Delete_95th_percentile}"
+ }
+ ],
+ "properties": {
+ "display_unit": "%"
+ }
+ },
+ {
+ "widget_name": "OPEN_CONNECTIONS",
+ "display_name": "Open Connections",
+ "description": "This widget shows number of current open connections",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "ipc.IPC.numOpenConnections",
+ "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections",
+ "category": "",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Open Connections",
+ "value": "${ipc.IPC.numOpenConnections}"
+ }
+ ],
+ "properties": {
+ "display_unit": "Connections",
+ "graph_type": "LINE",
+ "time_range": "86400000"
+ }
+ },
+ {
+ "widget_name": "ACTIVE_HANDLER",
+ "display_name": "Active Handlers vs Calls in General Queue",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "ipc.IPC.numOpenConnections",
+ "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "ipc.IPC.numCallsInGeneralQueue",
+ "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Active Handlers",
+ "value": "${ipc.IPC.numActiveHandler}"
+ },
+ {
+ "name": "Calls in General Queue",
+ "value": "${ipc.IPC.numCallsInGeneralQueue}"
+ }
+ ],
+ "properties": {
+ "graph_type": "LINE",
+ "time_range": "86400000"
+ }
+ },
+ {
+ "widget_name": "FILES_LOCAL",
+ "display_name": "Files Local",
+ "description": "This widget shows percentage of files local.",
+ "widget_type": "NUMBER",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.percentFilesLocal",
+ "metric_path": "metrics/hbase/regionserver/percentFilesLocal",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Files Local",
+ "value": "${regionserver.Server.percentFilesLocal}"
+ }
+ ],
+ "properties": {
+ "display_unit": "%"
+ }
+ },
+ {
+ "widget_name": "UPDATES_BLOCKED_TIME",
+ "display_name": "Updates Blocked Time",
+ "description": "Number of milliseconds updates have been blocked so the memstore can be flushed",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "regionserver.Server.updatesBlockedTime",
+ "metric_path": "metrics/hbase/regionserver/Server/updatesBlockedTime",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "Updates Blocked Time",
+ "value": "${regionserver.Server.updatesBlockedTime}"
+ }
+ ],
+ "properties": {
+ "display_unit": "ms",
+ "graph_type": "LINE",
+ "time_range": "86400000"
+ }
+ },
+ {
+ "widget_name": "RS_HOST_METRICS",
+ "display_name": "ReqionServer System Metrics",
+ "description": "ReqionServer widget for Host CPU, Network and Disk Utilization",
+ "widget_type": "GRAPH",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "cpu_idle",
+ "metric_path": "metrics/cpu/cpu_idle",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "disk_free",
+ "metric_path": "metrics/disk/disk_free",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "pkts_in",
+ "metric_path": "metrics/network/pkts_in",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ },
+ {
+ "name": "pkts_out",
+ "metric_path": "metrics/network/pkts_out",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "CPU Idle",
+ "value": "${cpu_idle}"
+ },
+ {
+ "name": "Disk Free",
+ "value": "${disk_free}"
+ },
+ {
+ "name": "Network Packets In/Out",
+ "value": "${pkts_in + pkts_out}"
+ }
+ ],
+ "properties": {
+ "graph_type": "LINE",
+ "time_range": "86400000"
+ }
+ }
+ ]
+ },
+ {
+ "layout_name": "default_hbase_heatmap",
+ "display_name": "HBase Heatmaps",
+ "section_name": "HBASE_HEATMAPS",
+ "widgetLayoutInfo": [
+ {
+ "widget_name": "HBASE_COMPACTION_QUEUE_SIZE",
+ "display_name": "HBase Compaction Queue Size",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": true,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.compactionQueueLength",
+ "metric_path": "metrics/hbase/regionserver/compactionQueueSize",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Compaction Queue Size",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.compactionQueueLength} "
+ }
+ ],
+ "properties": {
+ "display_unit": "",
+ "max_limit": "10"
+ }
+ },
+ {
+ "widget_name": "HBASE_MEMSTORE_SIZES",
+ "display_name": "HBase Memstore Sizes",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.memStoreSize",
+ "metric_path": "metrics/hbase/regionserver/memstoreSize",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Memstore Sizes",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.memStoreSize}"
+ }
+ ],
+ "properties": {
+ "display_unit": "B",
+ "max_limit": "104857600"
+ }
+ },
+ {
+ "widget_name": "HBASE_READ_REQUEST",
+ "display_name": "HBase Read Request Count",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.readRequestCount",
+ "metric_path": "metrics/hbase/regionserver/readRequestsCount",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Read Request Count",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.readRequestCount}"
+ }
+ ],
+ "properties": {
+ "max_limit": "200"
+ }
+ },
+ {
+ "widget_name": "HBASE_WRITE_REQUEST",
+ "display_name": "HBase Write Request Count",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.writeRequestCount",
+ "metric_path": "metrics/hbase/regionserver/writeRequestsCount",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Write Request Count",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.writeRequestCount}"
+ }
+ ],
+ "properties": {
+ "max_limit": "200"
+ }
+ },
+ {
+ "widget_name": "HBASE_REGIONS",
+ "display_name": "HBase Regions",
+ "description": "",
+ "widget_type": "HEATMAP",
+ "is_visible": false,
+ "metrics": [
+ {
+ "name": "Hadoop:service=HBase,name=RegionServer,sub=Server.regionCount",
+ "metric_path": "metrics/hbase/regionserver/regions",
+ "service_name": "HBASE",
+ "component_name": "HBASE_REGIONSERVER"
+ }
+ ],
+ "values": [
+ {
+ "name": "HBase Regions",
+ "value": "${Hadoop:service=HBase,name=RegionServer,sub=Server.regionCount}"
+ }
+ ],
+ "properties": {
+ "max_limit": "10"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/assets/data/widget_layouts/HBASE/default_dashboard.json
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/data/widget_layouts/HBASE/default_dashboard.json b/ambari-web/app/assets/data/widget_layouts/HBASE/default_dashboard.json
index 0636541..0ff181a 100644
--- a/ambari-web/app/assets/data/widget_layouts/HBASE/default_dashboard.json
+++ b/ambari-web/app/assets/data/widget_layouts/HBASE/default_dashboard.json
@@ -1,132 +1,154 @@
{
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widget_layouts/6",
- "widgets": [
+ "items": [
{
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/29",
- "id": 29,
- "metrics": "[{\"name\":\"regionserver.Server.Get_num_ops\",\"metric_path\":\"metrics/jvm/gcCount\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.ScanNext_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/ScanNext_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Append_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/Append_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Delete_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/Delete_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Increment_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/Increment_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Mutate_num_ops\",\"metric_pa
th\":\"metrics/hbase/regionserver/Server/Mutate_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": "This widget shows all the read requests and write requests on all regions for a RegionServer",
- "scope": "CLUSTER",
- "properties": "{\"display_unit\":\"Requests\",\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
- "widget_name": "RS_READS_WRITES",
- "widget_type": "GRAPH",
- "time_created": 1428990958952,
- "display_name": "RegionServer Reads and Writes",
- "values": "[{\"name\":\"Read Requests\",\"value\":\"${regionserver.Server.Get_num_ops + regionserver.Server.ScanNext_num_ops}\"},{\"name\":\"Write Requests\",\"value\":\"${regionserver.Server.Append_num_ops + regionserver.Server.Delete_num_ops + regionserver.Server.Increment_num_ops + regionserver.Server.Mutate_num_ops}\"}]",
- "cluster_name": "c1"
- },
- {
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/30",
- "id": 30,
- "metrics": "[{\"name\":\"regionserver.Server.Get_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Get_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.ScanNext_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/ScanNext_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": "This widget shows 95th percentile of the read latency.",
- "scope": "CLUSTER",
- "properties": "{\"display_unit\":\"%\"}",
- "widget_name": "READ_LATENCY_95",
- "widget_type": "NUMBER",
- "time_created": 1428990958952,
- "display_name": "95% Read Latency",
- "values": "[{\"name\":\"95% Read Latency\",\"value\":\"${regionserver.Server.Get_95th_percentile + regionserver.Server.ScanNext_95th_percentile}\"}]",
- "cluster_name": "c1"
- },
- {
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/31",
- "id": 31,
- "metrics": "[{\"name\":\"regionserver.Server.Mutate_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Mutate_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Increment_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Increment_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Append_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Append_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Delete_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Delete_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": "This widget shows 95th percentile of the write latency.",
- "scope": "CLUSTER",
- "properties": "{\"display_unit\":\"%\"}",
- "widget_name": "WRITE_LATENCY_95",
- "widget_type": "NUMBER",
- "time_created": 1428990958952,
- "display_name": "95% Write Latency",
- "values": "[{\"name\":\"95% Write Latency\",\"value\":\"${regionserver.Server.Mutate_95th_percentile + regionserver.Server.Increment_95th_percentile + regionserver.Server.Append_95th_percentile + regionserver.Server.Delete_95th_percentile}\"}]",
- "cluster_name": "c1"
- },
- {
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/32",
- "id": 32,
- "metrics": "[{\"name\":\"ipc.IPC.numOpenConnections\",\"metric_path\":\"metrics/hbase/ipc/IPC/numOpenConnections\",\"category\":\"\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": "This widget shows number of current open connections",
- "scope": "CLUSTER",
- "properties": "{\"display_unit\":\"Connections\",\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
- "widget_name": "OPEN_CONNECTIONS",
- "widget_type": "GRAPH",
- "time_created": 1428990958952,
- "display_name": "Open Connections",
- "values": "[{\"name\":\"Open Connections\",\"value\":\"${ipc.IPC.numOpenConnections}\"}]",
- "cluster_name": "c1"
- },
- {
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/33",
- "id": 33,
- "metrics": "[{\"name\":\"ipc.IPC.numOpenConnections\",\"metric_path\":\"metrics/hbase/ipc/IPC/numOpenConnections\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"ipc.IPC.numCallsInGeneralQueue\",\"metric_path\":\"metrics/hbase/ipc/IPC/numOpenConnections\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": null,
- "scope": "CLUSTER",
- "properties": "{\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
- "widget_name": "ACTIVE_HANDLER",
- "widget_type": "GRAPH",
- "time_created": 1428990958952,
- "display_name": "Active Handlers vs Calls in General Queue",
- "values": "[{\"name\":\"Active Handlers\",\"value\":\"${ipc.IPC.numActiveHandler}\"},{\"name\":\"Calls in General Queue\",\"value\":\"${ipc.IPC.numCallsInGeneralQueue}\"}]",
- "cluster_name": "c1"
- },
- {
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/34",
- "id": 34,
- "metrics": "[{\"name\":\"regionserver.Server.percentFilesLocal\",\"metric_path\":\"metrics/hbase/regionserver/percentFilesLocal\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": "This widget shows percentage of files local.",
- "scope": "CLUSTER",
- "properties": "{\"display_unit\":\"%\"}",
- "widget_name": "FILES_LOCAL",
- "widget_type": "NUMBER",
- "time_created": 1428990958952,
- "display_name": "Files Local",
- "values": "[{\"name\":\"Files Local\",\"value\":\"${regionserver.Server.percentFilesLocal}\"}]",
- "cluster_name": "c1"
- },
- {
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/35",
- "id": 35,
- "metrics": "[{\"name\":\"regionserver.Server.updatesBlockedTime\",\"metric_path\":\"metrics/hbase/regionserver/Server/updatesBlockedTime\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": "Updated Blocked Time",
- "scope": "CLUSTER",
- "properties": "{\"display_unit\":\"seconds\",\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
- "widget_name": "UPDATED_BLOCKED_TIME",
- "widget_type": "GRAPH",
- "time_created": 1428990958952,
- "display_name": "Updated Blocked Time",
- "values": "[{\"name\":\"Updated Blocked Time\",\"value\":\"${regionserver.Server.updatesBlockedTime}\"}]",
- "cluster_name": "c1"
- },
- {
- "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/36",
- "id": 36,
- "metrics": "[{\"name\":\"cpu_idle\",\"metric_path\":\"metrics/cpu/cpu_idle\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"disk_free\",\"metric_path\":\"metrics/disk/disk_free\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"pkts_in\",\"metric_path\":\"metrics/network/pkts_in\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"pkts_out\",\"metric_path\":\"metrics/network/pkts_out\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
- "author": "ambari",
- "description": "ReqionServer widget for Host CPU, Network and Disk Utilization",
- "scope": "CLUSTER",
- "properties": "{\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
- "widget_name": "RS_HOST_METRICS",
- "widget_type": "GRAPH",
- "time_created": 1428990958952,
- "display_name": "ReqionServer System Metrics",
- "values": "[{\"name\":\"CPU Idle\",\"value\":\"${cpu_idle}\"},{\"name\":\"Disk Free\",\"value\":\"${disk_free}\"},{\"name\":\"Network Packets In/Out\",\"value\":\"${pkts_in + pkts_out}\"}]",
- "cluster_name": "c1"
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widget_layouts/6",
+ "WidgetLayoutInfo": {
+ "cluster_name": "c1",
+ "display_name": "Standard HBase Dashboard",
+ "id": 6,
+ "layout_name": "default_hbase_dashboard",
+ "scope": "CLUSTER",
+ "section_name": "HBASE_SUMMARY",
+ "user_name": "ambari",
+ "widgets": [
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/29",
+ "WidgetInfo": {
+ "id": 29,
+ "metrics": "[{\"name\":\"regionserver.Server.Get_num_ops\",\"metric_path\":\"metrics/jvm/gcCount\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.ScanNext_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/ScanNext_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Append_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/Append_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Delete_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/Delete_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Increment_num_ops\",\"metric_path\":\"metrics/hbase/regionserver/Server/Increment_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Mutate_num_ops\",\"m
etric_path\":\"metrics/hbase/regionserver/Server/Mutate_num_ops\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": "This widget shows all the read requests and write requests on all regions for a RegionServer",
+ "scope": "CLUSTER",
+ "properties": "{\"display_unit\":\"Requests\",\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
+ "widget_name": "RS_READS_WRITES",
+ "widget_type": "GRAPH",
+ "time_created": 1428990958952,
+ "display_name": "RegionServer Reads and Writes",
+ "values": "[{\"name\":\"Read Requests\",\"value\":\"${regionserver.Server.Get_num_ops+regionserver.Server.ScanNext_num_ops}\"},{\"name\":\"Write Requests\",\"value\":\"${regionserver.Server.Append_num_ops+regionserver.Server.Delete_num_ops+regionserver.Server.Increment_num_ops+regionserver.Server.Mutate_num_ops}\"}]",
+ "cluster_name": "c1"
+ }
+ },
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/30",
+ "WidgetInfo": {
+ "id": 30,
+ "metrics": "[{\"name\":\"regionserver.Server.Get_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Get_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.ScanNext_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/ScanNext_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": "This widget shows 95th percentile of the read latency.",
+ "scope": "CLUSTER",
+ "properties": "{\"display_unit\":\"%\"}",
+ "widget_name": "READ_LATENCY_95",
+ "widget_type": "NUMBER",
+ "time_created": 1428990958952,
+ "display_name": "95% Read Latency",
+ "values": "[{\"name\":\"95% Read Latency\",\"value\":\"${regionserver.Server.Get_95th_percentile+regionserver.Server.ScanNext_95th_percentile}\"}]",
+ "cluster_name": "c1"
+ }
+ },
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/31",
+ "WidgetInfo": {
+ "id": 31,
+ "metrics": "[{\"name\":\"regionserver.Server.Mutate_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Mutate_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Increment_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Increment_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Append_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Append_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"regionserver.Server.Delete_95th_percentile\",\"metric_path\":\"metrics/hbase/regionserver/Server/Delete_95th_percentile\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": "This widget shows 95th percentile of the write latency.",
+ "scope": "CLUSTER",
+ "properties": "{\"display_unit\":\"%\"}",
+ "widget_name": "WRITE_LATENCY_95",
+ "widget_type": "NUMBER",
+ "time_created": 1428990958952,
+ "display_name": "95% Write Latency",
+ "values": "[{\"name\":\"95% Write Latency\",\"value\":\"${regionserver.Server.Mutate_95th_percentile+regionserver.Server.Increment_95th_percentile+regionserver.Server.Append_95th_percentile+regionserver.Server.Delete_95th_percentile}\"}]",
+ "cluster_name": "c1"
+ }
+ },
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/32",
+ "WidgetInfo": {
+ "id": 32,
+ "metrics": "[{\"name\":\"ipc.IPC.numOpenConnections\",\"metric_path\":\"metrics/hbase/ipc/IPC/numOpenConnections\",\"category\":\"\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": "This widget shows number of current open connections",
+ "scope": "CLUSTER",
+ "properties": "{\"display_unit\":\"Connections\",\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
+ "widget_name": "OPEN_CONNECTIONS",
+ "widget_type": "GRAPH",
+ "time_created": 1428990958952,
+ "display_name": "Open Connections",
+ "values": "[{\"name\":\"Open Connections\",\"value\":\"${ipc.IPC.numOpenConnections}\"}]",
+ "cluster_name": "c1"
+ }
+ },
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/33",
+ "WidgetInfo": {
+ "id": 33,
+ "metrics": "[{\"name\":\"ipc.IPC.numOpenConnections\",\"metric_path\":\"metrics/hbase/ipc/IPC/numOpenConnections\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"ipc.IPC.numCallsInGeneralQueue\",\"metric_path\":\"metrics/hbase/ipc/IPC/numOpenConnections\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": null,
+ "scope": "CLUSTER",
+ "properties": "{\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
+ "widget_name": "ACTIVE_HANDLER",
+ "widget_type": "GRAPH",
+ "time_created": 1428990958952,
+ "display_name": "Active Handlers vs Calls in General Queue",
+ "values": "[{\"name\":\"Active Handlers\",\"value\":\"${ipc.IPC.numActiveHandler}\"},{\"name\":\"Calls in General Queue\",\"value\":\"${ipc.IPC.numCallsInGeneralQueue}\"}]",
+ "cluster_name": "c1"
+ }
+ },
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/34",
+ "WidgetInfo": {
+ "id": 34,
+ "metrics": "[{\"name\":\"regionserver.Server.percentFilesLocal\",\"metric_path\":\"metrics/hbase/regionserver/percentFilesLocal\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": "This widget shows percentage of files local.",
+ "scope": "CLUSTER",
+ "properties": "{\"display_unit\":\"%\"}",
+ "widget_name": "FILES_LOCAL",
+ "widget_type": "NUMBER",
+ "time_created": 1428990958952,
+ "display_name": "Files Local",
+ "values": "[{\"name\":\"Files Local\",\"value\":\"${regionserver.Server.percentFilesLocal}\"}]",
+ "cluster_name": "c1"
+ }
+ },
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/35",
+ "WidgetInfo": {
+ "id": 35,
+ "metrics": "[{\"name\":\"regionserver.Server.updatesBlockedTime\",\"metric_path\":\"metrics/hbase/regionserver/Server/updatesBlockedTime\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": "Updates Blocked Time",
+ "scope": "CLUSTER",
+ "properties": "{\"display_unit\":\"seconds\",\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
+ "widget_name": "UPDATED_BLOCKED_TIME",
+ "widget_type": "GRAPH",
+ "time_created": 1428990958952,
+ "display_name": "Updates Blocked Time",
+ "values": "[{\"name\":\"Updated Blocked Time\",\"value\":\"${regionserver.Server.updatesBlockedTime}\"}]",
+ "cluster_name": "c1"
+ }
+ },
+ {
+ "href": "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/widgets/36",
+ "WidgetInfo": {
+ "id": 36,
+ "metrics": "[{\"name\":\"cpu_idle\",\"metric_path\":\"metrics/cpu/cpu_idle\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"disk_free\",\"metric_path\":\"metrics/disk/disk_free\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"pkts_in\",\"metric_path\":\"metrics/network/pkts_in\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"},{\"name\":\"pkts_out\",\"metric_path\":\"metrics/network/pkts_out\",\"service_name\":\"HBASE\",\"component_name\":\"HBASE_REGIONSERVER\"}]",
+ "author": "ambari",
+ "description": "ReqionServer widget for Host CPU, Network and Disk Utilization",
+ "scope": "CLUSTER",
+ "properties": "{\"graph_type\":\"LINE\",\"time_range\":\"86400000\"}",
+ "widget_name": "RS_HOST_METRICS",
+ "widget_type": "GRAPH",
+ "time_created": 1428990958952,
+ "display_name": "ReqionServer System Metrics",
+ "values": "[{\"name\":\"CPU Idle\",\"value\":\"${cpu_idle}\"},{\"name\":\"Disk Free\",\"value\":\"${disk_free}\"},{\"name\":\"Network Packets In/Out\",\"value\":\"${pkts_in + pkts_out}\"}]",
+ "cluster_name": "c1"
+ }
+ }
+ ]
+ }
}
- ],
- "cluster_name": "c1",
- "display_name": "Standard HBase Dashboard",
- "id": 6,
- "layout_name": "default_hbase_dashboard",
- "scope": "CLUSTER",
- "section_name": "HBASE_SUMMARY",
- "user_name": "ambari"
+ ]
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/config.js b/ambari-web/app/config.js
index 140e7c3..27471fb 100644
--- a/ambari-web/app/config.js
+++ b/ambari-web/app/config.js
@@ -73,6 +73,7 @@ App.supports = {
installGanglia: false,
opsDuringRollingUpgrade: false,
customizedWidgets: false,
+ customizedWidgetLayout: false,
enhancedConfigs: false
};
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/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 5a37bc3..ad27c2d 100644
--- a/ambari-web/app/controllers/main/service/info/summary.js
+++ b/ambari-web/app/controllers/main/service/info/summary.js
@@ -43,11 +43,28 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
/**
* UI section name
*/
- sectionName: function() {
+ sectionName: function () {
return this.get('content.serviceName') + "_SUMMARY";
}.property('content.serviceName'),
/**
+ * UI default layout name
+ */
+ defaultLayoutName: function () {
+ return "default_" + this.get('content.serviceName').toLowerCase() + "_dashboard";
+ }.property('content.serviceName'),
+
+ /**
+ * Does Service has widget descriptor defined in the stack
+ * @type {boolean}
+ */
+ isServiceWithEnhancedWidgets: function () {
+ var serviceName = this.get('content.serviceName');
+ var stackService = App.StackService.find().findProperty('serviceName', serviceName);
+ return stackService.get('isServiceWithWidgets') && App.supports.customizedWidgets;
+ }.property('content.serviceName'),
+
+ /**
* Ranger plugins data
* @type {array}
*/
@@ -252,7 +269,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
return App.ModalPopup.show({
header: Em.I18n.t('services.service.summary.alerts.popup.header').format(service.get('displayName')),
autoHeight: false,
- classNames: [ 'forty-percent-width-modal' ],
+ classNames: ['forty-percent-width-modal'],
bodyClass: Em.View.extend({
templateName: require('templates/main/service/info/service_alert_popup'),
classNames: ['service-alerts'],
@@ -317,16 +334,28 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
isMineWidgetsLoaded: false,
/**
+ * @Type {App.WidgetLayout}
+ */
+ activeWidgetLayout: {},
+
+
+ /**
* @type {Em.A}
*/
- widgets: function() {
- return App.Widget.find().filterProperty('sectionName', this.get('content.serviceName') + '_SUMMARY');
+ widgets: function () {
+ if (this.get('isWidgetsLoaded')) {
+ if (this.get('activeWidgetLayout.widgets')) {
+ return this.get('activeWidgetLayout.widgets').toArray();
+ } else {
+ return [];
+ }
+ }
}.property('isWidgetsLoaded'),
/**
* @type {Em.A}
*/
- widgetLayouts: function() {
+ widgetLayouts: function () {
return App.WidgetLayout.find();
}.property('isWidgetLayoutsLoaded'),
@@ -334,7 +363,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
* load widget layouts across all users in CLUSTER scope
* @returns {$.ajax}
*/
- loadWidgetLayouts: function() {
+ loadWidgetLayouts: function () {
this.set('isWidgetLayoutsLoaded', false);
return App.ajax.send({
name: 'widgets.layouts.get',
@@ -346,7 +375,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
});
},
- loadWidgetLayoutsSuccessCallback: function(data) {
+ loadWidgetLayoutsSuccessCallback: function (data) {
App.widgetLayoutMapper.map(data);
this.set('isWidgetLayoutsLoaded', true);
},
@@ -355,29 +384,35 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
* load widgets defined by user
* @returns {$.ajax}
*/
- loadWidgets: function () {
+ loadActiveWidgetLayout: function () {
+ this.set('activeWidgetLayout', {});
this.set('isWidgetsLoaded', false);
- return App.ajax.send({
- name: 'widgets.layout.userDefined.get',
- sender: this,
- data: {
- loginName: App.router.get('loginName'),
- sectionName: this.get('sectionName')
- },
- success: 'loadWidgetsSuccessCallback'
- });
+ if (this.get('isServiceWithEnhancedWidgets')) {
+ return App.ajax.send({
+ name: 'widget.layout.get',
+ sender: this,
+ data: {
+ layoutName: this.get('defaultLayoutName'),
+ serviceName: this.get('content.serviceName')
+ },
+ success: 'loadActiveWidgetLayoutSuccessCallback'
+ });
+ } else {
+ this.set('isWidgetsLoaded', true);
+ }
},
+
/**
* success callback of <code>loadWidgets()</code>
* @param {object|null} data
*/
- loadWidgetsSuccessCallback: function (data) {
+ loadActiveWidgetLayoutSuccessCallback: function (data) {
+ console.log("*******: " + data.items[0] );
if (data.items[0]) {
- App.widgetMapper.map(data.items[0], this.get('content.serviceName'));
+ App.widgetLayoutMapper.map(data.items[0]);
+ this.set('activeWidgetLayout', App.WidgetLayout.find().findProperty('layoutName', this.get('defaultLayoutName')));
this.set('isWidgetsLoaded', true);
- } else {
- this.loadStackWidgetsLayout();
}
},
@@ -474,37 +509,12 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
},
/**
- * load widgets defined by stack
- * @returns {$.ajax}
- */
- loadStackWidgetsLayout: function () {
- return App.ajax.send({
- name: 'widgets.layout.stackDefined.get',
- sender: this,
- data: {
- stackVersionURL: App.get('stackVersionURL'),
- serviceName: this.get('content.serviceName')
- },
- success: 'loadStackWidgetsLayoutSuccessCallback'
- });
- },
-
- /**
- * success callback of <code>loadStackWidgetsLayout()</code>
- * @param {object|null} data
- */
- loadStackWidgetsLayoutSuccessCallback: function (data) {
- App.widgetMapper.map(data.artifact_data.layouts.findProperty('section_name', this.get('sectionName')), this.get('content.serviceName'));
- this.set('isWidgetsLoaded', true);
- },
-
- /**
* add widgets, on click handler for "Add"
*/
addWidget: function (event) {
var widget = event.context;
var widgetName = widget.widgetName;
- widget.set('added',!widget.added);
+ widget.set('added', !widget.added);
// add current widget to current layout
},
@@ -515,7 +525,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
hideWidget: function (event) {
var widget = event.context;
var widgetName = widget.widgetName;
- widget.set('added',!widget.added);
+ widget.set('added', !widget.added);
// hide current widget from current layout
},
@@ -659,10 +669,10 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
* displaying content filtered by service name and status.
*/
filteredContent: function () {
- var activeService = this.get('activeService')? this.get('activeService'): this.get('controller.content.serviceName');
+ var activeService = this.get('activeService') ? this.get('activeService') : this.get('controller.content.serviceName');
var result = [];
- this.get('content').forEach(function(widget) {
- if (widget.get('serviceName').indexOf(activeService) >= 0){
+ this.get('content').forEach(function (widget) {
+ if (widget.get('serviceName').indexOf(activeService) >= 0) {
result.pushObject(widget);
}
});
@@ -689,7 +699,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
isActive: function () {
return this.get('item') == this.get('parentView.activeTab');
}.property('item', 'parentView.activeTab'),
- elementId: Ember.computed(function(){
+ elementId: Ember.computed(function () {
var label = Em.get(this, 'templateData.keywords.category.label');
return label ? 'widget-browser-view-tab-' + label.toLowerCase().replace(/\s/g, '-') : "";
}),
@@ -717,7 +727,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({
value: service.get('serviceName'),
label: service.get('displayName'),
isActive: function () {
- var activeService = view.get('activeService')? view.get('activeService'): view.get('controller.content.serviceName');
+ var activeService = view.get('activeService') ? view.get('activeService') : view.get('controller.content.serviceName');
return this.get('value') == activeService;
}.property('value', 'view.activeService')
})
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/mappers/stack_service_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_service_mapper.js b/ambari-web/app/mappers/stack_service_mapper.js
index 612c62e..1af4bdf 100644
--- a/ambari-web/app/mappers/stack_service_mapper.js
+++ b/ambari-web/app/mappers/stack_service_mapper.js
@@ -103,7 +103,7 @@ App.stackServiceMapper = App.QuickDataMapper.create({
}, this);
stackService.stack_id = stackService.stack_name + '-' + stackService.stack_version;
stackService.service_components = serviceComponents;
- stackService.is_service_with_widgets = item.artifacts.someProperty('Artifacts.artifact_name', 'widget_descriptor');
+ stackService.is_service_with_widgets = item.artifacts.someProperty('Artifacts.artifact_name', 'widgets_descriptor');
// @todo: replace with server response value after API implementation
if (nonInstallableServices.contains(stackService.service_name)) {
stackService.is_installable = false;
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/mappers/widget_layout_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/widget_layout_mapper.js b/ambari-web/app/mappers/widget_layout_mapper.js
index d46099d..7535f04 100644
--- a/ambari-web/app/mappers/widget_layout_mapper.js
+++ b/ambari-web/app/mappers/widget_layout_mapper.js
@@ -18,12 +18,52 @@
App.widgetLayoutMapper = App.QuickDataMapper.create({
- model: App.WidgetLayout,
- config: {
- id: 'widget_layouts.layout_name',
- layout_name: 'widget_layouts.layout_name',
- section_name: 'widget_layouts.section_name',
- scope: 'widget_layouts.scope',
- user: 'Users.user_name'
+ widgetLayoutModel: App.WidgetLayout,
+ widgetModel: App.Widget,
+ widgetLayoutConfig: {
+ id: 'id',
+ layout_name: 'layout_name',
+ section_name: 'section_name',
+ scope: 'scope',
+ user: 'user_name',
+ display_name: 'display_name',
+ widgets_key: 'widgets',
+ widgets_type: 'array',
+ widgets: {
+ item: 'id'
+ }
+ },
+ widgetConfig: {
+ id: 'id',
+ widget_name: 'widget_name',
+ default_order: 'default_order',
+ widget_type: 'widget_type',
+ display_name: 'display_name',
+ time_created: 'time_created',
+ author: 'author',
+ properties: 'properties',
+ metrics: 'metrics',
+ values: 'values',
+ description: 'description',
+ scope: 'scope'
+ },
+
+
+ map: function(json) {
+ var modelWidget = this.widgetModel;
+ var modelWidgetLayout = this.widgetLayoutModel;
+
+ var resultWidget = [];
+ json.WidgetLayoutInfo.widgets.forEach(function(item, index) {
+ item = item.WidgetInfo;
+ item.metrics = JSON.parse(item.metrics);
+ item.values = JSON.parse(item.values);
+ resultWidget.push(this.parseIt(item, this.widgetConfig));
+ json.WidgetLayoutInfo.widgets[index] = item;
+ },this);
+
+ var resultWidgetLayout = this.parseIt(json.WidgetLayoutInfo, this.widgetLayoutConfig);
+ App.store.loadMany(modelWidget, resultWidget);
+ App.store.load(modelWidgetLayout, resultWidgetLayout);
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/6dae33e5/ambari-web/app/mappers/widget_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/widget_mapper.js b/ambari-web/app/mappers/widget_mapper.js
index c9b1aef..0498635 100644
--- a/ambari-web/app/mappers/widget_mapper.js
+++ b/ambari-web/app/mappers/widget_mapper.js
@@ -26,7 +26,6 @@ App.widgetMapper = App.QuickDataMapper.create({
widget_type: 'widget_type',
display_name: 'display_name',
service_name: 'service_name',
- component_name: 'component_name',
section_name: 'section_name',
time_created: 'time_created',
author: 'author',
@@ -34,7 +33,7 @@ App.widgetMapper = App.QuickDataMapper.create({
metrics: 'metrics',
values: 'values',
description: 'description',
- is_visible: 'is_visible'
+ scope: 'scope'
},
map: function (json, serviceName) {
//TODO add service name to user layout API response
@@ -47,7 +46,6 @@ App.widgetMapper = App.QuickDataMapper.create({
json.widgetLayoutInfo.forEach(function (item, index) {
item.service_name = serviceName;
item.section_name = sectionName;
- item.id = item.widget_name + "_" + (item.id || "0"); // user created widgets will have id as their primary id. stack created widgets will not have id and will have their widget_name as unique id
item.default_order = (index + 1);
result.push(this.parseIt(item, this.config));
}, this);