blob: 5a5a6515ef253f6eda2a1e8b159de46d356a1539 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
define(["dojo/_base/xhr",
"dojo/parser",
"dojo/query",
"dojo/_base/connect",
"dijit/registry",
"qpid/common/properties",
"qpid/common/updater",
"qpid/common/util",
"qpid/common/formatter",
"qpid/common/UpdatableStore",
"qpid/management/addBinding",
"dojox/grid/EnhancedGrid",
"dojo/domReady!"],
function (xhr, parser, query, connect, registry, properties, updater, util, formatter, UpdatableStore, addBinding, EnhancedGrid) {
function Exchange(name, parent, controller) {
this.name = name;
this.controller = controller;
this.modelObj = { type: "exchange", name: name };
if(parent) {
this.modelObj.parent = {};
this.modelObj.parent[ parent.type] = parent;
}
}
Exchange.prototype.getExchangeName = function()
{
return this.name;
};
Exchange.prototype.getVirtualHostName = function()
{
return this.modelObj.parent.virtualhost.name;
};
Exchange.prototype.getTitle = function()
{
return "Exchange: " + this.name;
};
Exchange.prototype.open = function(contentPane) {
var that = this;
this.contentPane = contentPane;
xhr.get({url: "showExchange.html",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
parser.parse(contentPane.containerNode);
that.exchangeUpdater = new ExchangeUpdater(contentPane.containerNode, that.modelObj, that.controller);
updater.add( that.exchangeUpdater );
that.exchangeUpdater.update();
var addBindingButton = query(".addBindingButton", contentPane.containerNode)[0];
connect.connect(registry.byNode(addBindingButton), "onClick",
function(evt){
addBinding.show({ virtualhost: that.getVirtualHostName(),
exchange: that.getExchangeName()});
});
var deleteBindingButton = query(".deleteBindingButton", contentPane.containerNode)[0];
connect.connect(registry.byNode(deleteBindingButton), "onClick",
function(evt){
that.deleteBindings();
});
var isStandard = util.isReservedExchangeName(that.name);
var deleteExchangeButton = query(".deleteExchangeButton", contentPane.containerNode)[0];
var node = registry.byNode(deleteExchangeButton);
if(isStandard)
{
node.set('disabled', true);
}
else
{
connect.connect(node, "onClick",
function(evt){
that.deleteExchange();
});
}
}});
};
Exchange.prototype.close = function() {
updater.remove( this.exchangeUpdater );
};
Exchange.prototype.deleteBindings = function()
{
util.deleteGridSelections(
this.exchangeUpdater,
that.exchangeUpdater.bindingsGrid.grid,
"rest/binding/"+ encodeURIComponent(this.getVirtualHostName()) + "/" + encodeURIComponent(this.name),
"Are you sure you want to delete binding for queue");
}
function ExchangeUpdater(containerNode, exchangeObj, controller)
{
var that = this;
function findNode(name) {
return query("." + name, containerNode)[0];
}
function storeNodes(names)
{
for(var i = 0; i < names.length; i++) {
that[names[i]] = findNode(names[i]);
}
}
storeNodes(["name",
"state",
"durable",
"lifetimePolicy",
"alertRepeatGap",
"alertRepeatGapUnits",
"alertThresholdMessageAge",
"alertThresholdMessageAgeUnits",
"alertThresholdMessageSize",
"alertThresholdMessageSizeUnits",
"alertThresholdQueueDepthBytes",
"alertThresholdQueueDepthBytesUnits",
"alertThresholdQueueDepthMessages",
"msgInRate",
"bytesInRate",
"bytesInRateUnits",
"msgDropRate",
"bytesDropRate",
"bytesDropRateUnits"]);
this.query = "rest/exchange/"+ encodeURIComponent(exchangeObj.parent.virtualhost.name) + "/" + encodeURIComponent(exchangeObj.name);
xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data)
{
that.exchangeData = data[0];
util.flattenStatistics( that.exchangeData );
that.updateHeader();
that.bindingsGrid = new UpdatableStore(that.exchangeData.bindings, findNode("bindings"),
[ { name: "Queue", field: "queue", width: "90px"},
{ name: "Binding Key", field: "name", width: "120px"},
{ name: "Arguments", field: "argumentString", width: "100%"}
], null, {
keepSelection: true,
plugins: {
pagination: {
pageSizes: ["10", "25", "50", "100"],
description: true,
sizeSwitch: true,
pageStepper: true,
gotoButton: true,
maxPageStep: 4,
position: "bottom"
},
indirectSelection: true
}}, EnhancedGrid);
});
}
ExchangeUpdater.prototype.updateHeader = function()
{
this.name.innerHTML = this.exchangeData[ "name" ];
this.state.innerHTML = this.exchangeData[ "state" ];
this.durable.innerHTML = this.exchangeData[ "durable" ];
this.lifetimePolicy.innerHTML = this.exchangeData[ "lifetimePolicy" ];
};
ExchangeUpdater.prototype.update = function()
{
var thisObj = this;
xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data)
{
thisObj.exchangeData = data[0];
util.flattenStatistics( thisObj.exchangeData );
var bindings = thisObj.exchangeData[ "bindings" ];
if(bindings)
{
for(var i=0; i < bindings.length; i++)
{
if(bindings[i].arguments)
{
bindings[i].argumentString = dojo.toJson(bindings[i].arguments);
}
else
{
bindings[i].argumentString = "";
}
}
}
var sampleTime = new Date();
thisObj.updateHeader();
var messageIn = thisObj.exchangeData["messagesIn"];
var bytesIn = thisObj.exchangeData["bytesIn"];
var messageDrop = thisObj.exchangeData["messagesDropped"];
var bytesDrop = thisObj.exchangeData["bytesDropped"];
if(thisObj.sampleTime)
{
var samplePeriod = sampleTime.getTime() - thisObj.sampleTime.getTime();
var msgInRate = (1000 * (messageIn - thisObj.messageIn)) / samplePeriod;
var msgDropRate = (1000 * (messageDrop - thisObj.messageDrop)) / samplePeriod;
var bytesInRate = (1000 * (bytesIn - thisObj.bytesIn)) / samplePeriod;
var bytesDropRate = (1000 * (bytesDrop - thisObj.bytesDrop)) / samplePeriod;
thisObj.msgInRate.innerHTML = msgInRate.toFixed(0);
var bytesInFormat = formatter.formatBytes( bytesInRate );
thisObj.bytesInRate.innerHTML = "(" + bytesInFormat.value;
thisObj.bytesInRateUnits.innerHTML = bytesInFormat.units + "/s)";
thisObj.msgDropRate.innerHTML = msgDropRate.toFixed(0);
var bytesDropFormat = formatter.formatBytes( bytesDropRate );
thisObj.bytesDropRate.innerHTML = "(" + bytesDropFormat.value;
thisObj.bytesDropRateUnits.innerHTML = bytesDropFormat.units + "/s)"
}
thisObj.sampleTime = sampleTime;
thisObj.messageIn = messageIn;
thisObj.bytesIn = bytesIn;
thisObj.messageDrop = messageDrop;
thisObj.bytesDrop = bytesDrop;
// update bindings
thisObj.bindingsGrid.update(thisObj.exchangeData.bindings)
});
};
Exchange.prototype.deleteExchange = function() {
if(confirm("Are you sure you want to delete exchange '" +this.name+"'?")) {
var query = "rest/exchange/"+ encodeURIComponent(this.getVirtualHostName()) + "/" + encodeURIComponent(this.name);
this.success = true
var that = this;
xhr.del({url: query, sync: true, handleAs: "json"}).then(
function(data) {
that.contentPane.onClose()
that.controller.tabContainer.removeChild(that.contentPane);
that.contentPane.destroyRecursive();
},
function(error) {that.success = false; that.failureReason = error;});
if(!this.success ) {
alert("Error:" + this.failureReason);
}
}
}
return Exchange;
});