Sindbad~EG File Manager
<?php
namespace O2switch\CpanelLib\Service;
use O2switch\CpanelLib\Client\NginxVarnish;
use O2switch\CpanelLib\DataEntity\NginxVarnishConfig;
use O2switch\CpanelLib\Helper\ConfigHelper;
class HealthCheck
{
/** @var NginxVarnish */
private $nginxVarnish;
/** @var ConfigHelper */
private $configHelper;
public function __construct(NginxVarnish $nginxVarnish, ConfigHelper $configHelper){
$this->nginxVarnish = $nginxVarnish;
$this->configHelper = $configHelper;
}
public function healthCheck(string $type) : bool {
$servers = $this->typeToServersIds($type);
foreach($servers as $server){
$serverId = key($server);
$appType = $server[$serverId];
try {
$config = (new NginxVarnishConfig())
->setAlgo($this->configHelper->getServerAlgo($serverId))
->setPort($this->configHelper->getServerPort($serverId, $appType))
->setSecretHash($this->configHelper->getServerSecret($serverId))
->setToken($this->configHelper->getServerToken($serverId))
->setServerIp($this->configHelper->getServerMainIp($serverId));
if(!$this->nginxVarnish->setConfig($config)->health($appType)){
return false;
}
} catch (\Exception $e){
return false;
}
}
return true;
}
/**
* @param string $type
* @return array[] of serverId => appType
*/
protected function typeToServersIds(string $type) : array {
// We just check one server, the cluster will be checked on the API directly, for instance, while testing server1
// it will also check all ipxtender servers. The logic of looping over the clusters is on the API, not here.
switch($type){
default:
case 'nginx':
return [['server1' => 'nginx']];
case 'varnish':
case 'xtremcache':
return [['server1' => 'nginx'], ['varnish-1' => 'varnish'], ['varnish-1' => 'forwarder']];
case 'litespeed':
case 'lslb':
return [['server1' => 'nginx'], ['lslb-1'=> 'lslb'], ['lslb-1' => 'forwarder']];
}
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists