You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ea...@apache.org on 2019/05/21 12:08:42 UTC
[qpid-dispatch] branch master updated: DISPATCH-1340 Show updated
link statistics on client popup
This is an automated email from the ASF dual-hosted git repository.
eallen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
The following commit(s) were added to refs/heads/master by this push:
new 9300914 DISPATCH-1340 Show updated link statistics on client popup
9300914 is described below
commit 9300914a8ddfa54854b87a34d1c241648dc79250
Author: Ernest Allen <ea...@redhat.com>
AuthorDate: Tue May 21 08:08:28 2019 -0400
DISPATCH-1340 Show updated link statistics on client popup
---
.../stand-alone/plugin/js/dlgDetailController.js | 342 +++++++++++++--------
1 file changed, 211 insertions(+), 131 deletions(-)
diff --git a/console/stand-alone/plugin/js/dlgDetailController.js b/console/stand-alone/plugin/js/dlgDetailController.js
index 25d1fa3..6bb2d1a 100644
--- a/console/stand-alone/plugin/js/dlgDetailController.js
+++ b/console/stand-alone/plugin/js/dlgDetailController.js
@@ -22,18 +22,18 @@ import { utils } from "./amqp/utilities.js";
export class DetailDialogController {
constructor(QDRService, $scope, $timeout, $uibModalInstance, d) {
- this.controllerName = 'QDR.DetailDialogController';
+ this.controllerName = "QDR.DetailDialogController";
this.rates = {};
let expandedRows = new Set();
- $scope.d = d; // the node object
+ $scope.d = d; // the node object
$scope.detail = {
- template: 'loading.html',
+ template: "loading.html"
};
// count the number of characters in an array of strings
- let countChars = function (ar) {
+ let countChars = function(ar) {
let count = 0;
- ar.forEach(a => count += a.length);
+ ar.forEach(a => (count += a.length));
return count;
};
@@ -41,49 +41,62 @@ export class DetailDialogController {
$scope.fields = {
detailFields: {
cols: [
- 'version',
- 'mode',
- 'presettledDeliveries',
- 'droppedPresettledDeliveries',
- 'acceptedDeliveries',
- 'rejectedDeliveries',
- 'releasedDeliveries',
- 'modifiedDeliveries',
- 'deliveriesIngress',
- 'deliveriesEgress',
- 'deliveriesTransit',
- 'deliveriesIngressRouteContainer',
- 'deliveriesEgressRouteContainer'
+ "version",
+ "mode",
+ "presettledDeliveries",
+ "droppedPresettledDeliveries",
+ "acceptedDeliveries",
+ "rejectedDeliveries",
+ "releasedDeliveries",
+ "modifiedDeliveries",
+ "deliveriesIngress",
+ "deliveriesEgress",
+ "deliveriesTransit",
+ "deliveriesIngressRouteContainer",
+ "deliveriesEgressRouteContainer"
]
},
linkFields: {
+ attrs: [
+ "linkType",
+ "owningAddr",
+ "settleRate",
+ "deliveriesDelayed1Sec",
+ "deliveriesDelayed10Sec",
+ "unsettledCount",
+ "capacity"
+ ],
cols: [
- 'linkType',
- 'owningAddr',
- 'priority',
- 'acceptedCount',
- 'unsettledCount'
- ]
+ "linkType",
+ "addr",
+ "settleRate",
+ "delayed1",
+ "delayed10",
+ "capacity"
+ ],
+ calc: {
+ addr: function(link) {
+ return utils.addr_text(link.owningAddr);
+ },
+ delayed1: function(link) {
+ return link.deliveriesDelayed1Sec;
+ },
+ delayed10: function(link) {
+ return link.deliveriesDelayed10Sec;
+ },
+ capacity: function(link) {
+ return link.unsettledCount / link.capacity;
+ }
+ }
},
linkRouteFields: {
- cols: [
- 'prefix',
- 'direction',
- 'containerId'
- ]
+ cols: ["prefix", "direction", "containerId"]
},
autoLinkFields: {
- cols: [
- 'addr',
- 'direction',
- 'containerId'
- ]
+ cols: ["addr", "direction", "containerId"]
},
addressFields: {
- cols: [
- 'prefix',
- 'distribution'
- ]
+ cols: ["prefix", "distribution"]
}
};
// used for calculating sub-table cell widths
@@ -92,12 +105,12 @@ export class DetailDialogController {
}
// close button clicked
- $scope.okClick = function () {
+ $scope.okClick = function() {
clearTimeout(updateTimer);
$uibModalInstance.close(true);
};
// a row was expanded/collapsed. add/remove it to/from the Set
- $scope.expandClicked = function (id) {
+ $scope.expandClicked = function(id) {
if (expandedRows.has(id)) {
expandedRows.delete(id);
} else {
@@ -105,82 +118,119 @@ export class DetailDialogController {
$scope.detail.moreInfo(id);
}
};
- $scope.expanded = function (id) {
+ $scope.expanded = function(id) {
return expandedRows.has(id);
};
// keep an array of column sizes
- let updateSizes = function (fields, sizes, obj) {
- fields.forEach(function (key) {
- if (!sizes[key])
- sizes[key] = utils.humanify(key).length;
+ let updateSizes = function(fields, sizes, obj) {
+ fields.forEach(function(key) {
+ if (!sizes[key]) sizes[key] = utils.humanify(key).length;
sizes[key] = Math.max(sizes[key], utils.pretty(obj[key]).length);
});
sizes.total = 0;
for (let key in sizes) {
- if (key !== 'total')
- sizes.total += sizes[key];
+ if (key !== "total") sizes.total += sizes[key];
}
};
// get the detail info for the popup
- let groupDetail = function () {
+ let groupDetail = function() {
let self = this;
// queued function to get the .router info for an edge router
- let q_getEdgeInfo = function (n, infoPerId, callback) {
- let nodeId = utils.idFromName(n.container, '_edge');
- QDRService.management.topology.fetchEntities(nodeId,
- [{ entity: 'router', attrs: [] },
- ],
- function (results) {
+ let q_getEdgeInfo = function(n, infoPerId, callback) {
+ let nodeId = utils.idFromName(n.container, "_edge");
+ QDRService.management.topology.fetchEntities(
+ nodeId,
+ [{ entity: "router", attrs: [] }],
+ function(results) {
let r = results[nodeId].router;
- infoPerId[n.container] = utils.flatten(r.attributeNames, r.results[0]);
- let rates = utils.rates(infoPerId[n.container], ["acceptedDeliveries"], self.rates, n.container, 1);
- infoPerId[n.container].acceptedDeliveriesRate = Math.round(rates.acceptedDeliveries, 2);
+ infoPerId[n.container] = utils.flatten(
+ r.attributeNames,
+ r.results[0]
+ );
+ let rates = utils.rates(
+ infoPerId[n.container],
+ ["acceptedDeliveries"],
+ self.rates,
+ n.container,
+ 1
+ );
+ infoPerId[n.container].acceptedDeliveriesRate = Math.round(
+ rates.acceptedDeliveries,
+ 2
+ );
infoPerId[n.container].linkRoutes = [];
infoPerId[n.container].autoLinks = [];
infoPerId[n.container].addresses = [];
callback(null);
- });
+ }
+ );
};
- return new Promise((function (resolve) {
+ return new Promise(function(resolve) {
let infoPerId = {};
// we are getting info for an edge router
- if (d.nodeType === 'edge') {
+ if (d.nodeType === "edge") {
// called for each expanded row to get further details about the edge router
- $scope.detail.moreInfo = function (id) {
- let nodeId = utils.idFromName(id, '_edge');
- QDRService.management.topology.fetchEntities(nodeId,
+ $scope.detail.moreInfo = function(id) {
+ let nodeId = utils.idFromName(id, "_edge");
+ QDRService.management.topology.fetchEntities(
+ nodeId,
[
- { entity: 'router.link', attrs: [] },
- { entity: 'linkRoute', attrs: $scope.fields.linkRouteFields.cols },
- { entity: 'autoLink', attrs: $scope.fields.autoLinkFields.cols },
- { entity: 'address', attrs: [] },
+ { entity: "router.link", attrs: [] },
+ {
+ entity: "linkRoute",
+ attrs: $scope.fields.linkRouteFields.cols
+ },
+ {
+ entity: "autoLink",
+ attrs: $scope.fields.autoLinkFields.cols
+ },
+ { entity: "address", attrs: [] }
],
- function (results) {
- $timeout(function () {
+ function(results) {
+ $timeout(function() {
// save the results (and sizes) for each entity requested
if (infoPerId[id]) {
infoPerId[id].linkRouteSizes = {};
- infoPerId[id].linkRoutes = utils.flattenAll(results[nodeId].linkRoute,
- function (route) {
- updateSizes($scope.fields.linkRouteFields.cols, infoPerId[id].linkRouteSizes, route);
+ infoPerId[id].linkRoutes = utils.flattenAll(
+ results[nodeId].linkRoute,
+ function(route) {
+ updateSizes(
+ $scope.fields.linkRouteFields.cols,
+ infoPerId[id].linkRouteSizes,
+ route
+ );
return route;
- });
+ }
+ );
infoPerId[id].autoLinkSizes = {};
- infoPerId[id].autoLinks = utils.flattenAll(results[nodeId].autoLink,
- function (link) {
- updateSizes($scope.fields.autoLinkFields.cols, infoPerId[id].autoLinkSizes, link);
+ infoPerId[id].autoLinks = utils.flattenAll(
+ results[nodeId].autoLink,
+ function(link) {
+ updateSizes(
+ $scope.fields.autoLinkFields.cols,
+ infoPerId[id].autoLinkSizes,
+ link
+ );
return link;
- });
+ }
+ );
infoPerId[id].addressSizes = {};
- infoPerId[id].addresses = utils.flattenAll(results[nodeId].address,
- function (addr) {
- updateSizes($scope.fields.addressFields.cols, infoPerId[id].addressSizes, addr);
+ infoPerId[id].addresses = utils.flattenAll(
+ results[nodeId].address,
+ function(addr) {
+ updateSizes(
+ $scope.fields.addressFields.cols,
+ infoPerId[id].addressSizes,
+ addr
+ );
return addr;
- });
+ }
+ );
}
});
- });
+ }
+ );
};
// async send up to 10 requests
@@ -192,37 +242,48 @@ export class DetailDialogController {
}
}
// await until all sent requests have completed
- q.await(function () {
- $scope.detail.template = 'edgeRouters.html';
- $scope.detail.title = 'edge router';
+ q.await(function() {
+ $scope.detail.template = "edgeRouters.html";
+ $scope.detail.title = "edge router";
// send the results
resolve({
- description: 'Select an edge router to see more info',
+ description: "Select an edge router to see more info",
infoPerId: infoPerId
});
});
} else {
// we are getting info for a group of clients or consoles
- $scope.detail.moreInfo = function () { };
- let attrs = utils.copy($scope.fields.linkFields.cols);
- attrs.unshift('connectionId');
- QDRService.management.topology.fetchEntities(d.key,
- [{ entity: 'router.link', attrs: attrs }],
- function (results) {
- let links = results[d.key]['router.link'];
+ $scope.detail.moreInfo = function() {};
+ let attrs = utils.copy($scope.fields.linkFields.attrs);
+ attrs.unshift("connectionId");
+ QDRService.management.topology.fetchEntities(
+ d.key,
+ [{ entity: "router.link", attrs: attrs }],
+ function(results) {
+ let links = results[d.key]["router.link"];
for (let i = 0; i < d.normals.length; i++) {
let n = d.normals[i];
let conn = {};
infoPerId[n.container] = conn;
conn.container = n.container;
- conn.encrypted = n.encrypted ? 'True' : 'False';
+ conn.encrypted = n.encrypted ? "True" : "False";
conn.host = n.host;
//conn.links = [];
conn.sizes = {};
- conn.links = utils.flattenAll(links, function (link) {
+ conn.links = utils.flattenAll(links, function(link) {
+ $scope.fields.linkFields.cols.forEach(function(col) {
+ if ($scope.fields.linkFields.calc[col]) {
+ link[col] = $scope.fields.linkFields.calc[col](link);
+ }
+ });
if (link.connectionId === n.connectionId) {
link.owningAddr = utils.addr_text(link.owningAddr);
- updateSizes($scope.fields.linkFields.cols, conn.sizes, link);
+ link.addr = link.owningAddr;
+ updateSizes(
+ $scope.fields.linkFields.cols,
+ conn.sizes,
+ link
+ );
return link;
} else {
return null;
@@ -230,34 +291,43 @@ export class DetailDialogController {
});
conn.linkCount = conn.links.length;
}
- let dir = d.cdir === 'in' ? 'inbound' : d.cdir === 'both' ? 'in and outbound' : 'outbound';
+ let dir =
+ d.cdir === "in"
+ ? "inbound"
+ : d.cdir === "both"
+ ? "in and outbound"
+ : "outbound";
let count = d.normals.length;
- let verb = count > 1 ? 'are' : 'is';
- let preposition = d.cdir === 'in' ? 'to' : d.cdir === 'both' ? 'for' : 'from';
- let plural = count > 1 ? 's' : '';
- $scope.detail.template = 'clients.html';
- $scope.detail.title = 'for client';
+ let verb = count > 1 ? "are" : "is";
+ let preposition =
+ d.cdir === "in" ? "to" : d.cdir === "both" ? "for" : "from";
+ let plural = count > 1 ? "s" : "";
+ $scope.detail.template = "clients.html";
+ $scope.detail.title = "for client";
resolve({
- description: `There ${verb} ${count} ${dir} connection${plural} ${preposition} ${d.routerId} with role ${d.nodeType}`,
+ description: `There ${verb} ${count} ${dir} connection${plural} ${preposition} ${
+ d.routerId
+ } with role ${d.nodeType}`,
infoPerId: infoPerId
});
- });
+ }
+ );
}
- }));
+ });
};
let dStart = 0;
let dStop = Math.min(d.normals.length, 10);
let cachedInfo = [];
let updateTimer;
- let doUpdateDetail = function () {
+ let doUpdateDetail = function() {
cachedInfo = [];
updateDetail.call(this);
};
- let updateDetail = function () {
- groupDetail.call(this)
- .then(function (det) {
- Object.keys(det.infoPerId).forEach(function (id) {
+ let updateDetail = function() {
+ groupDetail.call(this).then(
+ function(det) {
+ Object.keys(det.infoPerId).forEach(function(id) {
cachedInfo.push(det.infoPerId[id]);
});
if (dStop < d.normals.length) {
@@ -265,40 +335,50 @@ export class DetailDialogController {
dStop = Math.min(d.normals.length, dStart + 10);
setTimeout(updateDetail.bind(this), 1);
} else {
- $timeout(function () {
- $scope.detail.title = `for ${d.normals.length} ${$scope.detail.title}${d.normals.length > 1 ? 's' : ''}`;
- $scope.detail.description = det.description;
- $scope.detail.infoPerId = cachedInfo.sort(function (a, b) {
- return a.name > b.name ? 1 : -1;
- });
- dStart = 0;
- dStop = Math.min(d.normals.length, 10);
- updateTimer = setTimeout(doUpdateDetail.bind(this), 2000);
- }.bind(this));
+ $timeout(
+ function() {
+ $scope.detail.title = `for ${d.normals.length} ${
+ $scope.detail.title
+ }${d.normals.length > 1 ? "s" : ""}`;
+ $scope.detail.description = det.description;
+ $scope.detail.infoPerId = cachedInfo.sort(function(a, b) {
+ return a.name > b.name ? 1 : -1;
+ });
+ dStart = 0;
+ dStop = Math.min(d.normals.length, 10);
+ updateTimer = setTimeout(doUpdateDetail.bind(this), 2000);
+ }.bind(this)
+ );
}
- }.bind(this));
+ }.bind(this)
+ );
};
doUpdateDetail.call(this);
}
}
-DetailDialogController.$inject = ['QDRService', '$scope', '$timeout', '$uibModalInstance', 'd'];
+DetailDialogController.$inject = [
+ "QDRService",
+ "$scope",
+ "$timeout",
+ "$uibModalInstance",
+ "d"
+];
// SubTable directive
export class SubTable {
constructor() {
- this.restrict = 'E';
+ this.restrict = "E";
this.scope = {
- sizes: '=sizes',
- cols: '=cols',
- rows: '=rows'
+ sizes: "=sizes",
+ cols: "=cols",
+ rows: "=rows"
};
- this.templateUrl = 'sub-table.html';
+ this.templateUrl = "sub-table.html";
}
link(scope) {
- scope.fieldWidth = function (val, sizes) {
- if (!sizes)
- return '10%';
- return `${Math.round(sizes[val] * 100 / sizes.total)}%`;
+ scope.fieldWidth = function(val, sizes) {
+ if (!sizes) return "10%";
+ return `${Math.round((sizes[val] * 100) / sizes.total)}%`;
};
}
static create() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org