Implements Spec 114 System Console Control Tower pages, widgets, triage actions, directory views, and enterprise polish (badges, repair workspace owners table, health indicator).
66 lines
2.1 KiB
PHP
66 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\System\Widgets;
|
|
|
|
use App\Models\OperationRun;
|
|
use App\Support\OperationRunOutcome;
|
|
use App\Support\OperationRunStatus;
|
|
use App\Support\System\SystemOperationRunLinks;
|
|
use App\Support\SystemConsole\StuckRunClassifier;
|
|
use App\Support\SystemConsole\SystemConsoleWindow;
|
|
use Filament\Widgets\StatsOverviewWidget;
|
|
use Filament\Widgets\StatsOverviewWidget\Stat;
|
|
|
|
class ControlTowerKpis extends StatsOverviewWidget
|
|
{
|
|
protected static bool $isLazy = false;
|
|
|
|
protected int|string|array $columnSpan = 'full';
|
|
|
|
/**
|
|
* @return array<Stat>
|
|
*/
|
|
protected function getStats(): array
|
|
{
|
|
$window = SystemConsoleWindow::fromNullable((string) request()->query('window'));
|
|
$start = $window->startAt();
|
|
|
|
$baseQuery = OperationRun::query()->where('created_at', '>=', $start);
|
|
|
|
$totalRuns = (clone $baseQuery)->count();
|
|
|
|
$activeRuns = (clone $baseQuery)
|
|
->whereIn('status', [
|
|
OperationRunStatus::Queued->value,
|
|
OperationRunStatus::Running->value,
|
|
])
|
|
->count();
|
|
|
|
$failedRuns = (clone $baseQuery)
|
|
->where('status', OperationRunStatus::Completed->value)
|
|
->where('outcome', OperationRunOutcome::Failed->value)
|
|
->count();
|
|
|
|
$stuckRuns = app(StuckRunClassifier::class)
|
|
->apply((clone $baseQuery))
|
|
->count();
|
|
|
|
return [
|
|
Stat::make('Runs in window', $totalRuns)
|
|
->description($window::options()[$window->value] ?? 'Last 24 hours')
|
|
->url(SystemOperationRunLinks::index()),
|
|
Stat::make('Active', $activeRuns)
|
|
->color($activeRuns > 0 ? 'warning' : 'gray')
|
|
->url(SystemOperationRunLinks::index()),
|
|
Stat::make('Failed', $failedRuns)
|
|
->color($failedRuns > 0 ? 'danger' : 'gray')
|
|
->url(SystemOperationRunLinks::index()),
|
|
Stat::make('Stuck', $stuckRuns)
|
|
->color($stuckRuns > 0 ? 'danger' : 'gray')
|
|
->url(SystemOperationRunLinks::index()),
|
|
];
|
|
}
|
|
}
|