var globalNodesDetail = new Object(); var globalAllNodesNum = 0; var globalFinishNodesNum = 0; var globalTimeStamp; var globalCondition = ''; var globalResponse = new Object(); function loadRmcMon() { // Find the rmcmon tab var rmcMonTab = $('#rmcmon'); // Add the stauts bar first. id = 'rmcMonStatus' var rmcStatusBar = createStatusBar('rmcMonStatus'); rmcStatusBar.find('div').append(createLoader()); rmcMonTab.append(rmcStatusBar); // Add the configure button var configButton = createButton('Configure'); configButton.hide(); configButton.click(function() { if ($('#rmcMonConfig').is(':hidden')) { $('#rmcMonConfig').show(); } else { $('#rmcMonConfig').hide(); } }); rmcMonTab.append(configButton); // Add configure div rmcMonTab.append("<div id='rmcMonConfig'></div>"); $('#rmcMonConfig').hide(); // Load the configure div's content loadRmcMonConfigure(); // Add the content of the rmcmon rmcMonTab .append("<div id='rmcMonShow'><div id='rmcmonSummary'></div><div id='rmcmonDetail'></div><div id='nodeDetail'></div></div>"); $('#nodeDetail').hide(); // Check the software work status by platform (Linux and AIX) $.ajax({ url : 'lib/systemcmd.php', dataType : 'json', data : { cmd : 'ostype' }, success : rsctRpmCheck }); } function loadRmcMonConfigure() { // Get the configure div and clean its content var rmcmonCfgDiv = $('#rmcMonConfig'); rmcmonCfgDiv.empty(); // Add the start button var startButton = createButton('Start'); rmcmonCfgDiv.append(startButton); startButton.click(function() { $('#rmcMonStatus div').empty().append(createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'rmcstart;compute', msg : '' }, success : function(data) { $('#rmcMonStatus div').empty().append(data.rsp[0]); } }); }); // Add the stop button var stopButton = createButton('Stop'); rmcmonCfgDiv.append(stopButton); stopButton.click(function() { $('#rmcMonStatus div').empty().append(createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'monstop', tgt : '', args : 'rmcmon', msg : '' }, success : function(data) { $('#rmcMonStatus div').empty().append(data.rsp[0]); } }); }); // Add the cancel button var cancelButton = createButton('Cancel'); rmcmonCfgDiv.append(cancelButton); cancelButton.click(function() { $('#rmcMonConfig').hide(); }); } function rsctRpmCheck(data) { // Linux has to check the rscp first if ('aix' != data.rsp) { $.ajax({ url : 'lib/systemcmd.php', dataType : 'json', data : { cmd : 'rpm -q rsct.core' }, success : function(data) { if (-1 != data.rsp.indexOf("not")) { $('#rmcMonStatus div') .empty() .append( 'Please install the <a href="http://www14.software.ibm.com/webapp/set2/sas/f/rsct/rmc/download/home.html" target="install_window">RSCT</a> first.<br/>' + 'You can find more support from <a href="http://xcat.svn.sourceforge.net/viewvc/xcat/xcat-core/trunk/xCAT-client/share/doc/xCAT2-Monitoring.pdf" target="pdf_window">xCAT2-Monitoring.pdf</a>'); } else { xcatrmcRpmCheck(); } } }); } else { xcatrmcRpmCheck(); } } function xcatrmcRpmCheck() { $.ajax({ url : 'lib/systemcmd.php', dataType : 'json', data : { cmd : 'rpm -q xCAT-rmc rrdtool' }, success : function(data) { var softInstallStatus = data.rsp.split(/\n/); var needHelp = false; $('#rmcMonStatus div').empty(); // Check the xcat-rmc if (-1 != softInstallStatus[0].indexOf("not")) { needHelp = true; $('#rmcMonStatus div') .append( 'Please install the <a href="http://xcat.sourceforge.net/#download" target="install_window">xCAT-rmc</a> first.<br/>'); } // Check the rrdtool if (-1 != softInstallStatus[1].indexOf("not")) { needHelp = true; $('#rmcMonStatus div') .append( 'Please install the <a href="http://oss.oetiker.ch/rrdtool/download.en.html" target="install_window">RRD-tool</a> first.<br/>'); } // Add help info or load the rmc show if (needHelp) { $('#rmcMonStatus div') .append( 'You can find more support form <a href="http://xcat.svn.sourceforge.net/viewvc/xcat/xcat-core/trunk/xCAT-client/share/doc/xCAT2-Monitoring.pdf" target="pdf_window">xCAT2-Monitoring.pdf</a>'); } else { rmcWorkingCheck(); } } }); } function rmcWorkingCheck() { $('#rmcMonStatus div').empty().append("Checking RMC working status"); $('#rmcMonStatus div').append(createLoader()); $('#rmcmon button:first').show(); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'monls', tgt : '', args : 'rmcmon', msg : '' }, success : function(data) { if (-1 != data.rsp[0].indexOf("not-monitored")) { $('#rmcMonStatus div').empty().append( "Please start the RMC Monitoring first"); return; } loadRmcMonShow(); } }); } function removeStatusBar() { if (globalAllNodesNum == globalFinishNodesNum) { $('#rmcMonStatus').remove(); } $('#rmcmonDetail [title]').tooltip({ position : [ 'center', 'right' ] }); } function loadRmcMonShow() { $('#rmcMonStatus div').empty().append("Getting summary data"); $('#rmcMonStatus div').append(createLoader()); // Load the rmc status summary $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'rmcshow;summary;PctTotalTimeIdle,PctRealMemFree', msg : '' }, success : function(data) { showRmcSummary(data.rsp[0]); } }); } function showRmcSummary(returnData) { var attributes = returnData.split(';'); var attr; var attrName; var attrValues; var attrDiv; var summaryTable = $('<table><tbody></tbody></table>'); var summaryRow; globalTimeStamp = new Array(); // Update the rmc status area $('#rmcMonStatus div').empty().append("Getting nodes data").append( createLoader()); // Load each nodes' status $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'rmcshow;compute;PctTotalTimeIdle,PctRealMemFree', msg : '' }, success : function(data) { parseRmcData(data.rsp); } }); // Create the timestamp, the flot only use the UTC time, so had to change the value, to show the right time var tempDate = new Date(); var tempOffset = tempDate.getTimezoneOffset(); var tempTime = tempDate.getTime() - 3600000; for (var i = 0; i < 60; i++) { tempDate.setTime(tempTime + i * 60000); globalTimeStamp.push(tempDate.getTime()); } // Show the summary data $('#rmcmonSummary').empty().append('<h3>Overview</h3><hr />'); $('#rmcmonSummary').append(summaryTable); for (attr in attributes) { var tempTd = $('<td style="border:0px;padding:15px 5px;"></td>'); var tempArray = []; var temp = attributes[attr].indexOf(':'); attrName = attributes[attr].substr(0, temp); attrValues = attributes[attr].substr(temp + 1).split(','); if (0 == (attr % 3)) { summaryRow = $('<tr></tr>'); summaryTable.append(summaryRow); } summaryRow.append(tempTd); attrDiv = $('<div id="monitor-sum-div' + attr + '" class="monitor-sum-div"></div>'); tempTd.append(attrDiv); for (var i in attrValues) { tempArray.push([ globalTimeStamp[i], Number(attrValues[i]) ]); } $.jqplot('monitor-sum-div' + attr, [ tempArray ], { series : [ { showMarker : false } ], axes : { xaxis : { label : attrName, renderer : $.jqplot.DateAxisRenderer, numberTicks : 5, tickOptions : { formatString : '%R', show : true, fontSize : '10px' } }, yaxis : { tickOptions : { formatString : '%.2f', fontSize : '10px' } } } }); } } function parseRmcData(returnData) { var nodeName; var nodeStatus; $('#rmcmonDetail').empty().append('<h3>Detail</h3><hr/>'); // Add the table for show nodes var detailUl = $('<ul style="margin:0px;padding:0px;"></ul>'); // Update the table area $('#rmcmonDetail ul').remove(); $('#rmcmonDetail').append(detailUl); globalAllNodesNum = returnData.length; globalFinishNodesNum = 0; for (var i in returnData) { var temp = returnData[i].indexOf(':'); ; nodeName = returnData[i].substr(0, temp); nodeStatus = returnData[i].substr(temp + 1).replace(/(^\s*)|(\s*$)/g, ''); if ('OK' != nodeStatus) { globalFinishNodesNum++; detailUl.append(createUnkownNode(nodeName)); removeStatusBar(); continue; } $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'rmcshow;' + nodeName + ';PctTotalTimeIdle,PctRealMemFree', msg : nodeName }, success : function(data) { showRmcNodes(data.rsp, data.msg); } }); } } function createUnkownNode(nodeName) { var tempLi = '<li class="monitor-unknown ui-corner-all monitor-node-li" id="' + nodeName + '" ' + 'title="Name:' + nodeName + '<br/>Unknown"></li>'; return tempLi; } function createErrorNode(nodeName) { var tempLi = '<li class="monitor-error ui-corner-all monitor-node-li id="' + nodeName + '" ' + 'title="Name:' + nodeName + '<br/>Error"></li>'; } function showRmcNodes(data, nodename) { var attrname = ''; var values = ''; var position = 0; var index = 0; var classname = ''; var tempObj = {}; for (index in data) { position = data[index].indexOf(':'); attrname = data[index].substr(0, position); values = data[index].substr(position + 1); // Error node, cannot get the last hour's data if (!values) { $('#rmcmonDetail ul').append(createErrorNode(nodename)); if (globalNodesDetail[nodename]) { delete (globalNodesDetail[nodename]); } return; } // Normal node, save the values tempObj[attrname] = values; } globalNodesDetail[nodename] = tempObj; // Get each average var cpuAvg = 0; var memAvg = 0; var tempSum = 0; var tempArray = globalNodesDetail[nodename]['PctTotalTimeIdle'].split(','); for (index = 0; index < tempArray.length; index++) { tempSum += Number(tempArray[index]); } cpuAvg = parseInt(tempSum / index); tempArray = globalNodesDetail[nodename]['PctRealMemFree'].split(','); tempSum = 0; for (index = 0; index < tempArray.length; index++) { tempSum += Number(tempArray[index]); } memAvg = parseInt(tempSum / index); if (cpuAvg >= 10 && memAvg <= 90) { classname = 'monitor-normal'; } else { classname = 'mornitor-warning'; } var normalLi = $('<li class="' + classname + ' ui-corner-all monitor-node-li" id="' + nodename + '" title="' + 'Name:' + nodename + '<br/> CpuIdle: ' + cpuAvg + '%<br/> MemFree: ' + memAvg + '%"></li>'); $('#rmcmonDetail ul').append(normalLi); normalLi.bind('click', function() { showNode($(this).attr('id')); }); // Check if the process finished globalFinishNodesNum++; removeStatusBar(); } function showNode(nodeName) { var nodeTable = $('<table><tbody></tbody></table>'); var backButton = createButton('Go back to all nodes'); var nodeRow; var parseNum = 0; $('#rmcmonDetail').hide(); $('#nodeDetail').empty().show(); $('#nodeDetail').append('<h3>' + nodeName + ' Detail</h3><hr />'); $('#nodeDetail').append(backButton); backButton.bind('click', function() { $('#nodeDetail').hide(); $('#rmcmonDetail').show(); }); $('#nodeDetail').append(nodeTable); for (var attr in globalNodesDetail[nodeName]) { var tempTd = $('<td style="border:0px;padding:1px 1px;"></td>'); var attrChat = $('<div id="monitor-node-div' + nodeName + attr + '" class="monitor-node-div"></div>'); if (0 == parseNum % 4) { nodeRow = $('<tr></tr>'); nodeTable.append(nodeRow); } nodeRow.append(tempTd); parseNum++; tempTd.append(attrChat); var tempData = globalNodesDetail[nodeName][attr].split(','); var tempArray = []; for (var i in tempData) { tempArray.push([ globalTimeStamp[i], Number(tempData[i]) ]); } $.jqplot('monitor-node-div' + nodeName + attr, [ tempArray ], { series : [ { showMarker : false } ], axes : { xaxis : { label : attr, renderer : $.jqplot.DateAxisRenderer, numberTicks : 5, tickOptions : { formatString : '%R', show : true, fontSize : '10px' } }, yaxis : { tickOptions : { formatString : '%.2f', fontSize : '10px' } } } }); } } /** * Load the rmc event tab */ function loadRmcEvent() { // Find the rmcevent tab // Add the stauts bar first var rmcStatusBar = createStatusBar('rmcEventStatus'); rmcStatusBar.find('div').append(createLoader()); $('#rmcevent').append(rmcStatusBar); $('#rmcevent').append('<div id="rmcEventDiv"></div>'); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'lsevent;-O;1000', msg : '' }, success : showEventLog }); } /** * Get all conditions */ function getConditions() { if (!globalCondition) { $('#rmcEventStatus div').empty() .append('Getting predefined conditions').append(createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'lscondition', msg : '' }, success : function(data) { $('#rmcEventStatus div').empty(); $('#rmcEventButtons').show(); globalCondition = data.rsp[0]; } }); } else { $('#rmcEventButtons').show(); } } /** * Get all response */ function getResponse() { var tempFlag = false; // Get all response first for (var i in globalResponse) { tempFlag = true; break; } if (!tempFlag) { $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'lsresponse', msg : '' }, success : function(data) { var resps = data.rsp[0].split(';'); for (var i in resps) { var name = resps[i]; name = name.substr(1, (name.length - 2)); globalResponse[name] = 1; } } }); } } /** * Show all the event in the rmc event tab * * @param data Response from the xcat server */ function showEventLog(data) { $('#rmcEventStatus div').empty(); // rsct not installed if (data.rsp[0] && (-1 != data.rsp[0].indexOf('lsevent'))) { $('#rmcEventStatus div').append('Please install RSCT first!'); return; } var eventDiv = $('#rmcEventDiv'); eventDiv.empty(); // Get conditions and responses, save in the global getConditions(); getResponse(); var eventTable = new DataTable('lsEventTable'); eventTable.init([ 'Time', 'Type', 'Content' ]); for (var i in data.rsp) { var row = data.rsp[i].split(';'); eventTable.add(row); } eventDiv.append(eventTable.object()); $('#lsEventTable').dataTable({ 'iDisplayLength' : 50, 'bLengthChange' : false, "sScrollX" : "100%", "bAutoWidth" : true }); // Add the configure button loadRmcEventConfig(); // Unsort on the content column $('#lsEventTable thead tr th').eq(2).unbind('click'); } /** * Add the configure button into rmc event tab */ function loadRmcEventConfig() { // Create action bar var actionBar = $('<div class="actionBar"></div>'); var chCondScopeLnk = $('<a>Change condition scope</a>'); chCondScopeLnk.bind('click', function() { chCondScopeDia(); }); var mkCondRespLnk = $('<a>Make/remove associatione</a>'); mkCondRespLnk.bind('click', function() { mkCondRespDia(); }); var startCondRespLnk = $('<a>Start/stop association</a>'); startCondRespLnk.bind('click', function() { startStopCondRespDia(); }); // Actions var actionsLnk = '<a>Actions</a>'; var actsMenu = createMenu([ chCondScopeLnk, mkCondRespLnk, startCondRespLnk ]); // 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="lsEventTable_menuDiv" class="menuDiv"></div>'); $('#lsEventTable_wrapper').prepend(menuDiv); menuDiv.append(actionBar); $('#lsEventTable_filter').appendTo(menuDiv); } /** * Show the make association dialogue */ function mkCondRespDia() { var diaDiv = $('<div title="Configure Association" id="mkAssociation" class="tab"></div>'); var mkAssociationTable = '<center><table><thead><tr><th>Condition Name</th><th>Response Name</th></tr></thead>'; mkAssociationTable += '<tbody><tr><td id="mkAssCond">'; // Add the conditions into fieldset if (!globalCondition) { mkAssociationTable += 'Getting predefined conditions, open this dislogue later'; } else { mkAssociationTable += createConditionTd(globalCondition); } mkAssociationTable += '</td><td id="mkAssResp">Please select condition first</td></tr></tbody></table></center>'; diaDiv.append(mkAssociationTable); diaDiv.append('<div id="selectedResp" style="display: none;" ><div>'); // Change the response field when click the condition diaDiv.find('input:radio').bind('click', function() { diaDiv.find('#mkAssResp').empty().append('Getting response').append(createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'lscondresp;"' + $(this).attr('value') + '"', msg : '' }, success : function(data) { var tempHash = new Object(); var oldSelectedResp = ''; var showStr = ''; if (data.rsp[0]) { var names = data.rsp[0].split(';'); for (var i in names) { var name = names[i]; name = name.substr(1, name.length - 2); tempHash[name] = 1; } } for (var name in globalResponse) { if (tempHash[name]) { showStr += '<input type="checkbox" checked="checked" value="' + name + '">' + name + '<br/>'; oldSelectedResp += ';' + name; } else { showStr += '<input type="checkbox" value="' + name + '">' + name + '<br/>'; } } diaDiv.find('#mkAssResp').empty() .append(showStr); diaDiv.find('#selectedResp').empty() .append(oldSelectedResp); } }); }); diaDiv.dialog({ modal : true, width : 620, height : 600, close : function(event, ui) { $(this).remove(); }, buttons : { 'Ok' : function() { var newResp = new Object(); var oldResp = new Object(); var oldString = ''; var newString = ''; // Get the old seelected responses var conditionName = $(this).find('#mkAssCond :checked').attr( 'value'); if (!conditionName) { return; } var temp = $(this).find('#selectedResp').html(); if (!temp) { return; } var tempArray = temp.substr(1).split(';'); for (var i in tempArray) { oldResp[tempArray[i]] = 1; } // Get the new selected responses $(this).find('#mkAssResp input:checked').each(function() { var respName = $(this).attr('value'); newResp[respName] = 1; }); for (var i in newResp) { if (oldResp[i]) { delete oldResp[i]; delete newResp[i]; } } // Add the response which are delete for (var i in oldResp) { oldString += ',"' + i + '"'; } if ('' != oldString) { oldString = oldString.substr(1); } // Add the response which are new add for (var i in newResp) { newString += ',"' + i + '"'; } if ('' != newString) { newString = newString.substr(1); } if (('' != oldString) || ('' != newString)) { $('#rmcEventStatus div').empty().append( 'Create/remove associations ').append( createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'mkcondresp;"' + conditionName + '";+' + newString + ':-' + oldString, msg : '' }, success : function(data) { $('#rmcEventStatus div').empty() .append(data.rsp[0]); ; } }); } $(this).dialog('close'); }, 'Cancel' : function() { $(this).dialog('close'); } } }); } /** * Show the make condition dialogue */ function chCondScopeDia() { var diaDiv = $('<div title="Change Condition Scope" id="chScopeDiaDiv" class="tab"></div>'); var tableContent = '<center><table id="changeScopeTable" ><thead><tr><th>Condition Name</th><th>Group Name</th></tr></thead>'; tableContent += '<tbody><tr><td id="changePreCond">'; // Add the conditions into fieldset if ('' == globalCondition) { tableContent += 'Getting predefined conditions, open this dialogue later'; } else { tableContent += createConditionTd(globalCondition); } tableContent += '</td><td id="changeGroup">'; // Add the groups into table var groups = $.cookie('groups').split(','); for (var i in groups) { tableContent += '<input type="checkbox" value="' + groups[i] + '">' + groups[i] + '<br/>'; } tableContent += '</td></tr></tbody></table></center>'; diaDiv.append(tableContent); // Fieldset to show status diaDiv.append('<fieldset id="changeStatus"></fieldset>'); // Create the dislogue diaDiv.dialog({ modal : true, width : 500, height : 600, close : function(event, ui) { $(this).remove(); }, buttons : { 'Ok' : function() { $('#changeStatus').empty().append('<legend>Status</legend>'); var conditionName = $('#changePreCond :checked').attr('value'); var groupName = ''; $('#changeGroup :checked').each(function() { if ('' == groupName) { groupName += $(this).attr('value'); } else { groupName += ',' + $(this).attr('value'); } }); if (undefined == conditionName) { $('#changeStatus').append('Please select conditon'); return; } if ('' == groupName) { $('#changeStatus').append('Please select group'); return; } $('#changeStatus').append(createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'mkcondition;change;' + conditionName + ';' + groupName, msg : '' }, success : function(data) { $('#changeStatus img').remove(); if (-1 != data.rsp[0].indexOf('Error')) { $('#changeStatus').append(data.rsp[0]); } else { $('#rmcEventStatus div').empty() .append(data.rsp[0]); $('#chScopeDiaDiv').remove(); } } }); }, 'Cancel' : function() { $(this).dialog('close'); } } }); } /** * Show the make response dialogue */ function mkResponseDia() { var diaDiv = $('<div title="Make Response"><div>'); diaDiv.append('Not yet supported.'); diaDiv.dialog({ modal : true, width : 400, close : function(event, ui) { $(this).remove(); }, buttons : { 'Ok' : function() { $(this).dialog('close'); }, 'Cancel' : function() { $(this).dialog('close'); } } }); } /** * Start the condition and response associations */ function startStopCondRespDia() { var diaDiv = $('<div title="Start/Stop Association" id="divStartStopAss" class="tab"><div>'); diaDiv.append('Getting conditions').append(createLoader()); if (!globalCondition) { $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'lscondition', msg : '' }, success : function(data) { if (data.rsp[0]) { globalcondition = data.rsp[0]; $('#divStartStopAss').empty().append( createAssociationTable(globalCondition)); $('#divStartStopAss') .dialog("option", "position", 'center'); } else { $('#divStartStopAss').empty().append( 'There are no conditions'); } } }); } else { diaDiv.empty().append(createAssociationTable(globalCondition)); } diaDiv.dialog({ modal : true, width : 570, height : 600, close : function(event, ui) { $(this).remove(); }, buttons : { 'Close' : function() { $(this).dialog('close'); } } }); $('#divStartStopAss button').bind( 'click', function() { var operationType = ''; var conditionName = $(this).attr('name'); if ('Start' == $(this).html()) { operationType = 'start'; } else { operationType = 'stop'; } $(this).parent().prev().empty().append(createLoader()); $('#divStartStopAss').dialog('option', 'disabled', true); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : operationType + 'condresp;' + conditionName, msg : operationType + ';' + conditionName }, success : function(data) { var conditionName = ''; var newOperationType = ''; var associationStatus = ''; var backgroudColor = ''; if ('start' == data.msg.substr(0, 5)) { newOperationType = 'Stop'; conditionName = data.msg.substr(6); associationStatus = 'Monitored'; backgroudColor = '#ffffff'; } else { newOperationType = 'Start'; conditionName = data.msg.substr(5); associationStatus = 'Not Monitored'; backgroudColor = '#fffacd'; } var button = $('#divStartStopAss button[name="' + conditionName + '"]'); if (data.rsp[0]) { $('#rmcEventStatus div').empty().append( 'Getting associations\' status').append( createLoader()); $('#rmcEventButtons').hide(); button.html(newOperationType); button.parent().prev().html(associationStatus); button.parent().parent().css('background-color', backgroudColor); globalCondition = ''; getConditions(); } else { button.html('Error'); } $('#divStartStopAss').dialog('option', 'disabled', false); } }); }); } /** * Stop the condition and response associations */ function stopCondRespDia() { var diaDiv = $('<div title="Stop Association" id="stopAss"><div>'); diaDiv.append('Getting conditions').append(createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'lscondition;-m', msg : '' }, success : function(data) { if (data.rsp[0]) { $('#stopAss').empty().append( createConditionTable(data.rsp[0])); $('#stopAss').dialog("option", "position", 'center'); } else { $('#stopAss').empty().append( 'There is not monitored condition.'); } } }); diaDiv.dialog({ modal : true, width : 570, close : function(event, ui) { $(this).remove(); }, buttons : { 'Stop' : function() { var conditionName = $('#stopAss :checked').attr('value'); if (!conditionName) { alert('Select condition name please.'); return; } $('#rmcEventStatus div').empty().append( 'Stoping monitor on ' + conditionName).append( createLoader()); $.ajax({ url : 'lib/cmd.php', dataType : 'json', data : { cmd : 'webrun', tgt : '', args : 'stopcondresp;' + conditionName, msg : '' }, success : function(data) { $('#rmcEventStatus div').empty().append(data.rsp[0]); } }); $(this).dialog('close'); }, 'Cancel' : function() { $(this).dialog('close'); } } }); } /** * Create the condition table for dialogue * * @param cond Condition */ function createConditionTd(cond) { var conditions = cond.split(';'); var name = ''; var showStr = ''; for (var i in conditions) { name = conditions[i]; // Because there is status and quotation marks in name, // we must delete the status and quotation marks name = name.substr(1, name.length - 6); showStr += '<input type="radio" name="preCond" value="' + name + '">' + name + '<br/>'; } return showStr; } /** * Create the association table for dialogue, which show the status and start/stop associations * * @param cond Condition */ function createAssociationTable(cond) { var conditions = cond.split(';'); var name = ''; var tempLength = ''; var tempStatus = ''; var showStr = '<center><table><thead><tr><th>Condition Name</th><th>Status</th><th>Start/Stop</th></tr></thead>'; showStr += '<tbody>'; for (var i in conditions) { name = conditions[i]; tempLength = name.length; tempStatus = name.substr(tempLength - 3); name = name.substr(1, tempLength - 6); if ('Not' == tempStatus) { showStr += '<tr style="background-color:#fffacd;"><td>' + name + '</td><td>Not Monitored</td>'; showStr += '<td><button id="button" name="' + name + '">Start</button></td>'; } else { showStr += '<tr><td>' + name + '</td><td>Monitored</td>'; showStr += '<td><button id="button" name="' + name + '">Stop</button></td>'; } showStr += '</tr>'; } showStr += '<tbody></table></center>'; return showStr; }