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;
 | |
|         }
 | |
|     }
 | |
| } |