Improved & Bug Fix
- Code improved. - Bugs fixed. - Stability is improved.master 1.2.1
parent
e9e5d61330
commit
5bedb3f9fa
|
|
@ -12,7 +12,7 @@ class BackupCommand extends Command
|
|||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'backup {containers*} {--data} {--mysql} {--upload} {--clean}';
|
||||
protected $signature = 'backup {containers*} {--data} {--mysql} {--pack} {--upload} {--clean}';
|
||||
|
||||
/**
|
||||
* The description of the command.
|
||||
|
|
@ -38,18 +38,40 @@ class BackupCommand extends Command
|
|||
}
|
||||
|
||||
if ($this->option('mysql')) {
|
||||
$this->call("backup:mysql", [
|
||||
'--container' => env('MYSQL_CONTAINER_NAME'),
|
||||
'--user' => env('MYSQL_USER'),
|
||||
'--password' => env('MYSQL_PASSWORD'),
|
||||
$this->call("backup:mysql");
|
||||
}
|
||||
|
||||
date_default_timezone_set('Europe/Istanbul');
|
||||
$date = date('d-m-Y_H-i-s', time());
|
||||
|
||||
if ($this->option('pack')) {
|
||||
$this->call('backup:pack', [
|
||||
'name' => 'backup_' . $date,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->option('upload')) {
|
||||
if (!$this->option('pack')) {
|
||||
$this->call('backup:pack', [
|
||||
'name' => 'backup_' . $date,
|
||||
]);
|
||||
}
|
||||
$this->call("backup:upload", [
|
||||
'name' => 'backup_' . $date . '.tar.gz',
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->option('clean')) {
|
||||
$this->line("<fg=yellow>|-> Cleaning...</>");
|
||||
$files = glob(env('BACKUP_FOLDER') . '/*');
|
||||
foreach($files as $file){
|
||||
is_file($file) ? unlink($file) : null;
|
||||
}
|
||||
|
||||
$files = glob(env('EXPORT_FOLDER') . '/*');
|
||||
foreach($files as $file){
|
||||
is_file($file) ? unlink($file) : null;
|
||||
}
|
||||
}
|
||||
|
||||
$this->line("<fg=blue>|-> The backup and upload process is finished.</>");
|
||||
|
|
|
|||
|
|
@ -41,11 +41,11 @@ class ContainerBackupCommand extends Command
|
|||
}
|
||||
|
||||
$backupManager = new BackupManager();
|
||||
$backupManager->setBackupFolder($backupFolder);
|
||||
foreach ($containers as $container) {
|
||||
$this->line("<fg=blue>|-> Backing up {$container}...</>");
|
||||
$builder = new ContainerBuilder();
|
||||
$builder->setContainerName($container);
|
||||
$builder->setContainerName($container)
|
||||
->setBackupFolder($backupFolder);
|
||||
$backupManager->setBuilder($builder)->execute();
|
||||
if ($backupManager->getShell()->getReturnValue() == 0) {
|
||||
$this->line("<fg=green> |-> {$container} successfully backed up.</>");
|
||||
|
|
|
|||
|
|
@ -45,11 +45,12 @@ class DataBackupCommand extends Command
|
|||
$dataFolder = env('DATA_FOLDER');
|
||||
}
|
||||
|
||||
$bm = new BackupManager();
|
||||
$builder = new DataBuilder();
|
||||
$builder->setDataFolder($dataFolder);
|
||||
$bm->setBackupFolder($backupFolder)
|
||||
->setBuilder($builder)->execute();
|
||||
$builder->setDataFolder($dataFolder)
|
||||
->setBackupFolder($backupFolder);
|
||||
$bm = new BackupManager();
|
||||
|
||||
$bm->setBuilder($builder)->execute();
|
||||
|
||||
if ($bm->getShell()->getReturnValue() == 0) {
|
||||
$this->line("<fg=green> |-> Data folder successfully backed up.</>");
|
||||
|
|
|
|||
|
|
@ -39,6 +39,19 @@ class MysqlBackupCommand extends Command
|
|||
$container = $this->option('container');
|
||||
$user = $this->option('user');
|
||||
$password = $this->option('password');
|
||||
|
||||
if (!$container) {
|
||||
$container = env('MYSQL_CONTAINER_NAME');
|
||||
}
|
||||
|
||||
if (!$user) {
|
||||
$user = env('MYSQL_USER');
|
||||
}
|
||||
|
||||
if (!$password) {
|
||||
$password = env('MYSQL_PASSWORD');
|
||||
}
|
||||
|
||||
$bm = new BackupManager();
|
||||
$this->line("<fg=blue>|-> Backing up mysql databases...</>");
|
||||
|
||||
|
|
@ -46,17 +59,17 @@ class MysqlBackupCommand extends Command
|
|||
$credentials->setUsername($user);
|
||||
$credentials->setPassword($password);
|
||||
|
||||
$builder = new DatabaseBuilder();
|
||||
$builder->setCredential($credentials);
|
||||
$builder->setContainerName($container);
|
||||
|
||||
$backupFolder = $this->option('folder');
|
||||
if (!$backupFolder) {
|
||||
$backupFolder = env('BACKUP_FOLDER');
|
||||
}
|
||||
|
||||
$bm->setBackupFolder($backupFolder)
|
||||
->setBuilder($builder)->execute();
|
||||
$builder = new DatabaseBuilder();
|
||||
$builder->setCredential($credentials);
|
||||
$builder->setContainerName($container)
|
||||
->setBackupFolder($backupFolder);
|
||||
|
||||
$bm->setBuilder($builder)->execute();
|
||||
|
||||
if ($bm->getShell()->getReturnValue() == 0) {
|
||||
$this->line("<fg=green> |-> Mysql databases successfully backed up.</>");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
namespace App\Commands;
|
||||
|
||||
use App\Utils\BackupManager;
|
||||
use App\Utils\Builders\PackageBuilder;
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use LaravelZero\Framework\Commands\Command;
|
||||
|
||||
class PackCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The signature of the command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'backup:pack
|
||||
{name : Package name.}
|
||||
{--folder= : Backup folder.}
|
||||
{--export= : Export folder for created package.}';
|
||||
|
||||
/**
|
||||
* The description of the command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Create backup package';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$backupFolder = $this->option('folder');
|
||||
$exportFolder = $this->option('export');
|
||||
$packageName = $this->argument('name');
|
||||
|
||||
if (!$backupFolder) {
|
||||
$backupFolder = env('BACKUP_FOLDER');
|
||||
}
|
||||
|
||||
if (!$exportFolder) {
|
||||
$exportFolder = env('EXPORT_FOLDER');
|
||||
}
|
||||
|
||||
$this->line("<fg=blue>|-> {$packageName} is packing...</>");
|
||||
|
||||
$packageBuilder = new PackageBuilder();
|
||||
$packageBuilder->setBackupFolder($backupFolder)
|
||||
->setExportFolder($exportFolder)
|
||||
->setPackageName($packageName);
|
||||
|
||||
$backupManager = new BackupManager();
|
||||
$backupManager->setBuilder($packageBuilder)->execute();
|
||||
|
||||
if ($backupManager->getShell()->getReturnValue() == 0) {
|
||||
$this->line("<fg=green> |-> Package created.</>");
|
||||
} else {
|
||||
$this->line("<fg=red> |-> Failed to create package.</>");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the command's schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
public function schedule(Schedule $schedule): void
|
||||
{
|
||||
// $schedule->command(static::class)->everyMinute();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
|
||||
namespace App\Commands;
|
||||
|
||||
use App\Utils\BackupManager;
|
||||
use App\Utils\Builders\DataBuilder;
|
||||
use App\Utils\Builders\UploadBuilder;
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use LaravelZero\Framework\Commands\Command;
|
||||
|
||||
class UploadCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The signature of the command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'backup:upload
|
||||
{name : Package name.}
|
||||
{--export : Folder for created packages.}
|
||||
{--target= : Target folder for Mega.nz}';
|
||||
|
||||
/**
|
||||
* The description of the command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Upload backup file to Mega.nz';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$exportFolder = $this->option('export');
|
||||
$targetFolder = $this->option('target');
|
||||
$name = $this->argument('name');
|
||||
|
||||
if (!$targetFolder) {
|
||||
$targetFolder = env('TARGET_FOLDER');
|
||||
}
|
||||
|
||||
if (!$exportFolder) {
|
||||
$exportFolder = env('EXPORT_FOLDER');
|
||||
}
|
||||
|
||||
$this->line("<fg=blue>|-> {$name} is uploading...</>");
|
||||
|
||||
$uploadBuilder = new UploadBuilder();
|
||||
$uploadBuilder->setExportFolder($exportFolder)
|
||||
->setTargetFolder($targetFolder)
|
||||
->setPackageName($name);
|
||||
|
||||
$backupManager = new BackupManager();
|
||||
$backupManager->setBuilder($uploadBuilder)
|
||||
->execute();
|
||||
|
||||
if ($backupManager->getShell()->getReturnValue() == 0) {
|
||||
$this->line("<fg=green> |-> Upload successful.</>");
|
||||
} else {
|
||||
$this->line("<fg=red> |-> Upload failed.</>");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the command's schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
public function schedule(Schedule $schedule): void
|
||||
{
|
||||
// $schedule->command(static::class)->everyMinute();
|
||||
}
|
||||
}
|
||||
|
|
@ -9,41 +9,13 @@ use Throwable;
|
|||
|
||||
class BackupManager
|
||||
{
|
||||
private $exportFolder;
|
||||
private $backupFolder;
|
||||
private $shell;
|
||||
private $builder;
|
||||
private $containerName;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->shell = new Exec();
|
||||
}
|
||||
|
||||
/**
|
||||
* @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 $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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Exec
|
||||
*/
|
||||
|
|
@ -52,30 +24,6 @@ class BackupManager
|
|||
return $this->shell;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getBackupFolder()
|
||||
{
|
||||
return $this->backupFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getExportFolder()
|
||||
{
|
||||
return $this->exportFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getContainerName()
|
||||
{
|
||||
return $this->containerName;
|
||||
}
|
||||
|
||||
public function setBuilder(Builder $builder): BackupManager
|
||||
{
|
||||
$this->builder = $builder;
|
||||
|
|
@ -93,7 +41,7 @@ class BackupManager
|
|||
*/
|
||||
public function execute()
|
||||
{
|
||||
$builder = $this->getBuilder()->setBackupFolder($this->backupFolder)->builder();
|
||||
$builder = $this->getBuilder()->builder();
|
||||
return $this->shell->run($builder);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,10 @@ use Throwable;
|
|||
abstract class Builder
|
||||
{
|
||||
private $backupFolder;
|
||||
private $exportFolder;
|
||||
private $targetFolder;
|
||||
private $containerName;
|
||||
private $packageName;
|
||||
private $clean;
|
||||
|
||||
/**
|
||||
|
|
@ -55,6 +58,24 @@ abstract class Builder
|
|||
return $this->backupFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $exportFolder
|
||||
* @return Builder
|
||||
*/
|
||||
public function setExportFolder(string $exportFolder): Builder
|
||||
{
|
||||
$this->exportFolder = $exportFolder;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getExportFolder(): string
|
||||
{
|
||||
return $this->exportFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $containerName
|
||||
* @return Builder
|
||||
|
|
@ -65,6 +86,24 @@ abstract class Builder
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $targetFolder
|
||||
* @return Builder
|
||||
*/
|
||||
public function setTargetFolder(string $targetFolder): Builder
|
||||
{
|
||||
$this->targetFolder = $targetFolder;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTargetFolder(): string
|
||||
{
|
||||
return $this->targetFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -73,6 +112,24 @@ abstract class Builder
|
|||
return $this->containerName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return Builder
|
||||
*/
|
||||
public function setPackageName(string $packageName): Builder
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPackageName(): string
|
||||
{
|
||||
return $this->packageName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $clean
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace App\Utils\Builders;
|
||||
|
||||
use AdamBrett\ShellWrapper\Command\Builder as CommandBuilder;
|
||||
use App\Utils\Builder;
|
||||
|
||||
class PackageBuilder extends Builder
|
||||
{
|
||||
/**
|
||||
* @return CommandBuilder
|
||||
*/
|
||||
public function builder(): CommandBuilder
|
||||
{
|
||||
return new CommandBuilder("tar -zcf {$this->getExportFolder()}/{$this->getPackageName()}.tar.gz {$this->getBackupFolder()}");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace App\Utils\Builders;
|
||||
|
||||
use AdamBrett\ShellWrapper\Command\Builder as CommandBuilder;
|
||||
use App\Utils\Builder;
|
||||
|
||||
class UploadBuilder extends Builder
|
||||
{
|
||||
/**
|
||||
* @return CommandBuilder
|
||||
*/
|
||||
public function builder(): CommandBuilder
|
||||
{
|
||||
return new CommandBuilder("mega-put {$this->getExportFolder()}". DIRECTORY_SEPARATOR .
|
||||
"{$this->getPackageName()} {$this->getTargetFolder()}/{$this->getPackageName()}");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue