the code for "lsevent" and "monshow" are committed;

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@4088 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
mxi1 2009-09-03 04:44:56 +00:00
parent 298ac895e0
commit a6d273efcc
10 changed files with 471 additions and 7 deletions

View File

@ -328,6 +328,41 @@ padding:10px 2px;
/*display: none;*/
}
#rmc_tree {
float: left;
width: auto;
min-height: 255px;
border-right: 1px dotted #555;
min-width: 130px;
/*display: none;*/
}
#rmc_monshow {
float: left;
width: 701px; /*need update*/
margin: 10px;
padding: 10px;
display: block;
}
#mon_keys {
float: left;
width: 100%;
display: block;
}
#monshow_opt {
float: left;
width: 100%;
display: block;
}
#monshow_data {
float: left;
width: 100%;
display: block;
}
#tips {
margin-right: 10px;
margin-left: 10px;
@ -422,11 +457,20 @@ padding:10px 2px;
#options {
width: 880px;
margin: 5px;
padding: 5px;
margin: 10px;
padding: 10px;
}
#monconfig {
width: 48%;
float: left;
}
#monview {
width: 48%;
float: right;
}
#plugin_desc {
width: 880px;
margin: 5px;

View File

@ -328,7 +328,8 @@ function changeProf(){
// debug this. If you do, please make this code easier to read.
}
//added for display the tree for
//added for display the tree
// TODO: there're still issues here.
function init_ositree(){
//display all the nodes with OSI type
nrtree = new tree_component(); //-tree begin
@ -343,6 +344,45 @@ function init_ositree(){
});
}
//function updatermcnr()
//{
// myselection = nrtree.selected_arr;
//
// for (node in myselection) {
// $("#rmc_monshow").html($("#rmc_monshow").html()+node);
// }
//
//}
//update the osi tree used in
function init_rmc_ositree() {
nrtree = new tree_component(); //-tree begin
nrtree.init($("#rmc_tree"),{
rules: { multiple: "Ctrl" },
ui: { animation: 250 },
callback: {
onchange: function(n) {
if(n.id) {
if($(n).parent().parent().attr("id") == ",lpar") {
//parse the id, then display the "monshow" data for selected noderange
$.get("monitor/rmc_monshow_attr_source.php", {id: n.id}, function(data) {
//display the "monshow" result
$("#monshow_opt").html(data);
});
}
}
}
},
//http://jstree.com/reference/_examples/3_callbacks.html
//onchange is used to
data : {
type: "json",
async: "true",
url: "monitor/rmc_source.php"
}
});
}
//node_stat_control() can enable/disable nodestatmon for the selected plugin
function node_stat_control(plugin)
{
@ -467,7 +507,22 @@ function monsetupAction(plugin, action_val)
});
}
function show_monshow_data() {
//used for the OK button in the web page "rmc_monshow.php";
$("#monshow_opt").hide("slow");
$(":input[@checked]").each(function(i) {
$.get("monitor/rmc_monshow_data_source.php", {value: $(this).attr("value")}, function(data) {
$("#monshow_data").append(data);
});
});
}
function rmc_monshow_back_to_opts() {
//clear the <div id='monshow_data'>
//and, display <div id='monshow_opts'>
$("#monshow_data").empty();
$("#monshow_opt").show("slow");
}
// load progress bar
myBar.loaded('xcat.js');

View File

@ -134,7 +134,7 @@ TOS2;
echo '<tr class="ListLine1">';
echo '<td>Application Status Monitoring</td>';
echo '<td>';
insertbuttons(array('label'=>$as_tobe, 'id'=>'app_stat', 'onclick'=>''));
insertButtons(array('label'=>$as_tobe, 'id'=>'app_stat', 'onclick'=>'show_monshow_data()'));
echo '</td>';
echo '</tr>';
echo '</tbody> </table> </div>';
@ -393,4 +393,89 @@ 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", "10", "-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 3 lines
if($index++ < 3) {
continue;
}
echo "<tr>";
$elements = explode(" ", $data);
echo "<td>";
$i = 0;
while($i < 7) {
echo $elements[$i],"\t";
$i++;
}
echo "</td>";
echo "<td>$elements[7]</td>";
//var_dump($elements);
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
echo "</div>";
}
?>

