Skip to content

Commit

Permalink
Merge branch 'import-from-remote'
Browse files Browse the repository at this point in the history
  • Loading branch information
maciejslawik committed Nov 8, 2021
2 parents 97e138b + defaf18 commit ab20561
Show file tree
Hide file tree
Showing 19 changed files with 710 additions and 294 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
.idea
.idea
composer.lock
vendor
13 changes: 9 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@
"name": "wearejh/stripped-db-provider",
"description": "Stripped DB Provider for Magento 2",
"type": "magento2-module",
"repositories": [
{
"type": "vcs",
"url": "git@github.com:maciejslawik/mysqldump-php.git"
}
],
"require": {
"php": "^7.1",
"magento/framework": "*",
"magento/module-backend": "*",
"aws/aws-sdk-php": "^3.112.0"
"aws/aws-sdk-php": "^3.112.0",
"ifsnop/mysqldump-php": ">=3.0"
},
"autoload": {
"files": [
Expand All @@ -16,4 +21,4 @@
"Jh\\StrippedDbProvider\\": "src/"
}
}
}
}
71 changes: 71 additions & 0 deletions src/Console/ImportFromRemoteCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php

declare(strict_types=1);

namespace Jh\StrippedDbProvider\Console;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Jh\StrippedDbProvider\Model\DbFacade;
use Jh\StrippedDbProvider\Model\ProjectMeta;

class ImportFromRemoteCommand extends Command
{
const ARGUMENT_PROJECT_NAME = 'source-project-name';

/**
* @var DbFacade
*/
private $dbFacade;

public function __construct(
DbFacade $dbFacade,
string $name = null
) {
parent::__construct($name);
$this->dbFacade = $dbFacade;
}

/**
* @return void
*/
protected function configure()
{
$this->setName('wearejh:stripped-db-provider:import-from-remote');
$this->setDescription("Import DB from JH's Cloud Storage");
$this->addArgument(
self::ARGUMENT_PROJECT_NAME,
InputArgument::REQUIRED,
'Source Project Name to import from eg. prod-stroustrup-workshop.'
);
}

/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
try {
$sourceProjectMeta = new ProjectMeta($input->getArgument(self::ARGUMENT_PROJECT_NAME));
$output->writeln('<fg=cyan;options=bold>Downloading Database From Cloud Storage...</>');
$this->dbFacade->downloadDatabaseDump($sourceProjectMeta);
$output->writeln(sprintf(
"<info>Dump downloaded at %s</info>",
$sourceProjectMeta->getLocalAbsoluteCompressedFileDumpPath()
));
$output->writeln('<fg=cyan;options=bold>Uncompressing Database ...</>');
$this->dbFacade->uncompressDatabaseDump($sourceProjectMeta);
$output->writeln('<fg=cyan;options=bold>Importing Database ...</>');
$this->dbFacade->importDatabaseDump($sourceProjectMeta);
$output->writeln("<info>Database successfully imported.</info>");
} catch (\Exception $e) {
$output->writeln("<error>{$e->getMessage()}</error>");
} finally {
if (isset($sourceProjectMeta)) {
$this->dbFacade->cleanUpLocalDumpFiles($sourceProjectMeta);
}
}
}
}
61 changes: 0 additions & 61 deletions src/Console/UploadDbCommand.php

This file was deleted.

64 changes: 64 additions & 0 deletions src/Console/UploadToRemoteCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

declare(strict_types=1);

namespace Jh\StrippedDbProvider\Console;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Jh\StrippedDbProvider\Model\DbFacade;
use Jh\StrippedDbProvider\Model\Config;

class UploadToRemoteCommand extends Command
{
/**
* @var DbFacade
*/
private $dbFacade;

/**
* @var Config
*/
private $config;

public function __construct(DbFacade $dbFacade, Config $config, string $name = null)
{
parent::__construct($name);
$this->dbFacade = $dbFacade;
$this->config = $config;
}

/**
* @return void
*/
protected function configure()
{
$this->setName('wearejh:stripped-db-provider:upload-to-remote');
$this->setDescription("Upload a stripped DB dump to JH's Cloud Storage");
}

/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
try {
$projectMeta = $this->config->getProjectMeta();
$output->writeln('<fg=cyan;options=bold>Dumping Database...</>');
$this->dbFacade->dumpDatabase($projectMeta);
$output->writeln("<info>Dump created at {$projectMeta->getLocalAbsoluteFileDumpPath()}</info>");
$output->writeln('<fg=cyan;options=bold>Compressing Dump...</>');
$this->dbFacade->compressDatabaseDump($projectMeta);
$output->writeln('<fg=cyan;options=bold>Uploading Dump to Cloud Storage...</>');
$this->dbFacade->uploadDatabaseDump($projectMeta);
$output->writeln("<info>Dump successfully uploaded at {$projectMeta->getRemoteDumpObjectKey()}.</info>");
} catch (\Exception $e) {
$output->writeln("<error>{$e->getMessage()}</error>");
} finally {
if (isset($projectMeta)) {
$this->dbFacade->cleanUpLocalDumpFiles($projectMeta);
}
}
}
}
33 changes: 14 additions & 19 deletions src/Cron/UploadDbCron.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
namespace Jh\StrippedDbProvider\Cron;

