Skip to content

Commit

Permalink
[5.x] Add commands to pause and continue supervisors (#914)
Browse files Browse the repository at this point in the history
* [5.x] Add commands to pause and continue supervisors

* Allow both full and short supervisor names
  • Loading branch information
paras-malhotra committed Oct 23, 2020
1 parent aa25c91 commit c09d784
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 0 deletions.
52 changes: 52 additions & 0 deletions src/Console/ContinueSupervisorCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

namespace Laravel\Horizon\Console;

use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Laravel\Horizon\Contracts\SupervisorRepository;
use Laravel\Horizon\MasterSupervisor;

class ContinueSupervisorCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'horizon:continue-supervisor
{name : The name of the supervisor to resume}';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Instruct the supervisor to continue processing jobs';

/**
* Execute the console command.
*
* @param \Laravel\Horizon\Contracts\SupervisorRepository $supervisors
* @return void
*/
public function handle(SupervisorRepository $supervisors)
{
$processId = optional(collect($supervisors->all())->first(function ($supervisor) {
return Str::startsWith($supervisor->name, MasterSupervisor::basename())
&& Str::endsWith($supervisor->name, $this->argument('name'));
}))->pid;

if (is_null($processId)) {
$this->error('Failed to find a supervisor with this name');

return 1;
}

$this->info("Sending CONT Signal To Process: {$processId}");

if (! posix_kill($processId, SIGCONT)) {
$this->error("Failed to kill process: {$processId} (".posix_strerror(posix_get_last_error()).')');
}
}
}
52 changes: 52 additions & 0 deletions src/Console/PauseSupervisorCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

namespace Laravel\Horizon\Console;

use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Laravel\Horizon\Contracts\SupervisorRepository;
use Laravel\Horizon\MasterSupervisor;

class PauseSupervisorCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'horizon:pause-supervisor
{name : The name of the supervisor to pause}';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Pause a supervisor';

/**
* Execute the console command.
*
* @param \Laravel\Horizon\Contracts\SupervisorRepository $supervisors
* @return void
*/
public function handle(SupervisorRepository $supervisors)
{
$processId = optional(collect($supervisors->all())->first(function ($supervisor) {
return Str::startsWith($supervisor->name, MasterSupervisor::basename())
&& Str::endsWith($supervisor->name, $this->argument('name'));
}))->pid;

if (is_null($processId)) {
$this->error('Failed to find a supervisor with this name');

return 1;
}

$this->info("Sending USR2 Signal To Process: {$processId}");

if (! posix_kill($processId, SIGUSR2)) {
$this->error("Failed to kill process: {$processId} (".posix_strerror(posix_get_last_error()).')');
}
}
}
2 changes: 2 additions & 0 deletions src/HorizonServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,11 +173,13 @@ protected function registerCommands()
$this->commands([
Console\ClearCommand::class,
Console\ContinueCommand::class,
Console\ContinueSupervisorCommand::class,
Console\ForgetFailedCommand::class,
Console\HorizonCommand::class,
Console\InstallCommand::class,
Console\ListCommand::class,
Console\PauseCommand::class,
Console\PauseSupervisorCommand::class,
Console\PublishCommand::class,
Console\PurgeCommand::class,
Console\StatusCommand::class,
Expand Down

0 comments on commit c09d784

Please sign in to comment.