xcat-core/xCAT-UI/js/monitor/xcatmon.js
2011-09-12 16:10:53 +00:00

445 lines
13 KiB
JavaScript

/**
* global variable
*/
var XcatmonTableId="XcatMonsettingTable";
/**
* load xCAT monitor
*/
function loadXcatMon(){
//find the xcat mon tab
var xcatMonTab = $('#xcatmon');
xcatMonTab.append("<div id= xcatmonTable></div>");
//show the content of the table monsetting
$.ajax({
url:'lib/cmd.php',
dataType: 'json',
data:{
cmd : 'tabdump',
tgt :'',
args : 'monsetting',
msg : ''
},
success: loadXcatMonSetting
});
}
function loadXcatMonSetting(data){
var apps; //contain the xcatmon apps config
var rsp = data.rsp;
var apps_flag = 0; //is the apps is stored?
var ping; //contain the xcatmon ping-interval setting
var ping_flag = 0;
//create a infoBar
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 xcatmonTable
var XcatmonTable= new DataTable(XcatmonTableId);
//create Datatable
var dTable;
//create the xcatmonTable header
var header=rsp[0].split(",");
header.splice(3,2);
header.splice(0,1);
header[0]="apps name";
header[1]="configure";
header.push('<input type="checkbox" onclick="selectAllCheckbox(event,$(this))">');
header.unshift('');
XcatmonTable.init(header); //create the table header
//create container of original table contents
var origCont= new Array();
origCont[0]=header; //table header
//create contariner for new contents use for update the monsetting table
var newCont =new Object();
newCont[0]=rsp[0].split(","); //table header
//create container for other monsetting lines not xcatmon
var otherCont =new Array();
$('#xcatmonTable').append(XcatmonTable.object()); //add table object
var m = 1; //the count for origCont
var n = 0;
for (var i=1; i<rsp.length; i++) { //get the apps and the ping-interval configure
var pos = rsp[i].indexOf("xcatmon"); //only check the xcatmon setting
if (pos == 1) {
//get the useful info and add it to the page.
if ((rsp[i].indexOf("apps")== -1 ) && (rsp[i].indexOf("ping")== -1)) {
var cols=rsp[i].split(',');
//pair the semicolon of the content
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'),'');
}
//remove the commend disable
cols.splice(3,2);
//remove the xcatmon
cols.splice(0,1);
cols.push('<input type="checkbox" name="' + cols[0] + '" title="Checking this checkbox will add/remove the app from the configure apps value" />');
cols.unshift('<span class="ui-icon ui-icon-close" onclick="deleteRow1(this)"></span>');
//add the column tho the table
XcatmonTable.add(cols);
origCont[m++] = cols;
} else {
if (!apps_flag) { //check the apps setting
if (rsp[i].indexOf("apps") > -1) { //check for is apps or not
apps=rsp[i].split(',');
for (var j=0; j<apps.length; j++) { //pair the semicolon
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 setting subroute
if (!ping_flag) {
//check the ping-interval config
if (rsp[i].indexOf("ping-interval") > -1) {
ping=rsp[i].split(',');
//pair the semicolon
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'),'');
}
//add the rows to the otherCont.
otherCont[n++] = otherCols;
}
}
//if the apps is not in the monsetting table.Then create the default apps row.
//when saving the changes,add the row to the table.
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 row.
//when saving the changes,add the row to the table.
if(!ping_flag) {
ping = rsp[0].split(',');
ping[0] = "xcatmon";
ping[1] = "ping-interval";
//the default ping-interval setting is 5
ping[2] = "5";
ping[3] = "";
ping[4] = "";
}
//set the checkbox to be true according to the apps
var checked = apps[2].split(',');
for (var i=0; i<checked.length; i++) {
//set the selcet checkbox to true
$("input:checkbox[name="+checked[i]+"]").attr('checked',true);
for (var j=0; j<origCont.length; j++) {
//set the origCont's checkbox to true
if (origCont[j][1] == checked[i]) {
origCont[j].splice(3,1);
origCont[j].push('<input type="checkbox" name="'+origCont[j][1]+'" title="Click this checkbox will add/remove the app from the configure apps 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 the 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 the container of the new row
var row = new Array();
//add the delete button to the row
row.push('<span class="ui-icon ui-icon-close" onclick="deleteRow1(this)"></span>');
//add the xcatmon
//add the contain of the setting
for (var i=0; i<header.length-2; i++) {
row.push('');
}
//add the checkbox
row.push('<input type="checkbox" name="'+row[2]+'" title="Checking this checkbox will add/remove the app from the configure 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'
}
);
});
/**
* apply button
*
* the Apply button is used to store the contain of the table in the page to
* the monsetting table on the MN.
*/
var applyLnk = $('<a>Apply</a>');
applyLnk.bind('click', function(event){
//get the datatable of the page
var dTable = $('#' + XcatmonTableId).dataTable();
//get the rows of the datatable
var dRows = dTable.fnGetNodes();
var count = 0;
//create the new container of the apps' value.
var appValue = '';
var tableName = 'monsetting';
var tmp;
var tmp1;
var closeBtn = createButton('close');
//get the contain of the rows
for (var i=0; i<dRows.length; i++) {
if (dRows[i]) {
//get the columns fo the row
var cols = dRows[i].childNodes;
//create the container of the new column
var vals = new Array();
for (var j=1; j<cols.length-1; j++) {
//get the value of every column(except the first and the last.why ? .ni dong de)
var val=cols.item(j).firstChild.nodeValue;
if (val == ' ') {
vals[j-1] = '';
} else {
vals[j-1] = val;
}
}
//prepare another space for the array/
var vals_orig = new Array();
//copy the 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 the new column to the newCont
newCont[i+1] = vals;
//check the checkbox of the row and add different checkbox to the orignCont
//for the cancle button
if (cols.item(cols.length-1).firstChild.checked) {
vals_orig.push('<input type="checkbox" name="' + vals_orig[0] + '" title="Click this checkbox will add/remove the app from the configure apps value." checked=true/>');
} else {
vals_orig.push('<input type="checkbox" name="' + vals_orig[0] + '" title="Click this checkbox will add/remove the app from the configure apps value."/>');
}
//push the delete button to the row
vals_orig.unshift('<span class="ui-icon ui-icon-close" onclick="deleteRow1(this)"></span>');
//add the row to the orignCont
origCont[i+1] = vals_orig;
count = i+1;
//check the checkbox fo everyrow for merging the appName to the apps values
if (cols.item(cols.length-1).firstChild.checked) {
//the new value for the apps.get the name fo every app.
appValue = appValue.concat(cols.item(2).firstChild.nodeValue+",");
}
}
}
count++;
//delete the last "," of the apps value
appValue = appValue.substring(0,(appValue.length-1));
apps[2] = appValue;
//newCont add the apps row
newCont[count++] = apps;
//newCont add the ping-interval row
newCont[count++] = ping;
//add the other monitor setting of the mosetting
for (var j=0; j<otherCont.length; j++) {
newCont[count++] = otherCont[j];
}
//create the save dialog
var dialogSave = $('<div id="saveDialog" align="center">saving the configuration </div>');
dialogSave.append(createLoader());
$('#xcatmon').append(dialogSave);
//open the dialog..modal is true
$("#saveDialog").dialog({modal: true});
//hide the cross...
$('.ui-dialog-titlebar-close').hide();
//put the table name and the contain to the tabRestore.php
$.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>The Configure has saved!</p>');
$("#saveDialog").append(closeBtn);
}
});
//close button function
closeBtn.bind('click', function(event){
$("#saveDialog").dialog("distroy");
$("#saveDialog").remove();
});
//clear the newCont
newCont = null;
newCont = new Object();
//just for tmp=newCont;
newCont[0] = rsp[0].split(",");
});
var cancelLnk = $('<a>Cancel</a>');
cancelLnk.bind('click', function(event){
//get the datatable of the page
var dTable = $('#' + XcatmonTableId).dataTable();
//clear the datatable
dTable.fnClearTable();
//add the contain of the 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'
});
});
//actions
var actionsLnk = '<a>Actions</a>';
var actsMenu = createMenu([addRowLnk, applyLnk, cancelLnk]);
//create an action menu
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 deleteRow1(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;
}
}
}