Check-Server-Status/index.php

333 lines
11 KiB
PHP
Raw Normal View History

2023-11-17 12:07:46 +01:00
<?php
if(isset($_POST['name']) && isset($_POST['host']))
{
$port = 80;
if(!empty($_POST['port'])) $port = $_POST['port'];
addServer($_POST['name'], $_POST['host'], $port);
header('Location: index.php');
}
else if(isset($_GET['del']))
{
$index = (int) $_GET['del'];
if($index >= 0) deleteServer($index);
}
?>
<!DOCTYPE html>
<html class="no-js">
<head>
<meta name="robots" content="noindex">
<meta charset="utf-8">
<title>Server Status Port</title>
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/bootstrap-theme.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="./favicon.png" />
</head>
<body class="light-mode" onload="startTime()">
<style type="text/css">
body {
padding-top: 60px;
}
.pie_progress {
width: 150px;
margin: 10px auto;
}
@media all and (max-width: 968px) {
.pie_progress {
width: 80%;
max-width: 810px;
}
}
.title {
height: 50px;
}
.Time{
color: black;
}
.Time2{
color: yellow;
}
</style>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="gauge/css/asPieProgress.css">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<link rel="stylesheet" href="style.css">
<center>
<div class="container content">
<div class="page-title light-mode">
<h2>Monitoring Serv. </h2>
<!-- <div id="heure" class="Time2"></div> -->
<img src="favicon.png" alt="Monitoring image" class="logo-image">
<button id="theme-toggle" >Dark theme</button>
</div>
<div class="col-xs-4 col-sm-4 col-lg-4" id="cpuDiv">
<div class="pie_progress_cpu" role="progressbar" data-goal="33">
<div class="pie_progress__number">0%</div>
<div class="pie_progress__label">CPU</div>
</div>
<h1>Cpu</h1>
<div class='title'></div>
<pre><?php echo `lsb_release -s -d`; ?><br></pre>
</div>
<div class="col-xs-4 col-sm-4 col-lg-4" id="memDiv">
<div class="pie_progress_mem" role="progressbar" data-goal="33">
<div class="pie_progress__number">0%</div>
<div class="pie_progress__label">Memory</div>
</div>
<h1>Memory</h1>
<div class='title'></div>
<pre><?php echo `date`;?> <strong><span id="heure" class="Time"></span></strong></pre>
</div>
<div class="col-xs-4 col-sm-4 col-lg-4" id="diskDiv">
<div class="pie_progress_disk" role="progressbar" data-goal="33">
<div class="pie_progress__number">0%</div>
<div class="pie_progress__label">Disk</div>
</div>
<h1>Disk</h1>
<div class='title'></div>
<!-- Check SSL block -->
<pre>Validity SSL echosystem.fr
<strong><?php $file='SSL.txt'; $contenu=file_get_contents($file); echo "$contenu"; ?></strong></pre>
<br>
</div>
<br>
<h3>Server Status Port</h3>
<table class="table table-bordered">
<tr>
<th class="text-center">Name</th>
<th class="text-center">Domain</th>
<th class="text-center">IP</th>
<th class="text-center">Port</th>
<th class="text-center">Status</th>
<th class="text-center deleteMode" style="width:75px">Delete</th>
</tr>
<?php parser(); ?>
</table>
<input id="editMode" type="button" value="Edit Entry" checked="checked" class="btn btn-default pull-right_ btnedit" /><br><br>
<form class="form-inline" role="form" action="index.php" method="post">
<div class="form-group">Name service<br>
<input type="text" class="form-control" id="name" name="name" placeholder="Name">
</div>
<div class="form-group">Host / Domain <br>
<input type="text" class="form-control" onkeyup="javascript:checkForm(this)" id="host" name="host" placeholder="Domain / IP">
</div>
<div class="form-group">Port <br>
<input type="text" size="5" class="form-control" id="port" name="port" placeholder="Port">
</div>
<button type="submit" class="btn btn-default" id="add-button" style="margin-top: 18px;">Add</button>
</form>
<br><br>
<footer>
<p><center>
<pre style="width:292px;">By <a href="https://echosystem.fr/erreur32" style="color: unset;">🅴🆁🆁🅴🆄🆁32</a> <a href="https://echosystem.fr/" style="color: unset;">
<img style="display: block; margin-left: auto; margin-right: auto;" src="https://echosystem.fr/home/favicon.png" alt="" width="32" height="32"> 🆓🅴🅲🅷🅾️🆂🆈🆂🆃🅴🅼 </a>
</pre></center></p>Page Hosted on <?php $hostname = gethostname(); echo $hostname ?>
</footer>
</div>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/app.js" type="text/javascript"></script>
<script src="js/bootstrap.min.js" type="text/javascript"></script>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
<script type="text/javascript" src="gauge/jquery-asPieProgress.js"></script>
<script type="text/javascript">
$(document).ready(function () {
// Example with grater loading time - loads longer
$('.pie_progress_cpu, .pie_progress_mem, .pie_progress_disk').asPieProgress({});
getCpu();
getMem();
getDisk();
});
function getCpu() {
$.ajax({
url: 'cpu.json.php',
success: function (response) {
update('cpu', response);
setTimeout(function () {
getCpu();
}, 1000);
}
});
}
function getMem() {
$.ajax({
url: 'memory.json.php',
success: function (response) {
update('mem', response);
setTimeout(function () {
getMem();
}, 1000);
}
});
}
function getDisk() {
$.ajax({
url: 'disk.json.php',
success: function (response) {
update('disk', response);
setTimeout(function () {
getDisk();
}, 1000);
}
});
}
function update(name, response) {
$('.pie_progress_' + name).asPieProgress('go', response.percent);
$("#" + name + "Div div.title").text(response.title);
// $("#" + name + "Div pre").text(response.output.join('\n'));
}
</script>
<script>
function afficherHeure() {
var date = new Date();
var heures = date.getHours();
var minutes = date.getMinutes();
var secondes = date.getSeconds();
document.getElementById('heure').innerHTML = heures + ":" + minutes + ":" + secondes;
// Actualise l'heure chaque seconde
setTimeout(afficherHeure, 1000);
}
// Appelle la fonction pour la première fois
afficherHeure();
</script>
<script src="darktheme.js"></script>
</body>
</html>
<?php
function getStatus($ip, $port)
{
$socket = @fsockopen($ip, $port, $errorNo, $errorStr, 2);
if (!$socket) return false;
else return true;
}
function addServer($name, $host, $port)
{
// TODO : rewrite the opening part correctly (better errors management)
$i = 0;
$filename = 'servers.xml';
$servers = file_get_contents("servers.xml");
if (trim($servers) == '')
{
exit();
}
else
{
$servers = simplexml_load_file("servers.xml");
foreach ($servers as $server) $i++;
}
$servers = simplexml_load_file($filename);
$server = $servers->addChild('server');
$server->addAttribute('id', (string) $i);
if(strlen($name) == 0) $name = $host;
$server->addChild('name', (string)$name);
$server->addChild('host', (string)$host);
$server->addChild('port', (string)$port);
$servers->asXML($filename);
}
function parser()
{
//TODO : Fix errors when no valid XML content inside file.
$file = "servers.xml";
if(file_exists($file))
{
$servers = file_get_contents("servers.xml");
if (trim($servers) == '') //File exists but empty
{
$content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><servers></servers>";
file_put_contents($file, $content, FILE_APPEND | LOCK_EX);
}
else
{
$servers = simplexml_load_file("servers.xml");
foreach ($servers as $server)
{
echo "<tr>";
echo "<td>".$server->name."</td>";
if(filter_var($server->host, FILTER_VALIDATE_IP))
{
echo "<td class=\"text-center\">N/A</td><td class=\"text-center\">".$server->host."</td>";
}
else
{
echo "<td class=\"text-center\">".$server->host."</td><td class=\"text-center\">".gethostbyname($server->host)."</td>";
}
echo "<td class=\"text-center\">".$server->port."</td>";
if (getStatus((string)$server->host, (string)$server->port))
{
echo "<td class=\"text-center\"><span class=\"label label-success\">Online</span></td>";
}
else
{
echo "<td class=\"text-center\"><span class=\"label label-danger\">Offline</span></td>";
}
echo "<td class=\"text-center deleteMode\"><a href=\"index.php?del=".$server->attributes()."\" style=\"text-decoration:none\"><b style=\"color:red;\">X</b></a></td>";
echo "</tr>";
}
}
}
else
{
// TODO : detect creation errors (ex : permissions)
$content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><servers></servers>";
file_put_contents($file, $content, FILE_APPEND | LOCK_EX);
}
}
function deleteServer($index)
{
$file = "servers.xml";
$serverFile = new DOMDocument;
$serverFile->formatOutput = true;
$serverFile->load($file);
$servers = $serverFile->documentElement;
$list = $servers->getElementsByTagName('server');
$nodeToRemove = null;
foreach ($list as $server)
{
$attrValue = $server->getAttribute('id');
if ((int)$attrValue == $index) $nodeToRemove = $server;
}
if ($nodeToRemove != null) $servers->removeChild($nodeToRemove);
$serverFile->save($file);
header('Location: index.php');
}