fe8752991b
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.7@12528 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
408 lines
15 KiB
JavaScript
408 lines
15 KiB
JavaScript
/**
|
|
* Global variables
|
|
*/
|
|
var xcatMonTableId = "xcatMonSettingTable";
|
|
|
|
/**
|
|
* Load xCAT monitoring
|
|
*/
|
|
function loadXcatMon() {
|
|
// Find xCAT monitoring tab
|
|
var xcatMonTab = $('#xcatmon');
|
|
xcatMonTab.append("<div id= xcatmonTable></div>");
|
|
|
|
// Show content of monsetting table
|
|
$.ajax({
|
|
url : 'lib/cmd.php',
|
|
dataType : 'json',
|
|
data : {
|
|
cmd : 'tabdump',
|
|
tgt : '',
|
|
args : 'monsetting',
|
|
msg : ''
|
|
},
|
|
success : loadXcatMonSetting
|
|
});
|
|
}
|
|
|
|
function loadXcatMonSetting(data) {
|
|
var apps = ""; // Contains the xcatmon config
|
|
var rsp = data.rsp;
|
|
var apps_flag = 0;
|
|
var ping; // xcatmon ping interval
|
|
var ping_flag = 0;
|
|
|
|
// Create an info bar
|
|
var infoBar = createInfoBar('Click on a cell to edit. Click outside the table to write to the cell. Once you are finished configuring the xCAT monitor, click on Apply.');
|
|
$('#xcatmonTable').append(infoBar);
|
|
|
|
// Create xcatmon table
|
|
var xcatmonTable = new DataTable(xcatMonTableId);
|
|
|
|
// Create datatable
|
|
var dTable;
|
|
|
|
// Create table header
|
|
var header = rsp[0].split(",");
|
|
header.splice(3, 2);
|
|
header.splice(0, 1);
|
|
header[0] = "App Name";
|
|
header[1] = "Configure";
|
|
header.push('<input type="checkbox" onclick="selectAllCheckbox(event,$(this))">');
|
|
header.unshift('');
|
|
xcatmonTable.init(header);
|
|
|
|
// Create container for original table contents
|
|
var origCont = new Array();
|
|
origCont[0] = header; // Table headers
|
|
|
|
// Create container for new contents to use later updating monsetting table
|
|
var newCont = new Object();
|
|
newCont[0] = rsp[0].split(","); // Table headers
|
|
|
|
// Create container for other monsetting lines
|
|
var otherCont = new Array();
|
|
|
|
$('#xcatmonTable').append(xcatmonTable.object());
|
|
var m = 1; // Count for origCont
|
|
var n = 0;
|
|
for ( var i = 1; i < rsp.length; i++) {
|
|
var pos = rsp[i].indexOf("xcatmon"); // Only check xcatmon setting
|
|
if (pos == 1) {
|
|
if ((rsp[i].indexOf("apps") == -1) && (rsp[i].indexOf("ping") == -1)) {
|
|
var cols = rsp[i].split(',');
|
|
for ( var j = 0; j < cols.length; j++) {
|
|
if (cols[j].count('"') % 2 == 1) {
|
|
while (cols[j].count('"') % 2 == 1) {
|
|
cols[j] = cols[j] + "," + cols[j + 1];
|
|
cols.splice(j + 1, 1);
|
|
}
|
|
}
|
|
cols[j] = cols[j].replace(new RegExp('"', 'g'), '');
|
|
}
|
|
|
|
cols.splice(3, 2);
|
|
cols.splice(0, 1);
|
|
cols.push('<input type="checkbox" name="' + cols[0] + '" title="Checking this box will add/remove the app from the configured app value"/>');
|
|
cols.unshift('<span class="ui-icon ui-icon-close" onclick="deleteXcatMonRow(this)"></span>');
|
|
|
|
// Add column to table
|
|
xcatmonTable.add(cols);
|
|
origCont[m++] = cols;
|
|
} else {
|
|
if (!apps_flag) { // Check the apps setting
|
|
if (rsp[i].indexOf("apps") > -1) {
|
|
apps = rsp[i].split(',');
|
|
|
|
for ( var j = 0; j < apps.length; j++) {
|
|
if (apps[j].count('"') % 2 == 1) {
|
|
while (apps[j].count('"') % 2 == 1) {
|
|
apps[j] = apps[j] + "," + apps[j + 1];
|
|
apps.splice(j + 1, 1);
|
|
}
|
|
}
|
|
apps[j] = apps[j].replace(new RegExp('"', 'g'), '');
|
|
}
|
|
|
|
apps_flag = 1; // Set the flag to 1 to avoid this subroute
|
|
}
|
|
}
|
|
|
|
// Get into the ping settings
|
|
if (!ping_flag) {
|
|
// Check the ping interval
|
|
if (rsp[i].indexOf("ping-interval") > -1) {
|
|
ping = rsp[i].split(',');
|
|
for ( var j = 0; j < ping.length; j++) {
|
|
if (ping[j].count('"') % 2 == 1) {
|
|
while (ping[j].count('"') % 2 == 1) {
|
|
ping[j] = ping[j] + "," + ping[j + 1];
|
|
ping.splice(j + 1, 1);
|
|
}
|
|
}
|
|
ping[j] = ping[j].replace((new RegExp('"', 'g')),
|
|
'');
|
|
}
|
|
ping_flag = 1;
|
|
}
|
|
}
|
|
}
|
|
} else if (pos != 1) {
|
|
// The other monitor in the monsetting table
|
|
var otherCols = rsp[i].split(',');
|
|
for ( var k = 0; k < otherCols.length; k++) {
|
|
if (otherCols[k].count('"') % 2 == 1) {
|
|
while (otherCols[k].count('"') % 2 == 1) {
|
|
otherCols[k] = otherCols[k] + "," + otherCols[k + 1];
|
|
otherCols.splice(k + 1, 1);
|
|
}
|
|
}
|
|
otherCols[k] = otherCols[k].replace(new RegExp('"', 'g'), '');
|
|
}
|
|
|
|
otherCont[n++] = otherCols;
|
|
|
|
}
|
|
}
|
|
// If app is not in the monsetting table, then create default apps row
|
|
if (!apps_flag) {
|
|
apps = rsp[0].split(',');
|
|
apps[0] = "xcatmon";
|
|
apps[1] = "apps";
|
|
apps[2] = "";
|
|
apps[3] = "";
|
|
apps[4] = "";
|
|
}
|
|
|
|
// If the ping interval is not in the monsetting table, then create the
|
|
// default ping-interval
|
|
if (!ping_flag) {
|
|
ping = rsp[0].split(',');
|
|
ping[0] = "xcatmon";
|
|
ping[1] = "ping-interval";
|
|
|
|
// Set default ping-interval setting to 5
|
|
ping[2] = "5";
|
|
ping[3] = "";
|
|
ping[4] = "";
|
|
}
|
|
|
|
// Set checkbox to be true
|
|
var checked = apps[2].split(',');
|
|
for ( var i = 0; i < checked.length; i++) {
|
|
$("input:checkbox[name=" + checked[i] + "]").attr('checked', true);
|
|
for ( var j = 0; j < origCont.length; j++) {
|
|
if (origCont[j][1] == checked[i]) {
|
|
origCont[j].splice(3, 1);
|
|
origCont[j].push('<input type="checkbox" name="' + origCont[j][1] + '" title="Check this checkbox to add/remove the app from the configured app value." checked=true/>');
|
|
}
|
|
}
|
|
|
|
}
|
|
$(":checkbox").tooltip();
|
|
|
|
// Make the table editable
|
|
$('#' + xcatMonTableId + ' td:not(td:nth-child(1),td:last-child)').editable(function(value, settings) {
|
|
var colPos = this.cellIndex;
|
|
var rowPos = dTable.fnGetPosition(this.parentNode);
|
|
dTable.fnUpdate(value, rowPos, colPos);
|
|
return (value);
|
|
}, {
|
|
onblur : 'submit',
|
|
type : 'textarea',
|
|
placeholder : ' ',
|
|
height : '30px'
|
|
});
|
|
|
|
// Save datatable
|
|
dTable = $('#' + xcatMonTableId).dataTable({
|
|
'iDisplayLength' : 50,
|
|
'bLengthChange' : false,
|
|
"sScrollX" : "100%",
|
|
"bAutoWidth" : true
|
|
});
|
|
|
|
// Create action bar
|
|
var actionBar = $('<div class="actionBar"></div>');
|
|
var addRowLnk = $('<a>Add row</a>');
|
|
addRowLnk.bind('click', function(event) {
|
|
// Create container for new row
|
|
var row = new Array();
|
|
|
|
// Add delete button to row
|
|
row.push('<span class="ui-icon ui-icon-close" onclick="deleteXcatMonRow(this)"></span>');
|
|
for ( var i = 0; i < header.length - 2; i++)
|
|
row.push('');
|
|
|
|
// Add checkbox
|
|
row.push('<input type="checkbox" name="' + row[2] + '" title="Checking this checkbox will add/remove the app from the configured apps value"/>');
|
|
// Get the datatable of the table
|
|
var dTable = $('#' + xcatMonTableId).dataTable();
|
|
// Add the new row to the datatable
|
|
dTable.fnAddData(row);
|
|
|
|
// make the datatable editable
|
|
$(":checkbox[title]").tooltip();
|
|
$('#' + xcatMonTableId + ' td:not(td:nth-child(1),td:last-child)').editable(function(value, settings) {
|
|
var colPos = this.cellIndex;
|
|
var rowPos = dTable
|
|
.fnGetPosition(this.parentNode);
|
|
dTable.fnUpdate(value, rowPos,
|
|
colPos);
|
|
return (value);
|
|
}, {
|
|
onblur : 'submit',
|
|
type : 'textarea',
|
|
placeholder : ' ',
|
|
height : '30px'
|
|
});
|
|
});
|
|
|
|
// Create apply button to store the contents of the table to the monsetting table
|
|
var applyLnk = $('<a>Apply</a>');
|
|
applyLnk.bind('click', function(event) {
|
|
// Get the datatable
|
|
var dTable = $('#' + xcatMonTableId).dataTable();
|
|
// Get datatable rows
|
|
var dRows = dTable.fnGetNodes();
|
|
var count = 0;
|
|
|
|
// Create a new container for the apps value
|
|
var appValue = '';
|
|
var tableName = 'monsetting';
|
|
var closeBtn = createButton('close');
|
|
|
|
// Get the row contents
|
|
for ( var i = 0; i < dRows.length; i++) {
|
|
if (dRows[i]) {
|
|
// Get the row columns
|
|
var cols = dRows[i].childNodes;
|
|
// Create a container for the new columns
|
|
var vals = new Array();
|
|
|
|
for ( var j = 1; j < cols.length - 1; j++) {
|
|
var val = cols.item(j).firstChild.nodeValue;
|
|
if (val == ' ')
|
|
vals[j - 1] = '';
|
|
else
|
|
vals[j - 1] = val;
|
|
}
|
|
|
|
var vals_orig = new Array();
|
|
// Copy data from vals to vals_orig
|
|
for ( var p = 0; p < 2; p++) {
|
|
var val = vals[p];
|
|
vals_orig[p] = val;
|
|
}
|
|
|
|
vals.push('');
|
|
vals.push('');
|
|
vals.unshift('xcatmon');
|
|
|
|
// Stored new column to newCont
|
|
newCont[i + 1] = vals;
|
|
|
|
if (cols.item(cols.length - 1).firstChild.checked) {
|
|
vals_orig.push('<input type="checkbox" name="' + vals_orig[0] + '" title="Checking this checkbox will add/remove the app from the configured apps value" checked=true/>');
|
|
} else {
|
|
vals_orig.push('<input type="checkbox" name="' + vals_orig[0] + '" title="Checking this checkbox will add/remove the app from the configured apps value"/>');
|
|
}
|
|
|
|
// Add delete button to row
|
|
vals_orig.unshift('<span class="ui-icon ui-icon-close" onclick="deleteXcatMonRow(this)"></span>');
|
|
// Add row to origCont
|
|
origCont[i + 1] = vals_orig;
|
|
count = i + 1;
|
|
|
|
// Check checkbox for every row when merging the app name with the apps values
|
|
if (cols.item(cols.length - 1).firstChild.checked)
|
|
appValue = appValue.concat(cols.item(2).firstChild.nodeValue + ",");
|
|
}
|
|
}
|
|
|
|
count++;
|
|
|
|
// Delete the last comma of the apps value
|
|
appValue = appValue.substring(0, (appValue.length - 1));
|
|
apps[2] = appValue;
|
|
|
|
newCont[count++] = apps;
|
|
newCont[count++] = ping;
|
|
|
|
// Add to other monitor settings
|
|
for ( var j = 0; j < otherCont.length; j++) {
|
|
newCont[count++] = otherCont[j];
|
|
}
|
|
|
|
// Create save dialog
|
|
var dialogSave = $('<div id="saveDialog" align="center">Saving configuration</div>');
|
|
dialogSave.append(createLoader());
|
|
|
|
$('#xcatmon').append(dialogSave);
|
|
$("#saveDialog").dialog({
|
|
modal : true
|
|
});
|
|
|
|
$('.ui-dialog-titlebar-close').hide();
|
|
$.ajax({
|
|
type : 'POST',
|
|
url : 'lib/tabRestore.php',
|
|
dataType : 'json',
|
|
data : {
|
|
table : tableName,
|
|
cont : newCont
|
|
},
|
|
success : function(data) {
|
|
// empty the dialog.add the close button
|
|
$("#saveDialog").empty().append('<p>Configuration saved!</p>');
|
|
$("#saveDialog").append(closeBtn);
|
|
}
|
|
});
|
|
|
|
// Close button
|
|
closeBtn.bind('click', function(event) {
|
|
$("#saveDialog").dialog("destroy");
|
|
$("#saveDialog").remove();
|
|
});
|
|
|
|
// Clear the newCont
|
|
newCont = null;
|
|
newCont = new Object();
|
|
newCont[0] = rsp[0].split(",");
|
|
});
|
|
|
|
var cancelLnk = $('<a>Cancel</a>');
|
|
cancelLnk.bind('click', function(event) {
|
|
// Get the datatable for the page
|
|
var dTable = $('#' + xcatMonTableId).dataTable();
|
|
|
|
// Clear the datatable
|
|
dTable.fnClearTable();
|
|
|
|
// Add the contents of origCont to the datatable
|
|
for ( var i = 1; i < origCont.length; i++)
|
|
dTable.fnAddData(origCont[i], true);
|
|
|
|
$(":checkbox[title]").tooltip();
|
|
$('#' + xcatMonTableId + ' td:not(td:nth-child(1),td:last-child)').editable(function(value, settings) {
|
|
var colPos = this.cellIndex;
|
|
var rowPos = dTable.fnGetPosition(this.parentNode);
|
|
dTable.fnUpdate(value, rowPos, colPos);
|
|
return (value);
|
|
}, {
|
|
onblur : 'submit',
|
|
type : 'textarea',
|
|
placeholder : ' ',
|
|
height : '30px'
|
|
});
|
|
});
|
|
|
|
// Create actions menu
|
|
var actionsLnk = '<a>Actions</a>';
|
|
var actsMenu = createMenu([ addRowLnk, applyLnk, cancelLnk ]);
|
|
var actionsMenu = createMenu([ [ actionsLnk, actsMenu ] ]);
|
|
actionsMenu.superfish();
|
|
actionsMenu.css('display', 'inline-block');
|
|
actionBar.append(actionsMenu);
|
|
|
|
// Create a division to hold actions menu
|
|
var menuDiv = $('<div id="' + xcatMonTableId + '_menuDiv" class="menuDiv"></div>');
|
|
$('#' + xcatMonTableId + '_wrapper').prepend(menuDiv);
|
|
menuDiv.append(actionBar);
|
|
$('#' + xcatMonTableId + '_filter').appendTo(menuDiv);
|
|
}
|
|
|
|
/**
|
|
* Delete a row from the table
|
|
*/
|
|
function deleteXcatMonRow(obj) {
|
|
var dTable = $('#' + xcatMonTableId).dataTable();
|
|
var rows = dTable.fnGetNodes();
|
|
var tgtRow = $(obj).parent().parent().get(0);
|
|
for ( var i in rows) {
|
|
if (rows[i] == tgtRow) {
|
|
dTable.fnDeleteRow(i, null, true);
|
|
break;
|
|
}
|
|
}
|
|
} |