Current File : //root/panel/diskusage.php
<?php

include_once('/etc/sentora/panel/cnf/db.php');
include_once('/etc/sentora/panel/dryden/db/driver.class.php');
include_once('/etc/sentora/panel/dryden/ctrl/options.class.php');
include_once('/etc/sentora/panel/dryden/runtime/controller.class.php');
include_once('/etc/sentora/panel/dryden/runtime/hash.class.php');
include_once('/etc/sentora/panel/dryden/ctrl/auth.class.php');
include_once('/etc/sentora/panel/dryden/fs/director.class.php');
include_once('/etc/sentora/panel/dryden/fs/filehandler.class.php');
include_once('/etc/sentora/panel/dryden/runtime/dataobject.class.php');
include_once('/etc/sentora/panel/dryden/runtime/hook.class.php');
include_once('/etc/sentora/panel/dryden/debug/logger.class.php');
include_once('/etc/sentora/panel/dryden/sys/versions.class.php');
include_once('/etc/sentora/panel/dryden/ctrl/users.class.php');
include_once('/etc/sentora/panel/dryden/sys/bandwidth.class.php');
try 
{
	$zdbh = new db_driver("mysql:host=" . $host . ";dbname=" . $dbname . "", $user, $pass);
} catch (PDOException $e) 
{
	exit();
}

/*Kesav Code Start for Server Load*/

