git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11850 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			408 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			408 lines
		
	
	
		
			12 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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
} |