Skip to content

Commit 5cad475

Browse files
authored
Merge pull request #26 from houdaslassi/feature/refactors-enhancements
fix: skip counting released jobs as processed
2 parents 5514a0d + 5d49407 commit 5cad475

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

src/Listeners/RecordJobSuccess.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,22 @@ public function handle(JobProcessed $event): void
2323
return;
2424
}
2525

26+
// Some jobs (like rate-limited ones) are "processed" only to be released immediately.
27+
// Laravel exposes helpers to detect this so we don't count them as successful runs.
28+
if (method_exists($event->job, 'isReleased') && $event->job->isReleased()) {
29+
VantageLogger::debug('Queue Monitor: Job was released, skipping processed record', [
30+
'job_class' => $this->jobClass($event),
31+
]);
32+
return;
33+
}
34+
35+
if (method_exists($event->job, 'isDeletedOrReleased') && $event->job->isDeletedOrReleased()) {
36+
VantageLogger::debug('Queue Monitor: Job was deleted or released, skipping processed record', [
37+
'job_class' => $this->jobClass($event),
38+
]);
39+
return;
40+
}
41+
2642
$uuid = $this->bestUuid($event);
2743
$jobClass = $this->jobClass($event);
2844
$queue = $event->job->getQueue();
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
use HoudaSlassi\Vantage\Listeners\RecordJobSuccess;
4+
use HoudaSlassi\Vantage\Models\VantageJob;
5+
use Illuminate\Queue\Events\JobProcessed;
6+
7+
it('skips counting released jobs as processed', function () {
8+
VantageJob::query()->delete();
9+
10+
$releasedJob = new class {
11+
public function getQueue() { return 'default'; }
12+
public function attempts() { return 1; }
13+
public function uuid() { return 'released-uuid'; }
14+
public function resolveName() { return 'App\\Jobs\\RateLimitedJob'; }
15+
public function isReleased() { return true; }
16+
public function isDeletedOrReleased() { return true; }
17+
};
18+
19+
$event = new JobProcessed('database', $releasedJob);
20+
(new RecordJobSuccess())->handle($event);
21+
22+
expect(VantageJob::where('uuid', 'released-uuid')->exists())->toBeFalse();
23+
});
24+
25+
it('still counts normal processed jobs', function () {
26+
VantageJob::query()->delete();
27+
28+
$record = VantageJob::create([
29+
'uuid' => 'normal-uuid',
30+
'job_class' => 'App\\Jobs\\NormalJob',
31+
'status' => 'processing',
32+
'started_at' => now()->subSecond(),
33+
]);
34+
35+
$normalJob = new class {
36+
public function getQueue() { return 'default'; }
37+
public function attempts() { return 1; }
38+
public function uuid() { return 'normal-uuid'; }
39+
public function resolveName() { return 'App\\Jobs\\NormalJob'; }
40+
public function isReleased() { return false; }
41+
public function isDeletedOrReleased() { return false; }
42+
};
43+
44+
$event = new JobProcessed('database', $normalJob);
45+
(new RecordJobSuccess())->handle($event);
46+
47+
$updated = VantageJob::find($record->id);
48+
49+
expect($updated->status)->toBe('processed')
50+
->and($updated->finished_at)->not()->toBeNull();
51+
});
52+

0 commit comments

Comments
 (0)