Skip to content

Commit

Permalink
Save audit logs when a migration event is thrown.
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher Lorke committed Oct 21, 2018
1 parent 65c982b commit ae0eeca
Show file tree
Hide file tree
Showing 12 changed files with 350 additions and 1 deletion.
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ Namespace: Triadev\EsMigration\Business\Events

## Roadmap
- stop migration
- audit logs
- create/delete templates
- shrink index
- split index
Expand Down
24 changes: 24 additions & 0 deletions src/Business/Repository/ElasticsearchMigrationAuditLog.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php
namespace Triadev\EsMigration\Business\Repository;

use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationAuditLogContract;

class ElasticsearchMigrationAuditLog implements ElasticsearchMigrationAuditLogContract
{
/**
* @inheritdoc
*/
public function create(
int $migrationId,
int $status
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationAuditLog {
$entity = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationAuditLog();

$entity->migration_id = $migrationId;
$entity->status = $status;

$entity->saveOrFail();

return $entity;
}
}
24 changes: 24 additions & 0 deletions src/Business/Repository/ElasticsearchMigrationStepAuditLog.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php
namespace Triadev\EsMigration\Business\Repository;

use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepAuditLogContract;

class ElasticsearchMigrationStepAuditLog implements ElasticsearchMigrationStepAuditLogContract
{
/**
* @inheritdoc
*/
public function create(
int $migrationStepId,
int $status
): \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAuditLog {
$entity = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAuditLog();

$entity->migration_step_id = $migrationStepId;
$entity->status = $status;

$entity->saveOrFail();

return $entity;
}
}
21 changes: 21 additions & 0 deletions src/Contract/Repository/ElasticsearchMigrationAuditLogContract.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
namespace Triadev\EsMigration\Contract\Repository;

use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationAuditLog;

interface ElasticsearchMigrationAuditLogContract
{
/**
* Create
*
* @param int $migrationId
* @param int $status
* @return ElasticsearchMigrationAuditLog
*
* @throws \Throwable
*/
public function create(
int $migrationId,
int $status
) : ElasticsearchMigrationAuditLog;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
namespace Triadev\EsMigration\Contract\Repository;

use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAuditLog;

interface ElasticsearchMigrationStepAuditLogContract
{
/**
* Create
*
* @param int $migrationStepId
* @param int $status
* @return ElasticsearchMigrationStepAuditLog
*
* @throws \Throwable
*/
public function create(
int $migrationStepId,
int $status
) : ElasticsearchMigrationStepAuditLog;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTriadevElasticsearchMigrationAuditLogTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::enableForeignKeyConstraints();

Schema::create('triadev_elasticsearch_migration_audit_log', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('migration_id');
$table->integer('status');
$table->timestamps();

$table->foreign('migration_id')
->references('id')
->on('triadev_elasticsearch_migration')
->onDelete('cascade');
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('triadev_elasticsearch_migration_audit_log');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTriadevElasticsearchMigrationStepAuditLogTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::enableForeignKeyConstraints();

Schema::create('triadev_elasticsearch_migration_step_audit_log', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('migration_step_id');
$table->integer('status');
$table->timestamps();

$table->foreign('migration_step_id')
->references('id')
->on('triadev_elasticsearch_migration_step')
->onDelete('cascade');
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('triadev_elasticsearch_migration_step_audit_log');
}
}
21 changes: 21 additions & 0 deletions src/Models/Entity/ElasticsearchMigrationAuditLog.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
namespace Triadev\EsMigration\Models\Entity;

use Illuminate\Database\Eloquent\Model;

/**
* @property integer $id
* @property integer $migration_id
* @property integer $status
* @property string $created_at
* @property string $updated_at
*/
class ElasticsearchMigrationAuditLog extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'triadev_elasticsearch_migration_audit_log';
}
21 changes: 21 additions & 0 deletions src/Models/Entity/ElasticsearchMigrationStepAuditLog.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
namespace Triadev\EsMigration\Models\Entity;

use Illuminate\Database\Eloquent\Model;

/**
* @property integer $id
* @property integer $migration_step_id
* @property integer $status
* @property string $created_at
* @property string $updated_at
*/
class ElasticsearchMigrationStepAuditLog extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'triadev_elasticsearch_migration_step_audit_log';
}
18 changes: 18 additions & 0 deletions src/Provider/ElasticsearchMigrationServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,24 @@ function () {
);
}
);

