<?php
namespace Lagdo\Supervisor;
use Supervisor\Supervisor;
use Supervisor\Process;
use Supervisor\Connector\XmlRpc;
use fXmlRpc\Client as RpcClient;
use fXmlRpc\Transport\HttpAdapterTransport;
use Ivory\HttpAdapter\Guzzle6HttpAdapter;
use GuzzleHttp\Client as HttpClient;
/**
* Supervisor client
*/
class Client
{
/**
* The class constructor
*/
public function __construct()
{
// Create GuzzleHttp client
// $httpClient = new HttpClient(['auth' => ['user', 'password']]);
$httpClient = new HttpClient();
// Pass the url (null) and the guzzle client to the XmlRpc Client
$this->rpcClient = new RpcClient(null,
new HttpAdapterTransport(new Guzzle6HttpAdapter($httpClient))
);
// Pass the client to the connector
// See the full list of connectors bellow
$connector = new XmlRpc($this->rpcClient);
$this->supervisor = new Supervisor($connector);
}
/**
* Get the Supervisor version on a given server
*
* @param array $serverOptions The server options in the configuration
*
* @return string
*/
public function getVersion(array $serverOptions)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
return $this->supervisor->getSupervisorVersion();
}
/**
* Get the processes on a Supervisor server
*
* @param array $serverOptions The server options in the configuration
*
* @return array<string,Process>
*/
public function getProcesses(array $serverOptions)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
$processes = $this->supervisor->getAllProcessInfo();
foreach($processes as $key => $processInfo)
{
// Add an id in process info
$processInfo['id'] = $processInfo['group'] . ':' . $processInfo['name'];
// Add the uptime in process info
$processInfo['uptime'] = '';
if(($pos = \strpos($processInfo['description'], 'uptime ')) !== false)
{
$processInfo['uptime'] = \substr($processInfo['description'], $pos + strlen('uptime '));
}
$processes[$key] = new Process($processInfo);
}
return $processes;
}
/**
* Start all the processes on a Supervisor server
*
* @param array $serverOptions The server options in the configuration
*
* @return void
*/
public function startAllProcesses(array $serverOptions)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
$this->supervisor->startAllProcesses();
}
/**
* Stop all the processes on a Supervisor server
*
* @param array $serverOptions The server options in the configuration
*
* @return void
*/
public function stopAllProcesses(array $serverOptions)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
$this->supervisor->stopAllProcesses();
}
/**
* Restart all the processes on a Supervisor server
*
* @param array $serverOptions The server options in the configuration
*
* @return void
*/
public function restartAllProcesses(array $serverOptions)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
$this->supervisor->stopAllProcesses();
$this->supervisor->startAllProcesses();
}
/**
* Start a process on a Supervisor server
*
* @param array $serverOptions The server options in the configuration
* @param string $process The process identifier
*
* @return void
*/
public function startProcess(array $serverOptions, $process)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
$this->supervisor->startProcess($process);
}
/**
* Stop a process on a Supervisor server
*
* @param array $serverOptions The server options in the configuration
* @param string $process The process identifier
*
* @return void
*/
public function stopProcess(array $serverOptions, $process)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
$this->supervisor->stopProcess($process);
}
/**
* Restart a process on a Supervisor server
*
* @param array $serverOptions The server options in the configuration
* @param string $process The process identifier
*
* @return void
*/
public function restartProcess(array $serverOptions, $process)
{
$host = $serverOptions['url'] . ':' . $serverOptions['port'] . '/RPC2';
$this->rpcClient->setUri($host);
$this->supervisor->stopProcess($process);
$this->supervisor->startProcess($process);
}
}
|