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 2016/08/19 16:59:16 UTC
[09/11] qpid-dispatch git commit: DISPATCH-316 Hawtio and stand-alone
consoles now use common code
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d98ae37e/console/hawtio/src/main/webapp/plugin/js/qdrOverview.js
----------------------------------------------------------------------
diff --git a/console/hawtio/src/main/webapp/plugin/js/qdrOverview.js b/console/hawtio/src/main/webapp/plugin/js/qdrOverview.js
deleted file mode 100644
index aad0cdf..0000000
--- a/console/hawtio/src/main/webapp/plugin/js/qdrOverview.js
+++ /dev/null
@@ -1,1426 +0,0 @@
-/*
-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.
-*/
-/**
- * @module QDR
- */
-/**
- * @module QDR
- */
-var QDR = (function (QDR) {
-
- /**
- * @method OverviewController
- * @param $scope
- * @param QDRService
- * @param QDRChartServer
- * dialogServer
- * $location
- *
- * Controller that handles the QDR overview page
- */
- QDR.module.controller("QDR.OverviewController", ['$scope', 'QDRService', '$location', 'localStorage', '$timeout', function($scope, QDRService, $location, localStorage, $timeout) {
-
- console.log("QDR.OverviewControll started with location of " + $location.path() + " and connection of " + QDRService.connected);
- var columnStateKey = 'QDRColumnKey.';
- var OverviewExpandedKey = "QDROverviewExpanded"
- var OverviewActivatedKey = "QDROverviewActivated"
-
- // we want attributes to be listed first, so add it at index 0
- $scope.subLevelTabs = [{
- content: '<i class="icon-list"></i> Attributes',
- title: "View the attribute values on your selection",
- isValid: function (workspace) { return true; },
- href: function () { return "#/" + QDR.pluginName + "/attributes"; },
- index: 0
- },
- {
- content: '<i class="icon-leaf"></i> Operations',
- title: "Execute operations on your selection",
- isValid: function (workspace) { return true; },
- href: function () { return "#/" + QDR.pluginName + "/operations"; },
- index: 1
- }]
- $scope.activeTab = $scope.subLevelTabs[0];
- $scope.setActive = function (nav) {
- $scope.activeTab = nav;
- }
- $scope.isValid = function (nav) {
- return nav.isValid()
- }
- $scope.isActive = function (nav) {
- return nav == $scope.activeTab;
- }
- $scope.linkFields = []
- $scope.link = null;
- var refreshInterval = 5000
- $scope.modes = [
- {title: 'Overview', name: 'Overview', right: false}
- ];
-
- $scope.templates =
- [ { name: 'Routers', url: 'routers.html'},
- { name: 'Router', url: 'router.html'},
- { name: 'Addresses', url: 'addresses.html'},
- { name: 'Address', url: 'address.html'},
- { name: 'Links', url: 'links.html'},
- { name: 'Link', url: 'link.html'},
- { name: 'Connections', url: 'connections.html'},
- { name: 'Connection', url: 'connection.html'},
- { name: 'Logs', url: 'logs.html'},
- { name: 'Log', url: 'log.html'}
- ];
- var topLevelChildren = [];
-
- $scope.allRouterSelected = function (row ) {
- console.log("row selected" + row)
- }
- function afterSelectionChange(rowItem, checkAll) {
- var nodeId = rowItem.entity.nodeId;
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
-
- $scope.allRouterFields = [];
- $scope.allRouterSelections = [];
- $scope.allRouters = {
- saveKey: 'allRouters',
- data: 'allRouterFields',
- columnDefs: [
- {
- field: 'routerId',
- saveKey: 'allRouters',
- displayName: 'Router'
- },
- {
- field: 'area',
- displayName: 'Area'
- },
- {
- field: 'mode',
- displayName: 'Mode'
- },
- {
- field: 'connections',
- displayName: 'External connections'
- },
- {
- field: 'addrCount',
- displayName: 'Address count'
- },
- {
- field: 'linkCount',
- displayName: 'Link count'
- }
- ],
- enableColumnResize: true,
- multiSelect: false,
- selectedItems: $scope.allRouterSelections,
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = $scope.allRouterSelections[0]
- var nodeId = selItem.nodeId
- // activate Routers->nodeId in the tree
- $("#overtree").dynatree("getTree").activateKey(nodeId);
-
- }
- }
- };
-
- // get info for all routers
- var allRouterInfo = function () {
- var nodeIds = QDRService.nodeIdList()
- var expected = Object.keys(nodeIds).length
- var received = 0;
- var allRouterFields = [];
- var gotNodeInfo = function (nodeName, entity, response) {
- var results = response.results;
- var name = QDRService.nameFromId(nodeName)
- var connections = 0;
- results.forEach( function (result) {
- var role = QDRService.valFor(response.attributeNames, result, "role")
- if (role != 'inter-router') {
- ++connections
- }
- })
- allRouterFields.push({routerId: name, connections: connections, nodeId: nodeName})
- ++received
- if (expected == received) {
- allRouterFields.sort ( function (a,b) { return a.routerId < b.routerId ? -1 : a.routerId > b.routerId ? 1 : 0})
- // now get each router's node info
- QDRService.getMultipleNodeInfo(nodeIds, "router", [], function (nodeIds, entity, responses) {
- for(var r in responses) {
- var result = responses[r]
- var routerId = QDRService.valFor(result.attributeNames, result.results[0], "routerId")
- allRouterFields.some( function (connField) {
- if (routerId === connField.routerId) {
- result.attributeNames.forEach ( function (attrName) {
- connField[attrName] = QDRService.valFor(result.attributeNames, result.results[0], attrName)
- })
- return true
- }
- return false
- })
- }
- $scope.allRouterFields = allRouterFields
- }, nodeIds[0], false)
- }
- }
- nodeIds.forEach ( function (nodeId, i) {
- QDRService.getNodeInfo(nodeId, ".connection", ["role"], gotNodeInfo)
- })
- loadColState($scope.allRouters)
- updateRouterTree(nodeIds)
- }
-
- $scope.routerFields = []
- $scope.routerGrid = {
- saveKey: 'routerGrid',
- data: 'routerFields',
- columnDefs: [
- {
- field: 'attribute',
- displayName: 'Attribute',
- saveKey: 'routerGrid',
- width: '40%'
- },
- {
- field: 'value',
- displayName: 'Value',
- width: '40%'
- }
- ],
- enableColumnResize: true,
- multiSelect: false
- }
-
- // get info for a single router
- var routerInfo = function (node) {
- $scope.router = node
-
- $scope.routerFields = [];
- $scope.allRouterFields.some( function (field) {
- if (field.routerId === node.data.title) {
- Object.keys(field).forEach ( function (key) {
- if (key !== '$$hashKey')
- $scope.routerFields.push({attribute: key, value: field[key]})
- })
- return true
- }
- })
- loadColState($scope.routerGrid);
- }
-
- $scope.addressesData = []
- $scope.selectedAddresses = []
- $scope.addressesGrid = {
- saveKey: 'addressesGrid',
- data: 'addressesData',
- columnDefs: [
- {
- field: 'address',
- saveKey: 'addressesGrid',
- displayName: 'address'
- },
- {
- field: 'class',
- displayName: 'class'
- },
- {
- field: 'phase',
- displayName: 'phase',
- cellClass: 'grid-align-value'
- },
- {
- field: 'inproc',
- displayName: 'in-proc'
- },
- {
- field: 'local',
- displayName: 'local',
- cellClass: 'grid-align-value'
- },
- {
- field: 'remote',
- displayName: 'remote',
- cellClass: 'grid-align-value'
- },
- {
- field: 'in',
- displayName: 'in',
- cellClass: 'grid-align-value'
- },
- {
- field: 'out',
- displayName: 'out',
- cellClass: 'grid-align-value'
- }
- ],
- enableColumnResize: true,
- multiSelect: false,
- selectedItems: $scope.selectedAddresses,
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = data.entity;
- var nodeId = selItem.uid
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
- };
-
- // get info for all addresses
- var allAddressInfo = function () {
- var gotAllAddressFields = function ( addressFields ) {
- // update the grid's data
- addressFields.sort ( function (a,b) { return a.address < b.address ? -1 : a.address > b.address ? 1 : 0})
- addressFields[0].title = addressFields[0].address
- for (var i=1; i<addressFields.length; ++i) {
- if (addressFields[i].address === addressFields[i-1].address) {
- addressFields[i-1].title = addressFields[i-1].address + " (" + addressFields[i-1]['class'] + ")"
- addressFields[i].title = addressFields[i].address + " (" + addressFields[i]['class'] + ")"
- } else
- addressFields[i].title = addressFields[i].address
- }
- $scope.addressesData = addressFields
-
- // repopulate the tree's child nodes
- updateAddressTree(addressFields)
- }
- getAllAddressFields(gotAllAddressFields)
- loadColState($scope.addressesGrid);
- }
-
- var getAllAddressFields = function (callback) {
- var nodeIds = QDRService.nodeIdList()
- var 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] == 'D') return "link-outgoing"
- return "unknown: " + addr[0]
- }
-
- var addr_text = function (addr) {
- if (!addr)
- return "-"
- if (addr[0] == 'M')
- return addr.substring(2)
- else
- return addr.substring(1)
- }
-
- var addr_phase = function (addr) {
- if (!addr)
- return "-"
- if (addr[0] == 'M')
- return addr[1]
- return ''
- }
-
- var identity_clean = function (identity) {
- if (!identity)
- return "-"
- var pos = identity.indexOf('/')
- if (pos >= 0)
- return identity.substring(pos + 1)
- return identity
- }
-
- var addressFields = []
- QDRService.getMultipleNodeInfo(nodeIds, "router.address", [], function (nodeIds, entity, response) {
- response.aggregates.forEach( function (result) {
- var prettySum = function (field) {
- var fieldIndex = response.attributeNames.indexOf(field)
- if (fieldIndex < 0) {
- return "-"
- }
- var val = result[fieldIndex].sum
- return QDRService.pretty(val)
- }
-
- var uid = QDRService.valFor(response.attributeNames, result, "identity").sum
- var identity = identity_clean(uid)
-
- addressFields.push({
- address: addr_text(identity),
- 'class': addr_class(identity),
- phase: addr_phase(identity),
- inproc: prettySum("inProcess"),
- local: prettySum("subscriberCount"),
- remote: prettySum("remoteCount"),
- 'in': prettySum("deliveriesIngress"),
- out: prettySum("deliveriesEgress"),
- thru: prettySum("deliveriesTransit"),
- toproc: prettySum("deliveriesToContainer"),
- fromproc:prettySum("deliveriesFromContainer"),
- uid: uid
- })
- })
- callback(addressFields)
- }, nodeIds[0])
- }
-
- var updateLinkGrid = function ( linkFields ) {
- $scope.linkFields = linkFields
- // if we have a selected link
- if ($scope.link) {
- // find the selected link in the array of all links
- var links = $scope.linkFields.filter(function (link) {
- return link.name === $scope.link.data.fields.name;
- })
- if (links.length > 0) {
- // linkInfo() is the function that is called by dynatree when a link is selected
- // It is passed a dynatree node. We need to simulate that node type to update the link grid
- linkInfo({data: {title: links[0].title, fields: links[0]}})
- }
- }
- }
-
- // get info for a all links
- $scope.selectedLinks = []
- $scope.linksGrid = {
- saveKey: 'linksGrid',
- data: 'linkFields',
- columnDefs: [
- {
- field: 'link',
- displayName: 'Link',
- groupable: false,
- saveKey: 'linksGrid',
- width: '12%'
- },
- {
- field: 'linkType',
- displayName: 'Link type',
- groupable: false,
- width: '10%'
- },
- {
- field: 'linkDir',
- displayName: 'Link dir',
- groupable: false,
- width: '8%'
- },
- {
- field: 'adminStatus',
- displayName: 'Admin status',
- groupable: false,
- width: '10%'
- },
- {
- field: 'operStatus',
- displayName: 'Oper status',
- groupable: false,
- width: '10%'
- },
- {
- field: 'deliveryCount',
- displayName: 'Delivery Count',
- groupable: false,
- cellClass: 'grid-align-value',
- width: '12%'
- },
- {
- field: 'rate',
- displayName: 'Rate',
- groupable: false,
- cellClass: 'grid-align-value',
- width: '8%'
- },
- {
- field: 'uncounts',
- displayName: 'Outstanding',
- groupable: false,
- cellClass: 'grid-align-value',
- width: '10%'
- },
- {
- field: 'owningAddr',
- displayName: 'Address',
- groupable: false,
- width: '20%'
- }
- ],
- enableColumnResize: true,
- enableColumnReordering: true,
- showColumnMenu: true,
- rowTemplate: 'linkRowTemplate.html',
- // aggregateTemplate: "linkAggTemplate.html",
- multiSelect: false,
- selectedItems: $scope.selectedLinks,
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = data.entity;
- var nodeId = selItem.uid
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
- };
-
-
- $scope.$on('ngGridEventColumns', function (e, columns) {
- var saveInfo = columns.map( function (col) {
- return [col.width, col.visible]
- })
- var saveKey = columns[0].colDef.saveKey
- if (saveKey)
- localStorage.setItem(columnStateKey+saveKey, JSON.stringify(saveInfo));
- })
-
- var loadColState = function (grid) {
- if (!grid)
- return;
- var columns = localStorage.getItem(columnStateKey+grid.saveKey);
- if (columns) {
- var cols = JSON.parse(columns);
- cols.forEach( function (col, index) {
- grid.columnDefs[index].width = col[0];
- grid.columnDefs[index].visible = col[1]
- })
- }
- }
- var allLinkInfo = function () {
- getAllLinkFields([updateLinkGrid, updateLinkTree])
- loadColState($scope.linksGrid);
- }
-
- var getAllLinkFields = function (callbacks) {
- var nodeIds = QDRService.nodeIdList()
- var linkFields = []
- var now = Date.now()
- var rate = function (response, result) {
- var name = QDRService.valFor(response.attributeNames, result, "linkName").sum
- var oldname = $scope.linkFields.filter(function (link) {
- return link.linkName === name
- })
- if (oldname.length > 0) {
- var elapsed = (now - oldname[0].timestamp) / 1000;
- var delivered = QDRService.valFor(response.attributeNames, result, "deliveryCount").sum - oldname[0].rawDeliveryCount
- //QDR.log.debug("elapsed " + elapsed + " delivered " + delivered)
- return elapsed > 0 ? parseFloat(Math.round((delivered/elapsed) * 100) / 100).toFixed(2) : 0;
- } else {
- //QDR.log.debug("unable to find old linkName")
- return 0
- }
- }
- QDRService.getMultipleNodeInfo(nodeIds, "router.link", [], function (nodeIds, entity, response) {
- response.aggregates.forEach( function (result) {
- var prettySum = function (field) {
- var fieldIndex = response.attributeNames.indexOf(field)
- if (fieldIndex < 0) {
- return "-"
- }
- var val = result[fieldIndex].sum
- return QDRService.pretty(val)
- }
- var uncounts = function () {
- var und = QDRService.valFor(response.attributeNames, result, "undeliveredCount").sum
- var uns = QDRService.valFor(response.attributeNames, result, "unsettledCount").sum
- return und + uns
- }
- var nameIndex = response.attributeNames.indexOf('name')
- var linkName = function () {
- var details = result[nameIndex].detail
- var names = []
- details.forEach( function (detail) {
- if (detail.node.endsWith(':'))
- names.push(detail.node.slice(0, -1))
- else
- names.push(detail.node)
- })
- //var namestr = names.join('-')
- var namestr = names.length > 0 ? names[0] : ""
- return namestr + ':' + QDRService.valFor(response.attributeNames, result, "identity").sum
- }
- var fixAddress = function () {
- var owningAddr = QDRService.valFor(response.attributeNames, result, "owningAddr").sum || ""
- /*
- - "L*" => "* (local)"
- - "M0*" => "* (direct)"
- - "M1*" => "* (dequeue)"
- - "MX*" => "* (phase X)"
- */
- var address = undefined;
- var starts = {'L': '(local)', 'M0': '(direct)', 'M1': '(dequeue)'}
- for (var start in starts) {
- if (owningAddr.startsWith(start)) {
- var ends = owningAddr.substr(start.length)
- address = ends + " " + starts[start]
- break;
- }
- }
- if (!address) {
- // check for MX*
- if (owningAddr.length > 3) {
- if (owningAddr[0] === 'M') {
- var phase = parseInt(owningAddress.substr(1))
- if (phase && !isNaN(phase)) {
- var phaseStr = phase + "";
- var star = owningAddress.substr(2 + phaseStr.length)
- address = star + " " + "(phase " + phaseStr + ")"
- }
- }
- }
- }
- return address || owningAddr;
- }
-
- var adminStatus = QDRService.valFor(response.attributeNames, result, "adminStatus").sum
- var operStatus = QDRService.valFor(response.attributeNames, result, "operStatus").sum
- var linkName = linkName()
- var linkType = QDRService.valFor(response.attributeNames, result, "linkType").sum
- if ($scope.currentLinkFilter === "" || $scope.currentLinkFilter === linkType) {
- linkFields.push({
- link: linkName,
- title: linkName,
- uncounts: uncounts(),
- operStatus: operStatus,
- adminStatus:adminStatus,
- owningAddr: fixAddress(),
- deliveryCount:prettySum("deliveryCount") + " ",
- rawDeliveryCount: QDRService.valFor(response.attributeNames, result, "deliveryCount").sum,
- name: QDRService.valFor(response.attributeNames, result, "name").sum,
- linkName: QDRService.valFor(response.attributeNames, result, "linkName").sum,
- capacity: QDRService.valFor(response.attributeNames, result, "capacity").sum,
- connectionId: QDRService.valFor(response.attributeNames, result, "connectionId").sum,
- linkDir: QDRService.valFor(response.attributeNames, result, "linkDir").sum,
- linkType: linkType,
- peer: QDRService.valFor(response.attributeNames, result, "peer").sum,
- type: QDRService.valFor(response.attributeNames, result, "type").sum,
- undeliveredCount: QDRService.valFor(response.attributeNames, result, "undeliveredCount").sum,
- unsettledCount: QDRService.valFor(response.attributeNames, result, "unsettledCount").sum,
- uid: linkName,
- timestamp: now,
- rate: rate(response, result)
- })
- }
- })
- callbacks.forEach( function (cb) {
- cb(linkFields)
- })
- }, nodeIds[0])
- }
-
- $scope.allConnectionFields = []
- $scope.allConnectionSelections = [];
- $scope.allConnectionGrid = {
- saveKey: 'allConnGrid',
- data: 'allConnectionFields',
- columnDefs: [
- {
- field: 'host',
- saveKey: 'allConnGrid',
- displayName: 'host'
- },
- {
- field: 'container',
- displayName: 'container'
- },
- {
- field: 'role',
- displayName: 'role'
- },
- {
- field: 'dir',
- displayName: 'dir'
- },
- {
- field: 'security',
- displayName: 'security'
- },
- {
- field: 'authentication',
- displayName: 'authentication'
- }
- ],
- enableColumnResize: true,
- multiSelect: false,
- selectedItems: $scope.allConnectionSelections,
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = $scope.allConnectionSelections[0]
- var nodeId = selItem.host
- // activate Routers->nodeId in the tree
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
- };
- // get info for a all connections
- var allConnectionInfo = function () {
- var nodeIds = QDRService.nodeIdList()
- updateConnectionTree(nodeIds)
- $scope.allConnectionFields = [];;
- var connectionNodes = $("#overtree").dynatree("getTree").getNodeByKey('Connections').getChildren()
- connectionNodes.forEach( function (connection) {
- $scope.allConnectionFields.push(connection.data.fields)
- })
- loadColState($scope.allConnectionGrid);
- }
-
- $scope.addressFields = []
- $scope.addressGrid = {
- saveKey: 'addGrid',
- data: 'addressFields',
- columnDefs: [
- {
- field: 'attribute',
- displayName: 'Attribute',
- saveKey: 'addGrid',
- width: '40%'
- },
- {
- field: 'value',
- displayName: 'Value',
- width: '40%'
- }
- ],
- enableColumnResize: true,
- multiSelect: false
- }
-
- // get info for a single address
- var addressInfo = function (address) {
- if (!address)
- return;
- $scope.address = address
- $scope.addressFields = [];
-
- var fields = Object.keys(address.data.fields)
- fields.forEach( function (field) {
- if (field != "title" && field != "uid")
- $scope.addressFields.push({attribute: field, value: address.data.fields[field]})
- })
- loadColState($scope.addressGrid);
- }
-
- $scope.singleLinkFields = []
- $scope.linkGrid = {
- saveKey: 'linkGrid',
- data: 'singleLinkFields',
- columnDefs: [
- {
- field: 'attribute',
- displayName: 'Attribute',
- width: '40%'
- },
- {
- field: 'value',
- displayName: 'Value',
- width: '40%'
- }
- ],
- enableColumnResize: true,
- multiSelect: false
- }
-
- // display the grid detail info for a single link
- var linkInfo = function (link) {
- if (!link)
- return;
- $scope.link = link
-
- $scope.singleLinkFields = [];
- var fields = Object.keys(link.data.fields)
- var excludeFields = ["title", "uid", "uncounts", "rawDeliveryCount", "timestamp"]
- fields.forEach( function (field) {
- if (excludeFields.indexOf(field) == -1)
- $scope.singleLinkFields.push({attribute: field, value: link.data.fields[field]})
- })
- loadColState($scope.linkGrid);
- }
-
- // get info for a single connection
- $scope.connectionModes = [{
- content: '<a><i class="icon-list"></i> Attriutes</a>',
- id: 'attributes',
- title: "View connection attributes",
- isValid: function () { return true; }
- },
- {
- content: '<a><i class="icon-link"></i> Links</a>',
- id: 'links',
- title: "Show links",
- isValid: function () { return true }
- }
- ];
- $scope.currentMode = $scope.connectionModes[0];
- $scope.isModeSelected = function (mode) {
- return mode === $scope.currentMode;
- }
- $scope.connectionLinks = [];
- var updateConnectionLinks = function () {
- var n = $scope.connection.data.fields
- var key = n.routerId
- var nodeInfo = QDRService.topology.nodeInfo();
- var links = nodeInfo[key]['.router.link'];
- var linkTypeIndex = links.attributeNames.indexOf('linkType');
- var connectionIdIndex = links.attributeNames.indexOf('connectionId');
- $scope.connectionLinks = [];
- links.results.forEach( function (link) {
- if (link[linkTypeIndex] === 'endpoint' && link[connectionIdIndex] === n.identity) {
- var l = {};
- l.owningAddr = QDRService.valFor(links.attributeNames, link, 'owningAddr');
- l.dir = QDRService.valFor(links.attributeNames, link, 'linkDir');
- if (l.owningAddr && l.owningAddr.length > 2)
- if (l.owningAddr[0] === 'M')
- l.owningAddr = l.owningAddr.substr(2)
- else
- l.owningAddr = l.owningAddr.substr(1)
-
- l.adminStatus = QDRService.valFor(links.attributeNames, link, 'adminStatus');
- l.operStatus = QDRService.valFor(links.attributeNames, link, 'operStatus');
- l.identity = QDRService.valFor(links.attributeNames, link, 'identity')
- l.connectionId = QDRService.valFor(links.attributeNames, link, 'connectionId')
-/*
- l.deliveryCount = QDRService.pretty(QDRService.valFor(links.attributeNames, link, 'deliveryCount'));
- l.undeliveredCount = QDRService.pretty(QDRService.valFor(links.attributeNames, link, 'undeliveredCount'));
- l.unsettledCount = QDRService.pretty(QDRService.valFor(links.attributeNames, link, 'unsettledCount'));
-*/
- // ---------------------------------------------
- // TODO: remove this fake quiescing/reviving logic when the routers do the work
- if ($scope.quiesceState.linkStates[l.identity])
- l.adminStatus = $scope.quiesceState.linkStates[l.identity];
- if ($scope.quiesceState.operStates[l.identity])
- l.operStatus = $scope.quiesceState.operStates[l.identity];
- if ($scope.quiesceState.state == 'quiescing') {
- if (l.adminStatus === 'enabled') {
- var chance = Math.floor(Math.random() * 2);
- if (chance == 1) {
- l.adminStatus = 'disabled';
- $scope.quiesceState.linkStates[l.identity] = 'disabled';
- $scope.quiesceState.operStates[l.identity] = 'idle';
- }
- }
- }
- if ($scope.quiesceState.state == 'reviving') {
- if (l.adminStatus === 'disabled') {
- var chance = Math.floor(Math.random() * 2);
- if (chance == 1) {
- l.adminStatus = 'enabled';
- $scope.quiesceState.linkStates[l.identity] = 'enabled';
- $scope.quiesceState.operStates[l.identity] = 'up';
- }
- }
- }
- if ($scope.quiesceState.linkStates[l.identity] === 'disabled') {
- l.unsettledCount = 0;
- l.undeliveredCount = 0;
- l.operState = 'idle'
- $scope.quiesceState.operStates[l.identity] = l.operState
- } else {
- l.deliveryCount = QDRService.pretty(QDRService.valFor(links.attributeNames, link, 'deliveryCount'));
- l.undeliveredCount = QDRService.pretty(QDRService.valFor(links.attributeNames, link, 'undeliveredCount'));
- l.unsettledCount = QDRService.pretty(QDRService.valFor(links.attributeNames, link, 'unsettledCount'));
- l.operState = 'up'
- $scope.quiesceState.operStates[l.identity] = l.operState
- }
- // ---------------------------------------------
-
- $scope.connectionLinks.push(l)
- }
- })
- $scope.connectionLinksGrid.updateState()
- }
-
- $scope.selectMode = function (mode) {
- $scope.currentMode = mode;
- if (mode.id === 'links') {
- QDRService.addUpdatedAction("connectionLinks", updateConnectionLinks)
- updateConnectionLinks();
- } else {
- QDRService.delUpdatedAction("connectionLinks");
- }
- }
- $scope.isValid = function (mode) {
- return mode.isValid()
- }
- $scope.quiesceState = {
- state: 'enabled',
- buttonText: 'Quiesce',
- buttonDisabled: false,
- linkStates: {},
- operStates: {}
- }
- $scope.quiesceAllClicked = function () {
- var state = $scope.quiesceState.state;
- if (state === 'enabled') {
- // start quiescing all links
- $scope.quiesceState.state = 'quiescing';
- } else if (state === 'quiesced') {
- // start reviving all links
- $scope.quiesceState.state = 'reviving';
- }
- $scope.connectionLinksGrid.updateState();
- }
- $scope.quiesceClass = function (row) {
- var stateClassMap = {
- enabled: 'btn-primary',
- quiescing: 'btn-warning',
- reviving: 'btn-warning',
- quiesced: 'btn-danger'
- }
- return stateClassMap[$scope.quiesceState.state];
- }
- $scope.quiesceLinkClass = function (row) {
- var stateClassMap = {
- enabled: 'btn-primary',
- disabled: 'btn-danger'
- }
- return stateClassMap[row.entity.adminStatus]
- }
- $scope.quiesceLink = function (row) {
- var state = row.entity.adminStatus === 'enabled' ? 'disabled' : 'enabled';
- var operState = state === 'enabled' ? 'up' : 'idle';
- $scope.quiesceState.linkStates[row.entity.identity] = state;
- $scope.quiesceState.operStates[row.entity.identity] = operState;
- }
- $scope.quiesceLinkDisabled = function (row) {
- return false;
- }
- $scope.quiesceLinkText = function (row) {
- return row.entity.adminStatus === 'disabled' ? "Revive" : "Quiesce";
- }
- $scope.quiesceHide = function () {
- return $scope.connectionLinks.length == 0;
- }
- $scope.connectionLinksGrid = {
- saveKey: 'connLinksGrid',
-
- data: 'connectionLinks',
- updateState: function () {
- var state = $scope.quiesceState.state;
-
- // count enabled and disabled links for this connection
- var enabled = 0, disabled = 0;
- $scope.connectionLinks.forEach ( function (link) {
- if (link.adminStatus === 'enabled')
- ++enabled;
- if (link.adminStatus === 'disabled')
- ++disabled;
- })
-
- var linkCount = $scope.connectionLinks.length;
- if (linkCount == 0) {
- $scope.quiesceState.buttonText = 'Quiesce';
- $scope.quiesceState.buttonDisabled = false;
- $scope.quiesceState.state = 'enabled'
- return;
- }
- // if state is quiescing and any links are enabled, button should say 'Quiescing' and be disabled
- if (state === 'quiescing' && (enabled > 0)) {
- $scope.quiesceState.buttonText = 'Quiescing';
- $scope.quiesceState.buttonDisabled = true;
- } else
- // if state is enabled and all links are disabled, button should say Revive and be enabled. set state to quisced
- // if state is quiescing and all links are disabled, button should say 'Revive' and be enabled. set state to quiesced
- if ((state === 'quiescing' || state === 'enabled') && (disabled === linkCount)) {
- $scope.quiesceState.buttonText = 'Revive';
- $scope.quiesceState.buttonDisabled = false;
- $scope.quiesceState.state = 'quiesced'
- } else
- // if state is reviving and any links are disabled, button should say 'Reviving' and be disabled
- if (state === 'reviving' && (disabled > 0)) {
- $scope.quiesceState.buttonText = 'Reviving';
- $scope.quiesceState.buttonDisabled = true;
- } else
- // if state is reviving or quiesced and all links are enabled, button should say 'Quiesce' and be enabled. set state to enabled
- if ((state === 'reviving' || state === 'quiesced') && (enabled === linkCount)) {
- $scope.quiesceState.buttonText = 'Quiesce';
- $scope.quiesceState.buttonDisabled = false;
- $scope.quiesceState.state = 'enabled'
- }
-
- if ($scope.quiesceState.state === 'quiesced') {
- d3.selectAll('.external.connection.dynatree-active')
- .classed('quiesced', true)
- } else {
- d3.selectAll('.external.connection.dynatree-active.quiesced')
- .classed('quiesced', false)
- }
- },
- columnDefs: [
- {
- field: 'adminStatus',
- cellTemplate: "titleCellTemplate.html",
- headerCellTemplate: 'titleHeaderCellTemplate.html',
- saveKey: 'connLinksGrid',
- displayName: 'Admin state'
- },
- {
- field: 'operStatus',
- cellTemplate: "titleCellTemplate.html",
- headerCellTemplate: 'titleHeaderCellTemplate.html',
- displayName: 'Oper state'
- },
- {
- field: 'dir',
- cellTemplate: "titleCellTemplate.html",
- headerCellTemplate: 'titleHeaderCellTemplate.html',
- displayName: 'dir'
- },
- {
- field: 'owningAddr',
- cellTemplate: "titleCellTemplate.html",
- headerCellTemplate: 'titleHeaderCellTemplate.html',
- displayName: 'Address'
- },
- {
- field: 'deliveryCount',
- displayName: 'Delivered',
- headerCellTemplate: 'titleHeaderCellTemplate.html',
- cellClass: 'grid-values'
-
- },
- {
- field: 'undeliveredCount',
- displayName: 'Undelivered',
- headerCellTemplate: 'titleHeaderCellTemplate.html',
- cellClass: 'grid-values'
- },
- {
- field: 'unsettledCount',
- displayName: 'Unsettled',
- headerCellTemplate: 'titleHeaderCellTemplate.html',
- cellClass: 'grid-values'
- }/*,
- {
- cellClass: 'gridCellButton',
- cellTemplate: '<button title="{{quiesceLinkText(row)}} this link" type="button" ng-class="quiesceLinkClass(row)" class="btn" ng-click="quiesceLink(row)" ng-disabled="quiesceLinkDisabled(row)">{{quiesceLinkText(row)}}</button>'
- }*/
- ]
- }
-
- $scope.connectionFields = []
- $scope.connectionGrid = {
- saveKey: 'connGrid',
- data: 'connectionFields',
- columnDefs: [
- {
- field: 'attribute',
- displayName: 'Attribute',
- saveKey: 'connGrid',
- width: '40%'
- },
- {
- field: 'value',
- displayName: 'Value',
- width: '40%'
- }
- ],
- enableColumnResize: true,
- multiSelect: false
- }
-
- var connectionInfo = function (connection) {
- $scope.connection = connection
-
- $scope.connectionFields = [];
- var fields = Object.keys(connection.data.fields)
- fields.forEach( function (field) {
- $scope.connectionFields.push({attribute: field, value: connection.data.fields[field]})
- })
- $scope.selectMode($scope.currentMode)
- loadColState($scope.connectionGrid);
- }
-
- // get info for a all logs
- var allLogInfo = function () {
- }
-
- // get info for a single log
- var logInfo = function (node) {
- $scope.log = node
- }
-
- var getExpandedList = function () {
- var list = [];
- var tree = $("#overtree").dynatree("getRoot");
- if (tree.length !== 0) {
- tree.visit(function(node){
- if (node.isExpanded()) {
- list.push(node.data.parent)
- }
- });
- }
- return list;
- }
-
- var updateExpanded = function () {
- var tree = $("#overtree").dynatree("getRoot");
- if (tree.length !== 0) {
- tree.visit(function(node){
- if (node.isExpanded() || node.isActive()) {
- node.data.info(node)
- }
- });
- }
- }
-
- // loads the tree node name that was last selected
- var loadActivatedNode = function () {
- return localStorage[OverviewActivatedKey] || 'Routers'
- }
- // saved the tree node name that is currently selected
- var saveActivated = function (key) {
- localStorage[OverviewActivatedKey] = key;
- lastKey = key;
- }
- // loads list that was saved
- var loadExpandedNodeList = function () {
- return angular.fromJson(localStorage[OverviewExpandedKey]) || [];
- }
- // called when a node is expanded
- // here we save the expanded node so it can be restored when the page reloads
- var saveExpanded = function () {
- var list = getExpandedList();
- localStorage[OverviewExpandedKey] = JSON.stringify(list)
- }
-
- // activated is called each time a tree node is clicked
- // based on which node is clicked, load the correct data grid template and start getting the data
- var activated = function (node) {
- //QDR.log.debug("node activated: " + node.data.title)
- var type = node.data.type;
- saveExpanded()
- saveActivated(node.data.key)
-
- var template = $scope.templates.filter( function (tpl) {
- return tpl.name == type;
- })
- $scope.template = template[0];
- // the nodes info function will fetch the grids data
- if (node.data.info) {
- $timeout(function () {node.data.info(node)})
- }
-
- }
- $scope.template = {url: ''};
-
- if (!QDRService.connected) {
- QDRService.redirectWhenConnected("overview")
- return;
- }
-
- // we are currently connected. setup a handler to get notified if we are ever disconnected
- QDRService.addDisconnectAction( function () {
- QDRService.redirectWhenConnected("overview")
- $scope.$apply();
- })
-
- /* --------------------------------------------------
- *
- * setup the tree on the left
- *
- * -------------------------------------------------
- */
- // utility function called by each top level tree node when it needs to populate its child nodes
- var updateLeaves = function (leaves, parentKey, parentFolder, worker) {
- var scrollTree = $('.qdr-overview.pane.left .pane-viewport')
- var scrollTop = scrollTree.scrollTop();
- var tree = $("#overtree").dynatree("getTree")
- var parentNode = tree.count ? tree.getNodeByKey(parentKey) : null;
- // if we were called after the tree is created, replace the existing nodes
- var activeNode;
- if (parentNode) {
- activeNode = tree.getActiveNode();
- parentNode.removeChildren();
- }
- leaves.forEach( function (leaf) {
- var childFolder = worker(leaf)
- if (parentNode)
- parentNode.addChild(childFolder)
- else
- parentFolder.children.push(childFolder)
- })
- scrollTree.scrollTop(scrollTop)
- if (activeNode) {
- var newNode = tree.getNodeByKey(activeNode.data.key)
- newNode.activateSilently()
- }
- }
-
- // get saved tree state
- var lastKey = loadActivatedNode();
- var expandedNodeList = loadExpandedNodeList();
-
- // create a routers tree branch
- var routers = new Folder("Routers")
- routers.type = "Routers"
- routers.info = allRouterInfo
- routers.activate = lastKey === 'Routers'
- routers.expand = (expandedNodeList.indexOf("Routers") > -1)
- routers.clickFolderMode = 1
- routers.key = "Routers"
- routers.parent = "Routers"
- routers.addClass = "routers"
- topLevelChildren.push(routers)
- // called when the list of routers changes
- var updateRouterTree = function (nodes) {
- var worker = function (node) {
- var name = QDRService.nameFromId(node)
- var router = new Folder(name)
- router.type = "Router"
- router.info = routerInfo
- router.nodeId = node
- router.key = node
- router.addClass = "router"
- router.parent = "Routers"
- router.activate = lastKey === node
- return router;
- }
- updateLeaves(nodes, "Routers", routers, worker)
- }
- updateRouterTree(QDRService.nodeIdList());
-
- // create an addresses tree branch
- var addresses = new Folder("Addresses")
- addresses.type = "Addresses"
- addresses.info = allAddressInfo
- addresses.activate = lastKey === 'Addresses'
- addresses.expand = (expandedNodeList.indexOf("Addresses") > -1)
- addresses.clickFolderMode = 1
- addresses.key = "Addresses"
- addresses.parent = "Addresses"
- addresses.addClass = "addresses"
- topLevelChildren.push(addresses)
- var updateAddressTree = function (addressFields) {
- var worker = function (address) {
- var a = new Folder(address.title)
- a.info = addressInfo
- a.key = address.uid
- a.fields = address
- a.type = "Address"
- a.addClass = "address"
- a.activate = lastKey === address.uid
- a.parent = "Addresses"
- return a;
- }
- updateLeaves(addressFields, "Addresses", addresses, worker)
- }
- allAddressInfo();
-
- $scope.setLinkFilter = function (cur) {
- // filter out non-matching links from the tree and the grid
- getAllLinkFields([updateLinkGrid, updateLinkTree])
- }
- $scope.filterClose = function () {
- var filter = $('#linkFilter')
- filter.hide();
- }
- $scope.currentLinkFilter = "endpoint"
- var filterHtml = "<button type='button' class='btn btn-secondary btn-filter'><span class='filter-icon'><i class='icon-filter'> Filter</span></button>";
- var links = new Folder("Links " + filterHtml)
- links.type = "Links"
- links.info = allLinkInfo
- links.activate = lastKey === 'Links'
- links.expand = (expandedNodeList.indexOf("Links") > -1)
- links.clickFolderMode = 1
- links.key = "Links"
- links.parent = "Links"
- links.addClass = "links"
- topLevelChildren.push(links)
-
- // called both before the tree is created and whenever a background update is done
- var updateLinkTree = function (linkFields) {
- var worker = function (link) {
- var l = new Folder(link.title)
- l.info = linkInfo
- l.key = link.uid
- l.fields = link
- l.type = "Link"
- l.parent = "Links"
- l.activate = lastKey === link.uid
- l.addClass = "link"
- return l;
- }
- linkFields.sort ( function (a,b) { return a.link < b.link ? -1 : a.link > b.link ? 1 : 0})
- updateLeaves(linkFields, "Links", links, worker)
- }
- allLinkInfo();
-
- var connections = new Folder("Connections")
- connections.type = "Connections"
- connections.info = allConnectionInfo
- connections.activate = lastKey === 'Connections'
- connections.expand = (expandedNodeList.indexOf("Connections") > -1)
- connections.clickFolderMode = 1
- connections.key = "Connections"
- connections.parent = "Connections"
- connections.addClass = "connections"
- topLevelChildren.push(connections)
-
- updateConnectionTree = function (nodes) {
- var connectionsObj = {}
- var expected = nodes.length;
- var connreceived = 0;
- nodes.forEach( function (nodeId) {
- QDRService.getNodeInfo(nodeId, ".connection", [], function (nodeName, entity, response) {
- response.results.forEach( function (result) {
-
- var auth = "no_auth"
- var sasl = QDRService.valFor(response.attributeNames, result, "sasl")
- if (QDRService.valFor(response.attributeNames, result, "isAuthenticated")) {
- auth = sasl
- if (sasl === "ANONYMOUS")
- auth = "anonymous-user"
- else {
- if (sasl === "GSSAPI")
- sasl = "Kerberos"
- if (sasl === "EXTERNAL")
- sasl = "x.509"
- auth = QDRService.valFor(response.attributeNames, result, "user") + "(" +
- QDRService.valFor(response.attributeNames, result, "sslCipher") + ")"
- }
- }
-
- var sec = "no-security"
- if (QDRService.valFor(response.attributeNames, result, "isEncrypted")) {
- if (sasl === "GSSAPI")
- sec = "Kerberos"
- else
- sec = QDRService.valFor(response.attributeNames, result, "sslProto") + "(" +
- QDRService.valFor(response.attributeNames, result, "sslCipher") + ")"
- }
-
- var host = QDRService.valFor(response.attributeNames, result, "host")
- connectionsObj[host] = {}
- response.attributeNames.forEach( function (attribute, i) {
- connectionsObj[host][attribute] = result[i]
- })
- connectionsObj[host].security = sec
- connectionsObj[host].authentication = auth
- connectionsObj[host].routerId = nodeName
-
- })
- ++connreceived;
- if (connreceived == expected) {
- var worker = function (connection) {
- var c = new Folder(connection)
- c.type = "Connection"
- c.info = connectionInfo
- c.key = connection
- c.fields = connectionsObj[connection]
- c.tooltip = connectionsObj[connection].role === "inter-router" ? "inter-router connection" : "external connection"
- c.addClass = c.tooltip
- c.parent = "Connections"
- c.activate = lastKey === connection
- return c
- }
- var allConnections = Object.keys(connectionsObj).sort()
- updateLeaves(allConnections, "Connections", connections, worker)
- }
- })
- })
- }
- updateConnectionTree(QDRService.nodeIdList())
-
- var logsreceived = 0;
- var logObj = {}
- var logs = new Folder("Logs")
- logs.type = "Logs"
- logs.info = allLogInfo
- logs.activate = lastKey === 'Logs'
- logs.expand = (expandedNodeList.indexOf("Logs") > -1)
- logs.clickFolderMode = 1
- logs.key = "Logs"
- logs.parent = "Logs"
- //topLevelChildren.push(logs)
- var nodeIds = QDRService.nodeIdList()
- var expected = nodeIds.length;
- nodeIds.forEach( function (nodeId) {
- QDRService.getNodeInfo(nodeId, ".log", ["name"], function (nodeName, entity, response) {
- response.results.forEach( function (result) {
- logObj[result[0]] = 1 // use object to collapse duplicates
- })
- ++logsreceived;
- if (logsreceived == expected) {
- var allLogs = Object.keys(logObj).sort()
- allLogs.forEach(function (log) {
- var l = new Folder(log)
- l.type = "Log"
- l.info = logInfo
- l.key = log
- l.parent = "Logs"
- l.activate = lastKey === log
- logs.children.push(l)
- })
- $('#overtree').dynatree({
- onActivate: activated,
- onExpand: saveExpanded,
- onClick: function (n, e) {
- if (e.target.className.indexOf('-filter') > -1) {
- //QDR.log.debug("overtree on click called")
- e.preventDefault();
- e.stopPropagation()
- var filter = $('#linkFilter')
- var treeLink = $('span.links')
- filter.css({
- top: treeLink.offset().top + treeLink.height(),
- left: treeLink.offset().left,
- zIndex:5000
- });
- filter.toggle()
- $("#overtree").dynatree("getTree").getNodeByKey('Links').activate()
- return false;
- }
- },
- selectMode: 1,
- activeVisible: false,
- children: topLevelChildren
- })
- // simulate a click on the previous active node
- var active = $("#overtree").dynatree("getActiveNode");
- if (!active) {
- active = $("#overtree").dynatree("getTree").getNodeByKey("Routers")
- }
- activated(active);
-
- // populate the data for each expanded node
- updateExpanded();
- QDRService.addUpdatedAction( "overview", function () {
- $timeout(updateExpanded);
- })
- // update the node list
- QDRService.startUpdating()
-
- loadColState($scope.allRouters);
- loadColState($scope.routerGrid);
- loadColState($scope.addressesGrid);
- loadColState($scope.addressGrid);
- loadColState($scope.linksGrid);
- loadColState($scope.linkGrid);
- loadColState($scope.allConnectionGrid);
- loadColState($scope.connectionGrid);
-
- }
- })
- })
-
- $scope.$on("$destroy", function( event ) {
- QDRService.stopUpdating()
- QDRService.delUpdatedAction("overview")
- });
-
- }]);
-
- return QDR;
-
-}(QDR || {}));
-
diff --git a/console/hawtio/src/main/webapp/plugin/js/qdrOverview.js b/console/hawtio/src/main/webapp/plugin/js/qdrOverview.js
new file mode 120000
index 0000000..de6a7a1
--- /dev/null
+++ b/console/hawtio/src/main/webapp/plugin/js/qdrOverview.js
@@ -0,0 +1 @@
+../../../../../../stand-alone/plugin/js/qdrOverview.js
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d98ae37e/console/hawtio/src/main/webapp/plugin/js/qdrSchema.js
----------------------------------------------------------------------
diff --git a/console/hawtio/src/main/webapp/plugin/js/qdrSchema.js b/console/hawtio/src/main/webapp/plugin/js/qdrSchema.js
deleted file mode 100644
index 656b159..0000000
--- a/console/hawtio/src/main/webapp/plugin/js/qdrSchema.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-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.
-*/
-/**
- * @module QDR
- */
-var QDR = (function (QDR) {
-
- QDR.module.controller("QDR.SchemaController", ['$scope', '$location', 'QDRService', function($scope, $location, QDRService) {
- if (!QDRService.connected) {
- QDRService.redirectWhenConnected("schema")
- return;
- }
- // we are currently connected. setup a handler to get notified if we are ever disconnected
- QDRService.addDisconnectAction( function () {
- QDRService.redirectWhenConnected("schema")
- $scope.$apply();
- })
-
- var keys2kids = function (tree, obj) {
-
- if (obj === Object(obj)) {
- tree.children = []
- for (var key in obj) {
- var kid = {title: key}
- if (obj[key] === Object(obj[key])) {
- kid.isFolder = true
- keys2kids(kid, obj[key])
- } else {
- kid.title += (': ' + JSON.stringify(obj[key],null,2))
- }
- tree.children.push(kid)
- }
- }
- }
-
- var tree = []
- for (var key in QDRService.schema) {
- var kid = {title: key}
- var val = QDRService.schema[key]
- if (val === Object(val))
- keys2kids(kid, val)
- else
- kid.title += (': ' + JSON.stringify(val,null,2))
-
- tree.push(kid);
- }
- $('#schema').dynatree({
- minExpandLevel: 2,
- children: tree
- })
-
-
- }]);
-
- return QDR;
-}(QDR || {}));
diff --git a/console/hawtio/src/main/webapp/plugin/js/qdrSchema.js b/console/hawtio/src/main/webapp/plugin/js/qdrSchema.js
new file mode 120000
index 0000000..5010e61
--- /dev/null
+++ b/console/hawtio/src/main/webapp/plugin/js/qdrSchema.js
@@ -0,0 +1 @@
+../../../../../../stand-alone/plugin/js/qdrSchema.js
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d98ae37e/console/hawtio/src/main/webapp/plugin/js/qdrService.js
----------------------------------------------------------------------
diff --git a/console/hawtio/src/main/webapp/plugin/js/qdrService.js b/console/hawtio/src/main/webapp/plugin/js/qdrService.js
deleted file mode 100644
index 09c3b92..0000000
--- a/console/hawtio/src/main/webapp/plugin/js/qdrService.js
+++ /dev/null
@@ -1,888 +0,0 @@
-/*
-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.
-*/
-/**
- * @module QDR
- */
-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) {
- var self = {
-
- rhea: require("rhea"),
-
- timeout: 10,
- connectActions: [],
- disconnectActions: [],
- updatedActions: {},
- stop: undefined, // update interval handle
-
- addConnectAction: function(action) {
- if (angular.isFunction(action)) {
- self.connectActions.push(action);
- }
- },
- addDisconnectAction: function(action) {
- if (angular.isFunction(action)) {
- self.disconnectActions.push(action);
- }
- },
- 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) {
- //QDR.log.debug("executing connect action " + action);
- try {
- action.apply();
- } catch (e) {
- // in case the page that registered the handler has been unloaded
- }
- });
- self.connectActions = [];
- if ($location.path().startsWith(QDR.pluginRoot)) {
- $timeout( function () {
-
- var searchObject = $location.search();
- var goto = "overview";
- if (searchObject.org) {
- goto = searchObject.org;
- }
- $location.search('org', null)
- $location.path(QDR.pluginRoot +"/" + goto);
- })
- }
-
- },
- 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) {
- delete self.updatedActions[action]
- }
- }
- },
- redirectWhenConnected: function (org) {
- $location.path("/" + QDR.pluginName + "/connect")
- $location.search('org', org);
- },
-
- notifyTopologyDone: function() {
- //QDR.log.debug("got Toplogy done notice");
-
- if (!angular.isDefined(self.schema))
- return;
- else if (self.topology._gettingTopo)
- return;
- if (!self.gotTopology) {
- QDR.log.debug("topology was just initialized");
- self.gotTopology = true;
- self.executeConnectActions();
- $rootScope.$apply();
- } else {
- QDR.log.debug("topology model was just updated");
- self.executeUpdatedActions();
- }
-
- },
- /**
- * @property options
- * Holds a reference to the connection options when
- * a connection is started
- */
- options: undefined,
-
- /*
- * @property message
- * The proton message that is used to send commands
- * and receive responses
- */
- sender: undefined,
- receiver: undefined,
- sendable: false,
-
- schema: undefined,
-
- toAddress: undefined,
- connected: false,
- gotTopology: false,
- errorText: undefined,
- connectionError: undefined,
-
- isConnected: function() {
- return self.connected;
- },
-
- correlator: {
- _objects: {},
- _corremationID: 0,
-
- corr: function () {
- var id = ++this._corremationID + "";
- 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) {
- 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.properties.correlation_id;
- this._objects[correlationID].resolver(context.message.body, context);
- delete this._objects[correlationID];
- }
- },
-
- onSubscription: function() {
- self.getSchema();
- },
-
- startUpdating: function () {
- self.stopUpdating();
- QDR.log.info("startUpdating called")
- self.topology.get();
- self.stop = setInterval(function() {
- self.topology.get();
- }, 2000);
- },
- stopUpdating: function () {
- if (angular.isDefined(self.stop)) {
- QDR.log.info("stopUpdating called")
- clearInterval(self.stop);
- self.stop = undefined;
- }
- },
-
- initProton: function() {
- //QDR.log.debug("*************QDR init proton 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) {
- 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 = [];
- // if we are in the middel of updating the topology
- // then use the last known node info
- var ni = self.topology._nodeInfo;
- if (self.topology._gettingTopo)
- ni = self.topology._lastNodeInfo;
- for (var id in ni) {
- nl.push(self.nameFromId(id));
- }
- return nl.sort();
- },
-
- nodeIdList: function() {
- var nl = [];
- // if we are in the middel of updating the topology
- // then use the last known node info
- var ni = self.topology._nodeInfo;
- if (self.topology._gettingTopo)
- ni = self.topology._lastNodeInfo;
- for (var id in ni) {
- nl.push(id);
- }
- return nl.sort();
- },
-
- nodeList: function () {
- var nl = [];
- var ni = self.topology._nodeInfo;
- if (self.topology._gettingTopo)
- ni = self.topology._lastNodeInfo;
- for (var id in ni) {
- nl.push({name: self.nameFromId(id), id: id});
- }
- return nl;
- },
-
- // 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 ==='on-demand' && !d.properties.product;
- },
-
- isQpid: function (d) {
- return 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) {
- // TODO: use connection properties when available
- if (d.properties.console_identifier == 'Dispatch console')
- return true;
- // until connection properties can difinitively identify consoles:
- var connid = d.connectionId;
- if (connid && d.nodeType === 'normal') {
- // find all the endpoint links for this router that have this connid
- var linkInfo = self.topology.nodeInfo()[d.key]['.router.link']
- var outs = 0, ins = 0;
- var outaddr, inaddr;
- linkInfo.results.forEach( function (link) {
- if (self.valFor(linkInfo.attributeNames, link, 'connectionId') == connid &&
- self.valFor(linkInfo.attributeNames, link, 'linkType') == 'endpoint') {
- if (self.valFor(linkInfo.attributeNames, link, 'linkDir') == 'in') {
- ++ins;
- inaddr = self.valFor(linkInfo.attributeNames, link, 'owningAddr')
- }
- if (self.valFor(linkInfo.attributeNames, link, 'linkDir') == 'out') {
- ++outs;
- outaddr = self.valFor(linkInfo.attributeNames, link, 'owningAddr')
- }
- return true;
- }
- })
- // consoles have 1 out link with an address that starts with Ltemp. and
- // 1 in link with no address
- if (outs == 1 && ins == 1 &&
- inaddr == null && outaddr.startsWith('Ltemp.')) {
- return true;
- }
- }
- return false;
- },
-
- /*
- * send the management messages that build up the topology
- *
- *
- */
- topology: {
- _gettingTopo: false,
- _nodeInfo: {},
- _lastNodeInfo: {},
- _expected: {},
- _timerHandle: null,
-
- nodeInfo: function () {
- return this._gettingTopo ? this._lastNodeInfo : this._nodeInfo;
- },
-
- get: function () {
- if (this._gettingTopo)
- return;
- if (!self.connected) {
- QDR.log.debug("topology get failed because !self.connected")
- return;
- }
- this._lastNodeInfo = angular.copy(this._nodeInfo);
- this._gettingTopo = true;
-
- self.errorText = undefined;
- this.cleanUp(this._nodeInfo);
- this._nodeInfo = {};
- this._expected = {};
-
- // get the list of nodes to query.
- // once this completes, we will get the info for each node returned
- self.getRemoteNodeInfo( function (response, context) {
- //QDR.log.debug("got remote node list of ");
- //console.dump(response);
- if( Object.prototype.toString.call( response ) === '[object Array]' ) {
- if (response.length === 0) {
- // there is only one router, get its node id from the reeciiver
- //"amqp:/_topo/0/Router.A/temp.aSO3+WGaoNUgGVx"
- var address = context.receiver.remote.attach.source.address;
- var addrParts = address.split('/')
- addrParts.splice(addrParts.length-1, 1, '$management')
- response = [addrParts.join('/')]
- }
- // we expect a response for each of these nodes
- self.topology.wait(self.timeout);
- for (var i=0; i<response.length; ++i) {
- self.makeMgmtCalls(response[i]);
- }
- };
- });
- },
-
- cleanUp: function (obj) {
-/*
- for (var o in obj) {
- QDR.log.debug("cleaning up");
- console.dump(obj[o]);
- if (isNaN(parseInt(o)))
- this.cleanUp(obj[o]);
- }
-*/
- if (obj)
- delete obj;
- },
- wait: function (timeout) {
- this.timerHandle = setTimeout(this.timedOut, timeout * 1000);
- },
- timedOut: function () {
- // a node dropped out. this happens when the get-mgmt-nodex
- // results contains more nodes than actually respond within
- // the timeout. However, if the responses we get don't contain
- // the missing node, assume we are done.
- QDR.log.info("timed out waiting for management responses");
- // note: can't use 'this' in a timeout handler
- self.topology.miniDump("state at timeout");
- // check if _nodeInfo is consistent
- if (self.topology.isConsistent()) {
- //TODO: notify controllers which node was dropped
- // so they can keep an event log
- self.topology.ondone();
- return;
- }
- self.topology.onerror(Error("Timed out waiting for management responses"));
- },
- isConsistent: function () {
- // see if the responses we have so far reference any nodes
- // for which we don't have a response
- var gotKeys = {};
- for (var id in this._nodeInfo) {
- var onode = this._nodeInfo[id];
- var conn = onode['.connection'];
- // get list of node names in the connection data
- if (conn) {
- var containerIndex = conn.attributeNames.indexOf('container');
- var connectionResults = conn.results;
- if (containerIndex >= 0)
- for (var j=0; j < connectionResults.length; ++j) {
- // inter-router connection to a valid dispatch connection name
- gotKeys[connectionResults[j][containerIndex]] = ""; // just add the key
- }
- }
- }
- // gotKeys now contains all the container names that we have received
- // Are any of the keys that are still expected in the gotKeys list?
- var keys = Object.keys(gotKeys);
- for (var id in this._expected) {
- var key = self.nameFromId(id);
- if (key in keys)
- return false;
- }
- return true;
- },
-
- addNodeInfo: function (id, entity, values) {
- // save the results in the nodeInfo object
- if (id) {
- if (!(id in self.topology._nodeInfo)) {
- self.topology._nodeInfo[id] = {};
- }
- self.topology._nodeInfo[id][entity] = values;
- }
-
- // remove the id / entity from _expected
- if (id in self.topology._expected) {
- var entities = self.topology._expected[id];
- var idx = entities.indexOf(entity);
- if (idx > -1) {
- entities.splice(idx, 1);
- if (entities.length == 0)
- delete self.topology._expected[id];
- }
- }
- // see if the expected obj is empty
- if (Object.getOwnPropertyNames(self.topology._expected).length == 0)
- self.topology.ondone();
- self.topology.cleanUp(values);
- },
- expect: function (id, key) {
- if (!key || !id)
- return;
- if (!(id in this._expected))
- this._expected[id] = [];
- if (this._expected[id].indexOf(key) == -1)
- this._expected[id].push(key);
- },
- ondone: function () {
- clearTimeout(this.timerHandle);
- this._gettingTopo = false;
- //this.miniDump();
- //this.dump();
- self.notifyTopologyDone();
- },
- dump: function (prefix) {
- if (prefix)
- QDR.log.info(prefix);
- QDR.log.info("---");
- for (var key in this._nodeInfo) {
- QDR.log.info(key);
- console.dump(this._nodeInfo[key]);
- QDR.log.info("---");
- }
- QDR.log.debug("was still expecting:");
- console.dump(this._expected);
- },
- miniDump: function (prefix) {
- if (prefix)
- QDR.log.info(prefix);
- QDR.log.info("---");
- console.dump(Object.keys(this._nodeInfo));
- QDR.log.info("---");
- },
- onerror: function (err) {
- this._gettingTopo = false;
- QDR.log.debug("Err:" + err);
- self.executeDisconnectActions();
-
- }
-
- },
-
- getRemoteNodeInfo: function (callback) {
- //QDR.log.debug("getRemoteNodeInfo called");
- 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);
- },
-
- makeMgmtCalls: function (id) {
- var keys = [".router", ".connection", ".container", ".router.node", ".listener", ".router.link"];
- $.each(keys, function (i, key) {
- self.topology.expect(id, key);
- self.getNodeInfo(id, key, [], self.topology.addNodeInfo);
- });
- },
-
- getNodeInfo: function (nodeName, entity, attrs, callback) {
- //QDR.log.debug("getNodeInfo called with nodeName: " + nodeName + " and entity " + entity);
- var ret;
- self.correlator.request(
- ret = self.sendQuery(nodeName, entity, attrs)
- ).then(ret.id, function(response) {
- callback(nodeName, entity, response);
- //self.topology.addNodeInfo(nodeName, entity, response);
- //self.topology.cleanUp(response);
- }, ret.error);
- },
-
- 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;
- if (Object.keys(responses).length == nodeNames.length) {
- if (aggregate)
- self.aggregateNodeInfo(nodeNames, entity, selectedNodeId, responses, callback);
- else {
- callback(nodeNames, entity, responses)
- }
- }
- }
-
- nodeNames.forEach( function (id) {
- self.getNodeInfo(id, '.'+entity, attrs, gotNodesResult);
- })
- //TODO: implement a timeout in case not all requests complete
- },
-
- 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 () {
- //QDR.log.debug("getting schema");
- var ret;
- self.correlator.request(
- ret = self.sendMgmtQuery('GET-SCHEMA')
- ).then(ret.id, function(response) {
- //QDR.log.debug("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;
- self.topology.get();
- }, ret.error);
- },
-
- getNodeInfo: function (nodeName, entity, attrs, callback) {
- //QDR.log.debug("getNodeInfo called with nodeName: " + nodeName + " and entity " + entity);
- var ret;
- self.correlator.request(
- ret = self.sendQuery(nodeName, entity, attrs)
- ).then(ret.id, function(response) {
- callback(nodeName, entity, response);
- //self.topology.addNodeInfo(nodeName, entity, response);
- //self.topology.cleanUp(response);
- }, ret.error);
- },
-
- sendMethod: function (nodeId, entity, attrs, operation, callback) {
- var ret;
- self.correlator.request(
- ret = self._sendMethod(nodeId, entity, attrs, operation)
- ).then(ret.id, function (response, context) {
- callback(nodeId, entity, response, context);
- }, ret.error);
- },
-
- _fullAddr: function (toAddr) {
- var toAddrParts = toAddr.split('/');
- if (toAddrParts.shift() != "amqp:") {
- self.topology.error(Error("unexpected format for router address: " + toAddr));
- return;
- }
- //var fullAddr = self.toAddress + "/" + toAddrParts.join('/');
- var fullAddr = toAddrParts.join('/');
- return fullAddr;
- },
-
- _sendMethod: function (toAddr, entity, attrs, operation) {
- var fullAddr = self._fullAddr(toAddr);
- var ret = {id: self.correlator.corr()};
- if (!self.sender || !self.sendable) {
- ret.error = "no sender"
- return ret;
- }
- try {
- var application_properties = {
- operation: operation
- }
- var ent = self.schema.entityTypes[entity];
- var fullyQualifiedType = ent.fullyQualifiedType;
- if (fullyQualifiedType) {
- application_properties.type = fullyQualifiedType
- }
- else
- application_properties.type = entity;
- if (attrs.name)
- application_properties.name = attrs.name;
- var msg = {
- body: attrs,
- properties: {
- 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,
- properties: {
- 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.errorText = "Disconnected."
- },
-
- connect: function(options) {
- self.options = options;
- self.topologyInitialized = false;
- if (!self.connected) {
- var okay = {connection: false, sender: false, receiver: false}
- var port = options.port || 5673;
- var baseAddress = options.address + ':' + port;
- var ws = self.rhea.websocket_connect(WebSocket);
- self.toAddress = "amqp://" + baseAddress;
- 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.onSubscription();
- self.gotTopology = false;
- }
- }
- var onDisconnect = function () {
- //QDR.log.warn("Disconnected");
- self.connectionError = true;
- stop();
- self.executeDisconnectActions();
- }
-
- QDR.log.debug("****** calling rhea.connect ********")
- var connection;
- try {
- connection = self.rhea.connect({
- connection_details:ws('ws://' + baseAddress, ["binary", "AMQWSB10"]),
- reconnect:true,
- properties: {console_identifier: 'Dispatch console'}
- });
- }
- catch (e) {
- QDR.log.debug("exception caught on connect")
- self.errorText = "Connection failed"
- onDisconnect();
- }
- if (!self.connectionError) {
- connection.on('connection_open', function (context) {
- QDR.log.debug("connection_opened")
- okay.connection = true;
- okay.receiver = false;
- okay.sender = false;
- })
- connection.on('disconnected', function (context) {
- QDR.log.debug("connection disconnected")
- self.errorText = "Unable to connect"
- onDisconnect();
- })
- connection.on('connection_close', function (context) {
- QDR.log.debug("connection closed")
- self.errorText = "Disconnected"
- onDisconnect();
- })
-
- var sender = connection.open_sender();
- sender.on('sender_open', function (context) {
- QDR.log.debug("sender_opened")
- okay.sender = true
- maybeStart()
- })
- sender.on('sendable', function (context) {
- //QDR.log.debug("sendable")
- self.sendable = true;
- maybeStart();
- })
-
- var receiver = connection.open_receiver({source: {dynamic: true}});
- receiver.on('receiver_open', function (context) {
- QDR.log.debug("receiver_opened")
- okay.receiver = true;
- maybeStart()
- })
- receiver.on("message", function (context) {
- self.correlator.resolve(context);
- });
- }
- }
- }
- }
- return self;
- }]);
-
- return QDR;
-}(QDR || {}));
-
-(function() {
- console.dump = function(object) {
- if (window.JSON && window.JSON.stringify)
- QDR.log.info(JSON.stringify(object,undefined,2));
- else
- console.log(object);
- };
-})();
diff --git a/console/hawtio/src/main/webapp/plugin/js/qdrService.js b/console/hawtio/src/main/webapp/plugin/js/qdrService.js
new file mode 120000
index 0000000..2d2a672
--- /dev/null
+++ b/console/hawtio/src/main/webapp/plugin/js/qdrService.js
@@ -0,0 +1 @@
+../../../../../../stand-alone/plugin/js/qdrService.js
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org