<?php /* * All the <html> code related with monitor interface is put here. */ #displayMonitorLists() will generate all the monitoring plug-ins, #the user can select the plug-ins he wants to operate on, #and press the "Next" button; function displayMonitorLists() { #The command "monls -a" is used to get the monitoring plug-ins list $xml = docmd("monls"," ", array('-a')); if(getXmlErrors($xml,$errors)) { echo "<p class=Error>",implode(' ', $errors), "</p>"; exit; } #then, parse the xml data $ooe = 0; $line = 0; foreach($xml->children() as $response) foreach($response->children() as $data) { list($name, $stat, $nodemonstatus) = preg_split("/\s+/", $data); $ooe = $ooe%2; echo "<tr class='ListLine$ooe' id='row$line'>"; echo "<td><input type='radio' name='plugins' value='$name' /></td>"; echo "<td ><a class='description' href='#'>$name</a></td>"; echo "<td >$stat</td>"; if(isset($nodemonstatus)) { echo "<td >Enabled</td>";}else {echo "<td >Disabled</td>";} echo "<td>"; $name_str = "\"$name\""; if($stat == "monitored") { $act_str = "\"stop\""; insertButtons(array('label'=>'Stop', 'id'=>'stop', 'onclick'=>"monsetupAction($name_str, $act_str)")); $act_str = "\"restart\""; insertButtons(array('label'=>'Restart', 'id'=>'restart', 'onclick'=>"monsetupAction($name_str, $act_str)")); }else { $act_str = "\"start\""; insertButtons(array('label' => 'Start', 'id'=>'start', 'onclick' => "monsetupAction($name_str, $act_str)")); } echo "</td>"; echo " </tr>"; $ooe++; $line++; //echo "<tr><td><input type='checkbox' />$name</td><td>$stat</td><td><a onclick='LoadMainPage("main.php")'>$name</a></td></tr>"; } return 0; } 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></td> <td>Plug-in Name</td> <td>Status</td> <td>Node Status Monitoring</td> <td>Action</td> </tr> </thead> TOS1; echo <<<TOS9 <script type="text/javascript"> showPluginOptions(); showPluginDescription(); </script> TOS9; echo '<tbody id="monlist">'; displayMonitorLists(); echo "</tbody></table></div>"; return 0; } function display_stat_mon_table($args) { //create one table to disable or enable node/application monitoring //the argument $args are one array like this: //{ 'xcatmon' => { // 'nodestat' => 'Enabled', // 'appstat' => 'Disabled', // }, //}; // echo '<div style="margin-right: 50px; width:auto; margin-left: 50px">'; foreach($args as $key => $value) { $name = $key; if($value{'nodestat'} == 'Enabled') { $ns_tobe = 'Disable'; } else { $ns_tobe = 'Enable'; } if($value{'appstat'} == 'Enabled') { $as_tobe = 'Disable'; } else { $as_tobe = 'Enable'; } } echo "<h3>Node/Application Status Monitoring for $name</h3>"; echo <<<TOS2 <table cellspacing="1" class="tabTable" id="tabTable"><tbody> <tr class="ListLine0"> <td>Node Status Monitoring</td> <td> TOS2; insertButtons(array('label'=>$ns_tobe, 'id'=>'node_stat', 'onclick'=>"node_stat_control(\"$name\")")); //TODO: change the function name of node_stat_control echo '</td>'; echo '</tr>'; echo '<tr class="ListLine1">'; echo '<td>Application Status Monitoring</td>'; echo '<td>'; insertButtons(array('label'=>$as_tobe, 'id'=>'app_stat', 'onclick'=>'show_monshow_data()')); echo '</td>'; echo '</tr>'; echo '</tbody> </table> </div>'; } 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 displayNrTree(); //it doesn't work on firefox!!! echo <<<EOS3 <script type="text/javascript"> $(init_ositree()); </script> <div id=ositree></div> EOS3; } function displayAssociation() { echo '<div id="association">'; echo <<<TOS5 <b>Available Condition/Response Associations</b> <table id="tabTable" class="tabTable" cellspacing="1"> <thead> <tr class="colHeaders"> <td>Condition</td> <td>Response</td> <td>Node</td> <td>State</td> <td>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 $association = explode("=", $data); $ooe = 0; $line = 0; foreach($association as $elem) { $ooe = $ooe%2; //the format should be //"NodeReachability"\t"EmailRootOffShift"\t"hv8plus01.ppd.pok.ibm.com"\t"Active" $record = explode("\"", $elem); $cond = $record[1]; $resp = $record[3]; $node = $record[5]; $state = $record[7]; echo "<tr class='ListLine$ooe' id='row$line'>"; echo "<td>$cond</td>"; echo "<td>$resp</td>"; echo "<td>$node</td>"; echo "<td>$state</td>"; echo "<td>"; if($state == "Active") { insertButtons(array('label'=>'DeActivate', 'id'=>'deactivate', 'onclick'=>"control_RMCAssoc(\"$cond\", \"$node\", \"$resp\", \"stop\")")); }else if($state == "Not active"){ insertButtons(array('label'=>'Activate', 'id'=>'activate', 'onclick'=>"control_RMCAssoc(\"$cond\", \"$node\", \"$resp\", \"start\")")); } echo "</td>"; echo "</tr>"; $ooe++; $line++; } } echo "</tbody></table></div>"; return 0; } function displayCond() { //the user selects one node/noderange from the #ositree div echo <<<COND <div id="avail_cond"> <b>Available Conditions</b> <table id="tabTable" class="tabTable" cellspacing="1"> <thead> <tr class="colHeaders"> <td></td> <td>Conditions</td> </tr> </thead> <tbody> COND; $xml = docmd("webrun", '', array("lscondition")); foreach($xml->children() as $response) foreach($response->children() as $data) { //get the data from xcatd $conditions = explode("=", $data); } $ooe = 0; $line = 0; foreach($conditions as $elem) { $ooe = $ooe%2; echo "<tr class='ListLine$ooe' id='row$line'>"; echo "<td><input type=\"radio\" name=\"conditions\" value=\"$elem\" /></td>"; echo "<td>$elem</td>"; echo "</tr>"; $ooe++; $line++; } echo "</tbody></table></div>"; return 0; } function displayResp() { echo <<<RESP <div id="avail_resp"> <b>Available Response</b> <table id="tabTable" class="tabTable" cellspacing="1"> <thead> <tr class="colHeaders"> <td></td> <td>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) { $responses = explode("=", $data); } foreach($responses as $elem) { $ooe = $ooe%2; echo "<tr class='ListLine$ooe' id='row$line'>"; echo "<td><input type='checkbox' name='responses' value='$elem' /></td>"; echo "<td>$elem</td>"; echo "</tr>"; $ooe++; $line++; } echo '</tbody></table></div>'; return 0; } function displayCondResp() { echo '<div id="condresp">'; displayAssociation(); displayCond(); displayResp(); insertButtons(array('label'=>'Add', id=>'addAssociation', 'onclick'=>'mkCondResp()')); insertButtons(array('label'=>'Cancel', id=>'cancel_op', 'onclick'=>'clearEventDisplay()')); echo '</div>'; displayStatus(); } function displayMonsetting() //TODO: copied from the function displayTable() from display.php, need update { echo "<div class='mContent'>"; echo "<h1>$tab</h1>\n"; insertButtons(array('label' => 'Save','id' => 'saveit'), array('label' => 'Cancel', 'id' => 'reset') ); $xml = docmd('tabdump', '', array("monsetting")); $headers = getTabHeaders($xml); if(!is_array($headers)){ die("<p>Can't find header line in $tab</p>"); } echo "<table id='tabTable' class='tabTable' cellspacing='1'>\n"; #echo "<table class='tablesorter' cellspacing='1'>\n"; echo "<thead>"; echo "<tr class='colHeaders'><td></td>\n"; # extra cell for the red x #echo "<tr><td></td>\n"; # extra cell for the red x foreach($headers as $colHead) {echo "<td>$colHead</td>"; } echo "</tr>\n"; # close header row echo "</thead><tbody>"; $tableWidth = count($headers); $ooe = 0; $item = 0; $line = 0; $editable = array(); foreach($xml->children() as $response) foreach($response->children() as $arr){ $arr = (string) $arr; if(ereg("^#", $arr)){ $editable[$line++][$item] = $arr; continue; } $cl = "ListLine$ooe"; $values = splitTableFields($arr); # X row echo "<tr class=$cl id=row$line><td class=Xcell><a class=Xlink title='Delete row'><img class=Ximg src=img/red-x2-light.gif></a></td>"; foreach($values as $v){ echo "<td class=editme id='$line-$item'>$v</td>"; $editable[$line][$item++] = $v; } echo "</tr>\n"; $line++; $item = 0; $ooe = 1 - $ooe; } echo "</tbody></table>\n"; $_SESSION["editable-$tab"] = & $editable; # save the array so we can access it in the next call of this file or change.php echo "<p>"; insertButtons(array('label' => 'Add Row', 'id' => 'newrow')); echo "</p>\n"; } 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 <<<TOS9 <table class="tablesorter" cellspacing="1"> <thead> <tr> <th>Time</th> <th>Category</th> <th>Message</th> </thead> <tbody> TOS9; RMCEventLogToTable(); echo "</tbody></table>"; //TODO: the following javascript doesn't work well. echo <<<TOS8 <script type="text/javascript" type"utf-8"> $("table").tablesorter({ sortList: [[0,1],[1,1]] }); </script> TOS8; echo "</div>"; } function displayRMCMonshowAttr($attr) { //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>"; //get all the data by the command "monshow" $xml = docmd("monshow", "", array("rmcmon", "-s", "-t", "60", "-a", "$attr")); //the error handling is skipped $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); $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) { //display the RMC Performance Data echo <<<TOS11 <div> <script type="text/javascript"> rmc_monshow_draw_by_flot("$value"); </script> <p><b>The Graph View for RMC Resource</b></p> <div id='placeholder' style='width:600px;height:300px'> </div> </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"> <thead> <tr class='colHeaders'> <td>Monitor Items</td> <td>Display Formats</td> </tr> </thead> <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 in Text', 'id'=>'rmc_resrc_text', 'onclick'=>'loadMainPage("monitor/rmc_monshow.php")')); insertButtons(array('label'=>'View in Graphics', 'id'=>'rmc_resrc_graph', 'onclick'=>'')); echo "</td>"; echo "</tr>"; } else { echo "<p>There's no view functions for $name.</p>"; } echo "</tbody></table></div>"; } /* * function displayNodeAppStatus($name) * ************************************ * to display the web page "Node/Application Status Monitoring" * */ function displayNodeAppStatus($name) { displayMapper(array('home'=>'main.php', 'monitor'=>'')); displayTips(array( "Enable/disable Node/App Status Monitoring by clicking the button", "In order to take affect, you have to START/RESTART the desired plugin")); //get the current status for "node-status-monitor" $xml = docmd("monls", ' ', array($name)); if(getXmlErrors($xml,$errors)) { echo "<p class=Error>",implode(' ',$errors), "</p>"; exit; } #then, parse the xml data foreach($xml->children() as $response) foreach($response->children() as $data) { list($n, $stat, $nodemonstatus) = preg_split("/\s+/",$data); if(isset($nodemonstatus)) { $ns = "Enabled"; }else { $ns = "Disabled"; } } display_stat_mon_table(array("$name"=> array( 'nodestat'=>$ns, 'appstat'=>'Disabled', //currently application status monitoring is not supported by xCAT monitor Arch. ))); } ?>