View File

@ -4,7 +4,6 @@ if(!isset($TOPDIR)) { $TOPDIR="..";}
require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/display.php";
require_once "$TOPDIR/lib/monitor_display.php";
?>
<?php
@ -20,5 +19,4 @@ insertDiv("plugin_desc");
insertDiv("options");
insetDiv("view"); //display options to the users for viewing event log & performance in text/graphics format
?>

View File

@ -9,6 +9,7 @@ require_once "$TOPDIR/lib/monitor_display.php";
$name = $_REQUEST['name'];
echo "<div id='monconfig'>";
echo "<p>Available Configurations for <b>$name</b></p>";
echo '<table id="tabTable" class="tabTable" cellspacing="1">';
@ -49,4 +50,41 @@ if($name == "rmcmon") {
}
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>";
?>

View File

@ -17,9 +17,14 @@ $name = $_REQUEST['name'];
displayMapper(array('home'=>'main.php', 'monitor' =>''));
displayTips(array(""));
displayTips(array("View all RMC events here","TODO"));
//Following the "Syslog Entries" web page
echo '<div class="mContent">';
displayRMCEvnetLog();
echo '</div>';
displayStatus();
insertButtons(array('label' => 'Next', 'id'=> 'next', 'onclick'=>''));

View File

@ -0,0 +1,31 @@
<?php
/*
* use the xCAT command "monshow" to display the current status for RMC Resources being monitored
*/
if(!isset($TOPDIR)) { $TOPDIR="..";}
require_once "$TOPDIR/lib/security.php";
require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/display.php";
require_once "$TOPDIR/lib/monitor_display.php";
displayMapper(array('home'=>'main.php', 'monitor' =>''));
displayTips(array("Select the domain: the whole cluser or the compute nodes under \"<b>lpar</b>\",","then select the desired attributes. click the \"OK\" button"));
insertDiv("rmc_tree");
?>
<script type="text/javascript">
$(init_rmc_ositree());
</script>
<?php
echo "<div id='rmc_monshow'>";
echo "<div id='monshow_opt'></div>";
echo "<div id='monshow_data'></div>";
echo "</div>";
?>

View File

