git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@4944 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			536 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			536 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| function displayTips($tips)
 | |
| {
 | |
|     //to tell the user how to operate on the current web page
 | |
|     //the argument $tips is an array like this:
 | |
|     //{
 | |
|     //  "Click the name of each plugin, you can get the plugin's description.",
 | |
|     //  "You can also select one plugin, then you can set node/application status monitoring for the selected plugin.",
 | |
|     //}
 | |
|     echo '<div class="tips">'; 
 | |
|     echo '<p class="tips_head"><b>Tips:</b>(Click me to display tips)</p>';
 | |
|     echo '<div class="tips_content">';
 | |
|     foreach ($tips as $tip) {
 | |
|         echo "<p>$tip</p>";
 | |
|         echo "\n";
 | |
|     }
 | |
|     echo "</div>";
 | |
| 
 | |
|     echo '<script type="text/javascript">';
 | |
|     echo '$(handle_tips());';
 | |
|     echo '</script>';
 | |
|     echo '</div>';
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| function insertDiv($id)
 | |
| {
 | |
|     echo "<div id=$id></div>";
 | |
| }
 | |
| 
 | |
| function displayMonTable()
 | |
| {
 | |
|     //create one table to display the monitoring plugins' list
 | |
|     echo '<div id="monlist_table">';
 | |
|     echo <<<TOS1
 | |
| <table id="tabTable" class="tabTable" cellspacing="1">
 | |
|     <thead>
 | |
|         <tr class="colHeaders">
 | |
|             <td><b>Plug-in Name</b></td>
 | |
|             <td><b>Status</b></td>
 | |
|             <td><b>Node Status Monitoring</b></td>
 | |
|             <td><b>Configure</b></td>
 | |
|             <td><b>Action</b></td>
 | |
|         </tr>
 | |
|     </thead>
 | |
| TOS1;
 | |
| echo <<<TOS9
 | |
| <script type="text/javascript">
 | |
|     hoverOnMonlist();
 | |
| </script>
 | |
| TOS9;
 | |
|     echo '<tbody id="monlist">';
 | |
|     displayMonitorLists();
 | |
|     echo "</tbody></table></div>";
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| 
 | |
| function displayStatus()
 | |
| {
 | |
|     //tell the user that the current interface is not done yet...
 | |
|     echo "<div id='devstatus'><p>This interface is still under development -use accordingly.</p></div>";
 | |
| }
 | |
| 
 | |
| function displayOSITree()
 | |
| {
 | |
|     //display the node range tree, but only with the nodes with OSI type
 | |
|     //this follows the function showNrTreeInput();
 | |
|         echo "<div id=nrtree-input class='ui-corner-all'>";
 | |
| echo <<<TOS3
 | |
| <script type="text/javascript">
 | |
|     $(function() {
 | |
|         nrtree = new tree_component(); // -Tree begin
 | |
|         nrtree.init($("#nrtree-input"),{
 | |
|             rules: { multiple: "Ctrl" },
 | |
|             ui: { animation: 250 },
 | |
|             callback : { onchange : printtree },
 | |
|             data : {
 | |
|                 type : "json",
 | |
|                 async : "true",
 | |
|                 url: "noderangesource.php"
 | |
|             }
 | |
|         });  //Tree finish
 | |
|     });
 | |
| </script>
 | |
| TOS3;
 | |
|     echo "</div>";
 | |
| }
 | |
| 
 | |
| function displayAssociation()
 | |
| {
 | |
|     //TODO: the return message of "webrun lscondresp" is changed
 | |
|     //and, also, DataTables is used to draw the tabls
 | |
|     echo '<div id="association" class="ui-cornel-all">';
 | |
| echo <<<TOS5
 | |
|     <script type="text/javascript">
 | |
|         $("#association").dataTable({
 | |
|             "bLengthChange": false,
 | |
|             "bFilter": true,
 | |
|             "bSort": true,
 | |
|             "iDisplayLength": 50
 | |
|         });
 | |
|     </script>
 | |
| <table>
 | |
|     <thead>
 | |
|         <tr>
 | |
|             <th>Condition</td>
 | |
|             <th>Response</td>
 | |
|             <th>Node</td>
 | |
|             <th>State</td>
 | |
|             <th>Action</td>
 | |
|         </tr>
 | |
|     </thead>
 | |
|     <tbody>
 | |
| TOS5;
 | |
|     $xml = docmd("webrun", "", array("lscondresp"));
 | |
|     if(getXmlErrors($xml,$errors)) {
 | |
|         echo "<p class=Error>",implode(' ', $errors), "</p>";
 | |
|         exit;
 | |
|     }
 | |
|     //get all the condition&response associations for RMC
 | |
|     foreach ($xml->children() as $response) foreach($response->children() as $data) {
 | |
|         //get the data from xcatd
 | |
|         $record = split('"',$data);
 | |
|         echo "<tr>";
 | |
| echo <<<TOS6
 | |
|             <td>$record[1]</td>
 | |
|             <td>$record[3]</td>
 | |
|             <td>$record[5]</td>
 | |
|             <td>$record[7]</td>
 | |
| TOS6;
 | |
|         //TODO: insert the button here
 | |
|         echo "<td>";
 | |
|         if($record[7] == "Active") {
 | |
|             echo "<button class='fg-button ui-corner-all ui-state-active' onclick='control_RMCAssoc(\"$record[1]\", \"$record[5]\", \"$record[3]\", \"stop\")'>Disable</button>";
 | |
|         }else {
 | |
|             echo "<button class='fg-button ui-corner-all ui-state-active' onclick='control_RMCAssoc(\"$record[1]\", \"$record[5]\", \"$record[3]\", \"start\")'>Enable</button>";
 | |
|         }
 | |
|         echo "</td>";
 | |
|         echo "</tr>";
 | |
|     }
 | |
|     echo "</tbody></table></div>";
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| function displayCond()
 | |
| {
 | |
|     //display all the avaiable conditions to a <table> element
 | |
| echo <<<COND
 | |
| <div id="avail_cond" style="display:none">
 | |
| <table>
 | |
|     <thead>
 | |
|         <tr class="colHeaders">
 | |
|             <th></td>
 | |
|             <th>Conditions</td>
 | |
|         </tr>
 | |
|     </thead>
 | |
|     <tbody>
 | |
| COND;
 | |
|     $xml = docmd("webrun", '', array("lscondition"));
 | |
|     foreach($xml->children() as $response) foreach($response->children() as $data) {
 | |
|         /*
 | |
|          * the data format like this
 | |
|          * "HFI_not_configured"              "ca4lpar02" "Not monitored"
 | |
|          * "Drawer_not_configured"           "ca4lpar02" "Not monitored"
 | |
|          * "AnyNodeFileSystemSpaceUsed_H"    "ca4lpar02" "Not monitored"
 | |
|          */
 | |
|         $tmp = split('"', $data);
 | |
|         //$tmp[1] = condition name
 | |
|         //$tmp[3] = nodename
 | |
|         //$tmp[5] = status
 | |
| echo <<<TOS99
 | |
|         <tr>
 | |
|             <td><input type='radio' name='conditions' value='$tmp[1]]' /></td>
 | |
|             <td>$tmp[1]</td>
 | |
|         </tr>
 | |
| TOS99;
 | |
|     }
 | |
| 
 | |
|     echo "</tbody></table></div>";
 | |
|     return 0;
 | |
| 
 | |
| }
 | |
| 
 | |
| function displayResp()
 | |
| {
 | |
| echo <<<RESP
 | |
| <div id="avail_resp" style="display:none">
 | |
| <table>
 | |
|     <thead>
 | |
|         <tr class="colHeaders">
 | |
|             <th></td>
 | |
|             <th>Response</td>
 | |
|         </tr>
 | |
|     </thead>
 | |
|     <tbody>
 | |
| RESP;
 | |
|   $xml=docmd("webrun", '', array("lsresponse"));
 | |
|   $ooe=0;
 | |
|   $line=0;
 | |
|   foreach($xml->children() as $response) foreach($response->children() as $data) {
 | |
|       $record = split('"', $data);
 | |
|       echo "<tr>";
 | |
| echo <<<TOS7
 | |
|       <td><input type='checkbox' name='responses' value='$record[1]]' /></td>
 | |
|       <td>$record[1]</td>
 | |
| TOS7;
 | |
|       echo "</tr>";
 | |
|   }
 | |
|     echo '</tbody></table></div>';
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| function displayCondResp()
 | |
| {
 | |
|     echo '<div id="condresp">';
 | |
| echo <<<JS00
 | |
|     <script type="text/javascript">
 | |
|     $(function() {
 | |
|         $("#nrtree-input").hide();
 | |
|         $("#showOpt4association").click(function() {
 | |
|             if($("#avail_cond").css("display") == "none") {
 | |
|                 $("#nrtree-input").show();
 | |
|                 $("#assobuttonsets").show();
 | |
|                 $("#avail_cond").show();
 | |
|                 $("#avail_resp").show();
 | |
|             }
 | |
|         });
 | |
|         $("#addAssociation").click(function() {
 | |
|             mkCondResp();
 | |
|         });
 | |
| 
 | |
|         $("#cancelAssociation").click(function() {
 | |
|             clearEventDisplay();
 | |
|         });
 | |
|     });
 | |
|     </script>
 | |
| JS00;
 | |
|     echo "<div style='display:block'>";
 | |
|     displayAssociation();
 | |
|     echo "</div>";
 | |
|     echo "<div id='showOpt4association' style='display:block; border:1px solid lime;' class='ui-state-active'>";
 | |
| echo <<<TOS00
 | |
| <span class="ui-icon ui-icon-triangle-1-e" style="position:absolute"></span>
 | |
| <p class='ui-state-active'>Click here if you want to create new associations...</p>
 | |
| TOS00;
 | |
|     echo "</div>";
 | |
|     echo "<div id=notify_me></div>";
 | |
|     echo "<div style='display:block'>";
 | |
|     displayOSITree();
 | |
|     echo "<div style='border: 1px dotted orange; float:right; width:73%'>";
 | |
| echo <<<BTN00
 | |
|     <div id="assobuttonsets" style="display:none">
 | |
|         <button id="addAssociation" class="fg-button ui-corner-all ui-state-active">Apply</button>
 | |
|         <button id="cancelAssociation" class="fg-button ui-corner-all ui-state-active">Cancel</button>
 | |
|     </div>
 | |
| BTN00;
 | |
|     echo "<div>";
 | |
|     displayCond();
 | |
|     displayResp();
 | |
|     echo "</div>";
 | |
|     echo "</div>";
 | |
|     echo "</div>";
 | |
|     echo '</div>';
 | |
| }
 | |
| 
 | |
| function displayRMCRsrc()
 | |
| {
 | |
| echo <<<TOS0
 | |
| <b>Available RMC Resources</b>
 | |
| <table id="tabTable" class="tabTable" cellspacing="1">
 | |
| <thead>
 | |
|     <tr class="colHeaders">
 | |
|     <td></td>
 | |
|     <td>Class Name</td>
 | |
|     </tr>
 | |
| </thead>
 | |
| <tbody>
 | |
| TOS0;
 | |
|     $xml = docmd("webrun", "", array("lsrsrc"));
 | |
|     if(getXmlErrors($xml,$errors)) {
 | |
|         echo "<p class=Error>",implode(' ', $errors), "</p>";
 | |
|         exit;
 | |
|     }
 | |
|     foreach($xml->children() as $response) foreach($response->children() as $data) {
 | |
|         //get all the class name
 | |
|         $classes = explode("=", $data);
 | |
|     }
 | |
|     $ooe = 0;
 | |
|     $line = 0;
 | |
|     foreach($classes as $class) {
 | |
|         $ooe = $ooe%2;
 | |
|         echo "<tr class='ListLine$ooe' id='row$line'>";
 | |
|         echo "<td><input type='radio' name='classGrp' value='$class' onclick='showRMCAttrib()' /> </td>";
 | |
|         echo "<td>$class</td>";
 | |
|         echo "</tr>";
 | |
|         $ooe++;
 | |
|         $line++;
 | |
|     }
 | |
| 
 | |
|     echo "</tbody></table>";
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| function displayRMCAttr()
 | |
| {
 | |
|     echo "<p>Select the RMC Resource, you will see all its available attributes here.</p>";
 | |
| }
 | |
| 
 | |
| 
 | |
| function RMCEventLogToTable()
 | |
| {
 | |
|     $xml = docmd("webrun", "", array("lsevent"));
 | |
| 
 | |
| 
 | |
|     //var_dump($xml);
 | |
|     foreach($xml->children() as $response) foreach($response->children() as $records)
 | |
|     {
 | |
|         //$data should be one array to store all the RMC event log.
 | |
|         echo "<tr>";
 | |
|         foreach($records->children() as $data) {
 | |
|             echo "<td>$data</td>";
 | |
|         }
 | |
|         echo "</tr>";
 | |
|     }
 | |
| }
 | |
| //displayRMCEventLog() to display the RMC event logs in one table with "tablesorter" class
 | |
| function displayRMCEvnetLog()
 | |
| {
 | |
| echo '<div id=lseventLog>';
 | |
| echo <<<TOS8
 | |
| <script type="text/javascript" type"utf-8">
 | |
| $("#lseventLog table").dataTable({
 | |
|     "bLengthChange": false,
 | |
|     "bFilter": false,
 | |
|     "bSort": true,
 | |
|     "iDisplayLength": 50
 | |
| });
 | |
| </script>
 | |
| TOS8;
 | |
| echo <<<TOS9
 | |
| <table style='width:100%'>
 | |
| <thead>
 | |
|     <tr>
 | |
|         <th>Category</th>
 | |
|         <th>Description</th>
 | |
|         <th>Time</th>
 | |
| </thead>
 | |
| <tbody>
 | |
| TOS9;
 | |
|     RMCEventLogToTable();
 | |
|     echo "</tbody></table>";
 | |
|     echo "</div>";
 | |
| 
 | |
| }
 | |
| 
 | |
| function displayRMCMonshowAttr($attr, $nr) {
 | |
|     //TODO: should add one argument to support the noderange argument
 | |
|     echo "<div>";
 | |
|     echo "<table class='tablesorter' cellspacing='1'>";
 | |
|     echo "<thead>";
 | |
|     echo "<tr>";
 | |
|     echo "<td>Time</td>";
 | |
|     echo "<td>$attr</td>";
 | |
|     echo "</tr>";
 | |
|     echo "</thead>";
 | |
|     echo "<tbody>";
 | |
| 
 | |
|     if($nr == "cluster") {
 | |
|         //get all the data by the command "monshow"
 | |
|         $xml = docmd("monshow", "", array("rmcmon", "-t", "60", "-a", "$attr"));
 | |
|         //the error handling is skipped
 | |
|     }elseif($nr == "summary") {
 | |
|         $xml = docmd("monshow", "", array("rmcmon", "-s", "-t", "60", "-a", "$attr"));
 | |
|     }else {
 | |
|         $xml = docmd("monshow", "", array("rmcmon", "$nr", "-t", "60", "-a", "$attr"));
 | |
|     }
 | |
|     //the formats of the data are different based on $nr
 | |
|     $index = 0;
 | |
|     foreach($xml->children() as $response) foreach($response->children() as $data) {
 | |
|         //handle the data here
 | |
|         //skip the first 2 lines
 | |
|         if($index++ < 2) {
 | |
|             continue;
 | |
|         }
 | |
|         //then, parse "date" & "value"
 | |
|         $arr = preg_split("/\s+/", $data);
 | |
|         array_pop($arr);
 | |
|         //print_r($arr);
 | |
|         $val = array_pop($arr);
 | |
|         $time = implode(" ", $arr);
 | |
|         echo "<tr>";
 | |
|         echo "<td>$time</td>";
 | |
|         echo "<td>$val</td>";
 | |
|         echo "</tr>";
 | |
|     }
 | |
|     echo "</tbody>";
 | |
|     echo "</table>";
 | |
|     echo "</div>";
 | |
| }
 | |
| 
 | |
| function displayRMCMonshowGraph($value, $nr) {
 | |
| //display the RMC Performance Data
 | |
| $place = $nr.$value;
 | |
| echo <<<TOS11
 | |
| <script type="text/javascript">
 | |
| rmc_monshow_draw_by_flot("$place","$value");
 | |
| </script>
 | |
| <div id="$place" style="width:100%;height:240px"></div>
 | |
| TOS11;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * function displayOptionsForPlugin($plugin)
 | |
|  * *****************************************
 | |
|  * when the user selects one plugin, the avaiable configuration options will display in <div id='monconfig'> 
 | |
|  * TODO: for the non-rmcmon plugins, only the option "node/application status monitoring setting" is shown;
 | |
|  * 
 | |
|  * the avaiable view options will also display in <div id='monview'>, 
 | |
|  * TODO: right now, it's only implemented for rmcmon plugin.
 | |
|  */
 | |
| function displayOptionsForPlugin($name)
 | |
| {
 | |
|     echo "<div id='monconfig'>";
 | |
|     echo "<p>Available Configurations for  <b>$name</b></p>";
 | |
| 
 | |
|     echo '<table id="tabTable" class="tabTable" cellspacing="1">';
 | |
|     echo "<tbody>";
 | |
| 
 | |
|     //set up the options for the plugin with the name "$name"
 | |
|     if($name == "rmcmon") {
 | |
|         //node status monitor, RMC events, RMC resources
 | |
|         echo "<tr class='ListLine0' id='row0'>";
 | |
|         echo "<td>Node/Application Status Monitoring Setting</td>";
 | |
|         echo "<td>";
 | |
|         insertButtons(array('label'=>'Configure', 'id'=>'rmc_nodestatmon', 'onclick'=>'loadMainPage("monitor/stat_mon.php?name=rmcmon")'));
 | |
|         echo "</td>";
 | |
|         echo "</tr>";
 | |
| 
 | |
|         echo "<tr class='ListLine1' id='row1'>";
 | |
|         echo "<td>RMC Events Monitoring Setting</td>";
 | |
|         echo "<td>";
 | |
|         insertButtons(array('label'=>'Configure', 'id'=>'rmc_event', 'onclick'=>'loadMainPage("monitor/rmc_event_define.php")'));
 | |
|         echo "</td>";
 | |
|         echo "</tr>";
 | |
| 
 | |
|         echo "<tr class='ListLine0' id='row2'>";
 | |
|         echo "<td>RMC Resource Monitoring Setting</td>";
 | |
|         echo "<td>";
 | |
|         insertButtons(array('label'=>'Configure', 'id'=>'rmc_resource', 'onclick'=>'loadMainPage("monitor/rmc_resource_define.php")'));
 | |
|         echo "</td>";
 | |
|         echo "</tr>";
 | |
| 
 | |
|     } else {
 | |
|         //there's only "node status monitoring" is enabled
 | |
|         echo "<tr class='ListLine0' id='row0'>";
 | |
|         echo "<td>Node/Application Status Monitoring Setting</td>";
 | |
|         echo "<td>";
 | |
|         insertButtons(array('label'=>'Configure', 'id'=>$name."_nodestatmon", 'onclick'=>"loadMainPage(\"monitor/stat_mon.php?name=$name\")"));
 | |
|         echo "</td>";
 | |
|         echo "</tr>";
 | |
|     }
 | |
| 
 | |
|     echo "</tbody></table>";
 | |
| 
 | |
|     echo "</div>";
 | |
| 
 | |
|     echo "<div id='monview'>";
 | |
|     echo "<p>View Options for <b>$name</b></p>";
 | |
|     //there should be many choices for the user to view the clusters' status
 | |
| echo <<<TOS1
 | |
| <table id="view_tab" class="tabTable" cellspacing="1">
 | |
| <tbody>
 | |
| TOS1;
 | |
|     if($name == "rmcmon") {
 | |
|         #display two rows, one for RMC event, another for RMC Resource Performance monitoring.
 | |
|         echo "<tr class='ListLine0' id='row0'>";
 | |
|         echo "<td>RMC Event Logs</td>";
 | |
|         echo "<td>";
 | |
|         insertButtons(array('label'=>'View in Text', 'id'=>'rmc_event_text', 'onclick'=>'loadMainPage("monitor/rmc_lsevent.php")'));
 | |
|         echo "</td>";
 | |
|         echo "</tr>";
 | |
|         echo "<tr class='ListLine1' id='row1'>";
 | |
|         echo "<td>RMC Resource Logs</td>";
 | |
|         echo "<td>";
 | |
|         insertButtons(array('label'=>'View By text/graphics', 'id'=>'rmc_resrc_text', 'onclick'=>'loadMainPage("monitor/rmc_monshow.php")'));
 | |
|         echo "</td>";
 | |
|         echo "</tr>";
 | |
|     }
 | |
|     else {
 | |
|         echo "<p>There's no view functions for $name.</p>";
 | |
|     }
 | |
| 
 | |
|     echo "</tbody></table></div>";
 | |
| }
 | |
| 
 | |
| /*displayMList() will display the list of monitor plugins
 | |
|  * For the new style monitor list
 | |
|  */
 | |
| function displayMList()
 | |
| {
 | |
|     $xml = docmd("monls", "", array('-a'));
 | |
|     if(getXmlErrors($xml, $errors)) {
 | |
|         echo "<p class=Error>", implode(' ', $errors), "</p>";
 | |
|         exit;
 | |
|     }
 | |
| 
 | |
|     foreach($xml->children() as $response) foreach ($response->children() as $data) {
 | |
|         list($name, $stat, $nodemon) = preg_split("/\s+/", $data);
 | |
|         //create .pluginstat class for each plugin
 | |
|         echo "<div class='pluginstat ui-corner-all' id=$name>";
 | |
|         //TODO: I have to make it beautiful
 | |
|         createPluginStatElem($name, $stat, $nodemon);
 | |
|         echo "</div>";
 | |
|         echo "<span class='ui-icon ui-icon-grip-dotted-horizontal'></span>";
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| function createPluginStatElem($name, $stat, $nodemon)
 | |
| {
 | |
|     if($nodemon) {
 | |
|         echo "<div class='lef'><span class='ui-icon ui-icon-circle-check'></span></div>";
 | |
|         echo "<div class='mid'>$name<br/>Enabled</div>";
 | |
|     }else {
 | |
|         echo "<div class='lef'><span class='ui-icon ui-icon-circle-close'></span></div>";
 | |
|         echo "<div class='mid ftsz'>$name<br />Disabled</div>";
 | |
|     }
 | |
|    echo "<div class='rig'></div>";
 | |
| 
 | |
| }
 | |
| 
 | |
| ?>
 |