VI-DB status.php v1

From vwiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
<html xmlns='http://www.w3.org/TR/REC-html40'>

<html>
<head>
<title>vi-status</title>
<link rel='SHORTCUT ICON' href='favicon.ico'>
<link rel='stylesheet' type='text/css' href='alpha.css' />
<meta name='Author' content='Simon Strutt'>
<meta name='Description' content='VI Info'>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" >
<meta http-equiv='Pragma' content='no-cache'>
<?php

<meta http-equiv="Refresh" content="150"> 

?>
<meta http-equiv='Expires' content='900'>
</head>
<body>

<?php
$time_start = microtime(true);

//Local variables etc
require 'config.php';

// open connection and select database
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect to database!");
mysql_select_db($db) or die ("Unable to select database!");

print "DISCLAIMER: Please use all information gained from here with caution - I haven't performed exhaustive validation and testing of any of the information that may be presented. <br>\n";
print "If you're making changes or decisions, please double check with the reality of what is displayed by the vCentre servers.  You retain full responsibility for your actions...!\n ";

print "<h1>Virtual Infrastructure Status Summary</h1>\n";

// ----------------- Layout table --------------------------------
print "<table align='center' cellspacing=10><tr>\n";

// ----------------- vCentre table -------------------------------

$vcs = mysql_query("SELECT vcid, name, site, last_esx_check FROM vc ORDER BY site;");

if (mysql_num_rows($vcs) == 0) {
	die ("vCentre info not found....!");
}
$vcsite = "";
while ($vc = mysql_fetch_assoc($vcs)) {
	//Layout table handling
	if ($vcsite <> $vc['site']) {
		print "<tr><td valign='top'>";
		$vcsite = $vc['site'];
	} else {
		print "<td valign='top'>";
	}
	
	// Virtual Centre
	print "<table class='BasicTable' align='center'>\n<tr><th width=35>".$vc['site']."<th colspan=3>". strtoupper($vc['name']);
	$clusters = mysql_query("SELECT clid, name FROM cluster WHERE vcid=".$vc['vcid'].";");
	
	// Cluster
	while ($cluster = mysql_fetch_assoc($clusters)) {
		$query = "SELECT COUNT(*) AS num_esx, SUM(cpu_pc) AS sum_cpu, SUM(mem_pc) AS sum_mem FROM esx JOIN esx_state USING (esxid) WHERE clid=".$cluster['clid']." AND exist=1 AND esx_state.state='Connected';";
		$capacity = mysql_fetch_assoc(mysql_query($query));
		$spare_esx_cpu = floor( ($capacity['num_esx'] * $cpu_pc_alert - $capacity['sum_cpu']) / $cpu_pc_alert);
		$spare_esx_mem = floor( ($capacity['num_esx'] * $mem_pc_alert - $capacity['sum_mem']) / $mem_pc_alert);
		if ($spare_esx_cpu > $spare_esx_mem) {
			$n = $spare_esx_mem;
		} else {
			$n = $spare_esx_cpu;
		}
		print "<tr><td colspan=2 width=225><b><a href='cluster-detail.php?clid=".$cluster['clid']."'>".$cluster['name']."</a></b>";
		if ($n >= 2) {
			print "<td colspan=2><b>n + ". $n."</b>";
		} elseif ($n == 1) {
			print "<td colspan=2><span class='status_warn'><b>n + ". $n."</b></span>";
		} else {
			print "<td colspan=2><span class='status_alert'><b>n + ". $n."</b></span>";
		}
		
		$esxs = mysql_query("SELECT name, esx_state.state, esx_state.status, cpu_pc, mem_pc FROM esx JOIN esx_state USING (esxid) WHERE clid=".$cluster['clid']." AND exist=1 ORDER BY name;");
		
		while ($esx = mysql_fetch_assoc($esxs)) {
			if ($esx['state'] == "Connected") {
				print "<tr><td>Live";
			} elseif ($esx['state'] == "NotResponding") {
				print "<tr><td class='alert'>Down";
			} elseif ($esx['state'] == "Maintenance") {
				print "<tr><td class='warn'>Maint";
			} elseif ($esx['state'] == "Disconnected") {
				print "<tr><td class='alert'>discon.";
			} else {
				print "<tr><td>UNEX";
			}
			
			print "<td>".$esx['name'];
			if ($esx['status'] == "yellow") {
				print " <span class='status_warn'> has warning</span>";
			} elseif ($esx['status'] == "red") {
				print " <span class='status_alert'> has alert</span>";
			}
			
			bar_graph ("CPU", $esx['cpu_pc'], $cpu_pc_warn, $cpu_pc_alert);
			bar_graph ("Memory", $esx['mem_pc'], $mem_pc_warn, $mem_pc_alert);
		}
	}
	if (is_null($vc['last_esx_check']) or (strtotime($vc['last_esx_check']) < (time() - 900))) {
		print "<tr><td colspan=4 class='time_warn'>Updated: " .$vc['last_esx_check']." hrs";
	} else {
		print "<tr><td colspan=4><span class='time_good'>Updated: " .$vc['last_esx_check']." hrs</span>";
	}
	print "</table>\n";
}

// ----------------- End of layout table ------------------------------
print "</table>\n";


// ------------------- Layout table end ------------------------------
print "</table>\n";

print "<br><a href='index.php'>VM Search page</a><br>\n";
	
$time = round((microtime(true) - $time_start)*1000);
print "Page took $time msecs to execute on server";

// ------------------- End of HTML ---------------------------------
print "</body><html>";

// ================ FUNCTIONS ============================

function search_char ($text) {
	
	return (str_replace(array("*", "?"), array("%", "_"), trim($text)));
}

function bar_graph ($name, $data_percent, $warn_threshold, $alert_threshold) {
	print "<td class='bar_small' title='".$name."'><div style='width: ".$data_percent."%' ";
	if ($data_percent >= $alert_threshold) {
		print "class='bar_alert'";
	} elseif ($data_percent >= $warn_threshold) {
		print "class='bar_warn'";
	} else {
		print "class='bar_good'";
	}
	print ">".$data_percent."</div>\n";
}

?>