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 2017/11/11 14:00:20 UTC
[3/8] qpid-dispatch git commit: DISPATCH-801 Updated 3rd party UI
components to latest available via npm
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrService.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrService.js b/console/stand-alone/plugin/js/qdrService.js
index 62938d2..a2dd335 100644
--- a/console/stand-alone/plugin/js/qdrService.js
+++ b/console/stand-alone/plugin/js/qdrService.js
@@ -21,1086 +21,28 @@ Licensed to the Apache Software Foundation (ASF) under one
*/
var QDR = (function(QDR) {
- // The QDR service handles the connection to
- // the server in the background
- QDR.module.factory("QDRService", ['$rootScope', '$http', '$timeout', '$resource', '$location', function($rootScope, $http, $timeout, $resource, $location) {
+ // The QDR service handles the connection to the router
+ QDR.module.factory("QDRService", ['$timeout', '$location', function($timeout, $location) {
+ var dm = require("dispatch-management")
var self = {
-
- rhea: require("rhea"),
- timeout: 10, // seconds to wait before assuming a request has failed
- updateInterval: 2000, // milliseconds between background updates
- connectActions: [],
- disconnectActions: [],
- updatedActions: {},
- updating: false, // are we updating the node list in the background
- maxCorrelatorDepth: 10, // max number of outstanding requests to allow
-
- /*
- * @property message
- * The proton message that is used to send commands
- * and receive responses
- */
- sender: undefined,
- receiver: undefined,
- version: undefined,
- sendable: false,
-
- schema: undefined,
-
- connected: false,
- gotTopology: false,
- errorText: undefined,
- connectionError: undefined,
-
- addConnectAction: function(action) {
- if (angular.isFunction(action)) {
- self.connectActions.push(action);
- }
- },
- addDisconnectAction: function(action) {
- if (angular.isFunction(action)) {
- self.disconnectActions.push(action);
- }
- },
- delDisconnectAction: function(action) {
- if (angular.isFunction(action)) {
- var index = self.disconnectActions.indexOf(action)
- if (index >= 0)
- self.disconnectActions.splice(index, 1)
- }
- },
- addUpdatedAction: function(key, action) {
- if (angular.isFunction(action)) {
- self.updatedActions[key] = action;
- }
- },
- delUpdatedAction: function(key) {
- if (key in self.updatedActions)
- delete self.updatedActions[key];
- },
-
- executeConnectActions: function() {
- self.connectActions.forEach(function(action) {
- try {
- action.apply();
- } catch (e) {
- // in case the page that registered the handler has been unloaded
- QDR.log.info(e.message)
- }
- });
- self.connectActions = [];
- },
- executeDisconnectActions: function() {
- self.disconnectActions.forEach(function(action) {
- try {
- action.apply();
- } catch (e) {
- // in case the page that registered the handler has been unloaded
- }
- });
- self.disconnectActions = [];
- },
- executeUpdatedActions: function() {
- for (action in self.updatedActions) {
-// try {
- self.updatedActions[action].apply();
-/* } catch (e) {
-QDR.log.debug("caught error executing updated actions")
-console.dump(e)
- delete self.updatedActions[action]
- }
- */
- }
- },
- redirectWhenConnected: function(org) {
- $location.path(QDR.pluginRoot + "/connect")
- $location.search('org', org);
- },
-
- notifyTopologyDone: function() {
- if (!self.gotTopology) {
- QDR.log.debug("topology was just initialized");
- //console.dump(self.topology._nodeInfo)
- self.gotTopology = true;
- //$rootScope.$apply();
- } else {
- //QDR.log.debug("topology model was just updated");
- }
- self.executeUpdatedActions();
-
- },
-
- isConnected: function() {
- return self.connected;
- },
-
- versionCheck: function (minVer) {
- var verparts = self.version.split('.')
- var minparts = minVer.split('.')
- try {
- for (var i=0; i<minparts.length; ++i) {
- if (parseInt(minVer[i] > parseInt(verparts[i])))
- return false
- }
- } catch (e) {
- QDR.log.debug("error doing version check between: " + self.version + " and " + minVer + " " + e.message)
- return false
- }
- return true
- },
-
- correlator: {
- _objects: {},
- _correlationID: 0,
-
- corr: function() {
- var id = ++this._correlationID + "";
- this._objects[id] = {
- resolver: null
- }
- return id;
- },
- request: function() {
- //QDR.log.debug("correlator:request");
- return this;
- },
- then: function(id, resolver, error) {
- //QDR.log.debug("registered then resolver for correlationID: " + id);
- if (error) {
- //QDR.log.debug("then received an error. deleting correlator")
- delete this._objects[id];
- return;
- }
- this._objects[id].resolver = resolver;
- },
- // called by receiver's on('message') handler when a response arrives
- resolve: function(context) {
- var correlationID = context.message.correlation_id;
- this._objects[correlationID].resolver(context.message.body, context);
- delete this._objects[correlationID];
- },
- depth: function () {
- return Object.keys(this._objects).length
- }
- },
-
- onSubscription: function() {
- self.executeConnectActions();
- var org = $location.search()
- if (org)
- org = org.org
- if (org && org.length > 0 && org !== "connect") {
- self.getSchema(function () {
- self.setUpdateEntities([])
- self.topology.get()
- self.addUpdatedAction('onSub', function () {
- self.delUpdatedAction('onSub')
- $timeout( function () {
- $location.path(QDR.pluginRoot + '/' + org)
- $location.search('org', null)
- $location.replace()
- })
- })
- });
- }
- },
-
- startUpdating: function() {
- self.stopUpdating(true);
- QDR.log.info("startUpdating called")
- self.updating = true;
- self.topology.get();
- },
- stopUpdating: function(silent) {
- self.updating = false;
- if (self.topology._getTimer) {
- clearTimeout(self.topology._getTimer)
- self.topology._getTimer = null;
- }
- if (self.topology._waitTimer) {
- clearTimeout(self.topology._waitTimer)
- self.topology._waitTimer = null;
- }
- if (self.topology._gettingTopo) {
- if (self.topology.q)
- self.topology.q.abort()
- }
- if (!silent)
- QDR.log.info("stopUpdating called")
- },
-
- cleanUp: function() {},
- error: function(line) {
- if (line.num) {
- QDR.log.debug("error - num: ", line.num, " message: ", line.message);
- } else {
- QDR.log.debug("error - message: ", line.message);
- }
- },
- disconnected: function(line) {
- QDR.log.debug("Disconnected from QDR server");
- self.executeDisconnectActions();
- },
-
- nameFromId: function(id) {
- return id.split('/')[3];
- },
-
- humanify: function(s) {
- if (!s || s.length === 0)
- return s;
- var t = s.charAt(0).toUpperCase() + s.substr(1).replace(/[A-Z]/g, ' $&');
- return t.replace(".", " ");
- },
- pretty: function(v) {
- var formatComma = d3.format(",");
- if (!isNaN(parseFloat(v)) && isFinite(v))
- return formatComma(v);
- return v;
- },
-
- nodeNameList: function() {
- var nl = [];
- for (var id in self.topology._nodeInfo) {
- nl.push(self.nameFromId(id));
- }
- return nl.sort();
- },
-
- nodeIdList: function() {
- var nl = [];
- for (var id in self.topology._nodeInfo) {
- nl.push(id);
- }
- return nl.sort();
- },
-
- nodeList: function() {
- var nl = [];
- for (var id in self.topology._nodeInfo) {
- nl.push({
- name: self.nameFromId(id),
- id: id
- });
- }
- return nl;
- },
-
- isLargeNetwork: function () {
- return Object.keys(self.topology._nodeInfo).length >= 12
- },
- isMSIE: function () {
- return (document.documentMode || /Edge/.test(navigator.userAgent))
- },
-
- // given an attribute name array, find the value at the same index in the values array
- valFor: function(aAr, vAr, key) {
- var idx = aAr.indexOf(key);
- if ((idx > -1) && (idx < vAr.length)) {
- return vAr[idx];
- }
- return null;
- },
-
- isArtemis: function(d) {
- return (d.nodeType === 'route-container' || d.nodeType === 'on-demand') && (d.properties && d.properties.product === 'apache-activemq-artemis');
- },
-
- isQpid: function(d) {
- return (d.nodeType === 'route-container' || d.nodeType === 'on-demand') && (d.properties && d.properties.product === 'qpid-cpp');
- },
-
- isAConsole: function(properties, connectionId, nodeType, key) {
- return self.isConsole({
- properties: properties,
- connectionId: connectionId,
- nodeType: nodeType,
- key: key
- })
- },
- isConsole: function(d) {
- // use connection properties if available
- return (d && d['properties'] && d['properties']['console_identifier'] === 'Dispatch console')
- },
-
- flatten: function(attributes, result) {
- var flat = {}
- attributes.forEach(function(attr, i) {
- if (result && result.length > i)
- flat[attr] = result[i]
- })
- return flat;
- },
- isConsoleLink: function(link) {
- // find the connection for this link
- var conns = self.topology.nodeInfo()[link.nodeId]['.connection']
- var connIndex = conns.attributeNames.indexOf("identity")
- var linkCons = conns.results.filter(function(conn) {
- return conn[connIndex] === link.connectionId;
- })
- var conn = self.flatten(conns.attributeNames, linkCons[0]);
-
- return self.isConsole(conn)
- },
-
- quiesceLink: function(nodeId, name) {
- function gotMethodResponse(nodeName, entity, response, context) {
- var statusCode = context.message.application_properties.statusCode;
- if (statusCode < 200 || statusCode >= 300) {
- Core.notification('error', context.message.statusDescription);
- QDR.log.info('Error ' + context.message.statusDescription)
- }
- }
- var attributes = {
- adminStatus: 'disabled',
- name: name
- };
- self.sendMethod(nodeId, "router.link", attributes, "UPDATE", undefined, gotMethodResponse)
- },
- addr_text: function(addr) {
- if (!addr)
- return "-"
- if (addr[0] == 'M')
- return addr.substring(2)
- else
- return addr.substring(1)
- },
- addr_class: function(addr) {
- if (!addr) return "-"
- if (addr[0] == 'M') return "mobile"
- if (addr[0] == 'R') return "router"
- if (addr[0] == 'A') return "area"
- if (addr[0] == 'L') return "local"
- if (addr[0] == 'C') return "link-incoming"
- if (addr[0] == 'E') return "link-incoming"
- if (addr[0] == 'D') return "link-outgoing"
- if (addr[0] == 'F') return "link-outgoing"
- if (addr[0] == 'T') return "topo"
- return "unknown: " + addr[0]
- },
- identity_clean: function(identity) {
- if (!identity)
- return "-"
- var pos = identity.indexOf('/')
- if (pos >= 0)
- return identity.substring(pos + 1)
- return identity
- },
-
- queueDepth: function () {
- var qdepth = self.maxCorrelatorDepth - self.correlator.depth()
- if (qdepth <= 0)
- qdepth = 1;
-//QDR.log.debug("queueDepth requested " + qdepth + "(" + self.correlator.depth() + ")")
- return qdepth;
- },
- // check if all nodes have this entity. if not, get them
- initEntity: function (entity, callback) {
- var callNeeded = Object.keys(self.topology._nodeInfo).some( function (node) {
- return !angular.isDefined(self.topology._nodeInfo[node][entity])
- })
- if (callNeeded) {
- self.loadEntity(entity, callback)
- } else
- callback()
- },
-
- // get/refresh entities for all nodes
- loadEntity: function (entities, callback) {
- if (Object.prototype.toString.call(entities) !== '[object Array]') {
- entities = [entities]
- }
- var q = QDR.queue(self.queueDepth())
- for (node in self.topology._nodeInfo) {
- for (var i=0; i<entities.length; ++i) {
- var entity = entities[i]
- q.defer(self.ensureNodeInfo, node, entity, [], q)
- }
- }
- q.await(function (error) {
- clearTimeout(self.topology._waitTimer)
- callback();
- })
- },
-
- // enusre all the topology nones have all these entities
- ensureAllEntities: function (entityAttribs, callback, extra) {
- self.ensureEntities(Object.keys(self.topology._nodeInfo), entityAttribs, callback, extra)
- },
-
- // ensure these nodes have all these entities. don't fetch unless forced to
- ensureEntities: function (nodes, entityAttribs, callback, extra) {
- if (Object.prototype.toString.call(entityAttribs) !== '[object Array]') {
- entityAttribs = [entityAttribs]
- }
- if (Object.prototype.toString.call(nodes) !== '[object Array]') {
- nodes = [nodes]
- }
- var q = QDR.queue(self.queueDepth())
- for (var n=0; n<nodes.length; ++n) {
- for (var i=0; i<entityAttribs.length; ++i) {
- var ea = entityAttribs[i]
- // if we don'e already have the entity or we want to force a refresh
- if (!self.topology._nodeInfo[nodes[n]][ea.entity] || ea.force)
- q.defer(self.ensureNodeInfo, nodes[n], ea.entity, ea.attrs || [], q)
- }
- }
- q.await(function (error) {
- clearTimeout(self.topology._waitTimer)
- callback(extra);
- })
- },
-
- // queue up a request to get certain attributes for one entity for a node and return the results
- fetchEntity: function (node, entity, attrs, callback) {
- var results = {}
- var gotResponse = function (nodeName, dotentity, response) {
- results = response
- }
- var q = QDR.queue(self.queueDepth())
- q.defer(self.fetchNodeInfo, node, entity, attrs, q, gotResponse)
- q.await(function (error) {
- callback(node, entity, results)
- })
- },
-
- // get/refreshes entities for all topology.nodes
- // call doneCallback when all data is available
- // optionally supply a resultCallBack that will be called as each result is avaialble
- // if a resultCallBack is supplied, the calling function is responsible for accumulating the responses
- // otherwise the responses will be returned to the doneCallback as an object
- fetchAllEntities: function (entityAttribs, doneCallback, resultCallback) {
- var q = QDR.queue(self.queueDepth())
- var results = {}
- if (!resultCallback) {
- resultCallback = function (nodeName, dotentity, response) {
- if (!results[nodeName])
- results[nodeName] = {}
- results[nodeName][dotentity] = angular.copy(response);
- }
- }
- var gotAResponse = function (nodeName, dotentity, response) {
- resultCallback(nodeName, dotentity, response)
- }
- if (Object.prototype.toString.call(entityAttribs) !== '[object Array]') {
- entityAttribs = [entityAttribs]
- }
- var nodes = Object.keys(self.topology._nodeInfo)
- for (var n=0; n<nodes.length; ++n) {
- for (var i=0; i<entityAttribs.length; ++i) {
- var ea = entityAttribs[i]
- q.defer(self.fetchNodeInfo, nodes[n], ea.entity, ea.attrs || [], q, gotAResponse)
- }
- }
- q.await(function (error) {
- doneCallback(results);
- })
- },
-
- setUpdateEntities: function (entities) {
- self.topology._autoUpdatedEntities = entities
- },
- addUpdateEntity: function (entity) {
- if (self.topology._autoUpdatedEntities.indexOf(entity) == -1)
- self.topology._autoUpdatedEntities.push(entity)
- },
- delUpdateEntity: function (entity) {
- var index = self.topology._autoUpdatedEntities.indexOf(entity)
- if (index != -1)
- self.topology._autoUpdatedEntities.splice(index, 1)
- },
-
- /*
- * send the management messages that build up the topology
- *
- *
- */
- topology: {
- _gettingTopo: false,
- _nodeInfo: {},
- _lastNodeInfo: {},
- _waitTimer: null,
- _getTimer: null,
- _autoUpdatedEntities: [],
- q: null,
-
- nodeInfo: function() {
- return self.topology._nodeInfo
- },
-
- get: function() {
- if (self.topology._gettingTopo) {
- QDR.log.debug("asked to get topology but was already getting it")
- if (self.topology.q)
- self.topology.q.abort()
- }
- self.topology.q = null
- if (!self.connected) {
- QDR.log.debug("topology get failed because !self.connected")
- return;
- }
- if (self.topology._getTimer) {
- clearTimeout(self.topology._getTimer)
- self.topology._getTimer = null
- }
-
- //QDR.log.info("starting get topology with correlator.depth of " + self.correlator.depth())
- self.topology._gettingTopo = true;
- self.errorText = undefined;
-
- // get the list of nodes to query.
- // once this completes, we will get the info for each node returned
- self.getRemoteNodeInfo(function(response, context) {
- if (Object.prototype.toString.call(response) === '[object Array]') {
- // remove dropped nodes
- var keys = Object.keys(self.topology._nodeInfo)
- for (var i=0; i<keys.length; ++i) {
- if (response.indexOf(keys[i]) < 0) {
- delete self.topology._nodeInfo[keys[i]]
- }
- }
- // add any new nodes
- // if there is only one node, it will not be returned
- if (response.length === 0) {
- var parts = self.receiver.remote.attach.source.address.split('/')
- parts[4] = '$management'
- response.push(parts.join('/'))
- //QDR.log.info("GET-MGMT-NODES returned an empty list. Using ")
- //console.dump(response)
- }
- for (var i=0; i<response.length; ++i) {
- if (!angular.isDefined(self.topology._nodeInfo[response[i]])) {
- self.topology._nodeInfo[angular.copy(response[i])] = {};
- }
- }
- // also refresh any entities that were requested
- self.topology.q = QDR.queue(self.queueDepth())
- for (var i=0; i<self.topology._autoUpdatedEntities.length; ++i) {
- var entity = self.topology._autoUpdatedEntities[i]
- //QDR.log.debug("queuing requests for all nodes for " + entity)
- for (node in self.topology._nodeInfo) {
- self.topology.q.defer(self.ensureNodeInfo, node, entity, [], self.topology.q)
- }
- }
- self.topology.q.await(function (error) {
- self.topology._gettingTopo = false;
- self.topology.q = null
- self.topology.ondone(error)
- })
- };
- });
- },
-
- cleanUp: function(obj) {
- if (obj)
- delete obj;
- },
- timedOut: function(q) {
- // a node dropped out. this happens when the get-mgmt-nodex
- // results contains more nodes than actually respond within
- // the timeout
- QDR.log.debug("timed out waiting for management responses");
- // note: can't use 'this' in a timeout handler
- self.topology.miniDump("state at timeout");
- q.abort()
- //self.topology.onerror(Error("management responses are not consistent"));
- },
-
- addNodeInfo: function(id, entity, values, q) {
- clearTimeout(self.topology._waitTimer)
- // save the results in the nodeInfo object
- if (id) {
- if (!(id in self.topology._nodeInfo)) {
- self.topology._nodeInfo[id] = {};
- }
- // copy the values to allow garbage collector to reclaim their memory
- self.topology._nodeInfo[id][entity] = angular.copy(values)
- }
- self.topology.cleanUp(values);
- },
- ondone: function(waserror) {
- clearTimeout(self.topology._getTimer);
- clearTimeout(self.topology._waitTimer);
- self.topology._waitTimer = null;
- if (self.updating)
- self.topology._getTimer = setTimeout(self.topology.get, self.updateInterval);
- //if (!waserror)
- self.notifyTopologyDone();
- },
- dump: function(prefix) {
- if (prefix)
- QDR.log.info(prefix);
- QDR.log.info("---");
- for (var key in self.topology._nodeInfo) {
- QDR.log.info(key);
- console.dump(self.topology._nodeInfo[key]);
- QDR.log.info("---");
- }
- },
- miniDump: function(prefix) {
- if (prefix)
- QDR.log.info(prefix);
- QDR.log.info("---");
- console.dump(Object.keys(self.topology._nodeInfo));
- QDR.log.info("---");
- },
- onerror: function(err) {
- self.topology._gettingTopo = false;
- QDR.log.debug("Err:" + err);
- //self.executeDisconnectActions();
- }
-
- },
- getRemoteNodeInfo: function(callback) {
- //QDR.log.debug("getRemoteNodeInfo called");
-
- setTimeout(function () {
- var ret;
- // first get the list of remote node names
- self.correlator.request(
- ret = self.sendMgmtQuery('GET-MGMT-NODES')
- ).then(ret.id, function(response, context) {
- callback(response, context);
- self.topology.cleanUp(response);
- }, ret.error);
- }, 1)
- },
-
- // sends a request and updates the topology.nodeInfo object with the response
- // should only be called from a q.defer() statement
- ensureNodeInfo: function (nodeId, entity, attrs, q, callback) {
- //QDR.log.debug("queuing request for " + nodeId + " " + entity)
- self.getNodeInfo(nodeId, entity, attrs, q, function (nodeName, dotentity, response) {
- //QDR.log.debug("got response for " + nodeId + " " + entity)
- self.topology.addNodeInfo(nodeName, dotentity, response, q)
- callback(null)
- })
- return {
- abort: function() {
- delete self.topology._nodeInfo[nodeId]
- //self.topology._nodeInfo[nodeId][entity] = {attributeNames: [], results: [[]]};
- }
- }
- },
-
- // sends request and returns the response
- // should only be called from a q.defer() statement
- fetchNodeInfo: function (nodeId, entity, attrs, q, heartbeat, callback) {
- self.getNodeInfo(nodeId, entity, attrs, q, function (nodeName, dotentity, response) {
- heartbeat(nodeName, dotentity, response)
- callback(null)
- })
- },
-
- getMultipleNodeInfo: function(nodeNames, entity, attrs, callback, selectedNodeId, aggregate) {
- if (!angular.isDefined(aggregate))
- aggregate = true;
- var responses = {};
- var gotNodesResult = function(nodeName, dotentity, response) {
- responses[nodeName] = response;
- }
-
- var q = QDR.queue(self.queueDepth())
- nodeNames.forEach(function(id) {
- q.defer(self.fetchNodeInfo, id, '.' + entity, attrs, q, gotNodesResult)
- })
- q.await(function (error) {
- if (aggregate)
- self.aggregateNodeInfo(nodeNames, entity, selectedNodeId, responses, callback);
- else {
- callback(nodeNames, entity, responses)
- }
- })
- },
-
- aggregateNodeInfo: function(nodeNames, entity, selectedNodeId, responses, callback) {
- //QDR.log.debug("got all results for " + entity);
- // aggregate the responses
- var newResponse = {};
- var thisNode = responses[selectedNodeId];
- newResponse['attributeNames'] = thisNode.attributeNames;
- newResponse['results'] = thisNode.results;
- newResponse['aggregates'] = [];
- for (var i = 0; i < thisNode.results.length; ++i) {
- var result = thisNode.results[i];
- var vals = [];
- result.forEach(function(val) {
- vals.push({
- sum: val,
- detail: []
- })
- })
- newResponse.aggregates.push(vals);
- }
- var nameIndex = thisNode.attributeNames.indexOf("name");
- var ent = self.schema.entityTypes[entity];
- var ids = Object.keys(responses);
- ids.sort();
- ids.forEach(function(id) {
- var response = responses[id];
- var results = response.results;
- results.forEach(function(result) {
- // find the matching result in the aggregates
- var found = newResponse.aggregates.some(function(aggregate, j) {
- if (aggregate[nameIndex].sum === result[nameIndex]) {
- // result and aggregate are now the same record, add the graphable values
- newResponse.attributeNames.forEach(function(key, i) {
- if (ent.attributes[key] && ent.attributes[key].graph) {
- if (id != selectedNodeId)
- aggregate[i].sum += result[i];
- }
- aggregate[i].detail.push({
- node: self.nameFromId(id) + ':',
- val: result[i]
- })
- })
- return true; // stop looping
- }
- return false; // continute looking for the aggregate record
- })
- if (!found) {
- // this attribute was not found in the aggregates yet
- // because it was not in the selectedNodeId's results
- var vals = [];
- result.forEach(function(val) {
- vals.push({
- sum: val,
- detail: [{
- node: self.nameFromId(id),
- val: val
- }]
- })
- })
- newResponse.aggregates.push(vals)
- }
- })
- })
- callback(nodeNames, entity, newResponse);
- },
-
-
- getSchema: function(callback) {
- //QDR.log.info("getting schema");
- var ret;
- self.correlator.request(
- ret = self.sendMgmtQuery('GET-SCHEMA')
- ).then(ret.id, function(response) {
- //QDR.log.info("Got schema response");
- // remove deprecated
- for (var entityName in response.entityTypes) {
- var entity = response.entityTypes[entityName]
- if (entity.deprecated) {
- // deprecated entity
- delete response.entityTypes[entityName]
- } else {
- for (var attributeName in entity.attributes) {
- var attribute = entity.attributes[attributeName]
- if (attribute.deprecated) {
- // deprecated attribute
- delete response.entityTypes[entityName].attributes[attributeName]
- }
- }
- }
- }
- self.schema = response;
- callback()
- }, ret.error);
- },
-
- getNodeInfo: function(nodeName, entity, attrs, q, callback) {
- //QDR.log.debug("getNodeInfo called with nodeName: " + nodeName + " and entity " + entity);
- var timedOut = function (q) {
- q.abort()
- }
- var atimer = setTimeout(timedOut, self.timeout * 1000, q);
- var ret;
- self.correlator.request(
- ret = self.sendQuery(nodeName, entity, attrs)
- ).then(ret.id, function(response) {
- clearTimeout(atimer)
- callback(nodeName, entity, response);
- }, ret.error);
- },
-
- sendMethod: function(nodeId, entity, attrs, operation, props, callback) {
- setTimeout(function () {
- var ret;
- self.correlator.request(
- ret = self._sendMethod(nodeId, entity, attrs, operation, props)
- ).then(ret.id, function(response, context) {
- callback(nodeId, entity, response, context);
- }, ret.error);
- }, 1)
- },
-
- _fullAddr: function(toAddr) {
- var toAddrParts = toAddr.split('/');
- if (toAddrParts.shift() != "amqp:") {
- self.topology.error(Error("unexpected format for router address: " + toAddr));
- return;
- }
- var fullAddr = toAddrParts.join('/');
- return fullAddr;
- },
-
- _sendMethod: function(toAddr, entity, attrs, operation, props) {
- var ret = {
- id: self.correlator.corr()
- };
- var fullAddr = self._fullAddr(toAddr);
- if (!self.sender || !self.sendable) {
- ret.error = "no sender"
- return ret;
- }
- try {
- var application_properties = {
- operation: operation
- }
- if (entity) {
- var ent = self.schema.entityTypes[entity];
- var fullyQualifiedType = ent ? ent.fullyQualifiedType : entity;
- application_properties.type = fullyQualifiedType || entity;
- }
- if (attrs.name)
- application_properties.name = attrs.name;
- if (props) {
- jQuery.extend(application_properties, props);
- }
- var msg = {
- body: attrs,
- to: fullAddr,
- reply_to: self.receiver.remote.attach.source.address,
- correlation_id: ret.id,
- application_properties: application_properties
- }
- self.sender.send(msg);
- //console.dump("------- method called -------")
- //console.dump(msg)
- } catch (e) {
- error = "error sending: " + e;
- QDR.log.error(error)
- ret.error = error;
- }
- return ret;
- },
-
- sendQuery: function(toAddr, entity, attrs, operation) {
- operation = operation || "QUERY"
- var fullAddr = self._fullAddr(toAddr);
-
- var body;
- if (attrs) {
- body = {
- "attributeNames": attrs,
- }
- } else {
- body = {
- "attributeNames": [],
- }
- }
- if (entity[0] === '.')
- entity = entity.substr(1, entity.length - 1)
- var prefix = "org.apache.qpid.dispatch."
- var configs = ["address", "autoLink", "linkRoute"]
- if (configs.indexOf(entity) > -1)
- prefix += "router.config."
- return self._send(body, fullAddr, operation, prefix + entity);
- },
-
- sendMgmtQuery: function(operation) {
- return self._send([], "/$management", operation);
- },
-
- _send: function(body, to, operation, entityType) {
- var ret = {
- id: self.correlator.corr()
- };
- if (!self.sender || !self.sendable) {
- ret.error = "no sender"
- return ret;
- }
- try {
- var application_properties = {
- operation: operation,
- type: "org.amqp.management",
- name: "self"
- };
- if (entityType)
- application_properties.entityType = entityType;
-
- self.sender.send({
- body: body,
- to: to,
- reply_to: self.receiver.remote.attach.source.address,
- correlation_id: ret.id,
- application_properties: application_properties
- })
- } catch (e) {
- error = "error sending: " + e;
- QDR.log.error(error)
- ret.error = error;
- }
- return ret;
- },
-
- disconnect: function() {
- self.connection.close();
- self.connected = false
- self.errorText = "Disconnected."
- },
-
- connectionTimer: null,
-
- testConnect: function (options, timeout, callback) {
- var connection;
- var allowDelete = true;
- var reconnect = angular.isDefined(options.reconnect) ? options.reconnect : false
- var baseAddress = options.address + ':' + options.port;
- var protocol = "ws"
- if ($location.protocol() === "https")
- protocol = "wss"
- QDR.log.info("testConnect called with reconnect " + reconnect + " using " + protocol + " protocol")
- try {
- var ws = self.rhea.websocket_connect(WebSocket);
- connection = self.rhea.connect({
- connection_details: ws(protocol + "://" + baseAddress, ["binary"]),
- reconnect: reconnect,
- properties: {
- console_identifier: 'Dispatch console'
- }
- }
- );
- } catch (e) {
- QDR.log.debug("exception caught on test connect " + e)
- self.errorText = "Connection failed "
- callback({error: e})
- return
- }
- // called when initial connecting fails, and when connection is dropped after connecting
- connection.on('disconnected', function(context) {
- if (allowDelete) {
- delete connection
- connection.options.reconnect = false
- //QDR.log.info("connection.on(disconnected) called")
- callback({error: "failed to connect"})
- }
- })
- connection.on("connection_open", function (context) {
- allowDelete = false;
- callback({connection: connection, context: context})
- })
- },
-
- connect: function(options) {
- var connection;
- self.topologyInitialized = false;
- if (!self.connected) {
- var okay = {
- connection: false,
- sender: false,
- receiver: false
- }
- var sender, receiver
- self.connectionError = undefined;
-
- var stop = function(context) {
- //self.stopUpdating();
- okay.sender = false;
- okay.receiver = false;
- okay.connected = false;
- self.connected = false;
- self.sender = null;
- self.receiver = null;
- self.sendable = false;
- self.gotTopology = false;
- }
- var maybeStart = function() {
- if (okay.connection && okay.sender && okay.receiver && self.sendable && !self.connected) {
- //QDR.log.info("okay to start")
- self.connected = true;
- self.connection = connection;
- self.sender = sender;
- self.receiver = receiver;
- self.gotTopology = false;
- self.onSubscription();
- }
- }
- var onDisconnect = function() {
- //QDR.log.warn("Disconnected");
- self.connectionError = true;
- stop();
- self.executeDisconnectActions();
- }
-
- // called after connection.open event is fired or connection error has happened
- var connectionCallback = function (options) {
- //QDR.log.info('connectionCallback called')
- if (!options.error) {
- //QDR.log.info('there was no error')
- connection = options.connection
- self.version = options.context.connection.properties.version
- QDR.log.debug("connection_opened")
- okay.connection = true;
- okay.receiver = false;
- okay.sender = false;
-
- connection.on('disconnected', function(context) {
- //QDR.log.info("connection.on(disconnected) called")
- self.errorText = "Unable to connect"
- onDisconnect();
- })
- connection.on('connection_close', function(context) {
- //QDR.log.info("connection closed")
- self.errorText = "Disconnected"
- onDisconnect();
- })
-
- sender = connection.open_sender();
- sender.on('sender_open', function(context) {
- //QDR.log.info("sender_opened")
- okay.sender = true
- maybeStart()
- })
- sender.on('sendable', function(context) {
- //QDR.log.debug("sendable")
- self.sendable = true;
- maybeStart();
- })
-
- receiver = connection.open_receiver({
- source: {
- dynamic: true
- }
- });
- receiver.on('receiver_open', function(context) {
- //QDR.log.info("receiver_opened")
- if (receiver.remote && receiver.remote.attach && receiver.remote.attach.source) {
- okay.receiver = true;
- maybeStart()
- }
- })
- receiver.on("message", function(context) {
- self.correlator.resolve(context);
- });
- } else {
- //QDR.log.info("there was an error " + options.error)
- self.errorText = "Unable to connect"
- onDisconnect();
- }
- }
-
- QDR.log.debug("****** calling rhea.connect ********")
- if (!options.connection) {
- QDR.log.debug("rhea.connect was not passed an existing connection")
- options.reconnect = true
- self.testConnect(options, 5000, connectionCallback)
+ management: new dm.Management($location.protocol()),
+ utilities: dm.Utilities,
+
+ onDisconnect: function () {
+ $timeout( function () {
+ $location.path('/connect')
+ var curPath = $location.path()
+ var org = curPath.substr(1)
+ if (org && org.length > 0 && org !== "connect") {
+ $location.search('org', org)
} else {
- QDR.log.debug("rhea.connect WAS passed an existing connection")
- connectionCallback(options)
+ $location.search('org', null)
}
- }
+ })
}
+
}
+
return self;
}]);
@@ -1117,52 +59,6 @@ console.dump(e)
};
})();
-function ngGridFlexibleHeightPlugin (opts) {
- var self = this;
- self.grid = null;
- self.scope = null;
- self.init = function (scope, grid, services) {
- self.domUtilityService = services.DomUtilityService;
- self.grid = grid;
- self.scope = scope;
- var recalcHeightForData = function () { setTimeout(innerRecalcForData, 1); };
- var innerRecalcForData = function () {
- var gridId = self.grid.gridId;
- var footerPanelSel = '.' + gridId + ' .ngFooterPanel';
- if (!self.grid.$topPanel || !self.grid.$canvas)
- return;
- var extraHeight = self.grid.$topPanel.height() + $(footerPanelSel).height();
- var naturalHeight = self.grid.$canvas.height() + 1;
- if (opts != null) {
- if (opts.minHeight != null && (naturalHeight + extraHeight) < opts.minHeight) {
- naturalHeight = opts.minHeight - extraHeight - 2;
- }
- if (opts.maxHeight != null && (naturalHeight + extraHeight) > opts.maxHeight) {
- naturalHeight = opts.maxHeight;
- }
- }
-
- var newViewportHeight = naturalHeight + 3;
- if (!self.scope.baseViewportHeight || self.scope.baseViewportHeight !== newViewportHeight) {
- self.grid.$viewport.css('height', newViewportHeight + 'px');
- self.grid.$root.css('height', (newViewportHeight + extraHeight) + 'px');
- self.scope.baseViewportHeight = newViewportHeight;
- self.domUtilityService.RebuildGrid(self.scope, self.grid);
- }
- };
- self.scope.catHashKeys = function () {
- var hash = '',
- idx;
- for (idx in self.scope.renderedRows) {
- hash += self.scope.renderedRows[idx].$$hashKey;
- }
- return hash;
- };
- self.scope.$watch('catHashKeys()', innerRecalcForData);
- self.scope.$watch(self.grid.config.data, recalcHeightForData);
- };
-}
-
if (!String.prototype.startsWith) {
String.prototype.startsWith = function (searchString, position) {
return this.substr(position || 0, searchString.length) === searchString
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrSettings.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrSettings.js b/console/stand-alone/plugin/js/qdrSettings.js
index 3f0c109..746e296 100644
--- a/console/stand-alone/plugin/js/qdrSettings.js
+++ b/console/stand-alone/plugin/js/qdrSettings.js
@@ -51,7 +51,7 @@ var QDR = (function(QDR) {
}, true);
$scope.buttonText = function() {
- if (QDRService.isConnected()) {
+ if (QDRService.management.connection.is_connected()) {
return "Disconnect";
} else {
return "Connect";
@@ -59,9 +59,9 @@ var QDR = (function(QDR) {
};
$scope.connect = function() {
- if (QDRService.connected) {
+ if (QDRService.management.connection.is_connected()) {
$timeout( function () {
- QDRService.disconnect();
+ QDRService.management.connection.disconnect();
})
return;
}
@@ -76,53 +76,58 @@ var QDR = (function(QDR) {
}
}
- var doConnect = function(opts) {
+ var doConnect = function() {
+ QDR.log.info("doConnect called on connect page")
if (!$scope.formEntity.address)
$scope.formEntity.address = "localhost"
if (!$scope.formEntity.port)
$scope.formEntity.port = 5673
var failed = function() {
+ QDR.log.info("disconnect action called");
$timeout(function() {
- QDR.log.debug("disconnect action called");
$scope.connecting = false;
- $scope.connectionErrorText = QDRService.errorText;
- $scope.connectionError = true;
+ $scope.connectionErrorText = "Unable to connect to " + $scope.formEntity.address + ":" + $scope.formEntity.port
+ $scope.connectionError = true
})
}
- QDRService.addDisconnectAction(failed);
- QDRService.addConnectAction(function() {
- QDRService.delDisconnectAction(failed)
- QDRService.getSchema(function () {
- QDR.log.info("got schema after connection")
- QDRService.addUpdatedAction("initialized", function () {
- QDRService.delUpdatedAction("initialized")
- QDR.log.info("got initial topology")
- $timeout(function() {
- $scope.connecting = false;
- if ($location.path().startsWith(QDR.pluginRoot)) {
- var searchObject = $location.search();
- var goto = "overview";
- if (searchObject.org && searchObject.org !== "connect") {
- goto = searchObject.org;
+ var options = {address: $scope.formEntity.address, port: $scope.formEntity.port}
+ QDRService.management.connection.testConnect(options, function (e) {
+ if (e.error) {
+ failed()
+ } else {
+ QDR.log.info("test connect from connect page succeeded")
+ QDRService.management.connection.addConnectAction(function() {
+ QDR.log.info("real connect from connect page succeeded")
+ // get notified if at any time the connection fails
+ QDRService.management.connection.addDisconnectAction(QDRService.onDisconnect);
+ QDRService.management.getSchema(function () {
+ QDR.log.info("got schema after connection")
+ QDRService.management.topology.addUpdatedAction("initialized", function () {
+ QDRService.management.topology.delUpdatedAction("initialized")
+ QDR.log.info("got initial topology")
+ $timeout(function() {
+ $scope.connecting = false;
+ if ($location.path().startsWith(QDR.pluginRoot)) {
+ var searchObject = $location.search();
+ var goto = "overview";
+ if (searchObject.org && searchObject.org !== "connect") {
+ goto = searchObject.org;
+ }
+ $location.search('org', null)
+ $location.path(QDR.pluginRoot + "/" + goto);
}
- $location.search('org', null)
- $location.path(QDR.pluginRoot + "/" + goto);
- }
+ })
+ })
+ QDR.log.info("requesting a topology")
+ QDRService.management.topology.setUpdateEntities([])
+ QDRService.management.topology.get()
})
- })
- QDR.log.info("requesting a topology")
- QDRService.setUpdateEntities([])
- QDRService.topology.get()
- })
- });
- var options = {address: $scope.formEntity.address, port: $scope.formEntity.port}
- // if we have already successfully connected (the test connections succeeded)
- if (opts && opts.connection) {
- options.connection = opts.connection
- options.context = opts.context
- }
- QDRService.connect(options);
+ });
+ options.reconnect = true
+ QDRService.management.connection.connect(options)
+ }
+ })
}
}]);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org