Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added status to migration steps. #7

Merged
merged 1 commit into from
Oct 15, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,20 @@ Example:

Namespace: Triadev\EsMigration\Business\Events

#### Migration
| Event | Status |
|:-------------:|:-----:|
| MigrationRunning | Migration is running |
| MigrationError | Migration is failed |
| MigrationDone | Migration is done |

#### Migration - Step
| Event | Status |
|:-------------:|:-----:|
| MigrationStepRunning | Migration step is running |
| MigrationStepError | Migration step is failed |
| MigrationStepDone | Migration step is done |

## Roadmap
- create/delete templates
- shrink index
Expand Down
30 changes: 30 additions & 0 deletions src/Business/Events/MigrationStepDone.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php
namespace Triadev\EsMigration\Business\Events;

use Illuminate\Queue\SerializesModels;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep;

class MigrationStepDone
{
use SerializesModels;

/** @var ElasticsearchMigrationStep */
private $migrationStep;

/**
* MigrationStepDone constructor.
* @param ElasticsearchMigrationStep $migrationStep
*/
public function __construct(ElasticsearchMigrationStep $migrationStep)
{
$this->migrationStep = $migrationStep;
}

/**
* @return ElasticsearchMigrationStep
*/
public function getMigrationStep(): ElasticsearchMigrationStep
{
return $this->migrationStep;
}
}
30 changes: 30 additions & 0 deletions src/Business/Events/MigrationStepError.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php
namespace Triadev\EsMigration\Business\Events;

use Illuminate\Queue\SerializesModels;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep;

class MigrationStepError
{
use SerializesModels;

/** @var ElasticsearchMigrationStep */
private $migrationStep;

/**
* MigrationStepDone constructor.
* @param ElasticsearchMigrationStep $migrationStep
*/
public function __construct(ElasticsearchMigrationStep $migrationStep)
{
$this->migrationStep = $migrationStep;
}

/**
* @return ElasticsearchMigrationStep
*/
public function getMigrationStep(): ElasticsearchMigrationStep
{
return $this->migrationStep;
}
}
30 changes: 30 additions & 0 deletions src/Business/Events/MigrationStepRunning.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php
namespace Triadev\EsMigration\Business\Events;

use Illuminate\Queue\SerializesModels;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep;

