/** * Process a job. * * Note: A handler implementation does not need to worry about exception * handling and retries. All this is automatically managed by the task * runner. * * @param Job $job * @param JobSchedulerInterface $scheduler */ public function fire(Job $job, JobSchedulerInterface $scheduler) { $jobs = Job::query()->whereIn('state', [JobState::FAILED, JobState::COMPLETE, JobState::CANCELLED]); $repeatIn = $job->get('repeatIn', -1); // How far back to look $days = $job->get('days', 30); $jobs->where('created_at', '<', Carbon::now()->subDays($days)); $job->append('Removing jobs from ' . $days . ' days ago'); $total = $jobs->count(); $processed = 0; $jobs->chunk(25, function ($jobs) use(&$processed, $total, $job) { $processed += count($jobs); foreach ($jobs as $staleJob) { $staleJob->delete(); } $job->append('Progress: ' . $processed . '/' . $total); }); if ($repeatIn > -1) { $scheduler->pushCopy($job, Carbon::now()->addMinutes(max($repeatIn, 1)), Carbon::now()->addMinutes($job->get('expiresAfter', 1440))); } }
public function testAppend() { $job = new Job(); $job->task = 'test.test'; $this->assertNull($job->message); $job->append('lol'); $this->assertEquals("lol\n", $job->message); $job->append('omg'); $this->assertEquals("lol\nomg\n", $job->message); $job->append('doge'); $this->assertEquals("lol\nomg\ndoge\n", $job->message); $huge = Str::quickRandom(200000); $job->append($huge); $job->append($huge); $job->append('doge'); $this->assertFalse(starts_with($job->message, "lol\nomg\ndoge\n")); $this->assertTrue(ends_with($job->message, "doge\n")); }