use Jh\StrippedDbProvider\Model\Config;
use Jh\StrippedDbProvider\Model\DbDumper;
use Jh\StrippedDbProvider\Model\DbUploader;
use Jh\StrippedDbProvider\Model\DbFacade;
use Psr\Log\LoggerInterface;

class UploadDbCron
Expand All @@ -17,31 +16,23 @@ class UploadDbCron
private $config;

/**
* @var DbDumper
*/
private $dbDumper;

/**
* @var DbUploader
* @var LoggerInterface
*/
private $dbUploader;
private $logger;

/**
* @var LoggerInterface
* @var DbFacade
*/
private $logger;
private $dbFacade;

public function __construct(
Config $config,
DbDumper $dbDumper,
DbUploader $dbUploader,
DbFacade $dbFacade,
LoggerInterface $logger
) {

$this->config = $config;
$this->dbDumper = $dbDumper;
$this->dbUploader = $dbUploader;
$this->logger = $logger;
$this->dbFacade = $dbFacade;
}

/**
Expand All @@ -54,12 +45,16 @@ public function execute()
}

try {
$this->dbDumper->dumpDb();
$this->dbUploader->uploadDBDump($this->dbDumper->getAbsoluteDumpPath());
$projectMeta = $this->config->getProjectMeta();
$this->dbFacade->dumpDatabase($projectMeta);
$this->dbFacade->compressDatabaseDump($projectMeta);
$this->dbFacade->uploadDatabaseDump($projectMeta);
} catch (\Exception $e) {
$this->logger->critical($e);
} finally {
$this->dbDumper->cleanUp();
if (isset($projectMeta)) {
$this->dbFacade->cleanUpLocalDumpFiles($projectMeta);
}
}
}
}
31 changes: 27 additions & 4 deletions src/Model/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
namespace Jh\StrippedDbProvider\Model;

use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\DeploymentConfig;
use Magento\Framework\Config\ConfigOptionsListConstants;

class Config
{
Expand Down Expand Up @@ -32,19 +34,29 @@ class Config
*/
private $config;

public function __construct(ScopeConfigInterface $config)
{
/**
* @var DeploymentConfig
*/
private $deploymentConfig;

public function __construct(
ScopeConfigInterface $config,
DeploymentConfig $deploymentConfig
) {
$this->config = $config;
$this->deploymentConfig = $deploymentConfig;
}

public function isEnabled(): bool
{
return (bool) $this->config->isSetFlag(self::XML_PATH_ENABLED);
}

public function getProjectName(): string
public function getProjectMeta(): ProjectMeta
{
return (string) $this->config->getValue(self::XML_PATH_PROJECT_NAME);
return new ProjectMeta(
(string) $this->config->getValue(self::XML_PATH_PROJECT_NAME)
);
}

public function getBucketRegion(): string
Expand All @@ -66,4 +78,15 @@ public function getSecretAccessKey(): string
{
return (string) $this->config->getValue(self::XML_PATH_SECRET_ACCESS_KEY);
}

public function getLocalDbConfigData(string $key): ?string
{
return $this->deploymentConfig->get(
sprintf(
"%s/%s",
ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT,
$key
)
);
}
}
37 changes: 37 additions & 0 deletions src/Model/Db/DbCleaner.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

declare(strict_types=1);

namespace Jh\StrippedDbProvider\Model\Db;

use Jh\StrippedDbProvider\Model\ProjectMeta;
use Magento\Framework\Shell;

class DbCleaner
{
/**
* @var Shell
*/
private $shell;

public function __construct(Shell $shell)
{
$this->shell = $shell;
}

/**
* Attempt to silently remove the database dumps
*
* @param ProjectMeta $projectMeta
* @return string
*/
public function cleanUp(ProjectMeta $projectMeta)
{
try {
$this->shell->execute("rm %s", [$projectMeta->getLocalAbsoluteFileDumpPath()]);
$this->shell->execute("rm %s", [$projectMeta->getLocalAbsoluteCompressedFileDumpPath()]);
} catch (\Exception $e) {
//empty
}
}
}
Loading

0 comments on commit ab20561

Please sign in to comment.