fix(jobs): prevent non-due jobs firing on restart and enrich skip logs with resource links

- Refactor shouldRunNow() to only fire on first run (empty cache) if actually due by cron schedule, preventing spurious executions after cache loss or service restart
- Add enrichSkipLogsWithLinks() method to fetch and populate resource names and links for tasks, backups, and docker cleanup jobs in skip logs
- Update skip logs UI to display resource column with links to related resources, improving navigation and context
- Add fallback display when linked resources are deleted
- Expand tests to cover both restart scenarios: non-due jobs (should not fire) and due jobs (should fire)
This commit is contained in:
Andras Bacsai committed 2026-02-28 18:03:29 +01:00
1 parent 63be5928ab
commit 31555f9e8a
5 files changed
+166 -29

No files matched your search

@@ -213,8 +213,8 @@
<tr>
<th class="px-4 py-3">Time</th>
<th class="px-4 py-3">Type</th>
<th class="px-4 py-3">Resource</th>
<th class="px-4 py-3">Reason</th>
<th class="px-4 py-3">Details</th>
</tr>
</thead>
<tbody>
@@ -235,6 +235,17 @@
{{ ucfirst(str_replace('_', ' ', $skip['type'])) }}
</span>
</td>
<td class="px-4 py-2">
@if($skip['link'] ?? null)
<a href="{{ $skip['link'] }}" class="text-white underline hover:no-underline">
{{ $skip['resource_name'] }}
</a>
@elseif($skip['resource_name'] ?? null)
{{ $skip['resource_name'] }}
@else
<span class="text-gray-500">{{ $skip['context']['task_name'] ?? $skip['context']['server_name'] ?? 'Deleted' }}</span>
@endif
</td>
<td class="px-4 py-2">
@php
$reasonLabel = match($skip['reason']) {
@@ -256,15 +267,6 @@
@endphp
<span class="{{ $reasonBg }}">{{ $reasonLabel }}</span>
</td>
<td class="px-4 py-2 text-xs text-gray-500">
@php
$details = collect($skip['context'])
->except(['type', 'skip_reason', 'execution_time'])
->map(fn($v, $k) => str_replace('_', ' ', $k) . ': ' . $v)
->implode(', ');
@endphp
{{ $details }}
</td>
</tr>
@empty
<tr>