You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
cosmopet-architecture/dup-installer/classes/chunk/class.chunk.s3.manager.php

230 lines
7.3 KiB

<?php
/**
* Chunk manager step 3
*
* Standard: PSR-2
*
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
*
* @package SC\DUPX\Chunk
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Deploy\Database\DbCleanup;
use Duplicator\Installer\Utils\Log\Log;
use Duplicator\Installer\Utils\Log\LogHandler;
use Duplicator\Libs\Snap\SnapJson;
require_once(DUPX_INIT . '/classes/chunk/class.chunkingmanager_file.php');
require_once(DUPX_INIT . '/classes/chunk/Iterators/class.s3.iterator.php');
/**
* Chunk manager step 3
*
* @author andrea
*/
class DUPX_chunkS3Manager extends DUPX_ChunkingManager_file
{
/**
* Exectute action for every iteration
*
* @param string $key
* @param array $current
*/
protected function action($key, $current)
{
$s3FuncsManager = DUPX_S3_Funcs::getInstance();
Log::info('CHUNK ACTION: CURRENT [' . implode('][', $current) . ']');
switch ($current['l0']) {
case DUPX_s3_iterator::STEP_START:
$s3FuncsManager->initLog();
$s3FuncsManager->initChunkLog($this->maxIteration, $this->timeOut, $this->throttling, $GLOBALS['DATABASE_PAGE_SIZE']);
break;
case DUPX_s3_iterator::STEP_CLEANUP_OPTIONS:
DbCleanup::cleanupOptions();
break;
case DUPX_s3_iterator::STEP_CLEANUP_EXTREA:
DbCleanup::cleanupExtra();
break;
case DUPX_s3_iterator::STEP_CLEANUP_PACKAGES:
DbCleanup::cleanupPackages();
break;
case DUPX_s3_iterator::STEP_SEARCH_AND_REPLACE_INIT:
break;
case DUPX_s3_iterator::STEP_SEARCH_AND_REPLACE:
DUPX_UpdateEngine::evaluateTableRows($current['l1'], $current['l2']);
DUPX_UpdateEngine::commitAndSave();
break;
case DUPX_s3_iterator::STEP_REMOVE_MAINTENACE:
$s3FuncsManager->removeMaintenanceMode();
break;
case DUPX_s3_iterator::STEP_CREATE_ADMIN:
$s3FuncsManager->createNewAdminUser();
break;
case DUPX_s3_iterator::STEP_CONF_UPDATE:
$s3FuncsManager->configFilesUpdate();
break;
case DUPX_s3_iterator::STEP_GEN_UPD:
$s3FuncsManager->generalUpdate();
break;
case DUPX_s3_iterator::STEP_GEN_CLEAN:
$s3FuncsManager->generalCleanup();
$s3FuncsManager->forceLogoutOfAllUsers();
$s3FuncsManager->duplicatorMigrationInfoSet();
break;
case DUPX_s3_iterator::STEP_NOTICE_TEST:
$s3FuncsManager->checkForIndexHtml();
$s3FuncsManager->noticeTest();
break;
case DUPX_s3_iterator::STEP_CLEANUP_TMP_FILES:
$s3FuncsManager->cleanupTmpFiles();
break;
case DUPX_s3_iterator::STEP_SET_FILE_PERMS:
$s3FuncsManager->setFilePermsission();
break;
case DUPX_s3_iterator::STEP_FINAL_REPORT_NOTICES:
$s3FuncsManager->finalReportNotices();
break;
default:
}
/**
* At each iteration save the status in case of exit with timeout
*/
$this->saveData();
}
protected function getIterator()
{
return new DUPX_s3_iterator();
}
public function getStoredDataKey()
{
return $GLOBALS["CHUNK_DATA_FILE_PATH"];
}
/**
* stop iteration without save data.
* It is already saved every iteration.
*
* @return mixed
*/
public function stop($saveData = false)
{
return parent::stop(false);
}
/**
* load data from previous step if exists adn restore _POST and GLOBALS
*
* @param string $key file name
*
* @return mixed
*/
protected function getStoredData($key)
{
if (($data = parent::getStoredData($key)) != null) {
Log::info("CHUNK LOAD DATA: POSITION " . implode(' / ', $data['position']), 2);
return $data['position'];
} else {
Log::info("CHUNK LOAD DATA: IS NULL ");
return null;
}
}
/**
* delete stored data if exists
*/
protected function deleteStoredData($key)
{
Log::info("CHUNK DELETE STORED DATA FILE:" . Log::v2str($key), 2);
return parent::deleteStoredData($key);
}
/**
* save data for next step
*/
protected function saveStoredData($key, $data)
{
// store s3 func data
$s3Funcs = DUPX_S3_Funcs::getInstance();
$s3Funcs->report['chunk'] = 1;
$s3Funcs->report['chunkPos'] = $data;
$s3Funcs->report['pass'] = 0;
$s3Funcs->report['progress_perc'] = $this->getProgressPerc();
$s3Funcs->saveData();
// managed output for timeout shutdown
LogHandler::setShutdownReturn(LogHandler::SHUTDOWN_TIMEOUT, SnapJson::jsonEncode($s3Funcs->getJsonReport()));
/**
* store position post and globals
*/
$gData = array(
'position' => $data
);
Log::info("CHUNK SAVE DATA: POSITION " . implode(' / ', $data), 2);
return parent::saveStoredData($key, $gData);
}
/**
*
* @return float progress in %
*/
public function getProgressPerc()
{
$result = 0;
$position = $this->it->getPosition();
$s3Func = DUPX_S3_Funcs::getInstance();
switch ($position['l0']) {
case DUPX_s3_iterator::STEP_SEARCH_AND_REPLACE_INIT:
$result = 5;
break;
case DUPX_s3_iterator::STEP_SEARCH_AND_REPLACE:
$lowLimit = 10;
$higthLimit = 90;
$stepDelta = $higthLimit - $lowLimit;
$tables = DUPX_DB_Tables::getInstance()->getReplaceTablesNames();
$tableDelta = $stepDelta / (count($tables) + 1);
$singePagePerc = $tableDelta / ($s3Func->cTableParams['pages'] + 1);
$result = round($lowLimit + ($tableDelta * (int) $position['l1']) + ($singePagePerc * (int) $position['l2']), 2);
break;
case DUPX_s3_iterator::STEP_REMOVE_MAINTENACE:
$result = 90;
break;
case DUPX_s3_iterator::STEP_CREATE_ADMIN:
$result = 92;
break;
case DUPX_s3_iterator::STEP_CONF_UPDATE:
$result = 93;
break;
case DUPX_s3_iterator::STEP_GEN_UPD:
$result = 94;
break;
case DUPX_s3_iterator::STEP_GEN_CLEAN:
$result = 95;
break;
case DUPX_s3_iterator::STEP_NOTICE_TEST:
$result = 96;
break;
case DUPX_s3_iterator::STEP_CLEANUP_TMP_FILES:
$result = 97;
break;
case DUPX_s3_iterator::STEP_SET_FILE_PERMS:
$result = 98;
break;
case DUPX_s3_iterator::STEP_FINAL_REPORT_NOTICES:
$result = 100;
break;
default:
}
return $result;
}
}