/** * Global variables */ var xcatMonTableId = "xcatMonSettingTable"; /** * Load xCAT monitoring */ function loadXcatMon() { // Find xCAT monitoring tab var xcatMonTab = $('#xcatmon'); xcatMonTab.append("
"); // 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; if (!rsp.length) return; 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(''); 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(''); cols.unshift(''); // 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(''); } } } $(":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, "bScrollCollapse": true, "sScrollY": "400px", "sScrollX": "110%", "bAutoWidth": true, "oLanguage": { "oPaginate": { "sNext": "", "sPrevious": "" } } }); // Create action bar var actionBar = $(''); var addRowLnk = $('Add row'); addRowLnk.bind('click', function(event) { // Create container for new row var row = new Array(); // Add delete button to row row.push(''); for ( var i = 0; i < header.length - 2; i++) row.push(''); // Add checkbox row.push(''); // 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 = $('Apply'); 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(''); } else { vals_orig.push(''); } // Add delete button to row vals_orig.unshift(''); // 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 = $('Configuration saved!
'); $("#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 = $('Cancel'); 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 = 'Actions'; 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 = $(''); $('#' + 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; } } }