master

laravel/framework

Last updated at: 29/12/2023 09:20

ScheduleFinishCommand.php

TLDR

This file contains the ScheduleFinishCommand class, which is responsible for handling the completion of a scheduled command.

Classes

ScheduleFinishCommand

The ScheduleFinishCommand class extends the Command class and is used to handle the completion of a scheduled command. It is hidden from the Artisan command list. The class has the following properties:

  • $signature: The console command signature, which defines the command name and its arguments.
  • $description: The console command description. The class has one method:
  • handle(Schedule $schedule): This method is responsible for executing the console command. It filters the events in the schedule by the provided id argument, and for each matching event, it finishes the event and dispatches a ScheduledBackgroundTaskFinished event using the Laravel event dispatcher.
<?php

namespace Illuminate\Console\Scheduling;

use Illuminate\Console\Command;
use Illuminate\Console\Events\ScheduledBackgroundTaskFinished;
use Illuminate\Contracts\Events\Dispatcher;
use Symfony\Component\Console\Attribute\AsCommand;

#[AsCommand(name: 'schedule:finish')]
class ScheduleFinishCommand extends Command
{
    /**
     * The console command name.
     *
     * @var string
     */
    protected $signature = 'schedule:finish {id} {code=0}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Handle the completion of a scheduled command';

    /**
     * Indicates whether the command should be shown in the Artisan command list.
     *
     * @var bool
     */
    protected $hidden = true;

    /**
     * Execute the console command.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    public function handle(Schedule $schedule)
    {
        collect($schedule->events())->filter(function ($value) {
            return $value->mutexName() == $this->argument('id');
        })->each(function ($event) {
            $event->finish($this->laravel, $this->argument('code'));

            $this->laravel->make(Dispatcher::class)->dispatch(new ScheduledBackgroundTaskFinished($event));
        });
    }
}