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