@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Services\OperationalHealth;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class OperationsCheck extends Command
|
||||
{
|
||||
protected $signature = 'sgc:operations-check {--json : Resultado agregado para monitorização} {--document-limit=1000 : Máximo de documentos e ficheiros a inspeccionar, de 1 a 10000}';
|
||||
|
||||
protected $description = 'Consultar reposição e integridade documental sem processar compras, corrigir ficheiros ou alterar configurações';
|
||||
|
||||
public function handle(OperationalHealth $health): int
|
||||
{
|
||||
$limit = filter_var($this->option('document-limit'), FILTER_VALIDATE_INT, ['options' => ['min_range' => 1, 'max_range' => 10000]]);
|
||||
if ($limit === false) {
|
||||
$this->error('O limite deve ser um inteiro entre 1 e 10000.');
|
||||
|
||||
return self::INVALID;
|
||||
}
|
||||
$result = $health->inspect($limit);
|
||||
if ($this->option('json')) {
|
||||
$this->line(json_encode($result, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR));
|
||||
} else {
|
||||
$this->line($result['ok'] ? 'Operação: verificações concluídas sem divergências observadas.' : 'Operação: verificações requerem atenção.');
|
||||
$labels = ['replenishment' => 'Reposição', 'receipt_documents' => 'Documentos da recepção'];
|
||||
$states = ['passed' => 'sem divergências observadas', 'attention' => 'requer atenção', 'incomplete' => 'verificação incompleta', 'unavailable' => 'consulta indisponível'];
|
||||
foreach ($result['checks'] as $key => $check) {
|
||||
$this->line($labels[$key].': '.$states[$check['status']].'.');
|
||||
foreach ($check['result']['reasons'] as $reason) {
|
||||
$this->line(' '.$reason);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result['ok'] ? self::SUCCESS : self::FAILURE;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user