$load = sys_getloadavg();
if ($load[0] < 10) {
	
	echo "Server Load Less than 10: ".$load[0]."\n";

/*Kesav Code End*/

//global $zdbh;

///////////////////////////////////// Mysql DB check Start ////////////////////////////////////////
		$z_db_user = $user;
		$z_db_pass = $pass;
		$mysqlsql = $zdbh->query("SELECT my_id_pk, my_name_vc FROM x_mysql_databases WHERE my_deleted_ts IS NULL");
		while ($database = $mysqlsql->fetch()) 
		{
	// SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'DBName'
			try
			{
				$currentdb = new db_driver("mysql:host=$host;dbname=" . $database['my_name_vc'] . "", $z_db_user, $z_db_pass);
				$currentdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
				$dbsize = $currentdb->query("SHOW TABLE STATUS");
				$dbgetsize = 0;
				while ($row = $dbsize->fetch()) 
				{
					$dbgetsize = $dbgetsize + ($row['Data_length'] + $row['Index_length']);
				}
				//$zdbh->query("UPDATE x_mysql_databases SET my_usedspace_bi = '" . $dbgetsize . "' WHERE my_id_pk =" . $database['my_id_pk'] . "");
				$numrows = $zdbh->prepare("UPDATE x_mysql_databases SET my_usedspace_bi = :dbgetsize WHERE my_id_pk =:my_id_pk");
				$numrows->bindParam(':dbgetsize', $dbgetsize);
				$numrows->bindParam(':my_id_pk', $database['my_id_pk']);
				$numrows->execute();
			}
			catch(Exception $e) 
			{
				echo 'Message: ' .$e->getMessage();
			}
	//echo "Database found: " . $database['my_name_vc'] . " - " . $dbgetsize . " \n";
		}


/////////////////////////////////////////////// Mysql DB check End   ////////////////////////////////////////////////

/* //////////////////////////////////////  Mailbox size calculate Start ////////////////////////////////////////// */

		$sql = "SELECT * FROM x_mailboxes WHERE  mb_deleted_ts IS NULL ORDER BY mb_address_vc ASC";
		$sql = $zdbh->prepare($sql);
		//$sql->bindParam(':userid', $currentuser['userid']);
		$sql->execute();
		while ($rowmailboxes = $sql->fetch()) {

			/*kesavan code for memory*/
			$mail_input = $rowmailboxes['mb_address_vc'];
			$maill_array = explode( '@', $mail_input ) ;
			$path = "/var/sentora/vmail/";
			$mail_path = $maill_array[0];
			$domain_path = $maill_array[1];
			$total = $path."".$domain_path."/".$maill_array[0];
			$size = shell_exec("du -scL $total | cut -f1 | awk '{print $1; exit}'");
			$updatesql = $zdbh->prepare("UPDATE x_mailboxes SET mb_size = :size WHERE mb_address_vc =:mail");
			$updatesql->bindParam(':size', $size);
			$updatesql->bindParam(':mail', $mail_input);
			$updatesql->execute();
			/*End*/
		}

/* //////////////////////////////  Mailbox size calculate End //////////////////////////// */

/*
* Calculate the home directory size for each 'active' user account on the server.
*/
		$userssql = $zdbh->query("SELECT ac_id_pk, ac_user_vc FROM x_accounts WHERE ac_deleted_ts IS NULL");
		echo fs_filehandler::NewLine() . "START Calculating disk Usage for all client accounts.." . fs_filehandler::NewLine();
		while ($userdir = $userssql->fetch()) {
			$homedirectory = ctrl_options::GetSystemOption('hosted_dir') . $userdir['ac_user_vc'];
			$size = 0;
			if (fs_director::CheckFolderExists($homedirectory)) {
				// $size = fs_director::GetDirectorySize($homedirectory);
				$size = shell_exec("du -sbL $homedirectory");
			}	 
			$currentuser = ctrl_users::GetUserDetail($userdir['ac_id_pk']);
			$numrows = $zdbh->prepare("SELECT COUNT(*) AS total FROM x_bandwidth WHERE bd_month_in = :date AND bd_acc_fk = :ac_id_pk");
			$date = date("Ym");
			$numrows->bindParam(':date', $date);
			$numrows->bindParam(':ac_id_pk', $userdir['ac_id_pk']);
			$numrows->execute();
			$checksql = $numrows->fetch();

			if ($checksql['total'] == 0) {
				$numrows3 = $zdbh->prepare("INSERT INTO x_bandwidth (bd_acc_fk, bd_month_in, bd_transamount_bi, bd_diskamount_bi, bd_diskover_in, bd_diskcheck_in, bd_transover_in, bd_transcheck_in ) VALUES (:ac_id_pk,:date,0,0,0,0,0,0);");
				$date = date("Ym");
				$numrows3->bindParam(':date', $date);
				$numrows3->bindParam(':ac_id_pk', $userdir['ac_id_pk']);
				$numrows3->execute();
			}

			$updatesql = $zdbh->prepare("UPDATE x_bandwidth SET bd_diskamount_bi = :size WHERE bd_acc_fk =:ac_id_pk");
			$updatesql->bindParam(':size', $size);
			$updatesql->bindParam(':ac_id_pk', $userdir['ac_id_pk']);
			$updatesql->execute();

			$numrows = $zdbh->prepare("SELECT * FROM x_bandwidth WHERE bd_month_in = :date AND bd_acc_fk = :ac_id_pk");
			$date = date("Ym");
			$numrows->bindParam(':date', $date);
			$numrows->bindParam(':ac_id_pk', $userdir['ac_id_pk']);
			$numrows->execute();
			$checksize = $numrows->fetch();

			if ($checksize['bd_diskamount_bi'] > $currentuser['diskquota']) {
				$updatesql = $zdbh->prepare("UPDATE x_bandwidth SET bd_diskover_in = 1 WHERE bd_acc_fk =:ac_id_pk");
				$updatesql->bindParam(':ac_id_pk', $userdir['ac_id_pk']);
				$updatesql->execute();
			} else {
				$updatesql = $zdbh->prepare("UPDATE x_bandwidth SET bd_diskover_in = 0 WHERE bd_acc_fk =:ac_id_pk");
				$updatesql->bindParam(':ac_id_pk', $userdir['ac_id_pk']);
				$updatesql->execute();
			}
			echo "Disk usage for user \"" . $userdir['ac_user_vc'] . "\" is: " . $size . " (" . fs_director::ShowHumanFileSize($size) . ")" . fs_filehandler::NewLine();
		}
		echo "END Calculating disk usage" . fs_filehandler::NewLine();


/*
* Calculate the bandwidth used for each user.
*/
		$checksql = $zdbh->query("SELECT COUNT(*) AS total FROM x_vhosts WHERE vh_deleted_ts IS NULL")->fetch();
		echo fs_filehandler::NewLine() . "START Calculating bandwidth usage for all client accounts.." . fs_filehandler::NewLine();
		if ($checksql['total'] > 0) {
			$domainssql = $zdbh->query("SELECT vh_acc_fk, vh_name_vc FROM x_vhosts WHERE vh_deleted_ts IS NULL");
			while ($domain = $domainssql->fetch()) {
				$domainowner=ctrl_users::GetUserDetail($domain['vh_acc_fk']);
				$bandwidthlog=ctrl_options::GetSystemOption('log_dir').'domains/'.$domainowner['username'].'/'.$domain['vh_name_vc'].'-bandwidth.log';
				$snapshotfile=ctrl_options::GetSystemOption('log_dir').'domains/'.$domainowner['username'].'/'.$domain['vh_name_vc'].'-snapshot.bw';
				$bandwidth = 0;
				echo "Processing domain \"" . $domain['vh_name_vc'] . "\"" . fs_filehandler::NewLine();
				if (fs_director::CheckFileExists($bandwidthlog)) {
					fs_filehandler::CopyFile($bandwidthlog, $snapshotfile);
					if (fs_director::CheckFileExists($snapshotfile)) {
						fs_filehandler::ResetFile($bandwidthlog);
						echo "Generating bandwidth.. " . fs_filehandler::NewLine();
						$bandwidth = sys_bandwidth::CalculateFromApacheLog($snapshotfile);
						unlink($snapshotfile);
						echo "usage: ".$bandwidth." (".fs_director::ShowHumanFileSize($bandwidth).")".fs_filehandler::NewLine();
					}
				}
				if (!fs_director::CheckForEmptyValue($bandwidth)) {
					$numrows = $zdbh->prepare("UPDATE x_bandwidth SET bd_transamount_bi=(bd_transamount_bi+:bandwidth) WHERE bd_acc_fk = :vh_acc_fk AND bd_month_in = :date");
					$numrows->bindParam(':bandwidth', $bandwidth);
					$date = date("Ym");
					$numrows->bindParam(':date', $date);
					$numrows->bindParam(':vh_acc_fk', $domain['vh_acc_fk']);
					$numrows->execute();            
				} else {
					echo "No bandwidth used, skipping!" . fs_filehandler::NewLine();
				}
				$numrows = $zdbh->prepare("SELECT * FROM x_bandwidth WHERE bd_month_in = :date AND bd_acc_fk = :vh_acc_fk");
				$date = date("Ym");
				$numrows->bindParam(':date', $date);
				$numrows->bindParam(':vh_acc_fk', $domain['vh_acc_fk']);
				$numrows->execute();
				$checksize = $numrows->fetch();
		
				if ($checksize['bd_transamount_bi'] > $domainowner['bandwidthquota']) {
					$updatesql = $zdbh->prepare("UPDATE x_bandwidth SET bd_transover_in = 1 WHERE bd_acc_fk = :vh_acc_fk");
					$updatesql->bindParam(':vh_acc_fk', $domain['vh_acc_fk']);
					$updatesql->execute();
				} else {
					$updatesql = $zdbh->prepare("UPDATE x_bandwidth SET bd_transover_in = 0 WHERE bd_acc_fk =:vh_acc_fk");
					$updatesql->bindParam(':vh_acc_fk', $domain['vh_acc_fk']);
					$updatesql->execute();
				}
			}
		}
		echo "END Calculating bandwidth usage" . fs_filehandler::NewLine();
///////////////////////////////////   Disk Usage Start  ///////////////////////////////////////
		echo "Disk Usage Start ".fs_filehandler::NewLine();
		$user_sql= $zdbh->prepare(" select * from x_accounts where ac_deleted_ts IS NULL");
		$user_sql->execute();
		while( $account_details = $user_sql->fetch() )
		{
			$acc_key=$account_details['ac_id_pk'];
			echo "Account Id : $acc_key Start".fs_filehandler::NewLine();
			$retval =  0;
			$sql1 = $zdbh->prepare("select sum(my_usedspace_bi) as mysqlusage from  x_mysql_databases where my_acc_fk= :acc_key1  AND my_deleted_ts IS NULL");
			$sql1->bindParam(':acc_key1',$acc_key);
			$sql1->execute();
			$row_count1 = $sql1->rowCount();
			if($row_count1 >0)
			{
				$row1 = $sql1->fetch();
				$retval1 = $row1['mysqlusage'];
				if(is_null($retval1) || $retval1 =="NULL" ) {}
				else {   $retval = $retval + $retval1; }
			}
			$sql2 = $zdbh->prepare("select sum(mb_size) as mailsize from x_mailboxes  where mb_acc_fk= :acc_key2  AND mb_deleted_ts IS NULL");
			$sql2->bindParam(':acc_key2',$acc_key);
			$sql2->execute();
			$row_count2 = $sql2->rowCount();
			if($row_count2 >0)
			{
				$row2 = $sql2->fetch();
				$retval2 = $row2['mailsize'];
				if(is_null($retval2) || $retval2 =="NULL" ) {}
				else {  $retval = $retval + $retval2;  }
			}
			$sql3 =$zdbh->prepare("select vh_name_vc,(select ac_user_vc  from x_accounts where x_accounts.ac_id_pk = x_vhosts.vh_acc_fk and x_accounts.ac_deleted_ts IS NULL ) as username from x_vhosts where vh_acc_fk = :acc_key2 and vh_deleted_ts IS NULL ");
			$sql3->bindParam(':acc_key2',$acc_key);
			$sql3->execute();
			$row_count3 = $sql3->rowCount();
			if($row_count3 >0)
			{
				$row3 = $sql3->fetch();
				$retval3  = $row3['username'];
				$sentora_path =ctrl_options::GetSystemOption('hosted_dir').$retval3;
				if(is_dir($sentora_path))
				{
					$shell_script1 = "du -sL $sentora_path";
					$shell_data1  = shell_exec($shell_script1);
					$shell_data2 = trim(preg_replace('/\s+/', '', $shell_data1));
					$shell_data3 = trim(preg_replace('/\s+/', ' ', $shell_data1));
					if(strlen($shell_data2) > 0 )
					{
						$exp_d = explode(" ",$shell_data3);
						$f_size =  trim(preg_replace('/\s+/', '', $exp_d[0]));
						if(is_numeric($f_size))
						{
							$f_size_b = $f_size * 1024;
							$retval = $retval + $f_size_b;
						}
					}
				}

			}	 
			$sql3 =$zdbh->prepare("select vh_name_vc,(select ac_user_vc  from x_accounts where x_accounts.ac_id_pk = x_vhosts.vh_acc_fk and x_accounts.ac_deleted_ts IS NULL ) as username from x_vhosts where vh_acc_fk = :acc_key2 and vh_deleted_ts IS NULL ");
			$sql3->bindParam(':acc_key2',$acc_key);
			$sql3->execute();
			$row_count3 = $sql3->rowCount();
			if($row_count3 >0)
			{
				$row3 = $sql3->fetch();
				$retval3  = $row3['username'];
				$sentora_path ="/var/sentora/logs/domains/".$retval3;
				if(is_dir($sentora_path))
				{
					$shell_script1 = "du -sL $sentora_path";
					$shell_data1  = shell_exec($shell_script1);
					$shell_data2 = trim(preg_replace('/\s+/', '', $shell_data1));
					$shell_data3 = trim(preg_replace('/\s+/', ' ', $shell_data1));
					if(strlen($shell_data2) > 0 )
					{
						$exp_d = explode(" ",$shell_data3);
						$f_size =  trim(preg_replace('/\s+/', '', $exp_d[0]));
						if(is_numeric($f_size))
						{
							$f_size_b = $f_size * 1024;
							$retval = $retval + $f_size_b;
						}
					}
				}
			} 
	/* //////////////////// Update content ////////////////////// */
			$sqlupdate =$zdbh->prepare("select * from x_diskusage where ac_id_pk=:acc_key2");
			$sqlupdate->bindParam(':acc_key2',$acc_key);
			$sqlupdate->execute();
			$row_count_update = $sqlupdate->rowCount();
			$sqlupdate="";
			if($row_count_update >0)
			{
				//updatesql
				$sqlupdate =$zdbh->prepare("Update x_diskusage set ac_used_space=:acc_used where ac_id_pk=:acc_key2");	
			}
			else
			{
				//insertsql
				$sqlupdate =$zdbh->prepare("INSERT INTO x_diskusage(ac_id_pk,ac_used_space) VALUES(:acc_key2,:acc_used)");
			}
			$sqlupdate->bindParam(':acc_key2',$acc_key);
			$sqlupdate->bindParam(':acc_used',$retval);
			$sqlupdate->execute();
	/* //////////////////// Update content ////////////////////// */
		}
		echo "Disk Usage End".fs_filehandler::NewLine();
/////////////////////////////////////   Disk Usage End    ///////////////////////////////

		/*
		 * Code is added by Sangeeth on 04.07.18
		 * This code is used to check and update the delete time of the databases in sentora which is not having in schema
		 * Code start here
		 */
		$query = "UPDATE x_mysql_databases as a LEFT JOIN information_schema.SCHEMATA as b ON a.my_name_vc = b.schema_name SET a.my_deleted_ts=:time, a.ip_deleted=:ip WHERE b.schema_name IS NULL AND a.my_deleted_ts is NULL;";
		$sql = $zdbh->prepare($query);
		$time = time();
		$ip   = "111111";
		$sql->bindParam(':time', $time);
		$sql->bindParam(':ip', $ip);
		$sql->execute();
		/*
		 * Code is added by Sangeeth on 04.07.18
		 * This code is used to check and update the delete time of the databases in sentora which is not having in schema
		 * Code end here
		 */
}
else
{ echo "Server Load Greater than 10: ".$load[0]; }
?>