TenantAtlas/resources/views/filament/system/pages/ops/view-run.blade.php

112 lines
5.4 KiB
PHP

@php
/** @var \App\Models\OperationRun $run */
$run = $this->run;
$scope = (string) data_get($run->context, 'runbook.scope', 'unknown');
$targetTenantId = data_get($run->context, 'runbook.target_tenant_id');
$reasonCode = data_get($run->context, 'reason.reason_code');
$reasonText = data_get($run->context, 'reason.reason_text');
$platformInitiator = data_get($run->context, 'platform_initiator', []);
@endphp
<x-filament-panels::page>
<div class="space-y-6">
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="flex items-start justify-between gap-4">
<div>
<div class="text-sm font-semibold text-gray-900 dark:text-gray-100">
Run #{{ (int) $run->getKey() }}
</div>
<div class="mt-1 text-sm text-gray-600 dark:text-gray-300">
{{ \App\Support\OperationCatalog::label((string) $run->type) }}
</div>
</div>
<div class="text-right text-xs text-gray-500 dark:text-gray-400">
<div>Started: {{ $run->started_at?->toDayDateTimeString() ?? '—' }}</div>
<div>Completed: {{ $run->completed_at?->toDayDateTimeString() ?? '—' }}</div>
</div>
</div>
<div class="mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3">
<div class="rounded-md bg-gray-50 p-3 dark:bg-gray-800">
<div class="text-xs text-gray-500 dark:text-gray-400">Status</div>
<div class="mt-1 font-semibold text-gray-900 dark:text-gray-100">{{ (string) $run->status }}</div>
</div>
<div class="rounded-md bg-gray-50 p-3 dark:bg-gray-800">
<div class="text-xs text-gray-500 dark:text-gray-400">Outcome</div>
<div class="mt-1 font-semibold text-gray-900 dark:text-gray-100">{{ (string) $run->outcome }}</div>
</div>
<div class="rounded-md bg-gray-50 p-3 dark:bg-gray-800">
<div class="text-xs text-gray-500 dark:text-gray-400">Scope</div>
<div class="mt-1 font-semibold text-gray-900 dark:text-gray-100">
@if ($scope === 'single_tenant')
Single tenant {{ is_numeric($targetTenantId) ? '#'.(int) $targetTenantId : '' }}
@elseif ($scope === 'all_tenants')
All tenants
@else
{{ $scope }}
@endif
</div>
</div>
</div>
<div class="mt-4 text-sm text-gray-700 dark:text-gray-200">
<div class="grid grid-cols-1 gap-2 sm:grid-cols-2">
<div>
<span class="font-medium">Initiator:</span>
{{ (string) ($run->initiator_name ?? '—') }}
</div>
@if (is_array($platformInitiator) && ($platformInitiator['email'] ?? null))
<div class="sm:text-right">
<span class="font-medium">Platform user:</span>
{{ (string) ($platformInitiator['email'] ?? '') }}
</div>
@endif
</div>
@if (is_string($reasonCode) && is_string($reasonText) && trim($reasonCode) !== '' && trim($reasonText) !== '')
<div class="mt-3 rounded-md border border-gray-200 bg-gray-50 p-3 dark:border-gray-800 dark:bg-gray-800">
<div class="text-xs font-semibold text-gray-500 dark:text-gray-400">Reason</div>
<div class="mt-1 text-sm">
<span class="font-medium">{{ $reasonCode }}</span>
<span class="text-gray-600 dark:text-gray-300"></span>
<span>{{ $reasonText }}</span>
</div>
</div>
@endif
</div>
</div>
@if (! empty($run->summary_counts))
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-sm font-semibold text-gray-900 dark:text-gray-100">Summary counts</div>
<div class="mt-3">
@include('filament.partials.json-viewer', ['value' => $run->summary_counts])
</div>
</div>
@endif
@if (! empty($run->failure_summary))
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-sm font-semibold text-gray-900 dark:text-gray-100">Failures</div>
<div class="mt-3">
@include('filament.partials.json-viewer', ['value' => $run->failure_summary])
</div>
</div>
@endif
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-sm font-semibold text-gray-900 dark:text-gray-100">Context</div>
<div class="mt-3">
@include('filament.partials.json-viewer', ['value' => $run->context ?? []])
</div>
</div>
</div>
</x-filament-panels::page>