dgd-backupper-php/app/Utils/BackupManager.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);
}
}