From ee369fba6a174fa802c1eed2baf7e23a1ca31f62 Mon Sep 17 00:00:00 2001 From: Kevin Puertas Date: Sat, 17 Oct 2020 17:53:20 +0200 Subject: [PATCH] BSD Disks and Fix on Linux calculations of space --- cron/servers.php | 49 ++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/cron/servers.php b/cron/servers.php index 7dbcf4b..ee876fd 100644 --- a/cron/servers.php +++ b/cron/servers.php @@ -149,12 +149,11 @@ function cron_status($db_conn,$time,$pc){ $resu = commandbyssh($pc['IP'],$pc['SSHPort'],$pc['User'],$pass,'sysctl hw.physmem'); $line = preg_replace("/[[:blank:]]+/",' ',$resu); $part = explode(' ',$line); - //Mem: total used free shared buff/cache available $detram = $part[1]; //Total RAM $resu = commandbyssh($pc['IP'],$pc['SSHPort'],$pc['User'],$pass,'vmstat | grep -E \'([0-9]+\w+)+\' | awk \'{print $5}\''); $line = preg_replace("/[[:blank:]]+/",' ',$resu); - $freeram = $line; //Free RAM + $freeram = $line*1024; //Free RAM (In Bytes) break; } dbw_query($db_conn,"INSERT INTO S_HISTRAM (ID_SERV,`Timestamp`,Freeram,Detram) VALUES ('$pc[ID_SERV]','$time','$freeram','$detram')"); @@ -188,31 +187,33 @@ function cron_status($db_conn,$time,$pc){ $unidades[] = array ($part[0],$part[2],$part[1]); } } - }else{ //Systemd and init goes same way + }else if ($pc['SO'] == "BSD"){ //BSD "Standard" command df, not as GNU/Linux df one + $resu = commandbyssh($pc['IP'],$pc['SSHPort'],$pc['User'],$pass,'exec df -P -k -t notmpfs,devfs,fdescfs | tail -n+2'); + $explines = preg_split('/[\r\n]+/', $resu); + foreach($explines as $line){ + $line = preg_replace("/[[:blank:]]+/",' ',$line); + $part = explode(' ',$line); + //Filesystem 1024-blocks Used Avail Capacity Mounted on + if (isset($part[1])){ + $unidades[] = array ($part[5],$part[1]*1024,$part[3]*1024);//Drive, Space, FreeSpace (*1024 because has to be in bytes) + } + } + }else{ //LINUX. Almost standard df //I use exec for avoid alias that bash can have (Anarchy has a custom df alias for example) - $resu = commandbyssh($pc['IP'],$pc['SSHPort'],$pc['User'],$pass,'exec df -P -B1 --output=fstype,size,avail,target -x tmpfs -x udev -x devtmpfs | tail -n+2'); + $resu = commandbyssh($pc['IP'],$pc['SSHPort'],$pc['User'],$pass,'exec df --output=source,size,used,avail,pcent,target -B1 -x tmpfs -x udev -x devtmpfs | tail -n+2'); - if (strpos ($resu , 'df --help')){ //Esto suele pasar en redhat y centos porque No soportan --output Probamos alternativa que parece ser estandar en estos sistemas + if (strpos ($resu , 'df --help')){ //This can happen in some OS like redhat or centos because no support of --output. We try to use standard POSIX option $resu = commandbyssh($pc['IP'],$pc['SSHPort'],$pc['User'],$pass,'exec df -P -B1 -x tmpfs -x udev -x devtmpfs | tail -n+2'); - $explines = preg_split('/[\r\n]+/', $resu); - foreach($explines as $line){ - $line = preg_replace("/[[:blank:]]+/",' ',$line); - $part = explode(' ',$line); - //S.ficheros Bloques de 1 Usado Dispon Ocupado Montado en - if (isset($part[1])){ - $unidades[] = array ($part[5],$part[1],$part[3]);//Drive, Space, FreeSpace - } - } - }else{ //Si el comando acabó correctamente, todo estandar (Centos 6+, Debian, Ubuntu...) - $explines = preg_split('/[\r\n]+/', $resu); - foreach($explines as $line){ - $line = preg_replace("/[[:blank:]]+/",' ',$line); - $part = explode(' ',$line); - //S.ficheros,Tamaño,Usado,Montado en - if (isset($part[1])){ - $unidades[] = array ($part[3],$part[1],$part[2]);//Drive, Space, FreeSpace - } - } + } + + $explines = preg_split('/[\r\n]+/', $resu); + foreach($explines as $line){ + $line = preg_replace("/[[:blank:]]+/",' ',$line); + $part = explode(' ',$line); + //S.ficheros Bloques de 1 Usado Dispon Ocupado Montado en + if (isset($part[1])){ + $unidades[] = array ($part[5],$part[1],$part[3]);//Drive, Space, FreeSpace + } } }