/dev/null 2>".EXEC_ERRORFILE." & echo $!");
}
fclose($FD_WRITE);
fclose($BACK_FILE);
$exec_cores = getSystemCpuCores();
file_put_contents(ENGINE_LOCKE_FILE,"");
@chmod(ENGINE_LOCKE_FILE,PERMISSIONVAL);
if($isLocalBackup == 1){
$fileChildProcessPath = $webDir.PATHSEPARATOR.APPDIR.PATHSEPARATOR.SCRIPTS.PATHSEPARATOR.DB_SERVICE_FILE;
$cmd = "$phpPath $fileChildProcessPath";
$localDB_pid_generate = exec("$cmd > /dev/null & echo $!");
}
do
{
if(!($FD_READ = fopen(INFOFILE,"r"))){
$errStr = "Could not open file ".INFOFILE." to read, Reason:".customErrorMsg();
return;
}
#this loop will read info file and for every record it will execute doBackupOperation for backing up the data
while (1){
if(!file_exists(PIDFILE))
break;
if(empty($line)){
$line = fgets($FD_READ);
$line = trim($line);
}
if(empty($line)){
sleep(1);
fseek($FD_READ, 0, SEEK_CUR); #to clear eof flag
continue;
}
if(preg_match("/^BAC_SYNC/", $line)){
$lineSplit = preg_split("/ /", $line,2);
$bacSync = trim($lineSplit[1]);
$line = "";
continue;
}
if(preg_match("/^TOTALFILES/", $line)){
$lineSplit = preg_split("/ /", $line,2);
$totalFiles = trim($lineSplit[1]);
$line = "";
continue;
}
if(preg_match("/^FAILEDCOUNT/", $line)){
$lineSplit = preg_split("/ /", $line,2);
$failedFilesCount = trim($lineSplit[1]);
sleep(2);
break;
}
if($totalEngineBackup > 1 && extension_loaded('pcntl') && function_exists('pcntl_fork') ){
$retVal = isEngineRunning(PIDFILE."_$engineID");
if($retVal === false){
if(isAnyEngineRunning(ENGINE_LOCKE_FILE))
{
#check if any engine is running if running then check down code block or skip
while(1){
if(!file_exists(PIDFILE) or !isAnyEngineRunning(ENGINE_LOCKE_FILE))
break;
$exec_loads = sys_getloadavg();
if($exec_loads[1] > $exec_cores){
sleep(20);
continue;
}
break;
}
}
if(!file_exists(PIDFILE))
break;
array_key_exists( $engineID, $dbIndexCount ) ? $dbIndexCount[$engineID]++ : $dbIndexCount[$engineID] = 1;
if($failedfiles_index != -1) {
$failedfiles_index++;
if($failedfiles_index > 2000000000) {
$failedfiles_index = 0;
}
}
$pid_generate_doBackup = pcntl_fork();
if($pid_generate_doBackup == -1){
$errStr = "Unable to start doBackupOperation. Reason:".customErrorMsg();
exit_cleanup();
}
else if ($pid_generate_doBackup == 0){ # this child process will create all backup set files with 1000-1000 files set
$processName = "dobackup";
doBackupOperation($line,$engineID,$dbIndexCount[$engineID],$failedfiles_index);
exit;
}
else
{
$BackupForkchilds[] = $pid_generate_doBackup;
if(isset($exec_loads[1]) && ($exec_loads[1] > $exec_cores))
sleep(2);
else
sleep(1);
}
$line = "";
}
$engineID++;
if($engineID > $totalEngineBackup){
$engineID = 1;
sleep(2);
}
foreach($BackupForkchilds as $key => $pid) {
$res = pcntl_waitpid($pid, $status, WNOHANG);
// If the process has already exited
if($res == -1 || $res > 0){
unset($BackupForkchilds[$key]);
}
}
}
else{
if($failedfiles_index != -1) {
$failedfiles_index++;
if($failedfiles_index > 2000000000) {
$failedfiles_index = 0;
}
}
doBackupOperation($line,1,1,$failedfiles_index);
$line = "";
}
}
fclose($FD_READ);
waitForProcess($pid_generate, NOSCANERRORFILE);
waitForEnginesToFinish();
if($totalFiles == 0){
$filecontent = file(INFOFILE);
for($i = count($filecontent) - 1; $i >= 0; $i--){
if(preg_match("/^FAILEDCOUNT/", $filecontent[$i])){
$lineSplit = preg_split("/ /", $filecontent[$i],2);
$failedFilesCount = trim($lineSplit[1]);
}
elseif(preg_match("/^TOTALFILES/", $filecontent[$i])){
$lineSplit = preg_split("/ /", $filecontent[$i],2);
$totalFiles = trim($lineSplit[1]);
}
elseif(preg_match("/^BAC_SYNC/", $filecontent[$i])){
$lineSplit = preg_split("/ /", $filecontent[$i],2);
$bacSync = trim($lineSplit[1]);
break;
}
}
#loop and traverse from last
if($totalFiles == 0)
traceLog("Unable to get total files count");
}
$retry = 0;
if(($retrycount < MAX_RETRY) and file_exists(RETRY_INFOFILE) and file_exists(PIDFILE) and customFileSize(RETRY_INFOFILE) > 0){
if(!rename(RETRY_INFOFILE, INFOFILE)){
traceLog("Unable to rename ".RETRY_INFOFILE." to ".INFOFILE.", Reason: ".customErrorMsg());
break;
}
if(!($FD_WRITE = fopen(INFOFILE,"a"))){
$errStr = "Could not open file ".INFOFILE." to write, Reason:".customErrorMsg();
break;
}
fwrite($FD_WRITE, "BAC_SYNC $bacSync\n");
fwrite($FD_WRITE, "TOTALFILES $totalFiles\n");
fwrite($FD_WRITE, "FAILEDCOUNT $failedFilesCount");
fclose($FD_WRITE);
// need to pass engine id value here.
updateRetryCount($engineID);
$traceRetrycount++;
if(file_exists("LimitedRetry.txt") && ($retrycount == LIMITED_RETRY - 1)){
unlink("LimitedRetry.txt");
$failedfiles_index = -1;
}
else{
# checking for last retry to instruct child process not to create any more retry info file
if($retrycount == MAX_RETRY - 1)
$failedfiles_index = -1;
}
$retry = 1;
sleep(5);
$engineID = 1;
}
$line = "";
}while($retry == 1);
}
#****************************************************************************************************
# Subroutine Name : doBackupOperation.
# Objective : This subroutine performs the actual task of backing up files. It creates
# a child process which executes the backup command. It also creates a process
# which continuously monitors the temporary output file. At the end of backup,
# it inspects the temporary error file if present. It then deletes the temporary
# output file, temporary error file and the temporary directory created by
# idevsutil binary.
# Modified By : Deepak Chaurasia, Pooja Havaldar
#*****************************************************************************************************/
function doBackupOperation($parameters,$engineID, $dbIndexCount,$failedfiles_index)
{
GLOBAL $isLocalBackup, $idevsutilBinaryPath, $webDir, $logOutputFilePath, $backupLocation, $operationStartTime;
GLOBAL $backupUtfFile, $errStr, $machine, $phpPath, $isDbService, $failedFilesCount, $evspid, $pid_OutputProcess, $opprocpid, $userDir, $IDPVTContent, $enctype, $needToLogout;
$startPidFileLock = fopen(ENGINE_LOCKE_FILE, 'a+');
$locked = flock($startPidFileLock, LOCK_SH);
if(!$locked){
fclose($startPidFileLock);
traceLog("Failed to lock engine file\n");
return 0;
}
// Creating PID based on engine
$engineFp = fopen(PIDFILE."_$engineID", 'w+');
$isLocked = flock($engineFp, LOCK_EX|LOCK_NB);
if(!$isLocked){
flock($startPidFileLock, LOCK_UN);
fclose($startPidFileLock);
fclose($engineFp);
traceLog("Failed to lock engine pid\n");
return 0;
}
@chmod(PIDFILE."_$engineID",PERMISSIONVAL);
$parameter_list = array();
$parameter_list = preg_split("/ /", $parameters,3);
$opType = BACKUP;
if($isLocalBackup == 1){
$opType = LOCALBACKUP;
/* #validate encType
if(!encTypeValidation())
$errDetails = ENCRYPTIONVERIFICATIONFAILED;
if($enctype != "DEFAULT") {
if(!pvtKeyValidation())
$errDetails = ENCRYPTIONVERIFICATIONFAILED;
}
*/
#validate encType and pvtkey if it is
if((!encTypeValidation()) || (($enctype != "DEFAULT") && (!pvtKeyValidation()))) {
$errDetails = ENCRYPTIONVERIFICATIONFAILED;
writeOperationErrorToErrorFile($errDetails);
traceLog($errDetails);
if(file_put_contents($needToLogout, ENCRYPTIONVERIFICATIONFAILED))
chmod($needToLogout,0777);
flock($startPidFileLock, LOCK_UN);
fclose($startPidFileLock);
fclose($engineFp);
exit_cleanup();
}
}
$backupUtfFile = getOperationFile(array("opType" => $opType,
"backupsetFile" => $parameter_list[0],
"backupType" => $parameter_list[1],
"source" => $parameter_list[2],
"engineID" => $engineID));
# EVS command to execute for backup
$idevsutilCommandLine = $idevsutilBinaryPath.WHITESPACE.IDEVSUTIL_ARG.ASSIGNMENTOP."\"$backupUtfFile\"";
if(file_exists(PIDFILE)){
$pid = exec("$idevsutilCommandLine > /dev/null & echo $!");
$evspid = $pid;
// backup child process for output file parsing
$backupLocationSource = base64_encode($backupLocation);
$fileChildProcessPath = $webDir.PATHSEPARATOR.APPDIR.PATHSEPARATOR.SCRIPTS.PATHSEPARATOR.BACKUP_CHILDPROCESSFILE;
$cmd = "$phpPath $fileChildProcessPath \"$logOutputFilePath\" \"$parameter_list[0]\" \"$parameter_list[1]\" '".base64_encode($parameter_list[2])."' '$backupLocationSource' \"$operationStartTime\" \"$engineID\" \"$dbIndexCount\" \"$failedfiles_index\"";
$pid_OutputProcess = exec("$cmd > /dev/null 2>".EXEC_ERRORFILE." & echo $!");
$opprocpid = $pid_OutputProcess;
}
else{
@unlink(UTFFILE."_$engineID");
fclose($engineFp);
@unlink(PIDFILE."_$engineID");
flock($startPidFileLock, LOCK_UN);
fclose($startPidFileLock);
return 0;
}
waitForEVS($pid, SCANERRORFILE, $engineID);
$evspid = 0;
file_put_contents(OUTPUTFILE."_$engineID","CHILD_PROCESS_COMPLETED\n",FILE_APPEND);
waitForEVS($pid_OutputProcess, NOSCANERRORFILE);
if($isLocalBackup == 1) {
$dbInfoHandle = fopen(TEMP_DB_FILES.LOCALDBINFOFILE, 'a+');
flock($dbInfoHandle, LOCK_EX);
fwrite($dbInfoHandle, "textdb_".$engineID."_".$dbIndexCount.".xml\n");
flock($dbInfoHandle, LOCK_UN);
fclose($dbInfoHandle);
}
# check for failed file index -1, then compare error
if($failedfiles_index === -1) {
$finalErrContents = file_get_contents(ERRORFILE . '_' . $engineID);
if(trim($finalErrContents) != '') {
file_put_contents(RETRY_ABORT_CAUSE, processUncaughtServerError($finalErrContents) . "\n", FILE_APPEND);
return;
}
}
# update server address if cmd failed due to wrong evs server address
if($engineID == 1)
checkErrorAndUpdateServerAddr("_$engineID");
@unlink(UTFFILE."_$engineID");
fclose($engineFp);
@unlink(PIDFILE."_$engineID");
flock($startPidFileLock, LOCK_UN);
fclose($startPidFileLock);
return BACKUP_SUCCESS;
}
function processUncaughtServerError($serverError) {
GLOBAL $ErrorArgumentsRetry;
foreach($ErrorArgumentsRetry as $retryError) {
if(preg_match("/$retryError/", $serverError)) {
return 'Error Occurred: ' . $retryError;
}
}
return '';
}
#**********************************************************************************************************
# Subroutine Name : checkErrorFile
# Objective : This function will compare error.txt content with error msgs and terminate the job if required.
# Added By : Pooja Havaldar
#**********************************************************************************************************/
function checkErrorFile(&$prevErrorSize, $engineID)
{
GLOBAL $ErrorArgumentsExit, $fileJobTerminationPath, $phpPath, $errStr;
$currentErrorSize = 0;
if(!file_exists(ERRORFILE."_$engineID"))
return 0;
else{
$currentErrorSize = customFileSize(ERRORFILE."_$engineID");
if($currentErrorSize == 0) #checking if error.txt has size
return 0;
}
if($currentErrorSize == $prevErrorSize)
return 0;
$linesBackupErrorFile = "";
$linesBackupErrorFile = file_get_contents(ERRORFILE."_$engineID");
for($j=0; $j <= count($ErrorArgumentsExit)-1; $j++){
if(preg_match("/$ErrorArgumentsExit[$j]/", $linesBackupErrorFile)){
checkDedupDeviceError($linesBackupErrorFile);
$errStr = "Operation could not be completed. Reason : $ErrorArgumentsExit[$j] \n";
traceLog($errStr);
$cmd = "$phpPath $fileJobTerminationPath 2 '".$ErrorArgumentsExit[$j]."'";
`$cmd`;
@unlink(ERRORFILE."_$engineID");
return 1;
}
}
$prevErrorSize = $currentErrorSize;
return 0;
}
#****************************************************************************************************
# Subroutine Name : waitforArchiveJobtoFinish.
# Objective : This subroutine will wait till Archive Job finishes
# Modified By : Pooja Havaldar
#*****************************************************************************************************/
function waitforArchiveJobtoFinish($ArchiveJobPath)
{
GLOBAL $logOutputFilePath, $jobDir;
$arch_flag = 0;
//$jobScheduledTime = getCutOffDetailsOfBakcupJob($jobDir);
while(checkIfJobRunning($ArchiveJobPath)){
if(!file_exists(PIDFILE)){
$errMsg = PIDFILE." does not exist for backup.";
traceLog($errMsg);
exit_cleanup();
}
/* $currentTimeVal = time();
if(($jobScheduledTime >= $currentTimeVal) ) {
if(!($logOutputHandle = fopen($logOutputFilePath,"a"))){
traceLog("Could not open file $logOutputFilePath, Reason:".customErrorMsg().LINEFEED);
sleep(5);
continue;
}
fwrite($logOutputHandle, "Your cut off time reached while backup is delayed, as Archive Cleanup is in progress.".LINEFEED);
fclose($logOutputHandle);
}*/
if($arch_flag == 0){
if(!($logOutputHandle = fopen($logOutputFilePath,"a"))){
traceLog("Could not open file $logOutputFilePath, Reason:".customErrorMsg().LINEFEED);
sleep(5);
continue;
}
fwrite($logOutputHandle, "Your scheduled job has been delayed, as Archive Cleanup is in progress.".LINEFEED);
fclose($logOutputHandle);
traceLog("Your scheduled job has been delayed, as Archive Cleanup is in progress.");
$arch_flag = 1;
}
sleep(5);
}
}
#****************************************************************************************************
# Subroutine Name : getCutOffDetailsOfBakcupJob.
# Objective : This subroutine is used to get the cut of details of the backup job as per request.
# {Not been used as of now, Can use in feature if needed.}
# Modified By : Anil Kumar
#*****************************************************************************************************/
function getCutOffDetailsOfBakcupJob($jobDirPath)
{
GLOBAL $userDir;
$jobInfo = 0;
$jobName = explode("Backup/", $jobDirPath);
$jobDir = str_replace('/', '', $jobName[1]);
$jobDir = "Backup_".$jobDir;
$fileName = $userDir.PATHSEPARATOR.".popUpList.txt";
$array_data = array();
if(file_exists($fileName)) {
$content = file_get_contents($fileName);
$array_data = json_decode($content, true);
}
if ($array_data[$jobDir] && $array_data[$jobDir]["scheduler"] && $array_data[$jobDir]["scheduler"]["cut_off_time"])
{
$cutOffStatus = $array_data[$jobDir]["scheduler"]["cut_off_time"];
if ($cutOffStatus == "on"){
$cutoff_hour = $array_data[$jobDir]["scheduler"]["cutoff_hour"] ;
$cutoff_minute = $array_data[$jobDir]["scheduler"]["cutoff_minute"] ;
$cutoff_meridian = $array_data[$jobDir]["scheduler"]["cutoff_meridian"] ;
$cutoff_hour.":".$cutoff_minute.":"."00"." ".$cutoff_meridian;
$jobInfo = strtotime(date("Y-m-d") . $currentTime);
}
}
return $jobInfo;
}
#****************************************************************************************************
# Subroutine Name : waitforDeleteJobtoFinish.
# Objective : This subroutine will wait till Delete Job finishes
# Modified By : Vijay Vinoth
#*****************************************************************************************************/
function waitforDeleteJobtoFinish($DeleteJobPath)
{
GLOBAL $logOutputFilePath;
$flag = 0;
while(checkIfDeleteJobRunning($DeleteJobPath)){
if(!file_exists(PIDFILE)){
$errMsg = PIDFILE." is not there in job path.";
traceLog($errMsg);
exit_cleanup();
}
if($flag == 0){
if(!($logOutputHandle = fopen($logOutputFilePath,"a"))){
traceLog("Could not open file $logOutputFilePath, Reason:".customErrorMsg().LINEFEED);
sleep(5);
continue;
}
fwrite($logOutputHandle, "Your scheduled job has been delayed, as Delete is in progress.");
fclose($logOutputHandle);
traceLog("Your scheduled job has been delayed, as Delete is in progress.", __FILE__, __LINE__);
$flag = 1;
}
sleep(5);
}
}
#****************************************************************************************************
# Subroutine Name : process_term.
# Objective : The signal handler invoked when SIGINT or SIGTERM signal is received by the script
# Added By : Arnab Gupta
# Modified by : Pooja Havaldar, Sabin Cheruvattil
#*****************************************************************************************************/
function process_term($signal)
{
GLOBAL $processName, $pid_generate, $pid_OutputProcess, $errStr, $dbh, $FD_WRITE, $issignal;
GLOBAL $bacSync, $totalFiles, $failedFilesCount, $ERRORFAILEDFILE, $BACK_FILE, $evspid, $opprocpid;
$issignal = TRUE;
if($processName == "main") {
if(file_exists(PIDFILE)) {
@unlink(PIDFILE);
}
if(file_exists(STARTPIDFILE)) {
@unlink(STARTPIDFILE);
}
waitForProcess($pid_generate, NOSCANERRORFILE);
waitForEnginesToFinish();
$filecontent = file(INFOFILE);
for($i = count($filecontent) - 1; $i >= 0; $i--) {
if(preg_match("/^FAILEDCOUNT/", $filecontent[$i])) {
$lineSplit = preg_split('/ /', $filecontent[$i], 2);
$failedFilesCount = trim($lineSplit[1]);
}
if(preg_match("/^TOTALFILES/", $filecontent[$i])) {
$split_totalFiles = preg_split('/ /', $filecontent[$i], 2);
$totalFiles = trim($split_totalFiles[1]);
}
if(preg_match("/^BAC_SYNC/", $filecontent[$i])) {
$lineSplit = preg_split('/ /', $filecontent[$i], 2);
$bacSync = trim($lineSplit[1]);
break;
}
}
$errStr = "Operation could not be completed. Reason: Process has been killed due to restart/shutdown.";
exit_cleanup();
} else if($processName == "dobackup") {
if($evspid) {
`kill $evspid`;
}
if($opprocpid) {
waitForEVS($opprocpid, NOSCANERRORFILE);
}
waitForEnginesToFinish();
# engines lock will release
if(file_exists(ENGINE_LOCKE_FILE)) {
@unlink(ENGINE_LOCKE_FILE);
}
} else if($processName == "generate") {
fwrite($FD_WRITE, "BAC_SYNC $bacSync\nTOTALFILES $totalFiles\nFAILEDCOUNT $failedFilesCount");
fclose($FD_WRITE);
fclose($ERRORFAILEDFILE);
fclose($BACK_FILE);
if("" != $errStr){
traceLog($errStr);
writeOperationErrorToErrorFile($errStr);
}
# newly added if dbh is defined then only close.
if($dbh){
unset($dbh);
}
exit;
}
}
#****************************************************************************************************
# Subroutine Name : waitForEnginesToFinish.
# Objective : wait for fork process to complete
# Added By : Vijay Vinoth
#*****************************************************************************************************/
function waitForEnginesToFinish()
{
GLOBAL $BackupForkchilds;
while(count($BackupForkchilds) > 0) {
foreach($BackupForkchilds as $key => $pid) {
$res = pcntl_waitpid($pid, $status, WNOHANG);
// If the process has already exited
if($res == -1 || $res > 0){
unset($BackupForkchilds[$key]);
}
}
sleep(1);
}
while(isAnyEngineRunning(ENGINE_LOCKE_FILE))
sleep(1);
return;
}
#****************************************************************************************************
# Subroutine Name : createUpdateDbPaths.
# Objective : Update DB path in dbPath.xml file
# Added By : Vijay Vinoth
#*****************************************************************************************************/
function createUpdateDbPaths()
{
GLOBAL $backupLocation,$dedupDetailFile,$username,$dedupRestoreDeviceID;
if(file_exists($dedupDetailFile)){
$deDup = true;
$deviceJSON = file_get_contents($dedupDetailFile);
$deviceArray = json_decode($deviceJSON, true);
$deviceID = trim($deviceArray['deviceID']);
$deviceID = preg_replace("/^5c0b/", '', preg_replace("/4b5z$/", '', $deviceID, 1), 1);
$serverRoot = trim($deviceArray['serverRoot']);
$nickName = trim($deviceArray['nick_name']);
}
$dbpaths = $backupLocation.'/'.$username.'/dbpaths.xml';
if(!file_exists($dbpaths))
{
$simple_xml = new SimpleXMLElement("", null, false);
$simple_xml->addChild('dbpathinfo');
$simple_xml->dbpathinfo[0]->addAttribute('serverroot', "$serverRoot");
$simple_xml->dbpathinfo[0]->addAttribute('deviceid', "$deviceID");
$simple_xml->dbpathinfo[0]->addAttribute('nickname', "$nickName");
$simple_xml->dbpathinfo[0]->addAttribute('dbpath', "/LDBNEW/$serverRoot/$username.ibenc");
$simple_xml->asXML($dbpaths);
}
else
{
$exist = 0;
$xml = simplexml_load_file($dbpaths);
foreach($xml->children() as $child) {
$attr = $child->attributes();
foreach($attr as $key => $value) {
if($key == "serverroot" && $value == "$serverRoot")
{
$exist = 1;
return;
}
}
}
if(!$exist){
$sxe = new SimpleXMLElement($xml->asXML());
$newItem = $sxe->addChild("dbpathinfo");
$newItem->addAttribute('serverroot', "$serverRoot");
$newItem->addAttribute('deviceid', "$deviceID");
$newItem->addAttribute('nickname', "$nickName");
$newItem->addAttribute('dbpath', "/LDBNEW/$serverRoot/$username.ibenc");
$sxe->asXML($dbpaths);
}
}
if(file_exists($dbpaths)) {
$xmlContent = file_get_contents($dbpaths);
$xmlContent = str_replace("><", ">\n<", $xmlContent);
file_put_contents($dbpaths, $xmlContent);
}
}
#****************************************************************************************************
# Subroutine Name : writeLogHeader.
# Objective : This function will write the Log header details in the the output file
# Added By : Pooja Havaldar
# Modified by :
#*****************************************************************************************************/
function writeLogHeader()
{
GLOBAL $relative, $logOutputFilePath, $isLocalBackup, $nasUsername;
GLOBAL $headerMsg, $username, $hostName, $hidden, $backupLocation;
$temp = "";
$logheader = "";
if($relative == 1)
$temp = "Mirror";
else
$temp = "Relative";
# added by anil for log related issues
verifyLastUserLog(LOGPIDFILE);
/*
if(file_exists(LOGPIDFILE)) {
if($handle = fopen(LOGPIDFILE,'r+'))
{
$buffer = fread($handle, LIMIT);
fclose($handle);
if(file_exists($buffer)) {
if(strpos($buffer,"_SUCCESS") || strpos($buffer,"_ABORTED") || strpos($buffer,"_FAILURE")){
# file_put_contents("/volume1/web/idriveIt/test1.txt","760 in backup :: already deleted \n ** ", FILE_APPEND);
}
else{
$statusToUpdate = "FAILURE";
$newName = "$buffer"."_".$statusToUpdate;
$resCmd = "mv \"$buffer\" \"$newName\"";
$res = `$resCmd`;
}
}
}
}
*/
############End of new code
# require to open log file to show job in progress as well as to log exclude details
$logOutputHandle = fopen($logOutputFilePath, 'a+');
if($logOutputHandle){
# As log file is opened so create logpid file as well
$currPath = trim(getcwd());
if(file_put_contents(LOGPIDFILE,"$currPath/$logOutputFilePath")){
chmod(LOGPIDFILE,PERMISSIONVAL);
/*$logFileHandle = fopen(LOGPIDFILE, 'a+');
$logPidHandler = flock($logFileHandle, LOCK_EX|LOCK_NB);
fclose($logFileHandle);*/
}
else {
$errStr = "Unable to open file ".LOGPIDFILE.", Reason:".customErrorMsg();
fwrite($logOutputHandle,$errStr.PHP_EOL);
fclose($logOutputHandle);
traceLog($errStr);
exit_cleanup();
}
@chmod($logOutputFilePath,PERMISSIONVAL);
}
else {
$errStr = "Failed to create $logOutputFilePath, Reason:".customErrorMsg();
traceLog($errStr);
exit_cleanup();
}
# construct log header.
//$headerMsg = "Backup Start Time: ".WHITESPACE.date("D M d H:i:s Y").LINEFEED;
$headerMsg = "Backup Start Time: ".WHITESPACE.trim(shell_exec('date +"%a %b %d %T %Y"')).LINEFEED;
$logheader = $headerMsg.LINEFEED."NAS User name: ".$nasUsername.LINEFEED;
$logheader .= "IDrive User name: ".$username.LINEFEED;
$headerMsg .= getHeaderMsg($temp, $hidden);
$logheader .= getHeaderMsg($temp, $hidden);
$headerMsg .= "Backup Location: ".$backupLocation.LINEFEED;
$logheader .= "Backup Location: ".$backupLocation.LINEFEED.LINEFEED;
# write log header.
fwrite($logOutputHandle,$logheader.PHP_EOL);
fclose($logOutputHandle);
}
#****************************************************************************************************
# Subroutine Name : exit_cleanup.
# Objective : This function will execute the major functions required at the time of exit
# Added By : Deepak Chaurasia
# Modified by : Pooja Havaldar, Sabin Cheruvattil
#*****************************************************************************************************/
function exit_cleanup()
{
GLOBAL $successFiles, $syncedFiles, $failedFiles, $exit_flag, $cancelFlag, $errStr, $status;
GLOBAL $localDB_pid_generate, $isLocalBackup, $processName, $issignal, $traceRetrycount, $userDir;
$evsTemp = $userDir.PATHSEPARATOR.EVS_TEMP;
traceLog("Total Retry Attempts:$traceRetrycount");
list($successFiles,$syncedFiles,$failedFiles,$exit_flag) = getParameterValueFromStatusFile(array('FILES_COUNT_INDEX', 'SYNC_COUNT_FILES_INDEX', 'FAILED_COUNT_FILES_INDEX', 'EXIT_FLAG_INDEX'));
if(($processName == "main") && ($isLocalBackup == 1)){
$tempFileDetaild = TEMP_DB_FILES.LOCALDBINFOFILE;
$dbInfoHandle = fopen($tempFileDetaild, 'a+');
flock($dbInfoHandle, LOCK_EX);
fwrite($dbInfoHandle, "PROCESS_COMPLETED");
flock($dbInfoHandle, LOCK_UN);
fclose($dbInfoHandle);
waitForEVS($localDB_pid_generate, NOSCANERRORFILE);
createUpdateDbPaths();
}
$exit = preg_split('/-/', $exit_flag,2);
if($exit[0] && $exit[1] != "")
$errStr = $exit[1];
if(file_exists(PIDFILE)) {
@unlink(PIDFILE);
} else if(!$issignal) {
# In childprocess, if we exit due to some exit scenario, then this exit_flag will be true with error msg
$cancelFlag = true;
if(!$exit[0])
$errStr = readFromUserCancel();
traceLog("$errStr");
} else if($issignal) {
$cancelFlag = TRUE;
}
writeOperationSummary(BACKUP);
getOperationStatus();
if(($status == "SUCCESS") && (file_exists($evsTemp)))
removeItems($evsTemp);
updateLogFileName();
if($isLocalBackup != 1) {
updateBackupSummaryToServer();
updateLogListXml();
uploadLogListXml();
updateBackupLogToServer();
}
sendMail();
removeBackupTempFiles();
@unlink(STARTPIDFILE);
removeItems("LimitedRetry.txt*");
//flock(LOGPIDFILE, LOCK_UN);
exit;
}
/*****************************************************************************************************
# Function : pvtKeyValidation
# In Param : ---
# Out Param : SUCCESS/FAILURE
# Objective : This function is to validate private key content from local IDPVT file with variable content
# Added By : Anil Kumar [03-12-2019]
# Modified By : [Date]
#****************************************************************************************************/
function pvtKeyValidation()
{
GLOBAL $userDir, $IDPVTContent;
$encPvtkeyPath = $userDir.PATHSEPARATOR."IDPVT";
$encKeyContent = file_get_contents($encPvtkeyPath);
//traceLog("FILE_CONTENT: ".$encKeyContent." variable content: ".$IDPVTContent );
if($IDPVTContent != $encKeyContent){
return 0;
}
return 1;
}
/*****************************************************************************************************
# Function : encTypeValidation
# In Param : ---
# Out Param : SUCCESS/FAILURE
# Objective : This function is to validate encType from login cgi to account settings file info.
# Added By : Anil Kumar [03-12-2019]
# Modified By : [Date]
#****************************************************************************************************/
function encTypeValidation()
{
GLOBAL $enctype;
$key = "encType";
$encTypeFomfile = "";
getParameterValueFromAccountSettingsFile($key,$encTypeFomfile);
if (strcasecmp($encTypeFomfile, $enctype) != 0)
return 0;
else
return 1;
}
?>