40 lines
1.8 KiB
PHP
40 lines
1.8 KiB
PHP
<?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;
|
|
}
|
|
}
|