libretime/legacy/public/setup/rabbitmq-setup.php

89 lines
2.6 KiB
PHP

<?php
/**
* User: sourcefabric
* Date: 02/12/14.
*
* Class RabbitMQSetup
*
* Wrapper class for validating and setting up RabbitMQ during the installation process
*/
class RabbitMQSetup extends Setup
{
// config.yml section header
protected static $_section = '[rabbitmq]';
// Array of key->value pairs for config.yml
protected static $_properties;
// Constant form field names for passing errors back to the front-end
public const RMQ_USER = 'rmqUser';
public const RMQ_PASS = 'rmqPass';
public const RMQ_PORT = 'rmqPort';
public const RMQ_HOST = 'rmqHost';
public const RMQ_VHOST = 'rmqVHost';
// Message and error fields to return to the front-end
public static $message;
public static $errors = [];
public function __construct($settings)
{
static::$_properties = [
'host' => $settings[self::RMQ_HOST],
'port' => $settings[self::RMQ_PORT],
'user' => $settings[self::RMQ_USER],
'password' => $settings[self::RMQ_PASS],
'vhost' => $settings[self::RMQ_VHOST],
];
}
/**
* @return array associative array containing a display message and fields with errors
*/
public function runSetup()
{
try {
if ($this->checkRMQConnection()) {
self::$message = 'Connection successful!';
} else {
$this->identifyRMQConnectionError();
}
} catch (Exception $e) {
$this->identifyRMQConnectionError();
}
return [
'message' => self::$message,
'errors' => self::$errors,
];
}
public function checkRMQConnection()
{
$conn = new \PhpAmqpLib\Connection\AMQPStreamConnection(
self::$_properties['host'],
self::$_properties['port'],
self::$_properties['user'],
self::$_properties['password'],
self::$_properties['vhost']
);
$this->writeToTemp();
return isset($conn);
}
public function identifyRMQConnectionError()
{
// It's impossible to identify errors coming out of amqp.inc without a major
// rewrite, so for now just tell the user ALL THE THINGS went wrong
self::$message = _("Couldn't connect to RabbitMQ server! Please check if the server "
. 'is running and your credentials are correct.');
self::$errors[] = self::RMQ_USER;
self::$errors[] = self::RMQ_PASS;
self::$errors[] = self::RMQ_HOST;
self::$errors[] = self::RMQ_PORT;
self::$errors[] = self::RMQ_VHOST;
}
}