����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.170 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/./././public_html/vendor/laravel/horizon/src/ |
Upload File : |
<?php
namespace Laravel\Horizon;
use Exception;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use Laravel\Horizon\Contracts\HorizonCommandQueue;
use Laravel\Horizon\Events\MasterSupervisorDeployed;
use Laravel\Horizon\MasterSupervisorCommands\AddSupervisor;
class ProvisioningPlan
{
/**
* The master supervisor's name.
*
* @var string
*/
public $master;
/**
* The raw provisioning plan.
*
* @var array
*/
public $plan;
/**
* The parsed provisioning plan.
*
* @var array
*/
public $parsed;
/**
* Create a new provisioning plan instance.
*
* @param string $master
* @param array $plan
* @param array $defaults
* @return void
*/
public function __construct($master, array $plan, array $defaults = [])
{
$this->plan = $this->applyDefaultOptions($plan, $defaults);
$this->master = $master;
$this->parsed = $this->toSupervisorOptions();
}
/**
* Get the current provisioning plan.
*
* @param string $master
* @return static
*/
public static function get($master)
{
return new static($master, config('horizon.environments'), config('horizon.defaults', []));
}
/**
* Apply the default supervisor options to each environment.
*
* @param array $plan
* @param array $defaults
* @return array
*/
protected function applyDefaultOptions(array $plan, array $defaults = [])
{
return collect($plan)->map(function ($plan) use ($defaults) {
return array_replace_recursive($defaults, $plan);
})->all();
}
/**
* Get all of the defined environments for the provisioning plan.
*
* @return array
*/
public function environments()
{
return array_keys($this->parsed);
}
/**
* Determine if the provisioning plan has a given environment.
*
* @param string $environment
* @return bool
*/
public function hasEnvironment($environment)
{
return array_key_exists($environment, $this->parsed);
}
/**
* Deploy a provisioning plan to the current machine.
*
* @param string $environment
* @return void
*/
public function deploy($environment)
{
$supervisors = collect($this->parsed)->first(function ($_, $name) use ($environment) {
return Str::is($name, $environment);
});
if (empty($supervisors)) {
return;
}
foreach ($supervisors as $supervisor => $options) {
$this->add($options);
}
event(new MasterSupervisorDeployed($this->master));
}
/**
* Add a supervisor with the given options.
*
* @param \Laravel\Horizon\SupervisorOptions $options
* @return void
*/
protected function add(SupervisorOptions $options)
{
app(HorizonCommandQueue::class)->push(
MasterSupervisor::commandQueueFor($this->master),
AddSupervisor::class,
$options->toArray()
);
}
/**
* Get the SupervisorOptions for a given environment and supervisor.
*
* @param string $environment
* @param string $supervisor
* @return mixed
*/
public function optionsFor($environment, $supervisor)
{
if (isset($this->parsed[$environment]) && isset($this->parsed[$environment][$supervisor])) {
return $this->parsed[$environment][$supervisor];
}
}
/**
* Convert the provisioning plan into an array of SupervisorOptions.
*
* @return array
*/
public function toSupervisorOptions()
{
return collect($this->plan)->mapWithKeys(function ($plan, $environment) {
return [$environment => collect($plan)->mapWithKeys(function ($options, $supervisor) {
return [$supervisor => $this->convert($supervisor, $options)];
})];
})->all();
}
/**
* Convert the given array of options into a SupervisorOptions instance.
*
* @param string $supervisor
* @param array $options
* @return \Laravel\Horizon\SupervisorOptions
*/
protected function convert($supervisor, $options)
{
$options = collect($options)->mapWithKeys(function ($value, $key) {
$key = $key === 'tries' ? 'max_tries' : $key;
$key = $key === 'processes' ? 'max_processes' : $key;
$value = $key === 'queue' && is_array($value) ? implode(',', $value) : $value;
$value = $key === 'backoff' && is_array($value) ? implode(',', $value) : $value;
return [Str::camel($key) => $value];
})->all();
if (isset($options['minProcesses']) && $options['minProcesses'] < 1) {
throw new Exception("The value of [{$supervisor}.minProcesses] must be greater than 0.");
}
$options['parentId'] = getmypid();
return SupervisorOptions::fromArray(
Arr::add($options, 'name', $this->master.":{$supervisor}")
);
}
}