supress warnings, improved PHP formatting, use XML-based syntax, hardcode banner width, delete older statuses
This commit is contained in:
@@ -1,14 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
$CONFIG = array(); $services = array();
|
$CONFIG = array(); $services = array();
|
||||||
include(($_SERVER['DOCUMENT_ROOT']?:getcwd()).'/data/config.php');
|
include(($_SERVER['DOCUMENT_ROOT']?:getcwd()).'/data/config.php');
|
||||||
|
|
||||||
$SQL = new PDO($CONFIG['db_host'], $CONFIG['db_username'], $CONFIG['db_password']);
|
$SQL = new PDO($CONFIG['db_host'], $CONFIG['db_username'], $CONFIG['db_password']);
|
||||||
if ($SQL->errorCode() && $SQL->errorCode() !== '00000') {
|
if ($SQL->errorCode() && $SQL->errorCode() !== '00000') {
|
||||||
die($SQL->errorCode());
|
die($SQL->errorCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
$SQL->query('CREATE TABLE IF NOT EXISTS service_status(service TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, ping INTEGER, status INTEGER, PRIMARY KEY(service, timestamp))');
|
$SQL->query('CREATE TABLE IF NOT EXISTS service_status(service TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, ping INTEGER, status INTEGER, PRIMARY KEY(service, timestamp))');
|
||||||
|
|
||||||
foreach($CONFIG['services'] as $id=>$data) {
|
foreach($CONFIG['services'] as $id=>$data) {
|
||||||
$services[$id] = array(
|
$services[$id] = array(
|
||||||
'name'=>$data['name'],
|
'name'=>$data['name'],
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
$pings = array(); $i = 0;
|
$pings = array(); $i = 0;
|
||||||
foreach ($data['ports'] as $port) {
|
foreach ($data['ports'] as $port) {
|
||||||
$starttime = microtime(true);
|
$starttime = microtime(true);
|
||||||
if ($fp = fsockopen($data['hostname'],$port,$errno,$errstr,15)) {
|
if ($fp = @fsockopen($data['hostname'],$port,$errno,$errstr,15)) {
|
||||||
$stoptime = microtime(true);
|
$stoptime = microtime(true);
|
||||||
$newping = ($stoptime - $starttime) * 1000;
|
$newping = ($stoptime - $starttime) * 1000;
|
||||||
$pings[$i++] = $newping;
|
$pings[$i++] = $newping;
|
||||||
@@ -34,20 +34,20 @@
|
|||||||
else if ($i > 0 && ($ping_sum = array_sum($pings)) > 0)
|
else if ($i > 0 && ($ping_sum = array_sum($pings)) > 0)
|
||||||
$ping = round($ping_sum / $i, 2);
|
$ping = round($ping_sum / $i, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for PID (status)
|
// Check for PID (status)
|
||||||
if (isset($data['pidfile'])) {
|
if (isset($data['pidfile'])) {
|
||||||
if (!posix_getpgid(file_get_contents($data['pidfile'])))
|
if (!posix_getpgid(file_get_contents($data['pidfile'])))
|
||||||
$status = -1;
|
$status = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for process (status)
|
// Check for process (status)
|
||||||
if (isset($data['process']) && !isset($data['pidfile'])) {
|
if (isset($data['process']) && !isset($data['pidfile'])) {
|
||||||
$otp; $rtn;
|
$otp; $rtn;
|
||||||
exec('pgrep -fl "'.$data['process'].'"', $otp, $rtn);
|
exec('pgrep -fl "'.$data['process'].'"', $otp, $rtn);
|
||||||
if ($rtn!=0) $status = -1;
|
if ($rtn!=0) $status = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($stmt = $SQL->prepare('INSERT INTO service_status(service, timestamp, ping, status) VALUES (?, ?, ?, ?)')) {
|
if ($stmt = $SQL->prepare('INSERT INTO service_status(service, timestamp, ping, status) VALUES (?, ?, ?, ?)')) {
|
||||||
$stmt->bindParam(1, $id);
|
$stmt->bindParam(1, $id);
|
||||||
$stmt->bindParam(2, $timestamp);
|
$stmt->bindParam(2, $timestamp);
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($stmt = $SQL->prepare('SELECT timestamp,ping,status FROM service_status WHERE service = ? ORDER BY timestamp DESC LIMIT ?')) {
|
if ($stmt = $SQL->prepare('SELECT timestamp,ping,status FROM service_status WHERE service = ? ORDER BY timestamp DESC LIMIT ?')) {
|
||||||
$stmt->bindParam(1, $id);
|
$stmt->bindParam(1, $id);
|
||||||
$stmt->bindParam(2, $CONFIG['max_slices']);
|
$stmt->bindParam(2, $CONFIG['max_slices']);
|
||||||
@@ -69,46 +69,53 @@
|
|||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
}
|
}
|
||||||
$services[$id]['status'] = array_reverse($services[$id]['status']);
|
$services[$id]['status'] = array_reverse($services[$id]['status']);
|
||||||
|
|
||||||
|
if ($stmt = $SQL->prepare('DELETE FROM service_status WHERE service = :service AND timestamp NOT IN ( SELECT timestamp FROM service_status WHERE service = :service ORDER BY timestamp DESC LIMIT :limit )')) {
|
||||||
|
$stmt->bindParam('service', $id);
|
||||||
|
$stmt->bindParam('limit', $CONFIG['max_slices']);
|
||||||
|
$stmt->execute();
|
||||||
|
$stmt->closeCursor();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title><?=$CONFIG['page_name'];?></title>
|
<title><?=$CONFIG['page_name'];?></title>
|
||||||
<meta property='og:site_name' content='<?=$CONFIG['site_name'];?>'>
|
<meta property='og:site_name' content='<?=$CONFIG['site_name'];?>' />
|
||||||
<meta property='og:image' content='favicon.png'>
|
<meta property='og:image' content='favicon.png' />
|
||||||
<meta property='og:title' content='<?=$CONFIG['page_name'];?>'>
|
<meta property='og:title' content='<?=$CONFIG['page_name'];?>' />
|
||||||
<meta property='og:description' content='<?=$CONFIG['site_description'];?>'>
|
<meta property='og:description' content='<?=$CONFIG['site_description'];?>' />
|
||||||
<meta name='viewport' content='width=device-width, initial-scale=1'>
|
<meta name='viewport' content='width=device-width, initial-scale=1' />
|
||||||
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
|
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
|
||||||
<link rel='icon' href='favicon.png' type='image/png' sizes='64x64'>
|
<link rel='icon' href='favicon.png' type='image/png' sizes='64x64' />
|
||||||
<link rel='icon' href='favicon.ico' type='image/x-icon' sizes='64x64'>
|
<link rel='icon' href='favicon.ico' type='image/x-icon' sizes='64x64' />
|
||||||
<link rel='stylesheet' href='style.css'>
|
<link rel='stylesheet' href='style.css' />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<center class='page'>
|
<center class='page'>
|
||||||
<div class='banner'><img src='banner.png'><br><h3>Status Page</h3><a><?=$CONFIG['site_message'];?></a></div>
|
<div class='banner'><img src='banner.png' width="640" /><br /><h3>Status Page</h3><a><?=$CONFIG['site_message'];?></a></div>
|
||||||
<?php
|
<?php foreach ($services as $id=>$service): ?>
|
||||||
foreach ($services as $id=>$service) {
|
<table class='status' id='<?=$id;?>'>
|
||||||
echo '<table class=\'status\' id=\''.$id.'\'>';
|
<tr class='title'>
|
||||||
echo '<tr class=\'title\'><td colspan=\''.count($service['status']).'\'>';
|
<td colspan='<?=count($service['status']);?>'>
|
||||||
if (!empty($service['message'])) {
|
<?php if (!empty($service['message'])): ?>
|
||||||
echo '<details><summary><b>';
|
<details>
|
||||||
if (!empty($service['icon']))
|
<summary><b><?php if (!empty($service['icon'])): ?><img src='<?=$service['icon'];?>' height='16' /> <?php endif ?><?=$service['name'];?></b></summary>
|
||||||
echo '<img src=\''.$service['icon'].'\' height=\'16\'> ';
|
<?=$service['message'];?>
|
||||||
echo $service['name'].'</b></summary>'.$service['message'].'</details>';
|
</details>
|
||||||
} else {
|
<?php else: ?>
|
||||||
if (!empty($service['icon']))
|
<b><?php if (!empty($service['icon'])): ?><img src='<?=$service['icon'];?>' height='16' /> <?php endif ?><?=$service['name'];?></b>
|
||||||
echo '<img src=\''.$service['icon'].'\' height=\'16\'> ';
|
<?php endif ?>
|
||||||
echo '<b>'.$service['name'].'</b>';
|
</td
|
||||||
}
|
</tr>
|
||||||
echo '</td></tr>';
|
<tr>
|
||||||
echo '<tr>';
|
<?php foreach ($service['status'] as $slice): ?>
|
||||||
foreach ($service['status'] as $slice) {
|
<?php
|
||||||
$cell_status; $bgclrstyle = '';
|
$cell_status; $bgclrstyle = '';
|
||||||
$_time = date($CONFIG['timestamp_format'], strtotime($slice['timestamp']));
|
$_time = date($CONFIG['timestamp_format'], strtotime($slice['timestamp']));
|
||||||
$_ping = $slice['ping'].'ms';
|
$_ping = $slice['ping'].'ms';
|
||||||
|
|
||||||
if ($slice['status'] > 0 || ($slice['status'] == -1 && $slice['ping'] > 0)) {
|
if ($slice['status'] > 0 || ($slice['status'] == -1 && $slice['ping'] > 0)) {
|
||||||
$cell_status = 'partial';
|
$cell_status = 'partial';
|
||||||
$bgclrstyle = sprintf("#%02x%02x%02x", 255, 128, 0);
|
$bgclrstyle = sprintf("#%02x%02x%02x", 255, 128, 0);
|
||||||
@@ -118,19 +125,20 @@
|
|||||||
} else {
|
} else {
|
||||||
$cell_status = 'ok';
|
$cell_status = 'ok';
|
||||||
$bgclrstyle = sprintf(
|
$bgclrstyle = sprintf(
|
||||||
"#%02x%02x%02x",
|
"#%02x%02x%02x",
|
||||||
$slice['ping']!=-1?max(0, min(255, round($slice['ping'])*2)):0,
|
$slice['ping']!=-1?max(0, min(255, round($slice['ping'])*2)):0,
|
||||||
max(0, min(255, 128+(round($slice['ping'])/2))),
|
max(0, min(255, 128+(round($slice['ping'])/2))),
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
echo '<td class=\''.$cell_status.'\' bgcolor=\''.$bgclrstyle.'\' value=\''.$_ping."\n".strtoupper($cell_status).' - '.$_time.'\'></td>';
|
|
||||||
}
|
<td class='<?=$cell_status;?>' bgcolor='<?=$bgclrstyle;?>' value='<?=$_ping."\n".strtoupper($cell_status).' - '.$_time;?>'></td>
|
||||||
echo '</tr></table>'."\n";
|
<?php endforeach ?>
|
||||||
}
|
</tr>
|
||||||
?>
|
</table>
|
||||||
<hr>
|
<?php endforeach ?>
|
||||||
|
<hr />
|
||||||
</center>
|
</center>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Reference in New Issue
Block a user