Feature branch PR for Spec 114. This branch contains the merged agent session work (see merge commit on branch). Tests - `vendor/bin/sail artisan test --compact tests/Feature/System/Spec114/` Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #139
62 lines
2.2 KiB
PHP
62 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\System\Widgets;
|
|
|
|
use App\Models\OperationRun;
|
|
use App\Support\OperationCatalog;
|
|
use App\Support\OperationRunOutcome;
|
|
use App\Support\OperationRunStatus;
|
|
use App\Support\System\SystemOperationRunLinks;
|
|
use App\Support\SystemConsole\SystemConsoleWindow;
|
|
use Filament\Widgets\Widget;
|
|
use Illuminate\Support\Collection;
|
|
|
|
class ControlTowerRecentFailures extends Widget
|
|
{
|
|
protected static bool $isLazy = false;
|
|
|
|
protected int|string|array $columnSpan = 'full';
|
|
|
|
protected string $view = 'filament.system.widgets.control-tower-recent-failures';
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
protected function getViewData(): array
|
|
{
|
|
$window = SystemConsoleWindow::fromNullable((string) request()->query('window'));
|
|
$start = $window->startAt();
|
|
|
|
/** @var Collection<int, OperationRun> $runs */
|
|
$runs = OperationRun::query()
|
|
->with('tenant')
|
|
->where('created_at', '>=', $start)
|
|
->where('status', OperationRunStatus::Completed->value)
|
|
->where('outcome', OperationRunOutcome::Failed->value)
|
|
->latest('id')
|
|
->limit(8)
|
|
->get();
|
|
|
|
return [
|
|
'windowLabel' => SystemConsoleWindow::options()[$window->value] ?? 'Last 24 hours',
|
|
'runs' => $runs->map(function (OperationRun $run): array {
|
|
$failureSummary = is_array($run->failure_summary) ? $run->failure_summary : [];
|
|
$primaryFailure = is_array($failureSummary[0] ?? null) ? $failureSummary[0] : [];
|
|
$failureMessage = trim((string) ($primaryFailure['message'] ?? ''));
|
|
|
|
return [
|
|
'id' => (int) $run->getKey(),
|
|
'operation' => OperationCatalog::label((string) $run->type),
|
|
'tenant' => $run->tenant?->name ?? 'Tenantless',
|
|
'created_at' => $run->created_at?->diffForHumans() ?? '—',
|
|
'failure_message' => $failureMessage !== '' ? $failureMessage : 'No failure details available',
|
|
'url' => SystemOperationRunLinks::view($run),
|
|
];
|
|
}),
|
|
'runsUrl' => SystemOperationRunLinks::index(),
|
|
];
|
|
}
|
|
}
|