-The cluster summary page is created.

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@4944 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
mxi1 2010-01-13 05:14:00 +00:00
parent 0cb7ef99f2
commit ae82f4c4f3
9 changed files with 616 additions and 21 deletions

View File

@ -332,8 +332,7 @@ padding:10px 2px;
#rmc_tree {
float: left;
width: auto;
min-height: 255px;
width: 21%;
border-right: 1px dotted #555;
min-width: 130px;
/*display: none;*/
@ -341,9 +340,9 @@ padding:10px 2px;
#rmc_monshow {
float: left;
width: 701px; /*need update*/
margin: 10px;
padding: 10px;
width: 78%; /*need update*/
margin: 0px;
padding: 0px;
display: block;
}
@ -406,3 +405,116 @@ padding:10px 2px;
float: right;
}
/*
* @the following definitions are used for cluster summary page
*/
h5 {
font-family: "Trebuchet MS", Verdana, Helvetica, Arial,sans-serif !important;
margin: 0;
padding: 0;
letter-spacing: 0;
border-bottom: 0 !important;
}
a {
text-decoration:none;
color: #5DB0E6;
}
a:focus {
outline: 1px dotted #eee;
}
a:active {
outline: 0px;
}
a:hover {
color: #7bc4f4;
}
#clusternav {
float: right;
display: inline;
width: 164px;
background: #fafafa;
border: 1px solid #ccc;
padding: 5px 15px 15px;
min-height: 500px;
-moz-border-radius: .5em; /* gecko */
-webkit-border-radius: .5em; /*webkit*/
border-radius: .5em; /* w3 */
color: #000;
}
#clusternav h5 {
background: #ddd;
margin: 4px 0px 0px 24px;
outline-color: #192839;
padding: 3px 10px;
font-size: 12px;
text-align: left;
}
#clusternav ul li {
list-style-type: none;
text-align: left;
border-bottom: 1px solid #999999;
margin-bottom: 5px;
}
#clusterprimary {
position: relative;
float: left;
display: inline;
width: 732px;
background: #fafafa;
border: 1px solid #aaa;
padding: 5px 15px 15px;
color: #222;
min-height: 500px;
-moz-border-radius: .5em; /* gecko */
-webkit-border-radius: .5em; /* webkit */
border-radius: .5em; /* w3 */
overflow: visible;
}
.cluster_subinfo {
border-bottom: 1px solid #fafafa;
text-align: left;
}
.cluster_subinfo h5 {
background: #ddd;
margin: 4px 0px 0px 24px;
outline-color: #192839;
padding: 3px 10px;
font-size: 12px;
text-align: left;
}
.stat_table {
border-bottom: 1px solid #fafafa;
font-size: .8em;
}
.spacer {
clear: both;
height: 20px;
display: block;
}
#mgmt_network, #rpowerstat_num, #monplugin_list, #rpmtable {
border: 1px solid #AAA;
background-color: #f9f9f9;
clear: right;
color: black;
margin: 0.5em 0em 0.5em 1em;
padding: 0.2em;
}
#rpmtable tr:odd {
background-color: #CCCCCC;
}
#general table {
margin-left: 30px;
}

View File

@ -142,7 +142,7 @@ fieldset {
padding: 5px;
float:left;
display: block;
width: 94%;
width: 95%;
border: 1px solid gray;
}

View File