$this->app->bind(
\Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationAuditLogContract::class,
function () {
return app()->make(
\Triadev\EsMigration\Business\Repository\ElasticsearchMigrationAuditLog::class
);
}
);

$this->app->bind(
\Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepAuditLogContract::class,
function () {
return app()->make(
\Triadev\EsMigration\Business\Repository\ElasticsearchMigrationStepAuditLog::class
);
}
);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php
namespace Tests\Integration\Business\Repository;

use Tests\TestCase;
use Triadev\EsMigration\Business\Mapper\MigrationStatus;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationAuditLogContract;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationContract;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationAuditLog;

class ElasticsearchMigrationAuditLogTest extends TestCase
{
/** @var ElasticsearchMigrationContract */
private $repositoryMigration;

/** @var ElasticsearchMigrationAuditLogContract */
private $repository;

public function setUp()
{
parent::setUp();

$this->repositoryMigration = app(ElasticsearchMigrationContract::class);
$this->repository = app(ElasticsearchMigrationAuditLogContract::class);
}

/**
* @test
*/
public function it_creates_a_migration()
{
$this->assertEquals(0, ElasticsearchMigrationAuditLog::all()->count());

$migration = $this->repositoryMigration->createOrUpdate('phpunit');

$this->assertInstanceOf(
ElasticsearchMigrationAuditLog::class,
$this->repository->create(
$migration->id,
MigrationStatus::MIGRATION_STATUS_RUNNING
)
);

$this->assertInstanceOf(
ElasticsearchMigrationAuditLog::class,
$this->repository->create(
$migration->id,
MigrationStatus::MIGRATION_STATUS_DONE
)
);

$this->assertEquals(2, ElasticsearchMigrationAuditLog::all()->count());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?php
namespace Tests\Integration\Business\Repository;

use Tests\TestCase;
use Triadev\EsMigration\Business\Mapper\MigrationStatus;
use Triadev\EsMigration\Business\Mapper\MigrationTypes;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepAuditLogContract;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationContract;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationStepContract;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStepAuditLog;

class ElasticsearchMigrationStepAuditLogTest extends TestCase
{
/** @var ElasticsearchMigrationContract */
private $repositoryMigration;

/** @var ElasticsearchMigrationStepContract */
private $repositoryMigrationStep;

/** @var ElasticsearchMigrationStepAuditLogContract */
private $repository;

public function setUp()
{
parent::setUp();

$this->repositoryMigration = app(ElasticsearchMigrationContract::class);
$this->repositoryMigrationStep = app(ElasticsearchMigrationStepContract::class);
$this->repository = app(ElasticsearchMigrationStepAuditLogContract::class);
}

/**
* @test
*/
public function it_creates_a_migration()
{
$this->assertEquals(0, ElasticsearchMigrationStepAuditLog::all()->count());

$migration = $this->repositoryMigration->createOrUpdate('phpunit');

$migrationStep = $this->repositoryMigrationStep->create(
$migration->id,
MigrationTypes::MIGRATION_TYPE_CREATE_INDEX,
[],
1,
true
);

$this->assertInstanceOf(
ElasticsearchMigrationStepAuditLog::class,
$this->repository->create(
$migrationStep->id,
MigrationStatus::MIGRATION_STATUS_RUNNING
)
);

$this->assertInstanceOf(
ElasticsearchMigrationStepAuditLog::class,
$this->repository->create(
$migrationStep->id,
MigrationStatus::MIGRATION_STATUS_DONE
)
);

$this->assertEquals(2, ElasticsearchMigrationStepAuditLog::all()->count());
}
}

0 comments on commit ae0eeca

Please sign in to comment.