You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2016/05/06 15:21:33 UTC
svn commit: r1742554 - in
/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources: ./
css/ js/qpid/common/ js/qpid/management/ js/qpid/management/query/
Author: lquack
Date: Fri May 6 15:21:32 2016
New Revision: 1742554
URL: http://svn.apache.org/viewvc?rev=1742554&view=rev
Log:
QPID-7215: [Java Broker, WMC] Use query to retrieve connection information
Added:
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js
Modified:
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/QueryTab.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryStore.js
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/common.css Fri May 6 15:21:32 2016
@@ -467,4 +467,15 @@ div .messages {
background-image: none !important;
background-color: inherit !important;
background-repeat: inherit !important;
-}
\ No newline at end of file
+}
+
+.claro.qpid .dgrid-header .dgrid-cell { font-weight: normal; }
+.virtualHostConnections .field-name { width: 20%; }
+.virtualHostConnections .field-principal { width: 10% }
+.virtualHostConnections .field-port { width: 10% }
+.virtualHostConnections .field-transport { width: 10% }
+.virtualHostConnections .field-sessionCount { width: 10% }
+.virtualHostConnections .field-msgInRate { width: 10% }
+.virtualHostConnections .field-bytesInRate { width: 10% }
+.virtualHostConnections .field-msgOutRate { width: 10% }
+.virtualHostConnections .field-bytesOutRate { width: 10% }
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html Fri May 6 15:21:32 2016
@@ -148,7 +148,7 @@
</script>
</head>
-<body class="claro">
+<body class="claro qpid">
<div id="pageLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline', gutters: false">
<div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js Fri May 6 15:21:32 2016
@@ -729,6 +729,23 @@ define(["dojo/_base/xhr",
});
};
+ util.queryResultToObjects = function (queryResult)
+ {
+ var objects = [];
+ var headers = queryResult.headers;
+ var results = queryResult.results;
+ for (var i = 0, l1 = results.length; i < l1; ++i)
+ {
+ var result = {};
+ for (var j = 0, l2 = headers.length; j < l2; ++j)
+ {
+ result[headers[j]] = results[i][j];
+ }
+ objects.push(result);
+ }
+ return objects;
+ };
+
util.setMultiSelectOptions = function (multiSelectWidget, options)
{
util.addMultiSelectOptions(multiSelectWidget, options, true);
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js Fri May 6 15:21:32 2016
@@ -895,19 +895,11 @@ define(["dojo/parser",
.then(function (data)
{
that.brokerData = data.broker[0];
- var virtualHostData = [];
- var headers = data.virtualHosts.headers;
- var results = data.virtualHosts.results;
+ var virtualHostData = util.queryResultToObjects(data.virtualHosts);
var queryVirtualHostNodes = {};
- for (var i = 0; i < results.length; i++)
+ for (var i = 0; i < virtualHostData.length; ++i)
{
- var result = {};
- for (var j = 0; j < headers.length; j++)
- {
- result[headers[j]] = results[i][j];
- }
- virtualHostData.push(result);
- queryVirtualHostNodes[result.id] = null;
+ queryVirtualHostNodes[virtualHostData[i].id] = null;
}
for (var i = 0; i < that.brokerData.virtualhostnodes.length; i++)
{
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/QueryTab.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/QueryTab.js?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/QueryTab.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/QueryTab.js Fri May 6 15:21:32 2016
@@ -65,7 +65,7 @@ define(["dojo/parser",
this.queryEditorNode = query(".queryEditorNode", containerNode)[0];
this.queryBuilder = new QueryBuilder({
management: this.management,
- parentModelObj: this.parent,
+ parentObject: this.parent,
controller: this.controller
}, this.queryEditorNode);
};
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js Fri May 6 15:21:32 2016
@@ -21,6 +21,7 @@
define(["dojo/parser",
"dojo/query",
"dojo/_base/connect",
+ "dojo/_base/lang",
"dijit/registry",
"dojox/html/entities",
"qpid/common/properties",
@@ -31,6 +32,7 @@ define(["dojo/parser",
"qpid/management/addQueue",
"qpid/management/addExchange",
"qpid/management/addLogger",
+ "qpid/management/query/QueryGrid",
"dojox/grid/EnhancedGrid",
"qpid/management/editVirtualHost",
"dojo/text!showVirtualHost.html",
@@ -38,6 +40,7 @@ define(["dojo/parser",
function (parser,
query,
connect,
+ lang,
registry,
entities,
properties,
@@ -48,6 +51,7 @@ define(["dojo/parser",
addQueue,
addExchange,
addLogger,
+ QueryGrid,
EnhancedGrid,
editVirtualHost,
template)
@@ -265,8 +269,6 @@ define(["dojo/parser",
"virtualHostConnections",
"virtualHostChildren"]);
- var that = this;
-
that.vhostData = {};
var gridProperties = {
@@ -349,58 +351,45 @@ define(["dojo/parser",
});
}, gridProperties, EnhancedGrid);
- that.connectionsGrid = new UpdatableStore([], findNode("connections"), [{
- name: "Name",
- field: "name",
- width: "20%"
- }, {
- name: "User",
- field: "principal",
- width: "10%"
- }, {
- name: "Port",
- field: "port",
- width: "10%"
- }, {
- name: "Transport",
- field: "transport",
- width: "10%"
- }, {
- name: "Sessions",
- field: "sessionCount",
- width: "10%"
- }, {
- name: "Msgs In",
- field: "msgInRate",
- width: "10%"
- }, {
- name: "Bytes In",
- field: "bytesInRate",
- width: "10%"
- }, {
- name: "Msgs Out",
- field: "msgOutRate",
- width: "10%"
- }, {
- name: "Bytes Out",
- field: "bytesOutRate",
- width: "10%"
- }], function (obj)
- {
- connect.connect(obj.grid, "onRowDblClick", obj.grid, function (evt)
- {
- var idx = evt.rowIndex, theItem = this.getItem(idx);
- var connectionName = obj.dataStore.getValue(theItem, "name");
- // mock the connection's parent port because we don't have access to it from here
- var port = {
- name: obj.dataStore.getValue(theItem, "port"),
- type: "port",
- parent: vhost.parent.parent
- };
-
- controller.show("connection", connectionName, port, theItem.id);
- });
- });
+ this.connectionsGrid = new QueryGrid({
+ transformer: lang.hitch(this, this._transformConnectionData),
+ management: this.management,
+ controller: controller,
+ parentObject: this.modelObj,
+ category: "Connection",
+ selectClause: "id, name, principal, port.name AS port, transport, sessionCount, messagesIn, bytesIn, messagesOut, bytesOut",
+ orderBy: "name",
+ columns: [{
+ label: "Name",
+ field: "name"
+ }, {
+ label: "User",
+ field: "principal"
+ }, {
+ label: "Port",
+ field: "port"
+ }, {
+ label: "Transport",
+ field: "transport"
+ }, {
+ label: "Sessions",
+ field: "sessionCount"
+ }, {
+ label: "Msgs In",
+ field: "msgInRate"
+ }, {
+ label: "Bytes In",
+ field: "bytesInRate"
+ }, {
+ label: "Msgs Out",
+ field: "msgOutRate"
+ }, {
+ label: "Bytes Out",
+ field: "bytesOutRate"
+ }
+ ]
+ }, findNode("connections"));
+ that.connectionsGrid.startup();
that.virtualHostLoggersGrid = new UpdatableStore([], findNode("loggers"), [{
name: "Name",
@@ -458,6 +447,9 @@ define(["dojo/parser",
{
var thisObj = this;
+ thisObj.connectionsGrid.refresh();
+ thisObj.connectionsGrid.resize();
+
this.management.load(this.modelObj,
{
excludeInheritedContext: true,
@@ -474,40 +466,23 @@ define(["dojo/parser",
bytesOut: 0
}
};
- thisObj.management.get({
- url: thisObj.management.objectToURL(thisObj.modelObj) + "/getConnections"
- })
- .then(function (data)
- {
- thisObj.vhostData["connections"] = data;
- if (callback)
- {
- callback();
- }
-
- try
- {
- thisObj._update();
- }
- catch (e)
- {
- if (console && console.error)
- {
- console.error(e);
- }
- }
+ if (callback)
+ {
+ callback();
+ }
- }, function (error)
+ try
+ {
+ thisObj._update();
+ }
+ catch (e)
+ {
+ if (console && console.error)
{
- util.tabErrorHandler(error, {
- updater: thisObj,
- contentPane: thisObj.tabObject.contentPane,
- tabContainer: thisObj.tabObject.controller.tabContainer,
- name: thisObj.modelObj.name,
- category: "Virtual Host"
- });
- });
+ console.error(e);
+ }
+ }
}, function (error)
{
util.tabErrorHandler(error, {
@@ -530,7 +505,6 @@ define(["dojo/parser",
this.tabObject.deleteButton.set("disabled", !this.vhostData.state);
util.flattenStatistics(thisObj.vhostData);
- var connections = thisObj.vhostData["connections"];
var queues = thisObj.vhostData["queues"];
var exchanges = thisObj.vhostData["exchanges"];
@@ -562,37 +536,6 @@ define(["dojo/parser",
var bytesOutFormat = formatter.formatBytes(bytesOutRate);
thisObj.bytesOutRate.innerHTML = "(" + bytesOutFormat.value;
thisObj.bytesOutRateUnits.innerHTML = bytesOutFormat.units + "/s)";
-
- if (connections && thisObj.connections)
- {
- for (var i = 0; i < connections.length; i++)
- {
- var connection = connections[i];
- for (var j = 0; j < thisObj.connections.length; j++)
- {
- var oldConnection = thisObj.connections[j];
- if (oldConnection.id == connection.id)
- {
- msgOutRate =
- (1000 * (connection.messagesOut - oldConnection.messagesOut)) / samplePeriod;
- connection.msgOutRate = msgOutRate.toFixed(0) + "msg/s";
-
- bytesOutRate = (1000 * (connection.bytesOut - oldConnection.bytesOut)) / samplePeriod;
- var bytesOutRateFormat = formatter.formatBytes(bytesOutRate);
- connection.bytesOutRate = bytesOutRateFormat.value + bytesOutRateFormat.units + "/s";
-
- msgInRate = (1000 * (connection.messagesIn - oldConnection.messagesIn)) / samplePeriod;
- connection.msgInRate = msgInRate.toFixed(0) + "msg/s";
-
- bytesInRate = (1000 * (connection.bytesIn - oldConnection.bytesIn)) / samplePeriod;
- var bytesInRateFormat = formatter.formatBytes(bytesInRate);
- connection.bytesInRate = bytesInRateFormat.value + bytesInRateFormat.units + "/s";
- }
-
- }
-
- }
- }
}
thisObj.sampleTime = sampleTime;
@@ -600,7 +543,6 @@ define(["dojo/parser",
thisObj.bytesIn = bytesIn;
thisObj.messageOut = messageOut;
thisObj.bytesOut = bytesOut;
- thisObj.connections = connections;
this._updateGrids(thisObj.vhostData)
@@ -623,6 +565,45 @@ define(["dojo/parser",
};
+ Updater.prototype._transformConnectionData = function (data)
+ {
+
+ var sampleTime = new Date();
+ var connections = util.queryResultToObjects(data);
+ if (this._previousConnectionSampleTime)
+ {
+ var samplePeriod = sampleTime.getTime() - this._previousConnectionSampleTime.getTime();
+ for (var i = 0; i < connections.length; i++)
+ {
+ var connection = connections[i];
+ for (var j = 0; j < this._previousConnections.length; j++)
+ {
+ var oldConnection = this._previousConnections[j];
+ if (oldConnection.id == connection.id)
+ {
+ var msgOutRate = (1000 * (connection.messagesOut - oldConnection.messagesOut))
+ / samplePeriod;
+ connection.msgOutRate = msgOutRate.toFixed(0) + "msg/s";
+
+ var bytesOutRate = (1000 * (connection.bytesOut - oldConnection.bytesOut)) / samplePeriod;
+ var bytesOutRateFormat = formatter.formatBytes(bytesOutRate);
+ connection.bytesOutRate = bytesOutRateFormat.value + bytesOutRateFormat.units + "/s";
+
+ var msgInRate = (1000 * (connection.messagesIn - oldConnection.messagesIn)) / samplePeriod;
+ connection.msgInRate = msgInRate.toFixed(0) + "msg/s";
+
+ var bytesInRate = (1000 * (connection.bytesIn - oldConnection.bytesIn)) / samplePeriod;
+ var bytesInRateFormat = formatter.formatBytes(bytesInRate);
+ connection.bytesInRate = bytesInRateFormat.value + bytesInRateFormat.units + "/s";
+ }
+ }
+ }
+ }
+ this._previousConnectionSampleTime = sampleTime;
+ this._previousConnections = connections;
+ return connections;
+ };
+
Updater.prototype._updateGrids = function (data)
{
this.virtualHostChildren.style.display = data.state == "ACTIVE" ? "block" : "none";
@@ -639,8 +620,6 @@ define(["dojo/parser",
var isStandard = item && item.name && util.isReservedExchangeName(item.name);
exchangesGrid.rowSelectCell.setDisabled(i, isStandard);
}
- this.virtualHostConnections.style.display = data.connections ? "block" : "none";
- util.updateUpdatableStore(this.connectionsGrid, data.connections);
}
};
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryBuilder.js Fri May 6 15:21:32 2016
@@ -33,7 +33,7 @@ define(["dojo/_base/declare",
"dgrid/extensions/ColumnResizer",
"dstore/Memory",
'dstore/legacy/DstoreAdapter',
- "qpid/management/query/QueryStore",
+ "qpid/management/query/QueryGrid",
"qpid/management/query/DropDownSelect",
"qpid/management/query/WhereExpression",
"dojo/Evented",
@@ -72,7 +72,7 @@ define(["dojo/_base/declare",
ColumnResizer,
Memory,
DstoreAdapter,
- QueryStore)
+ QueryGrid)
{
var predefinedCategories = [{
id: "queue",
@@ -108,7 +108,9 @@ define(["dojo/_base/declare",
/**
* constructor parameter
*/
- _management: null,
+ management: null,
+ controller: null,
+ parentObject: null,
/**
* Inner fields
@@ -118,14 +120,8 @@ define(["dojo/_base/declare",
_categorySelector: null,
_searchScopeSelector: null,
_lastStandardModeSelect: [],
- _sort: [],
_lastHeaders: [],
- constructor: function (args)
- {
- this._management = args.management;
- this.inherited(arguments);
- },
postCreate: function ()
{
this.inherited(arguments);
@@ -154,7 +150,7 @@ define(["dojo/_base/declare",
this.standardSelectChooser.startup();
this.standardWhereChooser.startup();
this.standardWhereExpressionBuilder.set("whereFieldsSelector", this.standardWhereChooser);
- this.standardWhereExpressionBuilder.set("userPreferences", this._management.userPreferences);
+ this.standardWhereExpressionBuilder.set("userPreferences", this.management.userPreferences);
this.standardWhereExpressionBuilder.startup();
this.standardWhereExpressionBuilder.on("change", lang.hitch(this, this._standardModeWhereChanged));
@@ -163,24 +159,18 @@ define(["dojo/_base/declare",
this.modeButton.on("click", lang.hitch(this, this._showModeSwitchWarningIfRequired));
this._buildGrid();
- this._categoryChanged();
+ this._categoryChanged(this._categorySelector.value);
this._toggleSearchButton();
},
search: function ()
{
- var category = this._categorySelector.value.toLowerCase();
var scope = this._searchScopeSelector.value;
- var modelObj = this._scopeModelObjects[scope];
- this._store.selectClause = this._store.selectClause;
- this._store.where = this._store.where;
- this._store.category = category;
- this._store.parent = modelObj;
- this._store.orderBy = this._store.orderBy;
+ this._resultsGrid.setParentObject(this._scopeModelObjects[scope]);
this._resultsGrid.refresh();
},
_showModeSwitchWarningIfRequired: function ()
{
- var userPreferences = this._management.userPreferences;
+ var userPreferences = this.management.userPreferences;
var displayWarning = (!userPreferences || !userPreferences.query
|| (userPreferences.query.displaySwitchModeWarning == undefined
|| userPreferences.query.displaySwitchModeWarning));
@@ -223,18 +213,22 @@ define(["dojo/_base/declare",
this._modeChanged();
}
},
+ _setSelectClause: function (select)
+ {
+ this._resultsGrid.setSelect(select ? select + ",id" : "");
+ },
_advancedModeSelectChanged: function ()
{
- this._store.selectClause = this.advancedSelect.value;
+ this._setSelectClause(this.advancedSelect.value);
},
_advancedModeWhereChanged: function ()
{
- this._store.where = this.advancedWhere.value;
+ this._resultsGrid.setWhere(this.advancedWhere.value);
},
_advancedModeOrderByChanged: function ()
{
- this._store.orderBy = this.advancedOrderBy.value;
- this._sort = [];
+ this._resultsGrid.setOrderBy(this.advancedOrderBy.value);
+ this._resultsGrid.setSort([]);
},
_toggleSearchButton: function (select)
{
@@ -243,21 +237,6 @@ define(["dojo/_base/declare",
this.searchButton.set("title",
criteriaNotSet ? "Please, choose fields to display in order to enable search" : "Search");
},
- _buildOrderByExpression: function ()
- {
- var orderByExpression = "";
- if (this._sort && this._sort.length)
- {
- var orders = []
- for (var i = 0; i < this._sort.length; ++i)
- {
- orders.push(parseInt(this._sort[i].property) + (this._sort[i].descending ? " desc" : ""));
- }
- orderByExpression = orders.join(",");
- }
- this.advancedOrderBy.set("value", orderByExpression);
- return orderByExpression;
- },
_buildSelectExpression: function (value)
{
var expression = "";
@@ -276,10 +255,11 @@ define(["dojo/_base/declare",
_normalizeSorting: function (selectedColumns)
{
var newSort = [];
- for (var i = 0; i < this._sort.length; ++i)
+ var sort = this._resultsGrid.getSort();
+ for (var i = 0; i < sort.length; ++i)
{
- var sortColumnIndex = parseInt(this._sort[i].property) - 1;
- var sortDescending = this._sort[i].descending;
+ var sortColumnIndex = parseInt(sort[i].property) - 1;
+ var sortDescending = sort[i].descending;
if (sortColumnIndex < this._lastStandardModeSelect.length)
{
var oldSortedColumnName = this._lastStandardModeSelect[sortColumnIndex].attributeName;
@@ -296,125 +276,96 @@ define(["dojo/_base/declare",
}
}
}
- this._sort = newSort;
+ this._resultsGrid.setSort(newSort);
},
_standardModeSelectChanged: function (selectedColumns)
{
this._normalizeSorting(selectedColumns);
- this._store.orderBy = this._buildOrderByExpression();
- this._store.selectClause = this._buildSelectExpression(selectedColumns);
+ var selectClause = this._buildSelectExpression(selectedColumns);
+ this._setSelectClause(selectClause);
this._lastStandardModeSelect = lang.clone(selectedColumns);
- this._toggleSearchButton(this._store.selectClause);
+ this._toggleSearchButton(selectClause);
this.search();
},
_standardModeWhereChanged: function (result)
{
- this._store.where = result;
+ this._resultsGrid.setWhere(result);
this.search();
},
_buildGrid: function ()
{
- this._store = new QueryStore({
+ var grid = new QueryGrid({
+ controller: this.controller,
management: this.management,
category: this._categorySelector.value.toLowerCase(),
- parent: this._scopeModelObjects[this._searchScopeSelector.value],
- zeroBased: false
- });
+ parentObject: this._scopeModelObjects[this._searchScopeSelector.value],
+ zeroBased: false,
+ transformer: function (data)
+ {
+ var dataResults = data.results;
- var CustomGrid = declare([Grid, Keyboard, Selection, Pagination, ColumnResizer]);
+ var results = [];
+ for (var i = 0, l = dataResults.length; i < l; ++i)
+ {
+ var result = dataResults[i];
+ var item = {id: result[result.length - 1]};
- var grid = new CustomGrid({
- collection: this._store,
- rowsPerPage: 100,
- selectionMode: 'single',
- cellNavigation: false,
- className: 'dgrid-autoheight',
- pageSizeOptions: [10, 20, 30, 40, 50, 100, 1000, 10000, 100000],
- adjustLastColumn: true
+ // excluding id, as we already added id field
+ for (var j = 0, rl = result.length - 1; j < rl; ++j)
+ {
+ // sql uses 1-based index in ORDER BY
+ var field = j + 1;
+ item[new String(field)] = result[j];
+ }
+ results.push(item);
+ }
+ return results;
+ }
}, this.queryResultGrid);
- this._store.on("changeHeaders", lang.hitch(this, function (event)
+ grid.on('dgrid-refresh-complete', lang.hitch(this, function ()
{
- this._store.useCachedResults = true;
- grid.set("columns", this._getColumns(event.headers));
- this._resultsGrid.resize();
+ this._resultsGrid.setUseCachedResults(false);
+ }));
+ grid.on('queryCompleted', lang.hitch(this, this._buildColumnsIfHeadersChanged));
+ grid.on('orderByChanged', lang.hitch(this, function (event)
+ {
+ this.advancedOrderBy.set("value", event.orderBy);
}));
this._resultsGrid = grid;
this._resultsGrid.startup();
- this._resultsGrid.on('.dgrid-row:dblclick', lang.hitch(this, this._onRowClick));
- this._resultsGrid.on("dgrid-sort", lang.hitch(this, function (event)
+ },
+ _buildColumnsIfHeadersChanged: function (event)
+ {
+ var headers = lang.clone(event.headers);
+ if (headers.length > 0)
{
- for (var i = 0; i < this._sort.length; ++i)
- {
- if (this._sort[i].property == event.sort[0].property)
- {
- this._sort.splice(i, 1);
- break;
- }
- }
- this._sort.splice(0, 0, event.sort[0]);
- this._store.orderBy = this._buildOrderByExpression();
- event.preventDefault();
- event.stopPropagation();
- this.search();
- }));
- this._resultsGrid.on("dgrid-refresh-complete", lang.hitch(this, function ()
+ headers.pop();
+ }
+ if (!this._equalStringArrays(headers, this._lastHeaders))
{
- this._store.useCachedResults = false;
- this._resultsGrid.updateSortArrow(this._sort, true);
- }));
+ this._lastHeaders = headers;
+ this._resultsGrid.setUseCachedResults(true);
+ this._resultsGrid.set("columns", this._getColumns(headers));
+ this._resultsGrid.resize();
+ }
},
- _onRowClick: function (event)
+ _equalStringArrays: function (a, b)
{
- var row = this._resultsGrid.row(event);
- var promise = this._management.get({url: "service/structure"});
- var that = this;
- promise.then(function (data)
+ if (a.length != b.length)
{
- var findObject = function findObject(structure, parent, type)
- {
- var item = {
- id: structure.id,
- name: structure.name,
- type: type,
- parent: parent
- };
- if (item.id == row.id)
- {
- return item;
- }
- else
- {
- for (var fieldName in structure)
- {
- var fieldValue = structure[fieldName];
- if (lang.isArray(fieldValue))
- {
- var fieldType = fieldName.substring(0, fieldName.length - 1);
- for (var i = 0; i < fieldValue.length; i++)
- {
- var object = fieldValue[i];
- var result = findObject(object, item, fieldType);
- if (result != null)
- {
- return result;
- }
- }
- }
- }
- return null;
- }
- };
-
- var item = findObject(data, null, "broker");
- if (item != null)
+ return false;
+ }
+ for (var i = 0; i < a.length; ++i)
+ {
+ if (a[i] != b[i])
{
- that.controller.show(item.type, item.name, item.parent, item.id);
+ return false;
}
- });
+ }
+ return true;
},
_getColumns: function (headers)
{
- this._lastHeaders = headers;
var columns = [];
if (headers)
{
@@ -441,7 +392,7 @@ define(["dojo/_base/declare",
value,
10)))
{
- return that._management.userPreferences.formatDateTime(value, {
+ return that.management.userPreferences.formatDateTime(value, {
addOffset: true,
appendTimeZone: true
});
@@ -495,7 +446,7 @@ define(["dojo/_base/declare",
_createScopeList: function ()
{
var that = this;
- var result = this._management.query({
+ var result = this.management.query({
select: "id, $parent.name as parentName, name",
category: "virtualhost"
});
@@ -543,9 +494,9 @@ define(["dojo/_base/declare",
parent: {type: "broker"}
}
};
- if (this.parentModelObj && this.parentModelObj.type == "virtualhost" && this.parentModelObj.name
- == name
- && this.parentModelObj.parent && this.parentModelObj.parent.name == parentName)
+ if (this.parentObject && this.parentObject.type == "virtualhost" && this.parentObject.name
+ == name
+ && this.parentObject.parent && this.parentObject.parent.name == parentName)
{
defaultValue = data[i][0];
}
@@ -582,18 +533,19 @@ define(["dojo/_base/declare",
categoryList.on("change", lang.hitch(this, this._categoryChanged));
this._categorySelector = categoryList;
},
- _categoryChanged: function ()
+ _categoryChanged: function (value)
{
this._resetSearch();
- var metadata = this._getCategoryMetadata(this._categorySelector.value);
+ var metadata = this._getCategoryMetadata(value);
var disableMetadataDependant = !metadata;
this.standardWhereChooser.set("disabled", disableMetadataDependant);
this.standardSelectChooser.set("disabled", disableMetadataDependant);
- this.searchButton.set("disabled", disableMetadataDependant || !this._store.selectClause);
+ this.searchButton.set("disabled", true);
this.modeButton.set("disabled", disableMetadataDependant);
this.advancedSelect.set("disabled", disableMetadataDependant);
this.advancedWhere.set("disabled", disableMetadataDependant);
this.advancedOrderBy.set("disabled", disableMetadataDependant);
+ this._resultsGrid.setCategory(value);
if (disableMetadataDependant)
{
@@ -627,10 +579,10 @@ define(["dojo/_base/declare",
{
evt.preventDefault();
evt.stopPropagation();
- this._store.selectClause = this.advancedSelect.value;
- this._store.where = this.advancedWhere.value;
- this._store.orderBy = this.advancedOrderBy.value;
- this._sort = [];
+ this._setSelectClause(this.advancedSelect.value);
+ this._resultsGrid.setWhere(this.advancedWhere.value);
+ this._resultsGrid.setOrderBy(this.advancedOrderBy.value);
+ this._resultsGrid.setSort([]);
this.search();
}
},
@@ -646,9 +598,10 @@ define(["dojo/_base/declare",
this.standardSearch.style.display = "none";
this.standardWhereExpressionBuilder.domNode.style.display = "none";
this.advancedSearch.style.display = "";
- this.advancedSelect.set("value", this._store.selectClause);
- this.advancedWhere.set("value", this._store.where);
- this.advancedOrderBy.set("value", this._store.orderBy);
+ this.advancedSelect.set("value",
+ this._buildSelectExpression(this.standardSelectChooser.get("selectedItems")));
+ this.advancedWhere.set("value", this._resultsGrid.getWhere());
+ this.advancedOrderBy.set("value", this._resultsGrid.getOrderBy());
}
else
{
@@ -664,15 +617,12 @@ define(["dojo/_base/declare",
},
_resetSearch: function ()
{
- this._store.where = "";
- this._store.selectClause = "";
- this._store.orderBy = "";
+ this._resultsGrid.resetQuery();
this.standardSelectChooser.set("data", {selected: []});
this.standardWhereExpressionBuilder.clearWhereCriteria();
- this._sort = [];
- this.advancedSelect.set("value", this._store.selectClause);
- this.advancedWhere.set("value", this._store.where);
- this.advancedOrderBy.set("value", this._store.orderBy);
+ this.advancedSelect.set("value", "");
+ this.advancedWhere.set("value", "");
+ this.advancedOrderBy.set("value", "");
this.search();
},
_getCategoryMetadata: function (value)
@@ -681,7 +631,7 @@ define(["dojo/_base/declare",
{
var category = value.charAt(0)
.toUpperCase() + value.substring(1);
- return this._management.metadata.metadata[category];
+ return this.management.metadata.metadata[category];
}
else
{
Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js?rev=1742554&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js Fri May 6 15:21:32 2016
@@ -0,0 +1,220 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+define(["dojo/_base/declare",
+ "dojo/_base/lang",
+ "dojo/dom-construct",
+ "dojo/json",
+ "dojo/on",
+ "dojo/parser",
+ "dojox/html/entities",
+ "dgrid/Grid",
+ "dgrid/Keyboard",
+ "dgrid/Selection",
+ "dgrid/extensions/Pagination",
+ "dgrid/extensions/ColumnResizer",
+ "qpid/management/query/QueryStore",
+ "qpid/management/query/MessageDialog"],
+ function (declare,
+ lang,
+ domConstruct,
+ json,
+ on,
+ parser,
+ entities,
+ Grid,
+ Keyboard,
+ Selection,
+ Pagination,
+ ColumnResizer,
+ QueryStore)
+ {
+ var QueryGrid = declare("qpid.management.query.QueryGrid",
+ [Grid, Keyboard, Selection, Pagination, ColumnResizer],
+ {
+ management: null,
+ controller: null,
+ _store: null,
+ _sort: [],
+ _lastHeaders: [],
+
+ postscript: function (args)
+ {
+ this._store = new QueryStore(args);
+
+ var settings = lang.mixin({
+ collection: this._store,
+ rowsPerPage: 100,
+ selectionMode: 'single',
+ cellNavigation: false,
+ className: 'dgrid-autoheight',
+ pageSizeOptions: [10, 20, 30, 40, 50, 100, 1000],
+ adjustLastColumn: true
+ }, args);
+ /* initialise grid */
+ this.inherited(arguments, [settings, arguments[1]]);
+ },
+ postCreate: function ()
+ {
+ this.inherited(arguments);
+ this.on('.dgrid-row:dblclick', lang.hitch(this, this._onRowClick));
+ this.on('dgrid-sort', lang.hitch(this, function (event)
+ {
+ for (var i = 0; i < this._sort.length; ++i)
+ {
+ if (this._sort[i].property == event.sort[0].property)
+ {
+ this._sort.splice(i, 1);
+ break;
+ }
+ }
+ this._sort.splice(0, 0, event.sort[0]);
+ this._updateOrderByExpression();
+ event.preventDefault();
+ event.stopPropagation();
+ this.refresh();
+ }));
+ this.on('dgrid-refresh-complete', lang.hitch(this, function ()
+ {
+ this.updateSortArrow(this._sort, true);
+ }));
+ this._store.on('queryCompleted', lang.hitch(this, function (event)
+ {
+ on.emit(this.domNode, 'queryCompleted', event);
+ }));
+ },
+ setCategory: function (category)
+ {
+ this._store.category = category;
+ },
+ setParentObject: function (parentObject)
+ {
+ this._store.parentObject = parentObject;
+ },
+ getSelect: function ()
+ {
+ return this._store.selectClause;
+ },
+ setSelect: function (selectClause)
+ {
+ this._store.selectClause = selectClause;
+ },
+ getWhere: function ()
+ {
+ return this._store.where;
+ },
+ setWhere: function (whereClause)
+ {
+ this._store.where = whereClause;
+ },
+ getOrderBy: function ()
+ {
+ return this._store.orderBy;
+ },
+ setOrderBy: function (orderBy)
+ {
+ this._store.orderBy = orderBy;
+ },
+ setUseCachedResults: function (value)
+ {
+ this._store.useCachedResults = value;
+ },
+ setSort: function (value)
+ {
+ this._sort = lang.clone(value);
+ },
+ getSort: function ()
+ {
+ return lang.clone(this._sort);
+ },
+ _updateOrderByExpression: function ()
+ {
+ var orderByExpression = "";
+ if (this._sort && this._sort.length)
+ {
+ var orders = [];
+ for (var i = 0; i < this._sort.length; ++i)
+ {
+ orders.push(parseInt(this._sort[i].property) + (this._sort[i].descending ? " desc" : ""));
+ }
+ orderByExpression = orders.join(",");
+ }
+ this._store.orderBy = orderByExpression;
+ on.emit(this.domNode, "orderByChanged", {orderBy: orderByExpression});
+ },
+ _onRowClick: function (event)
+ {
+ var row = this.row(event);
+ var promise = this.management.get({url: "service/structure"});
+ promise.then(lang.hitch(this, function (data)
+ {
+ var findObject = function findObject(structure, parent, type)
+ {
+ var item = {
+ id: structure.id,
+ name: structure.name,
+ type: type,
+ parent: parent
+ };
+ if (item.id == row.id)
+ {
+ return item;
+ }
+ else
+ {
+ for (var fieldName in structure)
+ {
+ var fieldValue = structure[fieldName];
+ if (lang.isArray(fieldValue))
+ {
+ var fieldType = fieldName.substring(0, fieldName.length - 1);
+ for (var i = 0; i < fieldValue.length; i++)
+ {
+ var object = fieldValue[i];
+ var result = findObject(object, item, fieldType);
+ if (result != null)
+ {
+ return result;
+ }
+ }
+ }
+ }
+ return null;
+ }
+ };
+
+ var item = findObject(data, null, "broker");
+ if (item != null)
+ {
+ this.controller.show(item.type, item.name, item.parent, item.id);
+ }
+ }));
+ },
+ resetQuery: function ()
+ {
+ this._store.where = "";
+ this._store.selectClause = "";
+ this._store.orderBy = "";
+ this._sort = [];
+ }
+ });
+
+ return QueryGrid;
+ });
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryStore.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryStore.js?rev=1742554&r1=1742553&r2=1742554&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryStore.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryStore.js Fri May 6 15:21:32 2016
@@ -30,14 +30,13 @@ define(['dojo/_base/lang',
return declare("qpid.management.query.QueryStore", [Store, Evented], {
+ transformer: null,
management: null,
selectClause: null,
where: null,
category: null,
- parent: null,
+ parentObject: null,
useCachedResults: false,
- zeroBased: true,
- _lastHeaders: [],
_lastResponsePromise: null,
fetch: function (kwArgs)
@@ -52,135 +51,105 @@ define(['dojo/_base/lang',
_request: function (kwArgs)
{
-
- if (!this.selectClause)
+ if (this.useCachedResults && this._lastResponsePromise)
{
- this._emitChangeHeadersIfNecessary([]);
- var deferred = new Deferred();
- deferred.resolve([]);
- return new QueryResults(deferred.promise);
+ return this._createQueryResults(this._lastResponsePromise);
}
- var queryRequest = {
- category: this.category,
- select: this.selectClause ? this.selectClause + ",id" : "id"
- };
-
- if (this.parent)
+ if (!this.selectClause)
{
- queryRequest.parent = this.parent;
- }
+ var responseDeferred = new Deferred();
+ responseDeferred.resolve({
+ headers: [],
+ results: [],
+ total: 0
+ });
+ this._lastResponsePromise = responseDeferred.promise;
+ }
+ else
+ {
+ var queryRequest = {
+ category: this.category,
+ select: this.selectClause
+ };
- if (this.where)
- {
- queryRequest.where = this.where;
- }
+ if (this.parentObject)
+ {
+ queryRequest.parent = this.parentObject;
+ }
- if ("start" in kwArgs)
- {
- queryRequest.offset = kwArgs.start;
- }
+ if (this.where)
+ {
+ queryRequest.where = this.where;
+ }
- if ("end" in kwArgs)
- {
- queryRequest.limit = kwArgs.end - (queryRequest.offset ? queryRequest.offset : 0);
- }
+ if ("start" in kwArgs)
+ {
+ queryRequest.offset = kwArgs.start;
+ }
- if (this.orderBy)
- {
- queryRequest.orderBy = this.orderBy;
- }
+ if ("end" in kwArgs)
+ {
+ queryRequest.limit = kwArgs.end - (queryRequest.offset ? queryRequest.offset : 0);
+ }
- if (this.useCachedResults)
- {
- return this._createQueryResults(this._lastResponsePromise);
- }
+ if (this.orderBy)
+ {
+ queryRequest.orderBy = this.orderBy;
+ }
- var responsePromise = this.management.query(queryRequest);
- responsePromise.then(lang.hitch(this, function (data)
+ this._lastResponsePromise = this.management.query(queryRequest);
+ }
+ this._lastResponsePromise.then(lang.hitch(this, function (data)
{
- var headers = lang.clone(data.headers);
- headers.pop();
- this._emitChangeHeadersIfNecessary(headers);
+ this.emit("queryCompleted", data);
}), lang.hitch(this, function (error)
{
- this._emitChangeHeadersIfNecessary([]);
+ this.emit("queryCompleted",
+ {
+ headers: [],
+ results: [],
+ total: 0
+ });
}));
-
- this._lastResponsePromise = responsePromise;
return this._createQueryResults(this._lastResponsePromise);
},
_createQueryResults: function (responsePromise)
{
var that = this;
- var queryResultData = {
- data: responsePromise.then(function (data)
+ return new QueryResults(responsePromise.then(function (data)
+ {
+ if (that.transformer)
{
- var dataResults = data.results;
- var results = [];
- for (var i = 0, l = dataResults.length; i < l; ++i)
- {
- var result = dataResults[i];
- var item = {id: result[result.length - 1]};
-
- // excluding id, as we already added id field
- for (var j = 0, rl = result.length - 1; j < rl; ++j)
- {
- // sql uses 1-based index in ORDER BY
- var field = this.zeroBased ? j : j + 1;
- item[new String(field)] = result[j];
- }
- results.push(item);
- }
- return results;
- }, function (error)
+ return that.transformer(data);
+ }
+ else
+ {
+ return data.results;
+ }
+ }, function (error)
+ {
+ if (error.status)
{
this.management.errorHandler(error);
- return [];
- }),
- total: responsePromise.then(function (data)
+ }
+ return [];
+ }), {
+ totalLength: responsePromise.then(function (data)
{
return data.total;
}, function (error)
{
return 0;
})
- };
- return new QueryResults(queryResultData.data, {
- totalLength: queryResultData.total
});
},
- _emitChangeHeadersIfNecessary: function (headers)
- {
- if (!this._equalStringArrays(headers, this._lastHeaders))
- {
- this._lastHeaders = headers;
- this.emit("changeHeaders", {headers: headers});
- }
- },
-
// override from dstore.Store to not copy collection
_createSubCollection: function ()
{
return this;
- },
-
- _equalStringArrays: function (a, b)
- {
- if (a.length != b.length)
- {
- return false;
- }
- for (var i = 0; i < a.length; ++i)
- {
- if (a[i] != b[i])
- {
- return false;
- }
- }
- return true;
}
});
});
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org