@ -0,0 +1,136 @@
<?php
if(!isset($TOPDIR)) { $TOPDIR="..";}
require_once "$TOPDIR/lib/security.php";
require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/display.php";
require_once "$TOPDIR/lib/monitor_display.php";
//$id is the sel
$id = $_REQUEST['id'];
$id = preg_replace('/^,/', '', $id);
//TODO: now it only supports one single node
//check whether the node is "osi" type or not
//using the command = webrun "lsdef -t node $id -i nodetype"
$xml = docmd("webrun", "", array("lsdef $id -i nodetype"));
//no error message will be returned
foreach($xml->children() as $response) foreach($response->children() as $data) {
}
if(false !== strpos($data, "lpar")) {
//display the options for the "monshow" command
show_monshow_options();
}
function show_monshow_options()
{
echo <<<TOS0
<b>Choose the attributes to display</b>
TOS0;
show_rmc_monsetting();
echo "<div>";
//click the "OK" button, "monshow" data for the selected attributes will display
insertButtons(array('label'=>'OK', 'id'=>'monshow_ok_btn', 'onclick'=>'show_monshow_data()'));
echo "</div>";
echo "</div>";
}
function show_rmc_monsetting()
{
echo "<div id='mon_keys'>";
echo "<table class='tabTable' cellspacing='1'>";
echo <<<TOS1
<thead>
<tr class="colHeaders">
<td>name</td>
<td>key</td>
<td>value</td>
<td>comments</td>
</tr>
</thead>
<tbody>
TOS1;
$xml = docmd("tabdump", "", array("monsetting"));
$ooe = 0;
$line = 0;
foreach($xml->children() as $response) foreach($response->children() as $data)
{
#the var #data is one string like this:
#"rmcmon","rmetrics_IBM.Host","PctTotalTimeIdle:1",,
#to use "," as the splitter is wrong.
#list($name, $key, $value,$comments, $disable) = preg_split('/,/',$data);
if($data[0] == '#') {
continue;
}else {
#parse the data
$substr = strstr($data, "\","); #remove the $name, it is "rmcmon" now.
$substr = substr($substr, 2);
$index = strpos($substr, ',');
$key = substr($substr, 1, $index-2);
if(preg_match('/^rmetrics_/', $key) == 0) {
continue;
}
$substr = substr($substr, $index+2);
$index = strpos($substr, '"');
$value = substr($substr, 0, $index);
$substr = substr($substr, $index+2);
#the left string contains {$comments,$disable};
$index = strpos($substr, ',');
if($index == 0) {
#it means the $comments is empty
$comments = '';
} else {
$comments = substr($substr, 1, $index -2);
}
$substr = substr($substr, $index+1);
#the left string contains {$disable};
if(strlen($substr)) {
#not empty
$index = strpos($substr, '"', 1);
$disable = substr($substr, 1, $index-1);
#the RMC key is disabled, so it's skipped
continue;
} else {
$disable = '';
}
#the left lines are the contents of "monsetting"
$ooe %= 2;
echo "<tr class='ListLine$ooe' id='row$line'>";
echo "<td>rmcmon</td>";
echo "<td>",substr($key, 9),"</td>";
#parset the var $value, the format looks like this:
# RecByteRate,$ecPacketRate:1
#all the attributes are separated by comma,
#the integer after ":" is the time interval
$arr = explode(":",$value);
$attrs = explode(",", $arr[0]);
// echo "<td>$arr[0]</td>";
echo "<td><form>";
foreach ($attrs as $attr) {
if($attr) {
echo "<input type='checkbox' name='attr_$key' value='$attr' />$attr<br/>";
}
}
echo"</form></td>";
echo "<td>$comments</td>";
echo "</tr>";
$line++;
$ooe ++;
}
}
echo "</tbody></table>";
}
?>

View File

@ -0,0 +1,19 @@
<?php
if(!isset($TOPDIR)) { $TOPDIR="..";}
require_once "$TOPDIR/lib/security.php";
require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/display.php";
require_once "$TOPDIR/lib/monitor_display.php";
$value = $_REQUEST['value'];
echo "<div>";
insertButtons(array('label'=>'Back', 'id'=>'back_btn', 'onclick'=>'rmc_monshow_back_to_opts()'));
echo "</div>";
displayRMCMonshowAttr($value);
?>

View File

@ -0,0 +1,53 @@
<?php
// Gets the nodes and groups for group/node js widget
if(!isset($TOPDIR)) { $TOPDIR="..";}
require_once "$TOPDIR/lib/security.php";
require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/display.php";
require_once "$TOPDIR/lib/monitor_display.php";
require_once "$TOPDIR/js/jsonwrapper.php";
if (isset($_GET['id'])) {
$id = $_GET['id'];
}
if ($id == "0") {
$id = '/.*';
} else {
$id=preg_replace('/^,/','',$id);
}
$rvals=docmd('extnoderange',$id,array('subgroups'));
$parents=array();
$root=1;
if ($id == '/.*') {
$id=',';
} else {
$parents=split("@",$id);
$id=",$id@";
$root=0;
}
//unset($rvals->xcatresponse->serverdone[0]);
$numsubgroups=count($rvals->xcatresponse->intersectinggroups);
$numnodes=count($rvals->xcatresponse->node);
$jdata=array();
if ($numnodes >= $numsubgroups) { #If there are few enough subgroups to be helpful filters, add them in
foreach ($rvals->xcatresponse->intersectinggroups as $group) {
if (! in_array("$group",$parents)) {
$jdata[]= array("data"=>"$group",
"attributes"=>array("id"=>"$id$group",
"rel"=>'group'),
"state"=>'closed');
}
}
} #If there were more groups than nodes, leave the signal to noise ratio down
if ($root==0) {
foreach ($rvals->xcatresponse->node as $node) {
$jdata[] = array("data"=>"$node",
"attributes"=>array("id"=>",$node",
"rel"=>'node'));
}
}
# header('Content-type: text/html');
echo json_encode($jdata);
?>