mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10497 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			445 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
} |