166 lines
3.7 KiB
PHP
166 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Utils;
|
|
|
|
use AdamBrett\ShellWrapper\Command\Builder as CommandBuilder;
|
|
use AdamBrett\ShellWrapper\Runners\Exec;
|
|
use App\Exceptions\BackupFolderNotFoundException;
|
|
use App\Exceptions\ExportFolderNotFoundException;
|
|
use Throwable;
|
|
|
|
class BackupManager
|
|
{
|
|
private $exportFolder;
|
|
private $dataFolder;
|
|
private $backupFolder;
|
|
private $shell;
|
|
private $params;
|
|
private $builder;
|
|
private $containerName;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->shell = new Exec();
|
|
$this->builder = new CommandBuilder("");
|
|
$this->backupFolder = ".";
|
|
$this->exportFolder = ".";
|
|
}
|
|
|
|
/**
|
|
* @param mixed $backupFolder
|
|
* @return BackupManager
|
|
* @throws Throwable
|
|
*/
|
|
public function setBackupFolder($backupFolder): BackupManager
|
|
{
|
|
throw_if(!file_exists($backupFolder), new BackupFolderNotFoundException('Backup folder not exist!'));
|
|
$this->backupFolder = $backupFolder;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @param mixed $dataFolder
|
|
* @return BackupManager
|
|
* @throws Throwable
|
|
*/
|
|
public function setDataFolder($dataFolder): BackupManager
|
|
{
|
|
throw_if(!file_exists($dataFolder), new BackupFolderNotFoundException('Data folder not exist!'));
|
|
$this->dataFolder = $dataFolder;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @param mixed $exportFolder
|
|
* @return BackupManager
|
|
* @throws Throwable
|
|
*/
|
|
public function setExportFolder($exportFolder): BackupManager
|
|
{
|
|
throw_if(!file_exists($exportFolder), new ExportFolderNotFoundException('Export folder not exist!'));
|
|
$this->exportFolder = $exportFolder;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @param $param
|
|
* @return BackupManager
|
|
*/
|
|
public function addParams(array $params): BackupManager
|
|
{
|
|
$this->params = $params;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @param mixed $containerName
|
|
* @return BackupManager
|
|
*/
|
|
public function setContainerName($containerName): BackupManager
|
|
{
|
|
$this->containerName = $containerName;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return mixed
|
|
*/
|
|
public function getParams()
|
|
{
|
|
return $this->params;
|
|
}
|
|
|
|
/**
|
|
* @return Exec
|
|
*/
|
|
public function getShell(): Exec
|
|
{
|
|
return $this->shell;
|
|
}
|
|
|
|
/**
|
|
* @return mixed
|
|
*/
|
|
public function getBackupFolder()
|
|
{
|
|
return $this->backupFolder;
|
|
}
|
|
|
|
/**
|
|
* @return mixed
|
|
*/
|
|
public function getDataFolder()
|
|
{
|
|
return $this->dataFolder;
|
|
}
|
|
|
|
/**
|
|
* @return mixed
|
|
*/
|
|
public function getExportFolder()
|
|
{
|
|
return $this->exportFolder;
|
|
}
|
|
|
|
/**
|
|
* @return mixed
|
|
*/
|
|
public function getContainerName()
|
|
{
|
|
return $this->containerName;
|
|
}
|
|
|
|
/*
|
|
* @param int $mode
|
|
* @return BackupManager
|
|
*/
|
|
/*public function builder(int $mode): BackupManager
|
|
{
|
|
switch ($mode) {
|
|
case BuilderMode::CONTAINER:
|
|
$this->builder = new Builder("docker export {$this->containerName} -o {$this->backupFolder}/{$this->containerName}.tar.gz");
|
|
break;
|
|
case BuilderMode::DATA:
|
|
$this->builder = new Builder("tar -zcf");
|
|
break;
|
|
case BuilderMode::MYSQL:
|
|
$this->builder = new Builder("docker exec");
|
|
break;
|
|
default:
|
|
$this->builder = new Builder("");
|
|
}
|
|
return $this;
|
|
}*/
|
|
|
|
public function setBuilder(Builder $builder): BackupManager
|
|
{
|
|
$this->builder = $builder->builder();
|
|
return $this;
|
|
}
|
|
|
|
public function execute()
|
|
{
|
|
return $this->shell->run($this->builder);
|
|
}
|
|
}
|