Skip to content

Commit

Permalink
Merge pull request #8 from achmadhadikurnia/main
Browse files Browse the repository at this point in the history
feat: add pull tracking error
  • Loading branch information
achmadhadikurnia committed Feb 27, 2024
2 parents e0a655b + 833d1cd commit 9d8d896
Show file tree
Hide file tree
Showing 8 changed files with 134 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ public function up(): void
{
Schema::create('siasn_simpeg_pegawai', function (Blueprint $table) {
$table->string('pns_id', 42)->primary();
$table->string('nip_baru')->nullable()->index('1_nip_baru');
$table->string('nip_lama')->nullable()->index('1_nip_lama');
$table->string('nip_baru', 18)->nullable()->index('1_nip_baru');
$table->string('nip_lama', 9)->nullable()->index('1_nip_lama');
$table->string('nama')->nullable();
$table->string('gelar_depan')->nullable();
$table->string('gelar_belakang')->nullable();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

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

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('siasn_simpeg_pull_tracking_error', function (Blueprint $table) {
$table->id();
$table->foreignId('pull_tracking_id');
$table->string('pns_id', 42);
$table->longText('error');
$table->timestamp('done_at', 0)->nullable();
$table->timestamps();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('siasn_simpeg_pull_tracking_error');
}
};
40 changes: 25 additions & 15 deletions src/Commands/PullPnsDataUtamaCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
use Kanekescom\Siasn\Simpeg\Models\Pegawai;
use Kanekescom\Siasn\Simpeg\Models\PnsDataUtama;
use Kanekescom\Siasn\Simpeg\Models\PullTracking;
use Kanekescom\Siasn\Simpeg\Models\PullTrackingError;
use Kanekescom\Siasn\Simpeg\Services\PullTrackingErrorService;

class PullPnsDataUtamaCommand extends Command
{
Expand Down Expand Up @@ -36,8 +38,8 @@ public function handle()
{
$nipBaru = $this->option('nipBaru');
$track = $this->option('track');
$skip = $this->option('skip');
$startOver = $this->option('startOver');
$skip = $startOver ? 0 : $this->option('skip');

$pullTrackingCommandName = 'siasn-simpeg:pull-pns-data-utama';
$hasPullTracking = $nipBaru ? null : PullTracking::where('command', $pullTrackingCommandName)->first();
Expand All @@ -55,7 +57,8 @@ public function handle()
}

$startPegawai = now();
$pullTracking = null;
$pullTracking = new PullTracking;
$pullTrackingError = new PullTrackingError;
$pegawais = Pegawai::get();

if ($nipBaru) {
Expand All @@ -70,36 +73,39 @@ public function handle()
return self::FAILURE;
}

if (! $nipBaru && $track && ! $startOver) {
if ($nipBaru == null && $track) {
$pullTracking = PullTracking::updateOrCreate(['command' => $pullTrackingCommandName], [
'start_from' => $skip,
'amount' => $pegawaiCount,
]);
}

if ($hasPullTracking && $hasPullTracking->done_at) {
$this->info('Pull command has been completed. Use --startOver to re-pull from the beginning.');
if ($nipBaru == null && $track && ! $startOver && $hasPullTracking && $hasPullTracking->done_at) {
$this->info('Pull command has been completed. Use --startOver to re-pull from the beginning.');

return self::SUCCESS;
}
return self::SUCCESS;
}

if ($hasPullTracking) {
$pullingStartingForm = $skip + 1;
if ($nipBaru == null && $track && ! $startOver && $hasPullTracking) {
$pullingStartingForm = $skip + 1;

$this->info(str("Continue pulling starting from {$pullingStartingForm}")->upper());
$this->newLine();
}
$this->info(str("Continue pulling starting from {$pullingStartingForm}")->upper());
$this->newLine();
}

$pegawais = $pegawais->skip($skip);

$pegawais->each(function ($pegawai) use ($pegawaiCount, &$iPegawai, $startPegawai, $pullTracking, $skip) {
$pegawais->each(function ($pegawai) use ($pegawaiCount, &$iPegawai, $startPegawai, $pullTracking, $pullTrackingError, $skip, $nipBaru, $track) {
$iPegawai++;

$this->info("PEGAWAI: [{$iPegawai}/{$pegawaiCount}] {$pegawai->nip_baru}");

try {
$response = Simpeg::getPnsDataUtama($pegawai->nip_baru);
} catch (\Exception $e) {
if ($nipBaru == null && $track) {
new PullTrackingErrorService($e, $pullTrackingError, $pullTracking, $pegawai->pns_id);
}

$this->error($e);
$this->newLine();

Expand All @@ -119,6 +125,10 @@ public function handle()
->restore();
});
} catch (\Exception $e) {
if ($nipBaru == null && $track) {
new PullTrackingErrorService($e, $pullTrackingError, $pullTracking, $pegawai->pns_id);
}

$this->error($e);
$this->newLine();

Expand All @@ -128,7 +138,7 @@ public function handle()
$pullTracking?->update(['last_try' => $iPegawai]);
$executedItems = $iPegawai - $skip;

$this->info(str("All tasks are running for {$startPegawai->shortAbsoluteDiffForHumans(now(), 1)} and {$executedItems} items executed")->upper());
$this->info(str("All tasks are running for {$startPegawai->shortAbsoluteDiffForHumans(now(), 1)} and {$executedItems} items have been executed.")->upper());
$this->newLine();
});

Expand Down
44 changes: 27 additions & 17 deletions src/Commands/PullRiwayatCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
use Kanekescom\Siasn\Simpeg\Facades\Simpeg;
use Kanekescom\Siasn\Simpeg\Models\Pegawai;
use Kanekescom\Siasn\Simpeg\Models\PullTracking;
use Kanekescom\Siasn\Simpeg\Models\PullTrackingError;
use Kanekescom\Siasn\Simpeg\Services\PullTrackingErrorService;

class PullRiwayatCommand extends Command
{
Expand Down Expand Up @@ -82,8 +84,8 @@ public function handle()
$endpoint = $this->argument('endpoint');
$nipBaru = $this->option('nipBaru');
$track = $this->option('track');
$skip = $this->option('skip');
$startOver = $this->option('startOver');
$skip = $startOver ? 0 : $this->option('skip');

if (blank($endpoints = $endpointOptions->only($endpoint))) {
throw new BadEndpointCallException('Endpoint does not exist.');
Expand Down Expand Up @@ -120,7 +122,8 @@ public function handle()
$startPegawai = now();
$endpoints = $endpoints->keys();
$endpointCount = $endpoints->count();
$pullTracking = null;
$pullTracking = new PullTracking;
$pullTrackingError = new PullTrackingError;
$pegawais = Pegawai::get();

if ($nipBaru) {
Expand All @@ -135,36 +138,35 @@ public function handle()
return self::FAILURE;
}

if (! $nipBaru && $track && ! $startOver) {
if ($nipBaru == null && $track) {
$pullTracking = PullTracking::updateOrCreate(['command' => $pullTrackingCommandName], [
'start_from' => $skip,
'amount' => $pegawaiCount,
]);
}

if ($hasPullTracking && $hasPullTracking->done_at) {
$this->info('Pull command has been completed. Use --startOver to re-pull from the beginning.');
if ($nipBaru == null && $track && ! $startOver && $hasPullTracking && $hasPullTracking->done_at) {
$this->info('Pull command has been completed. Use --startOver to re-pull from the beginning.');

return self::SUCCESS;
}
return self::SUCCESS;
}

if ($hasPullTracking) {
$pullingStartingForm = $skip + 1;
if ($nipBaru == null && $track && ! $startOver && $hasPullTracking) {
$pullingStartingForm = $skip + 1;

$this->info(str("Continue pulling starting from {$pullingStartingForm}")->upper());
$this->newLine();
}
$this->info(str("Continue pulling starting from {$pullingStartingForm}")->upper());
$this->newLine();
}

$pegawais = $pegawais->skip($skip);

$pegawais->each(function ($pegawai) use ($pegawaiCount, &$iPegawai, $endpoints, $endpointCount, $startPegawai, $pullTracking, $skip) {
$pegawais->each(function ($pegawai) use ($pegawaiCount, &$iPegawai, $endpoints, $endpointCount, $startPegawai, $pullTracking, $pullTrackingError, $skip, $nipBaru, $track) {
$startEndpoint = now();
$iPegawai++;
$iEndpoint = 0;

$this->info("PEGAWAI: [{$iPegawai}/{$pegawaiCount}] {$pegawai->nip_baru}");

$endpoints->each(function ($endpoint) use ($pegawai, $endpointCount, &$iEndpoint) {
$endpoints->each(function ($endpoint) use ($pegawai, $endpointCount, &$iEndpoint, $pullTracking, $pullTrackingError, $nipBaru, $track) {
$iEndpoint++;
$modelName = str($endpoint)->studly();
$modelClass = "Kanekescom\\Siasn\\Simpeg\\Models\\{$modelName}";
Expand All @@ -174,6 +176,10 @@ public function handle()
try {
$response = Simpeg::$simpegMethod($pegawai->nip_baru);
} catch (\Exception $e) {
if ($nipBaru == null && $track) {
new PullTrackingErrorService($e, $pullTrackingError, $pullTracking, $pegawai->pns_id);
}

$this->error($e);
$this->newLine();

Expand Down Expand Up @@ -219,6 +225,10 @@ public function handle()

$this->newLine(2);
} catch (\Exception $e) {
if ($nipBaru == null && $track) {
new PullTrackingErrorService($e, $pullTrackingError, $pullTracking, $pegawai->pns_id);
}

$this->error($e);
$this->newLine();

Expand All @@ -230,8 +240,8 @@ public function handle()
$pullTracking?->update(['last_try' => $iPegawai]);
$executedItems = $iPegawai - $skip;

$this->info("All endpoint tasks for {$pegawai->nip_baru} are processed in {$startEndpoint->shortAbsoluteDiffForHumans(now(), 1)}");
$this->info(str("All tasks are running for {$startPegawai->shortAbsoluteDiffForHumans(now(), 1)} and {$executedItems} items executed")->upper());
$this->info("All endpoint tasks for {$pegawai->nip_baru} are processed in {$startEndpoint->shortAbsoluteDiffForHumans(now(), 1)}.");
$this->info(str("All tasks are running for {$startPegawai->shortAbsoluteDiffForHumans(now(), 1)} and {$executedItems} items have been executed.")->upper());
$this->newLine();
});

Expand Down
13 changes: 6 additions & 7 deletions src/Models/PullTracking.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,12 @@

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class PullTracking extends Model
{
use HasFactory;

/**
* The data type of the auto-incrementing ID.
*
* @var string
*/
protected $keyType = 'string';

/**
* The attributes that aren't mass assignable.
*
Expand All @@ -27,4 +21,9 @@ public function getTable()
{
return 'siasn_simpeg_'.str(class_basename(__CLASS__))->snake();
}

public function errors(): HasMany
{
return $this->hasMany(PullTrackingError::class, 'pull_tracking_id');
}
}
23 changes: 23 additions & 0 deletions src/Models/PullTrackingError.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Kanekescom\Siasn\Simpeg\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class PullTrackingError extends Model
{
use HasFactory;

/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];

public function getTable()
{
return 'siasn_simpeg_'.str(class_basename(__CLASS__))->snake();
}
}
19 changes: 19 additions & 0 deletions src/Services/PullTrackingErrorService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Kanekescom\Siasn\Simpeg\Services;

use Kanekescom\Siasn\Simpeg\Models\PullTracking;
use Kanekescom\Siasn\Simpeg\Models\PullTrackingError;

class PullTrackingErrorService
{
public function __construct($e, PullTrackingError $pullTrackingError, PullTracking $pullTracking, string $pns_id)
{
return $pullTrackingError->updateOrCreate([
'pull_tracking_id' => $pullTracking->id,
'pns_id' => $pns_id,
], [
'error' => $e,
]);
}
}
1 change: 1 addition & 0 deletions src/SimpegServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public function configurePackage(Package $package): void
'2024_01_02_000031_create_siasn_simpeg_pasangan_table',
'2024_01_02_000032_create_siasn_simpeg_data_pernikahan_table',
'2024_01_02_000033_create_siasn_simpeg_pull_tracking_table',
'2024_01_02_000034_create_siasn_simpeg_pull_tracking_error_table',
])
->runsMigrations()
->hasCommand(Commands\ImportCommand::class)
Expand Down

0 comments on commit 9d8d896

Please sign in to comment.