add xcat apps monitor into xcat ui

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9066 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
xq2005 2011-03-17 03:39:05 +00:00
parent 28c396f6c1
commit 39e1df0a82

View File

@ -1,162 +1,507 @@
/*
* Globle variable
*
*/
var XcatmonTableId="XcatMonsettingTable";
var dataTables=new Object();
/*
* set datatable
*
*/
function setDatatable(id,obj){
dataTables[id]=obj;
}
/*
* get datatable from the given id
*
*
*/
function getDatatable(id){
return dataTables[id];
}
/*
*
*
*/
function loadXcatMon(){
//find the xcat mon tab
var xcatMonTab = $('#xcatmon');
//add the stauts bar first. id = 'xcatMonStatus'
var StatusBar = createStatusBar('xcatMonStatus');
StatusBar.append(createLoader());
xcatMonTab.append(StatusBar);
//add the configure button.
var configButton = createButton('Configure');
configButton.click(function(){
if ($('#xcatMonConfig').is(':hidden')){
$('#xcatMonConfig').show();
}
else{
$('#xcatMonConfig').hide();
}
});
xcatMonTab.append(configButton);
//add the configure div, id = 'xcatMonConfig'
xcatMonTab.append("<div id='xcatMonConfig'></div>");
$('#xcatMonConfig').hide();
//add button start, stop, cancel to the monconfig div
loadXcatMonConfigure();
//add the content of the xcat mon, id = 'xcatMonShow'
xcatMonTab.append("<div id='xcatMonShow'></div>");
//show the content of the page.
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'monls',
tgt : '',
args : 'xcatmon',
msg : ''
},
success : loadXcatMonWorkStatus
});
}
function loadXcatMonWorkStatus(data){
var xcatWorkStatus = data.rsp[0];
//the xcat mon did not run
if (-1 != xcatWorkStatus.indexOf('not-monitored')){
$('#xcatMonStatus').empty().append('The xCAT Monitor is not working. Please start it first.');
return;
}
//the xcatmon is running, show the result
loadXcatMonShow();
}
function loadXcatMonConfigure(){
//get the xcat mon configure div
var xcatMonConfigDiv = $('#xcatMonConfig');
xcatMonConfigDiv.empty();
//add start button
var startButton = createButton('Start');
xcatMonConfigDiv.append(startButton);
startButton.click(function(){
$('#xcatMonStatus').empty().append(createLoader());
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'monstart',
tgt : '',
args : 'xcatmon',
msg : ''
},
success : function(data){
//update the status bar, update the xcatmon show
$('#xcatMonStatus').empty().append(data.rsp[0]);
loadXcatMonShow();
}
});
});
//add stop buttons
var stopButton = createButton('Stop');
xcatMonConfigDiv.append(stopButton);
stopButton.click(function(){
$('#xcatMonStatus').empty().append(createLoader());
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'monstop',
tgt : '',
args : 'xcatmon',
msg : ''
},
success : function(data){
$('#xcatMonStatus').empty().append(data.rsp[0]);
$('#xcatMonShow').empty();
}
});
});
//add cancel button
var cancelButton = createButton('Cancel');
xcatMonConfigDiv.append(cancelButton);
cancelButton.click(function(){
$('#xcatMonConfig').hide();
});
}
function loadXcatMonShow(){
//update the status bar into waiting
$('#xcatMonStatus').empty().append(createLoader());
//get the latest xcatmon information
xcatMonTab.append("<div id= xcatmonTable></div>");
// show the content of the table monsetting
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'nodestat',
tgt : 'lpar',
args : '',
url:'lib/cmd.php',
dataType: 'json',
data:{
cmd : 'tabdump',
tgt :'',
args : 'monsetting',
msg : ''
},
success : updateXcatMonShow
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;
function updateXcatMonShow(data){
var temp = 0;
var nodeStatus = data.rsp;
var show = "";
var tempArray;
//update the status bar
$('#xcatMonStatus').empty().append("Get nodes' status finished.");
//create a infoBar
var infoBar=createInfoBar('Click on a cell to edit,Click outside the table to write to the cell.<br>Once you finish the xCATmon config.click on Apply.');
$('#xcatmonTable').append(infoBar);
$('#xcatMonShow').empty();
$('#xcatMonShow').append("<fieldset><legend>Node Status</legend></fieldset>");
//create xcatmonTable
var XcatmonTable= new DataTable(XcatmonTableId);
//get the nodestat from return data
//the data.rsp is an array, it look like this:
//['node1:ssh', 'node2:noping', 'node3:ssh']
for (temp = 0; temp < nodeStatus.length; temp++){
tempArray = nodeStatus[temp].split(':');
show += '<p>' + tempArray[0] + ':' + tempArray[1] + '</p>';
//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="Click 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 teh 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;
}
}
$('#xcatMonShow fieldset').append(show);
// 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);
var refreshButton = createButton('Refresh');
$('#xcatMonShow fieldset').append(refreshButton);
refreshButton.click(function(){
loadXcatMonShow();
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();
/*
$(':checkbox').hover(
function(){
$(this).append($("<span>***</span>"));
},
function(){
$(this).find("span:last").remove();
}
);
*/
//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();
// set the datatable to the global variables datatables
setDatatable(XcatmonTableId,dTable);
//create button bar
var addBar = $('<div align="center"></div>');
$('#xcatmon').append(addBar);
// create the button add row
var addRowBtn=createButton('Add row');
// add the button to the page
addBar.append(addRowBtn);
// create the button apply
var ApplyBtn=createButton('Apply');
// add the apply button to the page
addBar.append(ApplyBtn);
// create the button Cancel
var CancelBtn=createButton('Cancel');
// add the cancel to the page
addBar.append(CancelBtn);
// button click function
//create a empty row
addRowBtn.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="Click this checkbox will add/remove the app from the configure apps value."/>');
// get the datatable of the table
var dTable=getDatatable(XcatmonTableId);
// 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.
*
*/
ApplyBtn.bind('click',function(event){
// get the datatable of the page
var dTable=getDatatable(XcatmonTableId);
// 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;
// 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;
//tmp1=origCont;
//tmp=newCont;
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;
// tmp =apps;
// newCont add the apps row
newCont[count++]=apps;
// newCont add the ping-interval row
newCont[count++]=ping;
//tmp=otherCont;
// add the other monitor setting of the mosetting
for(var j=0;j<otherCont.length;j++){
newCont[count++]=otherCont[j];
}
//tmp=otherCont.length;
//tmp1=newCont;
setDatatable(XcatmonTableId,dTable);
// pot 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){
alert('changes saved');
}
});
// clear the newCont
newCont=null;
newCont= new Object();
//just for tet tmp=newCont;
newCont[0]=rsp[0].split(",");
}
);
/*
* undo button
*
*/
CancelBtn.bind('click',function(event){
// get the datatable of the page
var dTable=getDatatable(XcatmonTableId);
// 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'
}
);
}
);
}
// delete a row from the table
function deleteRow1(obj){
//var tableid=$(obj).parent().parent().parent().parent().attr('id');
var dTable=getDatatable(XcatmonTableId);
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;
}
}
}