Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 4 additions & 25 deletions src/View/Helper/QueueHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,30 +86,6 @@ public function isRequeued(QueuedJob $queuedJob): bool {
return $taskConfig && $queuedJob->attempts <= $taskConfig['retries'];
}

/**
* Returns true if job has been manually restarted (reset).
*
* A restarted job has been fetched and has attempts, but no failure_message
* (the failure_message was cleared when the job was reset).
*
* @param \Queue\Model\Entity\QueuedJob $queuedJob
*
* @return bool
*/
public function isRestarted(QueuedJob $queuedJob): bool {
if ($queuedJob->completed || !$queuedJob->fetched) {
return false;
}

// Must have attempts (was previously run)
if ($queuedJob->attempts < 1) {
return false;
}

// Must NOT have a failure_message (it was cleared by reset)
return !$queuedJob->failure_message;
}

/**
* Returns failure status (message) if applicable.
*
Expand All @@ -122,8 +98,11 @@ public function failureStatus(QueuedJob $queuedJob): ?string {
return null;
}

// No failure message yet: the job is simply running its current attempt,
// which is indistinguishable from a reset-and-rerun job, so there is no
// distinct failure status to report.
if (!$queuedJob->failure_message) {
return __d('queue', 'Restarted');
return null;
}

$taskConfig = $this->taskConfig($queuedJob->job_task);
Expand Down
9 changes: 3 additions & 6 deletions templates/Admin/Queue/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,9 @@
</div>
<div class="col-md-3 col-sm-6">
<?= $this->element('Queue.Queue/stats_card', [
'title' => __d('queue', 'Failed'),
// Counts every unfinished job with a failure_message: still-retrying
// (requeued) ones as well as terminally failed/aborted ones.
'title' => __d('queue', 'Requeued/Failed'),
'count' => $failedJobs,
'icon' => 'times-circle',
'color' => 'danger',
Expand Down Expand Up @@ -301,11 +303,6 @@
<i class="fas fa-redo me-1"></i><?= __d('queue', 'Requeued') ?>
</span>
<div class="small text-muted"><?= __d('queue', 'Attempts') ?>: <?= $this->Queue->attempts($pendingJob) ?></div>
<?php elseif ($this->Queue->isRestarted($pendingJob)): ?>
<span class="badge bg-info text-dark">
<i class="fas fa-sync me-1"></i><?= __d('queue', 'Restarted') ?>
</span>
<div class="small text-muted"><?= __d('queue', 'Attempts') ?>: <?= $this->Queue->attempts($pendingJob) ?></div>
<?php elseif ($pendingJob->fetched): ?>
<span class="badge badge-running">
<i class="fas fa-spinner fa-spin me-1"></i><?= __d('queue', 'Running') ?>
Expand Down
4 changes: 0 additions & 4 deletions templates/Admin/QueuedJobs/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,6 @@
<span class="badge bg-warning text-dark">
<i class="fas fa-redo me-1"></i><?= __d('queue', 'Requeued') ?>
</span>
<?php elseif ($this->Queue->isRestarted($queuedJob)): ?>
<span class="badge bg-info text-dark">
<i class="fas fa-sync me-1"></i><?= __d('queue', 'Restarted') ?>
</span>
<?php elseif ($queuedJob->fetched): ?>
<span class="badge badge-running">
<i class="fas fa-spinner fa-spin me-1"></i><?= __d('queue', 'Running') ?>
Expand Down
4 changes: 0 additions & 4 deletions templates/Admin/QueuedJobs/view.php
Original file line number Diff line number Diff line change
Expand Up @@ -254,10 +254,6 @@
<span class="badge bg-warning text-dark fs-6">
<i class="fas fa-redo me-1"></i><?= __d('queue', 'Requeued') ?>
</span>
<?php elseif ($this->Queue->isRestarted($queuedJob)): ?>
<span class="badge bg-info text-dark fs-6">
<i class="fas fa-sync me-1"></i><?= __d('queue', 'Restarted') ?>
</span>
<?php elseif ($queuedJob->fetched): ?>
<span class="badge badge-running fs-6">
<i class="fas fa-spinner fa-spin me-1"></i><?= __d('queue', 'Running') ?>
Expand Down
62 changes: 1 addition & 61 deletions tests/TestCase/View/Helper/QueueHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public function testFailureStatus() {

$queuedJob->failure_message = null;
$result = $this->QueueHelper->failureStatus($queuedJob);
$this->assertSame('Restarted', $result);
$this->assertNull($result);

$queuedJob->attempts = 999;
$queuedJob->failure_message = 'Foo';
Expand Down Expand Up @@ -221,66 +221,6 @@ public function testIsRequeued(): void {
$this->assertFalse($this->QueueHelper->isRequeued($queuedJob));
}

/**
* @return void
*/
public function testIsRestarted(): void {
// Not fetched - not restarted
$queuedJob = new QueuedJob([
'job_task' => 'Queue.Example',
'fetched' => null,
'attempts' => 2,
'failure_message' => null,
]);
$this->assertFalse($this->QueueHelper->isRestarted($queuedJob));

// Completed - not restarted
$queuedJob = new QueuedJob([
'job_task' => 'Queue.Example',
'fetched' => new DateTime('-1 hour'),
'completed' => new DateTime(),
'attempts' => 2,
'failure_message' => null,
]);
$this->assertFalse($this->QueueHelper->isRestarted($queuedJob));

// No attempts - not restarted (first run)
$queuedJob = new QueuedJob([
'job_task' => 'Queue.Example',
'fetched' => new DateTime('-1 hour'),
'attempts' => 0,
'failure_message' => null,
]);
$this->assertFalse($this->QueueHelper->isRestarted($queuedJob));

// Has failure_message - not restarted (is requeued or failed)
$queuedJob = new QueuedJob([
'job_task' => 'Queue.Example',
'fetched' => new DateTime('-1 hour'),
'attempts' => 2,
'failure_message' => 'Error',
]);
$this->assertFalse($this->QueueHelper->isRestarted($queuedJob));

// Fetched, has attempts, NO failure_message - IS restarted
$queuedJob = new QueuedJob([
'job_task' => 'Queue.Example',
'fetched' => new DateTime('-1 hour'),
'attempts' => 2,
'failure_message' => null,
]);
$this->assertTrue($this->QueueHelper->isRestarted($queuedJob));

// Also restarted with just 1 attempt
$queuedJob = new QueuedJob([
'job_task' => 'Queue.Example',
'fetched' => new DateTime('-1 hour'),
'attempts' => 1,
'failure_message' => null,
]);
$this->assertTrue($this->QueueHelper->isRestarted($queuedJob));
}

/**
* @return void
*/
Expand Down
Loading