mirror of
https://gitlab.com/JKANetwork/CheckServer.git
synced 2026-02-17 10:41:34 +01:00
Start again
This commit is contained in:
627
functions.php
Executable file → Normal file
627
functions.php
Executable file → Normal file
@@ -1,105 +1,327 @@
|
||||
<?php
|
||||
//Functions
|
||||
if (file_exists(__DIR__ .'/config/config.php')){
|
||||
require_once __DIR__ .'/config/config.php';
|
||||
}
|
||||
require_once __DIR__ .'/lib/dbwrapper.php';
|
||||
|
||||
function getUptime($ID_C,$precision = 0){
|
||||
$db_conn = getconn();
|
||||
if ($precision == 0){
|
||||
$time = time()-30*7*3600; //Last week
|
||||
}else{
|
||||
$time = $precision;
|
||||
session_start();
|
||||
|
||||
function dbconn(){
|
||||
//return dbw_connect('mysqli','localhost','proyecto','root','mysql');
|
||||
if (!defined('SGBD')){
|
||||
die('You can\'t establish a connection without a config file.');
|
||||
}
|
||||
$res = dbw_query($db_conn,"SELECT code FROM CHKHIST WHERE ID_C='$ID_C' AND `timestamp` > $time");
|
||||
$count = 0;
|
||||
$err = 0;
|
||||
while ($fila = dbw_fetch_array($db_conn,$res)){
|
||||
$count++;
|
||||
$err += $fila['code'];
|
||||
}
|
||||
if ($count == 0){
|
||||
return '-1'; //No registers
|
||||
if (SGBD == 'sqlite3'){
|
||||
return dbw_connect('sqlite3',__DIR__ .'/'.DBSERVER);
|
||||
}else if (SGBD == 'mysqli'){
|
||||
return dbw_connect('mysqli',DBSERVER,DBDATABASE,DBUSER,DBPASS);
|
||||
}
|
||||
}
|
||||
|
||||
function showUptime($str) {
|
||||
$num = floatval($str);
|
||||
$secs = $num % 60;
|
||||
$num = (int)($num / 60);
|
||||
$mins = $num % 60;
|
||||
$num = (int)($num / 60);
|
||||
$hours = $num % 24;
|
||||
$num = (int)($num / 24);
|
||||
$days = $num;
|
||||
|
||||
return $days . " días, " . sprintf('%02d', $hours) . ":" . sprintf('%02d', $mins) . ":" . sprintf('%02d', $secs);
|
||||
}
|
||||
|
||||
/** Transform bytes to an human readable text **/
|
||||
function bytesToHuman($int,$round = 2, $onlynumber = 0,$returnin = NULL){
|
||||
if (!is_numeric($int)){
|
||||
return NULL;
|
||||
}
|
||||
$ret = ($int / 1024/1024);
|
||||
if ($onlynumber){
|
||||
if ($returnin == 'GB'){
|
||||
return round($ret / 1024,$round); //Return in GB
|
||||
}else{
|
||||
return round($ret,$round); //Return in MB, ever, and without text, for charts
|
||||
}
|
||||
|
||||
}else{
|
||||
if ($ret > 1024*10){ //Long number
|
||||
return round(($ret / 1024),$round).'GB';
|
||||
}else{
|
||||
return round($ret,$round).'MB';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function percent($parc,$total){
|
||||
if ($total){
|
||||
return round(($parc/$total)*100,2);
|
||||
}else{
|
||||
if ($err != 0){
|
||||
$uptime = (100 - round(($err/$count)*100,2));
|
||||
return $uptime;
|
||||
return 'DIV BY ZERO';
|
||||
}
|
||||
}
|
||||
|
||||
/** Know at what groups belong a Server **/
|
||||
function arrayGroupsOfServ($ID_SERV) {
|
||||
$db_conn = dbconn();
|
||||
$list = dbw_query($db_conn,"SELECT * FROM S_INGROUP WHERE ID_SERV='$ID_SERV'");
|
||||
|
||||
$ret = NULL; //Empty var
|
||||
while ($line = dbw_fetch_array($db_conn,$list)){
|
||||
$ID_G = $line['ID_G'];
|
||||
$namegrp = dbw_query_fetch_array($db_conn,"SELECT `Name` FROM GROUPS WHERE ID_G='$ID_G'")[0];
|
||||
$ret[] = array('ID_G' => $ID_G,'Name' => $namegrp);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/** Return last hdd status as string **/
|
||||
function getFastHddStats($ID_SERV){
|
||||
$db_conn = dbconn();
|
||||
$sql = dbw_query($db_conn,"SELECT * FROM S_HDDSTAT WHERE ID_SERV='$ID_SERV' AND `Timestamp` = (SELECT MAX(`Timestamp`) FROM S_HDDSTAT WHERE ID_SERV='$ID_SERV')");
|
||||
$ret = NULL; //Empty var
|
||||
|
||||
while ($line = dbw_fetch_array($db_conn,$sql)){
|
||||
$line['Usedspace'] = $line['Space']-$line['Freespace'];
|
||||
$ret .= $line['HDD']. ' - ' . percent($line['Usedspace'],$line['Space']).'% ocupado ('.bytesToHuman($line['Usedspace']).'/'.bytesToHuman($line['Space']).')<br>';
|
||||
}
|
||||
return $ret; //HDD1 - % ocupado (NUsedGb/NTotalGb)<br>Other..
|
||||
}
|
||||
|
||||
|
||||
/** This function returns, from a ID_SERV and a time, an array of every HDD and free space **/
|
||||
function getHistoricHddStats($ID_SERV,$backto = (24*3600)){ //Backto one day by default
|
||||
$db_conn = dbconn();
|
||||
|
||||
$timeini = time() - $backto;
|
||||
$lines = dbw_query($db_conn,"SELECT * FROM S_HDDSTAT WHERE ID_SERV='$ID_SERV' AND `Timestamp` > '$timeini' ORDER BY `Timestamp` DESC");
|
||||
|
||||
$ret = array();
|
||||
|
||||
$between = (time() - $timeini) / 100; //Tiempo entre el actual y desde el que empieza, partido de 100, para que el máximo sean 100 tramos.
|
||||
|
||||
|
||||
while ($line = dbw_fetch_array($db_conn,$lines)){
|
||||
if (!isset($lasttimestamp[$line['HDD']]) || abs($lasttimestamp[$line['HDD']] - $line['Timestamp']) > $between ){ //Calcula que exista, y que el tiempo sea mayor que el tramo dicho
|
||||
$ret[$line['HDD']][] = array('Timestamp' => $line['Timestamp'],'HumanTimestamp' => timestampToHuman($line['Timestamp']), 'Space' => bytesToHuman($line['Space'],2,1,'GB') , 'Freespace' =>bytesToHuman($line['Freespace'],2,1,'GB'));
|
||||
$lasttimestamp[$line['HDD']] = $line['Timestamp'];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach ($ret as $key => $value){ //Order timestamps ASC
|
||||
$ret[$key] = array_reverse($ret[$key]);
|
||||
|
||||
}
|
||||
return $ret; //Array ret[HDD1][0](Timestamp,HumanTimestamp,Space,Freespace)-[1](Timestamp,HumanTimestamp,Space,Freespace)-....
|
||||
|
||||
}
|
||||
|
||||
/** Sents a command by SSH to server and returns result **/
|
||||
function commandbyssh($host,$port,$user,$pass,$cmd){
|
||||
if ((int)$port == 0){
|
||||
$port = 22;
|
||||
}
|
||||
require_once __DIR__ .'/lib/phpseclib-2.0/phpseclib/bootstrap.php';
|
||||
$ssh = new phpseclib\Net\SSH2($host,$port);
|
||||
if (!$ssh->login($user, $pass)) {
|
||||
if (DEBUG) {echo "ERROR AL CONECTAR|".$user;}
|
||||
return NULL;
|
||||
|
||||
}else{
|
||||
return $ssh->exec($cmd);
|
||||
}
|
||||
}
|
||||
|
||||
//This function is an alias to Twig render, with "standard args" added
|
||||
function renderPage($page,$array = array()){
|
||||
require 'lib/loadTwig.php';
|
||||
global $namepage; //Todo edit this.
|
||||
if (isset($_SESSION['user'])){$allarray['user'] = $_SESSION['user'];}
|
||||
$allarray['namepage'] = $namepage;
|
||||
if (isset($_SESSION['MSG'])){$allarray['msg'] = $_SESSION['MSG'];$_SESSION['MSG'] = NULL;} //Var for showing messages
|
||||
if (isset($_SESSION['MSG_E'])){$allarray['msg_e'] = $_SESSION['MSG_E'];$_SESSION['MSG_E'] = NULL;} //Var for showing messages
|
||||
if (isset($_SESSION['MSG_I'])){$allarray['msg_i'] = $_SESSION['MSG_I'];$_SESSION['MSG_I'] = NULL;} //Var for showing messages
|
||||
$allarray['POST'] = $_POST; //For forms
|
||||
foreach ($array as $key => $value) {
|
||||
$allarray[$key] = $value;
|
||||
}
|
||||
|
||||
if (defined('SGBD')){
|
||||
$allarray['alerts'] = getAlerts();
|
||||
}
|
||||
|
||||
$allarray['sys']['intervalts'] = (30*60);
|
||||
echo $twig->render($page, $allarray);
|
||||
}
|
||||
|
||||
function ping($ip, $timeout = 2,$rTimes = 2) {
|
||||
|
||||
/* ICMP ping packet with a pre-calculated checksum */
|
||||
$retry = 0;
|
||||
while ($retry < $rTimes){ //Retry rTimes times if fail
|
||||
//Create ICMP socket and see if works
|
||||
$package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
|
||||
$socket = socket_create(AF_INET, SOCK_RAW, 1);
|
||||
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
|
||||
socket_connect($socket, $ip, null);
|
||||
|
||||
$ts = microtime(true);
|
||||
socket_send($socket, $package, strLen($package), 0);
|
||||
if (socket_read($socket, 255))
|
||||
$result = microtime(true) - $ts;
|
||||
else $result = -1; // Never returns, host off or didn't answer
|
||||
socket_close($socket);
|
||||
|
||||
if ($result != -1){
|
||||
return round($result,3);
|
||||
}else{
|
||||
return 100;
|
||||
$retry++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1; //If in rTimes doesn't connect, return error
|
||||
}
|
||||
|
||||
function getStatus($ID_C){
|
||||
$T_ = loadLang();
|
||||
$db_conn = getconn();
|
||||
$resql = dbw_query($db_conn,"SELECT code FROM CHKHIST WHERE ID_C='$ID_C' ORDER BY `timestamp` DESC LIMIT 5");
|
||||
$err = 0;
|
||||
while ($x = dbw_fetch_array($db_conn,$resql)){
|
||||
if ($x['code'] != 0){
|
||||
$err++;
|
||||
}
|
||||
}
|
||||
switch ($err){
|
||||
case 0:
|
||||
case 1:
|
||||
return array($T_['status_right'],'green');
|
||||
break;
|
||||
case 2:
|
||||
return array($T_['status_lproblems'],'blue');
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
return array($T_['status_problems'],'orange');
|
||||
break;
|
||||
default: // > 4
|
||||
return array($T_['status_outofserv'],'red');
|
||||
break;
|
||||
}
|
||||
function encodePassword($str,$IV){
|
||||
//$IV = randomString(16); //For secure encoding
|
||||
return base64_encode(openssl_encrypt($str, 'aes-256-ctr', ENCPASSWD, false, $IV));
|
||||
}
|
||||
|
||||
function decodePassword($str,$IV){
|
||||
//$IV = randomString(16); //For secure encoding
|
||||
return openssl_decrypt(base64_decode($str), 'aes-256-ctr', ENCPASSWD, false, $IV);
|
||||
}
|
||||
|
||||
/** This function returns all data from server in array, do not overuse this function **/
|
||||
function serverData($ID_SERV){
|
||||
$db_conn = dbconn();
|
||||
|
||||
//For HDD Stats
|
||||
if (isset($_GET['backto']) && (int)$_GET['backto']) {
|
||||
$backto = (int)$_GET['backto'] * 24*3600;
|
||||
}else if (isset($_POST['backto']) && (int)$_POST['backto']) {
|
||||
$backto = (int)$_POST['backto'] * 24*3600;
|
||||
}else{
|
||||
$backto = 24*3600; //Un día
|
||||
}
|
||||
|
||||
$serv = dbw_query_fetch_array($db_conn,"SELECT * FROM SERVERS WHERE ID_SERV='$ID_SERV'");
|
||||
|
||||
if (!$serv){ //No server with this ID? Return null
|
||||
return NULL;
|
||||
}
|
||||
|
||||
$servEnabled = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM S_SERVICES WHERE ID_SERV='$serv[ID_SERV]' AND `Enabled`=1")[0];
|
||||
$servDisabled = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM S_SERVICES WHERE ID_SERV='$serv[ID_SERV]' AND `Enabled`=0")[0];
|
||||
|
||||
if ($servEnabled){
|
||||
$servActive = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM S_SERVICES WHERE `Status`=1 AND ID_SERV='$serv[ID_SERV]' AND `Enabled`=1")[0];
|
||||
$servInactive = $servEnabled - $servActive;
|
||||
}else{
|
||||
$servActive = 0;
|
||||
$servEnabled = 0;
|
||||
}
|
||||
|
||||
$sql = dbw_query($db_conn,"SELECT * FROM S_INGROUP WHERE ID_SERV='$ID_SERV'");
|
||||
$listidg = array();
|
||||
while ($line = dbw_fetch_array($db_conn,$sql)){
|
||||
$listidg[$line['ID_G']] = array(
|
||||
'ID_G' => $line['ID_G'],
|
||||
'Name' => nameFromID_G($line['ID_G'])
|
||||
);
|
||||
}
|
||||
$ping = dbw_query_fetch_array($db_conn,"SELECT `Value` FROM S_HISTPING WHERE ID_SERV='$serv[ID_SERV]' ORDER BY `Timestamp` DESC LIMIT 1")[0];
|
||||
|
||||
list($serv['Freeram'],$serv['Detram']) = dbw_query_fetch_array($db_conn,"SELECT `Freeram`,`Detram` FROM S_HISTRAM WHERE ID_SERV='$ID_SERV' ORDER BY `Timestamp` DESC LIMIT 1");
|
||||
return array(
|
||||
'ID_SERV' => $serv['ID_SERV'],
|
||||
'Name' => trim($serv['Name']),
|
||||
'Description' => trim($serv['Description']),
|
||||
'IP' => trim($serv['IP']),
|
||||
'SO' => trim($serv['SO']),
|
||||
'Version' => $serv['Version'],
|
||||
'InGroups' => $listidg,
|
||||
'Online' => $serv['Online'],
|
||||
'Enabled' => $serv['Enabled'],
|
||||
'Ping' => $ping,
|
||||
'BadCreds' => $serv['BadCreds'],
|
||||
'Uptime' => showUptime($serv['Uptime']),
|
||||
'Freeram' => bytesToHuman($serv['Freeram']),
|
||||
'Detram' => bytesToHuman($serv['Detram']),
|
||||
'Usedram' => bytesToHuman($serv['Detram']-$serv['Freeram']),
|
||||
'HDDFastStats' => getFastHddStats($serv['ID_SERV']),
|
||||
'HDDData' => getHistoricHddStats($serv['ID_SERV'],$backto),
|
||||
'STotal' => ($servEnabled + $servDisabled),
|
||||
'SEnabled' => $servEnabled,
|
||||
'SDisabled' => $servDisabled,
|
||||
'SActive' => $servActive,
|
||||
'SInactive' => ($servEnabled - $servActive),
|
||||
'LastCheck' => $serv['LastCheck'],
|
||||
'AlertHDD' => hasalert($ID_SERV,'HDD')
|
||||
);
|
||||
}
|
||||
|
||||
function getPerm($perm){
|
||||
if ($_SESSION['user'][$perm] ||$_SESSION['user']['PE_admin']){ //Admin has all rights
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function showdeb($str){
|
||||
if (DEBUG){
|
||||
//echo "<p>Debug: ".$str."</p>";
|
||||
sendmsg('info','Debug: '.var_dump($str));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/** Ping a WebSite */
|
||||
function ping($host,$port = '80') {
|
||||
$fP = fSockOpen($host, $port, $errno, $errstr, 3); //Host,port,Err,ErrString,Timeout(Sec)
|
||||
//echo "Error:$errno";
|
||||
return $fP ? "0" : "1";
|
||||
function cleanData($str,$raw = 0){
|
||||
if (!is_array($str)){
|
||||
return htmlentities(trim($str),ENT_QUOTES);
|
||||
}else{
|
||||
return $str; //Arrays not clean yet
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** Returns web root (ie. http://jkanetwork.com) */
|
||||
function webRoot(){
|
||||
$root = isset($_SERVER['HTTPS']) ? "https://" : "http://"; //Variable = condicion ? Verdadero : Falso
|
||||
return $root . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
|
||||
|
||||
function nameFromID_G($ID_G){
|
||||
$ID_G = (int)$ID_G;
|
||||
return dbw_query_fetch_array(dbconn(),"SELECT `Name` FROM GROUPS WHERE ID_G='$ID_G'")[0];
|
||||
}
|
||||
|
||||
/** Returns a system option */
|
||||
function getSystemOpt($sysopt){
|
||||
return dbw_query_fetch_array(getconn(),"SELECT * FROM SYS WHERE option = '$sysopt'")['value'];
|
||||
//Send msg to twig template to see it. Its an array
|
||||
function sendmsg($type,$str){
|
||||
switch ($type){
|
||||
case 'ok':
|
||||
$_SESSION['MSG'][] = $str;
|
||||
break;
|
||||
case 'error':
|
||||
$_SESSION['MSG_E'][] = $str;
|
||||
break;
|
||||
case 'info':
|
||||
$_SESSION['MSG_I'][] = $str;
|
||||
break;
|
||||
case 'debug':
|
||||
$_SESSION['MSG_I'][] = 'Debug: '.$str;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/** Return HttpCode of page. Returns false if page is not found (Used in cron) */
|
||||
function httpCode($url, $wait = 5)
|
||||
{
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_HEADER, TRUE);
|
||||
curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, $wait); //timeout in seconds
|
||||
$head = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
return $head ? $httpCode : FALSE;
|
||||
}
|
||||
|
||||
/** Return a String of $lenght chars */
|
||||
function RandomString($length)
|
||||
{
|
||||
//https://phpes.wordpress.com/2007/06/12/generador-de-una-cadena-aleatoria/
|
||||
$source = 'abcdefghijklmnopqrstuvwxyz';
|
||||
$source .= '1234567890';
|
||||
//https://phpes.wordpress.com/2007/06/12/generador-de-una-cadena-aleatoria/
|
||||
$source = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
|
||||
if($length>0){
|
||||
$rstr = "";
|
||||
$source = str_split($source,1);
|
||||
for($i=1; $i<=$length; $i++){
|
||||
mt_srand((double)microtime() * 1000000);
|
||||
$num = mt_rand(1,count($source));
|
||||
$rstr .= $source[$num-1];
|
||||
}
|
||||
@@ -108,73 +330,194 @@ function RandomString($length)
|
||||
return $rstr;
|
||||
}
|
||||
|
||||
/** 1 if its logued, 0 if not */
|
||||
function isLogued(){
|
||||
if (isset($_SESSION['UserID'])){
|
||||
return 1;
|
||||
}else{
|
||||
return 0;
|
||||
function removeEmptyLines($arr){
|
||||
for ($x = 0;$x < count($arr);$x++){
|
||||
if (strlen($arr[$x]) == 0 ||!$arr[$x]){
|
||||
array_splice($arr,$x,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
function requireLogin(){
|
||||
if (isLogued() == 0){
|
||||
die('You dont have admin rights'); //This blocks edit or create nothing if its not logued
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
function nameFromIDC($ID_C){
|
||||
return dbw_query_fetch_array(getconn(),"SELECT name FROM CHECKS WHERE ID_C='$ID_C'")[0];
|
||||
}
|
||||
|
||||
function nameGroupFromIDG($ID_G){
|
||||
return dbw_query_fetch_array(getconn(),"SELECT ID_G,name FROM GROUPS WHERE ID_G='$ID_G'")['name'];
|
||||
}
|
||||
|
||||
function IDGFromIDC($ID_C){
|
||||
return dbw_query_fetch_array(getconn(),"SELECT ID_G FROM CHECKS WHERE ID_C='$ID_C'")['ID_G'];
|
||||
}
|
||||
|
||||
/* This funtion returns the array with type of checks */
|
||||
function arrayTypeChk(){
|
||||
return array(
|
||||
1 => 'PING_IP',
|
||||
2 => 'HTTP_CODE',
|
||||
3 => 'VISIT_COUNT',
|
||||
4 => 'DATABASE',
|
||||
5 => 'JSON_API');
|
||||
}
|
||||
/* This funtion returns the translated text of a type check */
|
||||
function textTypeChk($typeChk){
|
||||
$T_ = loadLang();
|
||||
$arr = array(
|
||||
1 => $T_['PING_IP'],
|
||||
2 => $T_['HTTP_CODE'],
|
||||
3 => $T_['VISIT_COUNT'],
|
||||
4 => $T_['DATABASE'],
|
||||
5 => $T_['JSON_API']
|
||||
);
|
||||
return $arr[$typeChk];
|
||||
}
|
||||
|
||||
//This function is an alias to Twig render, with "standard args" added
|
||||
function renderPage($page,$array = array()){
|
||||
$T_ = loadLang(); //Load transactions
|
||||
//Default params to send
|
||||
$allarray = array(
|
||||
'version' => VERSION,
|
||||
'T_' => $T_,
|
||||
);
|
||||
|
||||
foreach ($array as $key => $value) {
|
||||
$allarray[$key] = $value;
|
||||
function enviarcorreo($ID_SERV,$type,$msg){
|
||||
$db_conn = dbconn();
|
||||
dbw_query($db_conn,"INSERT INTO MAIL (ID_SERV,`Type`,Msg) VALUES ('$ID_SERV','$type','$msg')");
|
||||
$lastid = dbw_last_id($db_conn);
|
||||
$mails = listaMails();
|
||||
if ($mails != NULL){
|
||||
foreach($mails as $mail){
|
||||
mail ($mail,'Incidencias',$type.' \n'.$msg);
|
||||
}
|
||||
//Add to sent
|
||||
dbw_query($db_conn,"UPDATE MAIL SET `Sent`=1 WHERE ID_M='$lastid'");
|
||||
}
|
||||
require 'lib/loadTwig.php';
|
||||
echo $twig->render($page, $allarray);
|
||||
//dbw_query($db_conn,"DELETE FROM MAIL WHERE `Sent`=1"); //Delete sent messages
|
||||
|
||||
}
|
||||
|
||||
function loadLang(){
|
||||
//Translations
|
||||
require __DIR__."/assets/translations/en.php"; //Ever first English, and then your lang (Database)
|
||||
require __DIR__."/assets/translations/".LANG.".php";
|
||||
return $T_;
|
||||
function listaMails(){
|
||||
$db_conn = dbconn();
|
||||
$query = dbw_query($db_conn,"SELECT Email FROM USERS WHERE SendMail = '1'");
|
||||
while ($line = dbw_fetch_array($db_conn,$query)){
|
||||
$mail[] = $line['Email'];
|
||||
}
|
||||
if (!isset($mail)){
|
||||
return NULL;
|
||||
}else{
|
||||
return $mail;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function gestionAlerta($server,$type,$nameParam,$status){
|
||||
$db_conn = dbconn();
|
||||
$ID_SERV = (int)$server['ID_SERV'];
|
||||
switch ($type) {
|
||||
case 'PING':
|
||||
$hasalert = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM P_ALERTS WHERE ID_SERV='$ID_SERV' AND `Type` = 'PING'")[0];
|
||||
if ($hasalert == 0 && $status == 0){ //Apagado
|
||||
enviarcorreo($ID_SERV,$type,'El servidor '.$server['Name'].' está apagado / no responde a Ping');
|
||||
newAlert($ID_SERV,$type,'','El servidor '.$server['Name'].' está apagado / no responde a Ping');
|
||||
|
||||
}else if ($hasalert && $status == 1){ //Todo bien
|
||||
enviarcorreo($ID_SERV,$type,'El servidor '.$server['Name'].' vuelve a estar disponible / responde al Ping');
|
||||
deleteAlert($ID_SERV,$type);
|
||||
}
|
||||
break;
|
||||
case 'SERVICE':
|
||||
$service = $nameParam;
|
||||
$hasalert = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM P_ALERTS WHERE ID_SERV='$ID_SERV' AND `Type`='SERVICE' AND `Param`='$service'")[0];
|
||||
if ($hasalert == 0 && $status == 0){ //Se ha caido
|
||||
enviarcorreo($ID_SERV,$type.'.'.$service,'El servicio '.$service.' del servidor '.$server['Name'] .' ('.$server['IP'].') no responde');
|
||||
newAlert($ID_SERV,$type,$service,'El servicio '.$service.' del servidor '.$server['Name'] .' ('.$server['IP'].') no responde');
|
||||
}else if ($hasalert && $status == 1){ //Volvió
|
||||
enviarcorreo($ID_SERV,$type.'.'.$service,'El servicio '.$service.' del servidor '.$server['Name'] .' ('.$server['IP'].') ya responde');
|
||||
deleteAlert($ID_SERV,$type,$service);
|
||||
}
|
||||
break;
|
||||
case 'HDD':
|
||||
$disk = $nameParam;
|
||||
$hasalert = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM P_ALERTS WHERE ID_SERV='$ID_SERV' AND `Type` = 'HDD' AND `Param`='$disk'")[0];
|
||||
if ($hasalert == 0 && $status == 0){ //Espacio bajo
|
||||
enviarcorreo($ID_SERV,$type.'.'.$disk,'El disco duro '.$disk.' del servidor '.$server['Name'] .' tiene poco espacio disponible');
|
||||
newAlert($ID_SERV,$type,$disk,'El disco duro '.$disk.' del servidor '.$server['Name'] .' tiene poco espacio disponible');
|
||||
}else if ($hasalert && $status == 1){ //Todo bien
|
||||
enviarcorreo($ID_SERV,$type.'.'.$disk,'El disco duro '.$disk.' del servidor '.$server['Name'] .' ya tiene más espacio disponible');
|
||||
deleteAlert($ID_SERV,$type,$disk);
|
||||
}
|
||||
break;
|
||||
case 'RAM':
|
||||
$percent = $nameParam;
|
||||
$hasalert = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM P_ALERTS WHERE ID_SERV='$ID_SERV' AND `Type` = 'RAM'")[0];
|
||||
if ($hasalert == 0 && $status == 0){ //RAM bajo
|
||||
enviarcorreo($ID_SERV,$type,'El servidor '.$server['Name'] .' tiene poca RAM disponible ('.$percent.')');
|
||||
newAlert($ID_SERV,$type,$disk,'El servidor '.$server['Name'] .' tiene poca RAM disponible ('.$percent.')');
|
||||
}else if ($hasalert && $status == 1){ //Todo bien
|
||||
enviarcorreo($ID_SERV,$type,'El servidor '.$server['Name'] .' ya tiene más RAM disponible');
|
||||
deleteAlert($ID_SERV,$type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function newAlert($ID_SERV,$type,$param,$msg){
|
||||
$time = time();
|
||||
dbw_query(dbconn(),"INSERT INTO P_ALERTS (ID_SERV,`Type`,`Param`,`Timestamp`,`Msg`) VALUES ('$ID_SERV','$type','$param','$time','$msg')");
|
||||
}
|
||||
function deleteAlert($ID_SERV,$type,$param = NULL){
|
||||
if ($param == NULL){
|
||||
dbw_query(dbconn(),"DELETE FROM P_ALERTS WHERE ID_SERV='$ID_SERV' AND `Type`='$type'");
|
||||
}else{
|
||||
dbw_query(dbconn(),"DELETE FROM P_ALERTS WHERE ID_SERV='$ID_SERV' AND `Type`='$type' AND `Param`='$param'");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function getAlerts(){
|
||||
$db_conn = dbconn();
|
||||
$query = dbw_query($db_conn,"SELECT * FROM P_ALERTS ORDER BY `Timestamp` DESC");
|
||||
while ($line = dbw_fetch_array($db_conn,$query)){
|
||||
//$type = strtolower(explode('.',$line['Type'])[0]);
|
||||
$servName = dbw_query_fetch_array($db_conn,"SELECT `Name` FROM SERVERS WHERE ID_SERV='$line[ID_SERV]'")[0];
|
||||
$alert[] = array(
|
||||
'ID_SERV' => $line['ID_SERV'],
|
||||
'Type' => $line['Type'],
|
||||
'Param' => $line['Param'],
|
||||
'Timestamp' => timestampToHuman($line['Timestamp']),
|
||||
'Text' => $line['Msg'],
|
||||
'ServName' => $servName
|
||||
);
|
||||
}
|
||||
if (!isset($alert)) return NULL;
|
||||
return $alert;
|
||||
}
|
||||
|
||||
function timestampToHuman($timestamp){
|
||||
return date('d-m-y H:i',$timestamp);
|
||||
}
|
||||
|
||||
function percalertfor($str){
|
||||
$value = dbw_query_fetch_array(dbconn(),"SELECT `Value` FROM SYS WHERE `Option`='${str}ALERT'")[0];
|
||||
if (!$value){
|
||||
return NULL;
|
||||
}else{
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
//Return 1 is alert is going, 0 if not alerts of this type
|
||||
function hasalert($ID_SERV,$type){
|
||||
if (dbw_query_fetch_array(dbconn(),"SELECT COUNT(*) FROM P_ALERTS WHERE ID_SERV='$ID_SERV' AND `Type`='$type'")[0]){
|
||||
return 1;
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function getsysopt($opt){
|
||||
$value = dbw_query_fetch_array(dbconn(),"SELECT `Value` FROM SYS WHERE `Option`='${opt}'")[0];
|
||||
if (!$value){
|
||||
return NULL;
|
||||
}else{
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function toggle_server_svc($ID_SERV,$servicename){
|
||||
|
||||
$server = serverData($ID_SERV); //Load server data
|
||||
|
||||
list($name,$status) = dbw_query_fetch_array($db_conn,"SELECT `Name`,`Status` FROM S_SERVICES WHERE ID_SERV='$ID_SERV' AND `Name`='$servicename'");
|
||||
|
||||
if ($status == 0){ //Estaba parado, arrancar
|
||||
switch ($server['SO']){
|
||||
case 'LINUX_SYSTEMD':
|
||||
commandbyssh($server['IP'],$server['SSHPort'],$server['User'],$server['Password'],'systemctl restart '.$servicename.'>/dev/null');
|
||||
|
||||
break;
|
||||
case 'LINUX_SERVICE':
|
||||
commandbyssh($server['IP'],$server['SSHPort'],$server['User'],$server['Password'],'service '.$servicename.' start;');
|
||||
|
||||
break;
|
||||
}
|
||||
}else{ //Esta arrancado, parar
|
||||
switch ($so){
|
||||
case 'LINUX_SYSTEMD':
|
||||
commandbyssh($server['IP'],$server['SSHPort'],$server['User'],$server['Password'],'systemctl stop '.$servicename.'>/dev/null');
|
||||
|
||||
break;
|
||||
case 'LINUX_SERVICE':
|
||||
commandbyssh($server['IP'],$server['SSHPort'],$server['User'],$server['Password'],'service '.$servicename.' stop;');
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user