����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.140 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/www/vendor/laravel/horizon/src/Repositories/ |
Upload File : |
<?php
namespace Laravel\Horizon\Repositories;
use Carbon\CarbonImmutable;
use Illuminate\Contracts\Redis\Factory as RedisFactory;
use Illuminate\Support\Arr;
use Laravel\Horizon\Contracts\MasterSupervisorRepository;
use Laravel\Horizon\Contracts\SupervisorRepository;
use Laravel\Horizon\MasterSupervisor;
class RedisMasterSupervisorRepository implements MasterSupervisorRepository
{
/**
* The Redis connection instance.
*
* @var \Illuminate\Contracts\Redis\Factory
*/
public $redis;
/**
* Create a new repository instance.
*
* @param \Illuminate\Contracts\Redis\Factory $redis
* @return void
*/
public function __construct(RedisFactory $redis)
{
$this->redis = $redis;
}
/**
* Get the names of all the master supervisors currently running.
*
* @return array
*/
public function names()
{
return $this->connection()->zrevrangebyscore('masters', '+inf',
CarbonImmutable::now()->subSeconds(14)->getTimestamp()
);
}
/**
* Get information on all of the supervisors.
*
* @return array
*/
public function all()
{
return $this->get($this->names());
}
/**
* Get information on a master supervisor by name.
*
* @param string $name
* @return \stdClass|null
*/
public function find($name)
{
return Arr::get($this->get([$name]), 0);
}
/**
* Get information on the given master supervisors.
*
* @param array $names
* @return array
*/
public function get(array $names)
{
$records = $this->connection()->pipeline(function ($pipe) use ($names) {
foreach ($names as $name) {
$pipe->hmget('master:'.$name, ['name', 'pid', 'status', 'supervisors']);
}
});
return collect($records)->map(function ($record) {
$record = array_values($record);
return ! $record[0] ? null : (object) [
'name' => $record[0],
'pid' => $record[1],
'status' => $record[2],
'supervisors' => json_decode($record[3], true),
];
})->filter()->all();
}
/**
* Update the information about the given master supervisor.
*
* @param \Laravel\Horizon\MasterSupervisor $master
* @return void
*/
public function update(MasterSupervisor $master)
{
$supervisors = $master->supervisors->map->name->all();
$this->connection()->pipeline(function ($pipe) use ($master, $supervisors) {
$pipe->hmset(
'master:'.$master->name, [
'name' => $master->name,
'pid' => $master->pid(),
'status' => $master->working ? 'running' : 'paused',
'supervisors' => json_encode($supervisors),
]
);
$pipe->zadd('masters',
CarbonImmutable::now()->getTimestamp(), $master->name
);
$pipe->expire('master:'.$master->name, 15);
});
}
/**
* Remove the master supervisor information from storage.
*
* @param string $name
* @return void
*/
public function forget($name)
{
if (! $master = $this->find($name)) {
return;
}
app(SupervisorRepository::class)->forget(
$master->supervisors
);
$this->connection()->del('master:'.$name);
$this->connection()->zrem('masters', $name);
}
/**
* Remove expired master supervisors from storage.
*
* @return void
*/
public function flushExpired()
{
$this->connection()->zremrangebyscore('masters', '-inf',
CarbonImmutable::now()->subSeconds(14)->getTimestamp()
);
}
/**
* Get the Redis connection instance.
*
* @return \Illuminate\Redis\Connections\Connection
*/
protected function connection()
{
return $this->redis->connection('horizon');
}
}