xcat-core/xCAT-UI/monitor/options.php

429 lines
14 KiB
PHP
Raw Normal View History

<?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";
$name = $_REQUEST['name'];
$option = $_REQUEST['opt'];
//display the "configure" and "view" options for the desired monitoring plugin
//displayOptionsForPlugin($name);
switch ($option) {
case "status":
//return the status of the plugin with "$name" as name
updatePluginStat($name);
break;
case "enable":
case "disable":
//enable/disable the plugin
//show all the node/range in the cluster
//and also provide one textarea to allow the user to type
showNRTreeInput();
showPluginStat($name, $option);
break;
case "conf":
//show all the options for configuration
showPluginConf($name);
break;
case"savetab":
saveMonsettingTab();
break;
case "view":
//show all the options for view
showPluginView($name);
break;
case "desc":
//show all the description of the plugin
default:
showPluginDesc($name);
break;
}
function saveMonsettingTab()
{
$rsp = doTabRestore("monsetting",$_SESSION["editable-monsetting"]);
//TODO: to handle the errors in the future
// $errors = array();
// if(getXmlErrors($rsp,$errors)){
// displayErrors($errors);
// dumpGlobals();
// exit;
// }else {
// displaySuccess("monsetting");
// }
if(getXmlErrors($rsp, $errors)) {
echo "failed";
}else {
echo "successful";
}
}
function showPluginConf($name)
{
//TODO
//echo <<<TOS11
// <div class="ui-state-highlight ui-corner-all">
// <p>All the options for configuration are here.</p>
// <p>choose the options to update them</p>
// </div>
// <span class="ui-icon ui-icon-grip-dotted-horizontal"></span>
//TOS11;
echo "<div id=accordion>";
echo <<<TOS10
<script type="text/javascript">
$(function() {
$("#accordion").accordion({autoHeight: false});
});
</script>
<h3><a href='#'>Application Monitor Setting</a></h3>
<div id="appmonset">
<div class="ui-state-highlight ui-corner-all">
<span class='ui-icon ui-icon-alert' />The configuration for application status monitoring
has not been implemented; We will consider it later!
</div>
</div>
<h3><a href='#'>The monsetting table Setting</a></h3>
<div id="monsettingtabset">
TOS10;
showMonsettingTab();
echo "</div>";
if($name == "rmcmon") {//special cases for RMCMON
echo "<h3><a href='#'>RMC Event Monitor Setting</a></h3>";
echo "<div>";
echo <<<TOS11
<div class='ui-state-highlight ui-corner-all'>
<p>RMC Event configuration is independent from the monstart/monstop command</p>
<p>To make your change effect, you don't need to restart RMC plugin</p>
</div>
TOS11;
showRMCAssocTab();
echo "<p>click the REDIRECT button to go to the configure web page</p>";
echo "<button class='fg-button ui-state-active ui-corner-all' onclick=\"loadMainPage('monitor/rmc_event_define.php')\">Redirect</button>";
echo "</div>";
echo "<h3><a href='#'>The Available RMC Resources and their attributes</a></h3>";
echo <<<TOS15
<div>
<p class='ui-state-highlight'>For your convenience, all the available RMC Resources and their attributes will list here</p>
<div id=monsetting_tips>
<div id=rmcSrcList>
TOS15;
displayRMCRsrc();
echo "</div><div id=rmcSrcAttr>";
displayRMCAttr();
echo "</div>
</div>
</div>";
}
echo "</div>";
}
/* showRMCAssocTab()
* is used to display all the current associations of RMC conditions&responses
*/
function showRMCAssocTab()
{
echo "<div>";
displayAssociation();
echo "</div>";
}
function showPluginView($name)
{
//
echo "<div id=rmcViewAccord>";
echo <<<JS11
<script type="text/javascript">
$(function() {
$("#rmcViewAccord").accordion({autoHeight: false});
});
</script>
JS11;
echo <<<ACD01
<h3><a href="#">RMC Event Log</a></h3>
<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>
<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"));
foreach($xml->children() as $response) foreach($response->children() as $data) {
$result = preg_split("/\s+/", $data);
if($result[0] == $name && $result[1] == "not-monitored") {
echo "Disabled";
}else {
echo "Enabled";
}
}
}
function showPluginDesc($name)
{
//TODO: many "return" keys are missed in the response.
//We have to figure them out
$xml = docmd("monls"," ", array("$name", "-d"));
if (getXmlErrors($xml, $errors)) {
echo "<p class=Error>monls failed: ", implode(' ',$errors), "</p>\n";
exit;
}
$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) {
$newstr = str_replace($order, $replace, $data);
$information .="<p>$newstr</p>";
}
echo $information;
}
/*
* changePluginStat($name)
* which is used to enable/disable the selected plugin,
* and which return whether they're sucessful or not
*/
function showPluginStat($name, $opt)
{
//display the nrtree here
//let the user choose node/noderange to enable/disable monitor plugin
echo "<div id=stat1>";
echo "<div class='ui-state-highlight ui-corner-all'>";
echo <<<TOS1
<script type="text/javascript">
monPluginSetStat();
$('input').customInput();
</script>
TOS1;
if($opt == 'enable') {
//monadd: xcatmon has special options
//moncfg <plugin> <nr>
//"moncfg rmcmon <nr> -r" is necessary for rmcmon
//monstart
echo "<p>The $name Plugin is in Disabled status</p>";
echo "<p>You can Press the Following button to change its status</p>";
echo "<p>Select the noderange from the right tree</p>";
echo "<p>OR: you can type the noderange in the following area</p>";
echo "</div>";
insertNRTextEntry();
echo "<p>When you are trying to enable the plugin</p><p>would you like to support node status monitoring?</p>";
insertRadioBtn();
insertButtonSet("Enable","Disable", 0);
}else if($opt == 'disable') {
//monstop
//mondecfg
echo "<p>The $name Plugin is in Enabled status</p>";
echo "<p>You can Press the Following button to change its status</p>";
echo "<p>Select the noderange from the right tree</p>";
echo "<p>OR: you can type the noderange in the following area</p>";
echo "</div>";
insertNRTextEntry();
echo "<p>When you are trying to enable the plugin</p><p>would you like to support node status monitoring?</p>";
insertRadioBtn();
insertButtonSet("Enable","Disable", 1);
}
echo "</div>";
}
function insertRadioBtn()
{
//to provide the choose to support "-n"(node status monitoring)
echo <<<TOS21
<form>
<fieldset>
<input type="radio" name="options" id="radio-1" value="yes" />
<label for="radio-1">support node status monitor</label>
<input type="radio" name="options" id="radio-2" value="no" />
<label for="radio-2">Not support node status monitor</label>
</fieldset>
</form>
TOS21;
}
function insertNRTextEntry()
{
echo "<textarea id='custom-nr' class='ui-corner-all' style='width:100%'>";
echo "</textarea>";
}
function insertButtonSet($state1, $state2, $default)
{
echo "<span class='ui-icon ui-icon-grip-solid-horizontal'></span>";
echo "<div class='fg-buttonset fg-buttonset-single'>";
if($default == 0) {
echo "<button class='fg-button ui-state-default ui-state-active ui-priority-primary ui-corner-left'>$state1</button>";
echo "<button class='fg-button ui-state-default ui-corner-right'>$state2</button>";
}else {
echo "<button class='fg-button ui-state-default ui-corner-left'>$state1</button>";
echo "<button class='fg-button ui-state-default ui-state-active ui-priority-primary ui-corner-right'>$state2</button>";
}
echo "</div>";
}
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 showMonsettingTab()
{
$tab = "monsetting";
echo "<div class='mContent'>";
$xml = docmd('tabdump', '', array($tab));
echo <<<TOS22
<script type="text/javascript">
$(function() {
setMonsettingTab();
});
</script>
TOS22;
echo "<table id='tabTable' cellspacing='1' class='ui-corner-all' style='float:left; font-size: .9em; table-layout: fixed; width: 615px; word-wrap: break-word; border: 1px solid #C0C0C0'>\n";
echo <<<TOS00
<tr style="font-size: .8em; background-color: #C0C0C0">
<th style="width:35px"></th>
<th style="width:65px">name</th>
<th style="width:110px">key</th>
<th style="width:300px">value</th>
<th style="width:55px">comments</th>
<th style="width:50px">disable</th>
</tr>
TOS00;
// $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 "<tr><th></th>\n"; # extra cell for the red x
// #echo "<tr><td></td>\n"; # extra cell for the red x
// foreach($headers as $colHead) {echo "<th>$colHead</th>"; }
// 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 "</table>\n";
echo "</div>";
$_SESSION["editable-$tab"] = & $editable; # save the array so we can access it in the next call of this file or change.php
echo "<p>";
echo "<button id='monsettingaddrow' class='fg-button ui-state-default ui-corner-all'>Add Row</button>";
echo "<span class='ui-icon ui-icon-grip-solid-horizontal'></span>";
echo "<div class='fg-buttonset fg-buttonset-single'>";
echo "<button id='saveit' class='fg-button ui-state-default ui-state-active ui-priority-primary ui-corner-left'>Apply</button>";
echo "<button id='reset' class='fg-button ui-state-default ui-corner-right'>Cancel</button>";
echo "</div>";
echo "</p>\n";
}
?>