@ -334,8 +334,8 @@ function init_ositree(){
//display all the nodes with OSI type
nrtree = new tree_component(); //-tree begin
nrtree.init($("#ositree"),{
rules: { multiple: "Ctrl" },
ui: { animation: 250 },
rules: {multiple: "Ctrl"},
ui: {animation: 250},
data : {
type: "json",
async: "true",
@ -358,8 +358,8 @@ function init_ositree(){
function init_rmc_ositree() {
nrtree = new tree_component(); //-tree begin
nrtree.init($("#rmc_tree"),{
rules: { multiple: "Ctrl" },
ui: { animation: 250 },
rules: {multiple: "Ctrl"},
ui: {animation: 250},
callback: {
onchange: function(n) {
$("#monshow_tip_1").hide();
@ -482,5 +482,21 @@ function loadLLCfgEditor()
window.document.location="../ll/llconfig_editor.pl";
}
/*
* loadNodeStatus()
* will show the power status of all nodes in the cluster
* with the help of "rpower all stat"
* It's used in PHP function showNodeStat().
*/
function loadNodeStatus()
{
$.get("rpowerstat.php", {type: "table"}, function(data) {
$("#p_stat_table").html("<div id=stat_table></div>");
$("#stat_table").html(data);
$("#stat_table").dataTable({"bJQueryUI": true, "iDisplayLength": 50});
$("#p_stat_table").show();
});
}
// load progress bar
myBar.loaded('xcat.js');

View File

@ -74,6 +74,9 @@ echo <<<EOS2
<div id=header>
<ul class="sf-menu" id='sf-menu'>
<li>
<img src="img/logo.gif" height=100% onclick='loadMainPage("index.php")'/>
</li>
<li>
<a href="control.php">control</a>
<ul>
@ -119,6 +122,13 @@ echo <<<EOS4
</li>
</ul>
</li>
<li>
<a href="help.php">Help</a>
<ul>
<li><a href="#">Update</a></li>
<li><a href="summary.php">Summary</a></li>
</ul>
</li>
</ul>
<!-- <div id="cmdForm">
<form action="command.php" method="post" id="runcmd">
@ -466,7 +476,8 @@ $(document).ready(function() {
$("#tableForCtrl").dataTable({
"bLengthChange": true,
"bFilter": true,
"bSort": true
"bSort": true,
"iDisplayLength": 50
});
});
</script>
@ -695,4 +706,282 @@ function displayProvisionOps($nr){
EOF;
}
function getHostName() {
if($_SERVER['SERVER_SOFTWARE'] == 'IBM_HTTP_Server') {
return exec("hostname");
}else {
return exec("hostname --long");
}
}
function getCPUInfo() {
#check the var $_SERVER['SERVER_SOFTWARE'] to determine the server's os type
#if its value is "IBM_HTTP_Server", the server will be treated as AIX
if($_SERVER['SERVER_SOFTWARE'] == 'IBM_HTTP_Server') {
return exec("lscfg -vp |wc -l");#on AIX, the command can show processor count
}else {
return exec("cat /proc/cpuinfo |grep -i processor |wc -l");
}
}
function getMemInfo() {
if($_SERVER['SERVER_SOFTWARE'] == 'IBM_HTTP_Server') {#AIX
$str = exec("lsattr -El sys0 |grep realmem");
$arr = preg_split('/\s+/', $str);
return $arr[1];
}else {
$str = exec("cat /proc/meminfo |grep MemTotal");
$arr = preg_split('/[:\s]+/', $str);
return $arr[1];
}
}
function getNetworksInfo() {
#the command is "lsdef -t network -i net,mask,mgtifname" in the sever end;
#display the net, mask and mgtifname in one small table
echo "<table id=mgmt_network cellspacing=5 >";
echo "<thead>";
echo "<tr><th>Network</th><th>Netmask</th><th>MgtIfName</th></tr>";
echo "</thead>";
echo "<tbody>";
$xml = docmd("tabdump", "", array("networks"));
foreach($xml->children() as $response) foreach($response->children() as $data) {
if(strstr($data[0], '#') != FALSE) { continue; }
else {
#print_r($data);
$arr = split(",", $data);
echo "<tr>";
echo "<td>".$arr[1]."</td>";
echo "<td>".$arr[2]."</td>";
echo "<td>".$arr[3]."</td>";
echo "</tr>";
}
}
echo "</tbody>";
echo "</table>";
}
function summary_general() {
$hostname = getHostName();
$cpus = getCPUInfo();
$mem = getMemInfo();
#TODO
echo <<<INFO0
<table>
<tbody>
<tr>
<td bgcolor="#cccccc">Hostname</td>
<td>$hostname</td>
</tr>
<tr>
<td bgcolor="#cccccc">Processors</td>
<td>$cpus</td>
</tr>
<tr>
<td bgcolor="#cccccc">Memory</td>
<td>$mem KB</td>
</tr>
<tr>
<td bgcolor="#cccccc">Networks</td>
<td>
INFO0;
getNetworksInfo();
echo <<<INFO1
</td>
</tr>
</tbody>
</table>
INFO1;
}
/*
* showNodeStat()
* will show the number of nodes in the cluster
* and also show their status
*/
function showNodeStat() {
$xml=docmd("rpower", "all", array("stat"));
$stat_arr = array();
foreach($xml->children() as $response){
#parse the xml tree
#print_r($response);
if($response->errorcode == 0) {
#echo $response->node->name, $response->node->data->contents;
$key = $response->node->name;
$stat_arr["$key"] = $response->node->data->contents;
}
}
echo "<div>";
echo "<div style='width:40%; margin-left:64px'>";
echo "<table id=rpowerstat_num>";
$stat_num = array("Operating" => 0, "Running" => 0, "Not Activated" => 0, "Open Firmware" => 0);
foreach ($stat_arr as $k => $v) {
$stat_num["$v"] ++;
}
echo "<tr><td>Operating</td><td>", $stat_num["Operating"], "</td></tr>";
echo "<tr><td>Running</td><td>",$stat_num["Running"],"</td></tr>";
echo "<tr><td>Not Activated</td><td>",$stat_num["Not Activated"],"</td></tr>";
echo "<tr><td>Open Firmware</td><td>",$stat_num["Open Firmware"],"</td></tr>";
echo "</table>";
#add two buttons here: show/hide the detailed status in stat_table <table>
#TODO: move them to the proper positions
echo "<div class='fg-buttonset fg-buttonset-single' style='margin-left:30px'>";
echo "<button id='show' class='fg-button ui-state-default ui-state-active ui-priority-primary ui-corner-left'>Show</button>";
echo "<button id='hide' class='fg-button ui-state-default ui-corner-right'>Hide</button>";
echo "</div>";
echo "</div>";
echo <<<GRAPH0
<script type="text/javascript">
$(function() {
$("#show").click(function() {
if($(this).is(".ui-state-active")) {
loadNodeStatus();
$(this).removeClass("ui-state-active");
$("#hide").addClass("ui-state-active");
}
});
$("#hide").click(function() {
if($(this).is(".ui-state-active")) {
$("#p_stat_table").hide();
$(this).removeClass("ui-state-active");
$("#show").addClass("ui-state-active");
}
});
});
/*
var data=[
{label: "Operating", data: 3 },
{label: "Running", data: 4 },
{label: "Not Activated", data: 12 },
{label: "Open Firmware", data: 1 }
];
*/
var options = {
series: {
pie: {
show: true
}
}
};
$.ajax({
url: "rpowerstat.php",
type: 'POST',
data: "type=json",
dataType: 'json',
success: function(data) {
$.plot($("#chart0"), data, options);
}
});
/*
"rpowerstat.php", {type:"json"}, function(data) {
$.plot($("#chart0"), data, options);
});
*/
</script>
<div id='chart0' style="width:65%;height:256px;float: right">
</div>
GRAPH0;
echo "</div>";
echo "<div id='p_stat_table' style='border: 1px solid #AAA; width: 95%; float: right'>";
echo "<div id='stat_table'></div>";
echo "</div>";
echo "<div class='spacer'></div>";
}
/* showMonSum()
* will show the summary information of monitor plugins.
*
*/
function showMonSum() {
$xml = docmd("monls", "", array("-a"));
echo "<div> ";
#print_r($xml);
echo "<table id='monplugin_list' style='margin-left: 30px'>";
echo "<thead><tr><th>Plugins</th><th>Status</th><th>NodeStatSupport</th><th></th></tr></thead>";
echo "<tbody>";
foreach($xml->children() as $response) foreach($response->children() as $data){
list($name, $stat, $nodemon) = preg_split("/\s+/", $data);
echo "<tr>";
echo "<td>$name</td><td>$stat</td>";
if($nodemon) {
echo "<td>Enabled</td>";
}else {
echo "<td>Disabled</td>";
}
echo "<td><button class='fg-button ui-state-active'>MonShow</button></td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
echo "</div>";
}
function showxCATInfo() {
echo "<div>";
#$ret = shell_exec("rpm -qa |grep xCAT");/* there's no newline character in the string */
/*
* xCAT-UI-2.4-snap200912080702
xCAT-client-2.4-snap200912180657
perl-xCAT-2.4-snap200912240801
xCAT-rmc-2.4-snap200912051911
xCAT-2.4-snap200912240802
xCAT-server-2.4-snap200912190921
*
*/
#$rpms = preg_split("/\n/", $ret);
echo "<table id=rpmtable style='margin-left: 30px'>";
$ret = shell_exec("rpm -q xCAT");
if($ret) {
$verstr = substr($ret, 5);
echo "<tr>";
echo "<td>xCAT</td><td>$verstr</td><td></td>";
echo "</tr>";
}
$ret = shell_exec("rpm -q xCAT-server");
if($ret) {
$verstr = substr($ret, 12);
echo "<tr>";
echo "<td>xCAT-server</td><td>$verstr</td><td></td>";
echo "</tr>";
}
$ret = shell_exec("rpm -q xCAT-client");
if($ret) {
$verstr = substr($ret, 12);
echo "<tr>";
echo "<td>xCAT-client</td><td>$verstr</td><td></td>";
echo "</tr>";
}
$ret = shell_exec("rpm -q perl-xCAT");
if($ret) {
$verstr = substr($ret, 10);
echo "<tr>";
echo "<td>perl-xCAT</td><td>$verstr</td><td></td>";
echo "</tr>";
}
$ret = shell_exec("rpm -q xCAT-rmc");
if($ret) {
$verstr = substr($ret,9);
echo "<tr>";
echo "<td>xCAT-rmc</td><td>$verstr</td><td></td>";
echo "</tr>";
}
$ret = shell_exec("rpm -q xCAT-UI");
if($ret) {
$verstr = substr($ret,8);
echo "<tr>";
echo "<td>xCAT-UI</td><td>$verstr</td><td></td>";
echo "</tr>";
}
echo '</table>';
echo "</div>";
}
?>

View File

@ -98,7 +98,8 @@ echo <<<TOS5
$("#association").dataTable({
"bLengthChange": false,
"bFilter": true,
"bSort": true
"bSort": true,
"iDisplayLength": 50
});
</script>
<table>
@ -331,9 +332,10 @@ echo '<div id=lseventLog>';
echo <<<TOS8
<script type="text/javascript" type"utf-8">
$("#lseventLog table").dataTable({
"bLengthChange": true,
"bFilter": true,
"bSort": true
"bLengthChange": false,
"bFilter": false,
"bSort": true,
"iDisplayLength": 50
});
</script>
TOS8;

View File

@ -5,7 +5,7 @@ require_once "$TOPDIR/lib/functions.php";
require_once "$TOPDIR/lib/display.php";
require_once "$TOPDIR/lib/monitor_display.php";
displayMapper(array('home'=>'main.php', 'new_monitor' =>''));
displayMapper(array('home'=>'main.php', 'monitor plugins' =>''));
?>

View File

@ -146,18 +146,73 @@ JS11;
echo <<<ACD01
<h3><a href="#">RMC Event Log</a></h3>
<div>
<p>TODO</p>
</div>
ACD01;
showEventInThreeHours();
echo <<<ACD011
<div>
<div class='ui-state-highlight'>The above table shows the RMC events happened in 3 hours.<br />If you want to see more, please click the Redirect button.</div>
<button class='fg-button ui-state-active ui-corner-all' onclick='loadMainPage("monitor/rmc_lsevent.php")'>Redirect</button>
</div>
ACD011;
echo <<<ACD02
</div>
<h3><a href="#">RMC Performance Monitoring</a></h3>
<div>
<p>TODO</p>
<div class='ui-state-highlight'>
<p>Please click the Redirect button to see the monitoring details.</p>
<button class='fg-button ui-state-active' onclick='loadMainPage("monitor/rmc_monshow.php")'>Redirect</button>
</div>
</div>
ACD02;
echo "</div>";
}
function showEventInThreeHours()
{
# display the RMC Events in three hours
$datem = date("m"); //month: 01-12
$dated = date("d"); //day: 01-31
$dateY = date("Y"); //Year: 2009
$dateh = date("h"); //hour: 01-12
$datei = date("i") - 3; //minute: 01-59
$Bdate = date("mdhiY", mktime($dateh, $datei, 0, $datem, $dated, $dateY));
$xml = docmd("webrun", "", array("lsevent -B $Bdate"));
if(getXmlErrors($xml, $error)) {
echo "<p class=Error>",implode(' ', $errors), "</p>";
exit;
}
echo "<div id='eventinthreehour'>";
echo <<<JS31
<script type="text/javascript">
$("#eventinthreehour").dataTable({
"bLengthChange": false,
"bFilter": true,
"bSort": true,
"iDisplayLength":50
});
</script>
JS31;
echo "<table>";
echo "<thead><tr><th width=20%>Category</th><th width=60%>Description</th><th width=20%>Time</th></tr></thead>";
# parse the output
foreach($xml->children() as $response) foreach($response->children() as $records) {
echo "<tr>";
if($records->children()) {
foreach($records->children() as $data) {
echo "<td>$data</td>";
}
}else {
echo "<td>Category</td><td>Description</td><td>Time</td>";
}
echo "</tr>";
}
echo "</table>";
echo "</div>";
}
function updatePluginStat($name)
{
$xml = docmd("monls", "", array("$name"));
@ -183,8 +238,13 @@ function showPluginDesc($name)
$information = "";
$order = array("\r\n","\n", "\r");
$replace = '<br />';
print_r($xml);
echo "<br />#############<br />";
foreach ($xml->children() as $response) foreach ($response->children() as $data) {
$information .="<p>$data</p>";
$newstr = str_replace($order, $replace, $data);
$information .="<p>$newstr</p>";
}
echo $information;
}
@ -274,7 +334,7 @@ function insertButtonSet($state1, $state2, $default)
function showNRTreeInput()
{
echo "<div id=nrtree-input class='ui-state-default ui-corner-all'>";
echo "<div id=nrtree-input class='ui-corner-all'>";
echo <<<TOS3
<script type="text/javascript">
$(function() {

70
xCAT-UI/rpowerstat.php Normal file
View File

@ -0,0 +1,70 @@
<?php
/*
* rpowerstat.php
* display the rpower status of all nodes in the whole cluster
* one graph and one table will be used to display them
*/
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";
$type = $_REQUEST['type'];
#if $type == "json", it will return data in json-format
#if $type == "table", it will return the data in one table.
#this hashed table records all the nodes with their status
$xml = docmd("rpower","all",array("stat"));
$nodestat_arr = array();
foreach($xml->children() as $response){
if($response->errorcode == 0) {
$key = $response->node->name;
$nodestat_arr["$key"] = $response->node->data->contents;
}
}
#print_r($nodestat_arr);
if($type == "table") {
#output the data into One table
echo "<table width=100%>";
echo <<<TH00
<thead>
<tr><th width=67%>Node Name</th><th width=32%>Status</th></tr>
</thead>
TH00;
echo "<tbody>";
foreach($nodestat_arr as $k => $v) {
echo "<tr><td>$k</td><td>$v</td></tr>";
}
echo "</tbody></table>";
}else if($type == "json") {
#Currently, we only return the numbers of nodes in different status
$num_arr = array( array(label => "Operating", data => 0), array( label => "Running", data => 0), array(label => "Not Activated", data => 0), array(label => "Open Firmware", data => 0));
foreach ($nodestat_arr as $k => $v) {
switch ($v) {
case "Operating":
$num_arr[0][data]++;
break;
case "Running":
$num_arr[1][data]++;
break;
case "Not Activated":
$num_arr[2][data]++;
break;
case "Open Firmware":
$num_arr[3][data]++;
break;
}
}
#convert the array to JSON-type
#print_r($num_arr);
echo json_encode($num_arr);
return json_encode($num_arr);
}
?>

46
xCAT-UI/summary.php Normal file
View File

@ -0,0 +1,46 @@
<?php
/*
* show the summary information for the cluster
*/
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";
?>
<div id="clusterprimary">
<div id="general" class="cluster_subinfo">
<h5>General Information for the Management Server</h5>
<?php summary_general(); ?>
</div>
<div id="nodestat" class="cluster_subinfo">
<h5>Power Status of nodes in the cluster</h5>
<?php showNodeStat(); ?>
</div>
<div id="monitor" class="cluster_subinfo">
<h5>Monitor Information</h5>
<?php showMonSum(); ?>
</div>
<div id="update" class="cluster_subinfo">
<h5>xCAT Info</h5>
<?php showxCATInfo(); ?>
</div>
</div>
<div id="clusternav">
<h5>Options</h5>
<ul style="list-style-type:none">
<li><a href="#">Power control</a></li>
<li<a href="#">Vitals information</a></li>
<li><a href="#">OS Provision</a></li>
<li><a href="#">Configure xCAT Tables</a></li>
<li><a href="#">All Inverntories</a></li>
<li><a href="#">Remote Commands</a></li>
<li><a href="#">Monitor</a></li>
<li><a href="#">Syslog</a></li>
</ul>
</div>