Repository: ambari Updated Branches: refs/heads/trunk f76f239d8 -> fc5b29f43
AMBARI-10567. Integrate displaying of Graph widget on service summary page with the API. (Andrii via Jaimin) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fc5b29f4 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fc5b29f4 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fc5b29f4 Branch: refs/heads/trunk Commit: fc5b29f435a2e4504d191c885403d1b6038be806 Parents: f76f239 Author: Jaimin Jetly <[email protected]> Authored: Fri Apr 17 16:58:59 2015 -0700 Committer: Jaimin Jetly <[email protected]> Committed: Fri Apr 17 16:58:59 2015 -0700 ---------------------------------------------------------------------- .../HBASE/0.96.0.2.0/widgets.json | 10 ++-- .../HBASE/1.1.0.2.3/widgets.json | 10 ++-- .../stacks/HDP/2.3/services/HBASE/widgets.json | 10 ++-- .../widget_layouts/HBASE/default_dashboard.json | 2 +- .../controllers/main/service/info/summary.js | 4 +- ambari-web/app/mappers/widget_layout_mapper.js | 55 ++++---------------- ambari-web/app/mappers/widget_mapper.js | 20 +++---- ambari-web/app/models/widget.js | 1 + .../views/common/widget/graph_widget_view.js | 16 +++--- .../app/views/main/service/info/summary.js | 2 +- .../main/service/info/summary_test.js | 6 ++- 11 files changed, 55 insertions(+), 81 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 c0e9821..8920843 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 @@ -86,7 +86,7 @@ } ], "properties": { - "display_unit": "%" + "display_unit": "" } }, { @@ -128,7 +128,7 @@ } ], "properties": { - "display_unit": "%" + "display_unit": "" } }, { @@ -165,14 +165,14 @@ "is_visible": true, "metrics": [ { - "name": "ipc.IPC.numOpenConnections", - "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections", + "name": "ipc.IPC.numActiveHandler", + "metric_path": "metrics/hbase/ipc/IPC/numActiveHandler", "service_name": "HBASE", "component_name": "HBASE_REGIONSERVER" }, { "name": "ipc.IPC.numCallsInGeneralQueue", - "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections", + "metric_path": "metrics/hbase/ipc/IPC/numCallsInGeneralQueue", "service_name": "HBASE", "component_name": "HBASE_REGIONSERVER" } http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 bdb4338..1212133 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 @@ -92,7 +92,7 @@ } ], "properties": { - "display_unit": "%" + "display_unit": "" } }, { @@ -134,7 +134,7 @@ } ], "properties": { - "display_unit": "%" + "display_unit": "" } }, { @@ -171,14 +171,14 @@ "is_visible": true, "metrics": [ { - "name": "ipc.IPC.numOpenConnections", - "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections", + "name": "ipc.IPC.numActiveHandler", + "metric_path": "metrics/hbase/ipc/IPC/numActiveHandler", "service_name": "HBASE", "component_name": "HBASE_REGIONSERVER" }, { "name": "ipc.IPC.numCallsInGeneralQueue", - "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections", + "metric_path": "metrics/hbase/ipc/IPC/numCallsInGeneralQueue", "service_name": "HBASE", "component_name": "HBASE_REGIONSERVER" } http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 index bdb4338..1212133 100644 --- 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 @@ -92,7 +92,7 @@ } ], "properties": { - "display_unit": "%" + "display_unit": "" } }, { @@ -134,7 +134,7 @@ } ], "properties": { - "display_unit": "%" + "display_unit": "" } }, { @@ -171,14 +171,14 @@ "is_visible": true, "metrics": [ { - "name": "ipc.IPC.numOpenConnections", - "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections", + "name": "ipc.IPC.numActiveHandler", + "metric_path": "metrics/hbase/ipc/IPC/numActiveHandler", "service_name": "HBASE", "component_name": "HBASE_REGIONSERVER" }, { "name": "ipc.IPC.numCallsInGeneralQueue", - "metric_path": "metrics/hbase/ipc/IPC/numOpenConnections", + "metric_path": "metrics/hbase/ipc/IPC/numCallsInGeneralQueue", "service_name": "HBASE", "component_name": "HBASE_REGIONSERVER" } http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 0ff181a..2d4b2d1 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 @@ -24,7 +24,7 @@ "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}\"}]", + "values": "[{\"name\":\"Write Requests\",\"value\":\"${regionserver.Server.Append_num_ops}\"}]", "cluster_name": "c1" } }, http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 49505e5..696d2c9 100644 --- a/ambari-web/app/controllers/main/service/info/summary.js +++ b/ambari-web/app/controllers/main/service/info/summary.js @@ -408,9 +408,9 @@ App.MainServiceInfoSummaryController = Em.Controller.extend({ * @param {object|null} data */ loadActiveWidgetLayoutSuccessCallback: function (data) { - console.log("*******: " + data.items[0] ); if (data.items[0]) { - App.widgetLayoutMapper.map(data.items[0]); + App.widgetMapper.map(data.items[0].WidgetLayoutInfo); + App.widgetLayoutMapper.map(data); this.set('activeWidgetLayout', App.WidgetLayout.find().findProperty('layoutName', this.get('defaultLayoutName'))); this.set('isWidgetsLoaded', true); } http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 7535f04..8bba35f 100644 --- a/ambari-web/app/mappers/widget_layout_mapper.js +++ b/ambari-web/app/mappers/widget_layout_mapper.js @@ -18,52 +18,19 @@ App.widgetLayoutMapper = App.QuickDataMapper.create({ - 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', + model: App.WidgetLayout, + + config: { + id: 'WidgetLayoutInfo.id', + layout_name: 'WidgetLayoutInfo.layout_name', + section_name: 'WidgetLayoutInfo.section_name', + scope: 'WidgetLayoutInfo.scope', + user: 'WidgetLayoutInfo.user_name', + display_name: 'WidgetLayoutInfo.display_name', + widgets_key: 'WidgetLayoutInfo.widgets', widgets_type: 'array', widgets: { - item: 'id' + item: 'WidgetInfo.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/fc5b29f4/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 0498635..695a57e 100644 --- a/ambari-web/app/mappers/widget_mapper.js +++ b/ambari-web/app/mappers/widget_mapper.js @@ -21,6 +21,7 @@ App.widgetMapper = App.QuickDataMapper.create({ model: App.Widget, config: { id: 'id', + layout_id: 'layout_id', widget_name: 'widget_name', default_order: 'default_order', widget_type: 'widget_type', @@ -35,19 +36,20 @@ App.widgetMapper = App.QuickDataMapper.create({ description: 'description', scope: 'scope' }, - map: function (json, serviceName) { - //TODO add service name to user layout API response + map: function (json) { if (!this.get('model')) return; - if (json) { + if (json.widgets) { var result = []; - var sectionName = json.section_name; - json.widgetLayoutInfo.forEach(function (item, index) { - item.service_name = serviceName; - item.section_name = sectionName; - item.default_order = (index + 1); - result.push(this.parseIt(item, this.config)); + json.widgets.forEach(function (item, index) { + item.WidgetInfo.section_name = json.section_name; + item.WidgetInfo.layout_id = json.id; + item.WidgetInfo.metrics = JSON.parse(item.WidgetInfo.metrics); + item.WidgetInfo.properties = JSON.parse(item.WidgetInfo.properties); + item.WidgetInfo.values = JSON.parse(item.WidgetInfo.values); + item.WidgetInfo.default_order = (index + 1); + result.push(this.parseIt(item.WidgetInfo, this.config)); }, this); App.store.loadMany(this.get('model'), result); http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/ambari-web/app/models/widget.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/widget.js b/ambari-web/app/models/widget.js index 99c86d0..6ea4876 100644 --- a/ambari-web/app/models/widget.js +++ b/ambari-web/app/models/widget.js @@ -31,6 +31,7 @@ App.Widget = DS.Model.extend({ * - TEMPLATE */ widgetType: DS.attr('string'), + layout: DS.belongsTo('App.WidgetLayout'), displayName: DS.attr('string'), description: DS.attr('string'), serviceName: DS.attr('string'), http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 9e81eee..02fcf35 100644 --- a/ambari-web/app/views/common/widget/graph_widget_view.js +++ b/ambari-web/app/views/common/widget/graph_widget_view.js @@ -31,7 +31,7 @@ App.GraphWidgetView = Em.View.extend(App.WidgetMixin, { * value in ms * @type {number} */ - timeRange: 3600, + timeRange: 3600000, /** * value in ms @@ -166,17 +166,17 @@ App.GraphWidgetView = Em.View.extend(App.WidgetMixin, { /** * add time properties - * @param {Array} widgetIds + * @param {Array} metricPaths * @returns {Array} result */ - addTimeProperties: function (widgetIds) { - var startDate = App.dateTime(); - var endDate = startDate + this.get('timeRange'); + addTimeProperties: function (metricPaths) { + var toSeconds = Math.round(App.dateTime() / 1000); + var fromSeconds = toSeconds - (this.get('timeRange')/1000); var step = this.get('timeStep'); var result = []; - widgetIds.forEach(function (ambariId) { - result.push(ambariId + '[' + startDate + ',' + endDate + ',' + step + ']'); + metricPaths.forEach(function (metricPath) { + result.push(metricPath + '[' + fromSeconds + ',' + toSeconds + ',' + step + ']'); }, this); return result; @@ -198,7 +198,7 @@ App.GraphWidgetView = Em.View.extend(App.WidgetMixin, { * @type {string} */ id: function () { - return this.get('parentView.content.id') + '_graph'; + return 'widget_'+ this.get('parentView.content.id') + '_graph'; }.property('parentView.content.id'), /** http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 d88cf8a..d8df50e 100644 --- a/ambari-web/app/views/main/service/info/summary.js +++ b/ambari-web/app/views/main/service/info/summary.js @@ -552,7 +552,7 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, { if (App.get('supports.customizedWidgets')) { this.get('controller').loadActiveWidgetLayout(); - if (App.supports.customizedWidgetLayout) { + if (App.get('supports.customizedWidgetLayout')) { this.get('controller').loadWidgetLayouts(); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/fc5b29f4/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 fa626ef..c0a3fb2 100644 --- a/ambari-web/test/controllers/main/service/info/summary_test.js +++ b/ambari-web/test/controllers/main/service/info/summary_test.js @@ -247,16 +247,20 @@ describe('App.MainServiceInfoSummaryController', function () { describe("#loadActiveWidgetLayoutSuccessCallback()", function () { beforeEach(function () { sinon.stub( App.widgetLayoutMapper, 'map'); + sinon.stub( App.widgetMapper, 'map'); }); afterEach(function () { App.widgetLayoutMapper.map.restore(); + App.widgetMapper.map.restore(); }); 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]}); + controller.loadActiveWidgetLayoutSuccessCallback({items:[{ + WidgetLayoutInfo: {} + }]}); expect(controller.get('isWidgetsLoaded')).to.be.true; });