class MigrationStepRunning
{
use SerializesModels;

/** @var ElasticsearchMigrationStep */
private $migrationStep;

/**
* MigrationStepDone constructor.
* @param ElasticsearchMigrationStep $migrationStep
*/
public function __construct(ElasticsearchMigrationStep $migrationStep)
{
$this->migrationStep = $migrationStep;
}

/**
* @return ElasticsearchMigrationStep
*/
public function getMigrationStep(): ElasticsearchMigrationStep
{
return $this->migrationStep;
}
}
4 changes: 3 additions & 1 deletion src/Business/Repository/ElasticsearchMigration.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ class ElasticsearchMigration implements ElasticsearchMigrationContract
*/
public function createOrUpdate(
string $migration,
int $status = self::ELASTICSEARCH_MIGRATION_STATUS_WAIT
int $status = self::ELASTICSEARCH_MIGRATION_STATUS_WAIT,
?string $error = null
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigration {
$dbMigration = $this->find($migration);

Expand All @@ -25,6 +26,7 @@ public function createOrUpdate(

if ($this->isStatusValid($status)) {
$dbMigration->status = $status;
$dbMigration->error = $error;
}

$dbMigration->saveOrFail();
Expand Down
103 changes: 103 additions & 0 deletions src/Business/Repository/ElasticsearchMigrationStep.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?php
namespace Triadev\EsMigration\Business\Repository;

use Triadev\EsMigration\Business\Events\MigrationStepDone;
use Triadev\EsMigration\Business\Events\MigrationStepError;
use Triadev\EsMigration\Business\Events\MigrationStepRunning;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepContract;
use Triadev\EsMigration\Exception\MigrationsNotExist;

class ElasticsearchMigrationStep implements ElasticsearchMigrationStepContract
{
/**
* @inheritdoc
*/
public function create(
int $migrationId,
string $type,
string $index
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep {
$dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep();

$dbMigration->migration_id = $migrationId;
$dbMigration->type = $type;
$dbMigration->index = $index;
$dbMigration->status = self::ELASTICSEARCH_MIGRATION_STEP_STATUS_WAIT;

$dbMigration->saveOrFail();

return $dbMigration;
}

/**
* @inheritdoc
*/
public function update(
int $migrationStepId,
int $status,
?string $error = null
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep {
$entity = $this->find($migrationStepId);
if (!$entity) {
throw new MigrationsNotExist();
}

if ($this->isStatusValid($status)) {
$entity->status = $status;
$entity->error = $error;
}

$entity->saveOrFail();

$this->dispatchStatus($entity);

return $entity;
}

/**
* @inheritdoc
*/
public function find(int $migrationStepId): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep
{
return \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep::where('id', $migrationStepId)
->first();
}

private function isStatusValid(int $status) : bool
{
$valid = [
self::ELASTICSEARCH_MIGRATION_STEP_STATUS_WAIT,
self::ELASTICSEARCH_MIGRATION_STEP_STATUS_RUNNING,
self::ELASTICSEARCH_MIGRATION_STEP_STATUS_DONE,
self::ELASTICSEARCH_MIGRATION_STEP_STATUS_ERROR
];

if (in_array($status, $valid)) {
return true;
}

return false;
}

private function dispatchStatus(\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep $migration)
{
switch ($migration->status) {
case self::ELASTICSEARCH_MIGRATION_STEP_STATUS_RUNNING:
$event = new MigrationStepRunning($migration);
break;
case self::ELASTICSEARCH_MIGRATION_STEP_STATUS_DONE:
$event = new MigrationStepDone($migration);
break;
case self::ELASTICSEARCH_MIGRATION_STEP_STATUS_ERROR:
$event = new MigrationStepError($migration);
break;
default:
$event = null;
break;
}

if ($event) {
event($event);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
<?php
namespace Triadev\EsMigration\Business\Repository;

use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationsAliasContract;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepAliasContract;

class ElasticsearchMigrationsAlias implements ElasticsearchMigrationsAliasContract
class ElasticsearchMigrationStepAlias implements ElasticsearchMigrationStepAliasContract
{
/**
* @inheritdoc
*/
public function create(
int $migrationsId,
int $migrationStepId,
array $add = [],
array $remove = [],
array $removeIndices = []
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsAlias {
$dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsAlias();
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAlias {
$dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAlias();

$dbMigration->migrations_id = $migrationsId;
$dbMigration->migration_step_id = $migrationStepId;
$dbMigration->add = json_encode($add);
$dbMigration->remove = json_encode($remove);
$dbMigration->remove_indices = json_encode($removeIndices);
Expand All @@ -29,11 +29,11 @@ public function create(
/**
* @inheritdoc
*/
public function find(int $migrationsId): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsAlias
public function find(int $migrationStepId): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAlias
{
return \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsAlias::where(
'migrations_id',
$migrationsId
return \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAlias::where(
'migration_step_id',
$migrationStepId
)->first();
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
<?php
namespace Triadev\EsMigration\Business\Repository;

use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationsCreateIndexContract;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepCreateIndexContract;

class ElasticsearchMigrationsCreateIndex implements ElasticsearchMigrationsCreateIndexContract
class ElasticsearchMigrationStepCreateIndex implements ElasticsearchMigrationStepCreateIndexContract
{
/**
* @inheritdoc
*/
public function create(
int $migrationsId,
int $migrationStepId,
array $mappings,
?array $settings = null
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsCreateIndex {
$dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsCreateIndex();
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepCreateIndex {
$dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepCreateIndex();

$dbMigration->migrations_id = $migrationsId;
$dbMigration->migration_step_id = $migrationStepId;
$dbMigration->mappings = json_encode($mappings);

if (is_array($settings)) {
Expand All @@ -30,11 +30,11 @@ public function create(
/**
* @inheritdoc
*/
public function find(int $migrationsId): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsCreateIndex
public function find(int $migrationStepId): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepCreateIndex
{
return \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsCreateIndex::where(
'migrations_id',
$migrationsId
return \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepCreateIndex::where(
'migration_step_id',
$migrationStepId
)->first();
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
<?php
namespace Triadev\EsMigration\Business\Repository;

use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationsDeleteByQueryContract;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepDeleteByQueryContract;

class ElasticsearchMigrationsDeleteByQuery implements ElasticsearchMigrationsDeleteByQueryContract
class ElasticsearchMigrationStepDeleteByQuery implements ElasticsearchMigrationStepDeleteByQueryContract
{
/**
* @inheritdoc
*/
public function create(
int $migrationsId,
int $migrationStepId,
array $query,
?string $type = null,
array $options = []
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsDeleteByQuery {
$dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsDeleteByQuery();
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepDeleteByQuery {
$dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepDeleteByQuery();

$dbMigration->migrations_id = $migrationsId;
$dbMigration->migration_step_id = $migrationStepId;
$dbMigration->query = json_encode($query);
$dbMigration->type = $type;
$dbMigration->options = json_encode($options);
Expand All @@ -29,11 +29,12 @@ public function create(
/**
* @inheritdoc
*/
public function find(int $migrationsId): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsDeleteByQuery
{
return \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationsDeleteByQuery::where(
'migrations_id',
$migrationsId
public function find(
int $migrationStepId
): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepDeleteByQuery {
return \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepDeleteByQuery::where(
'migration_step_id',
$migrationStepId
)->first();
}
}
Loading