This removes most of the legacy upstream config madness by not using weird config files spread all over the place. This isn't the solution to other config reading fragility issues, but it does move the whole config back to the central airtime.conf file.
138 lines
5.1 KiB
PHP
138 lines
5.1 KiB
PHP
<?php
|
|
|
|
class Application_Model_RabbitMq
|
|
{
|
|
public static $doPush = false;
|
|
|
|
/**
|
|
* Sets a flag to push the schedule at the end of the request.
|
|
*/
|
|
public static function PushSchedule()
|
|
{
|
|
self::$doPush = true;
|
|
}
|
|
|
|
private static function sendMessage($exchange, $exchangeType, $autoDeleteExchange, $data, $queue="")
|
|
{
|
|
$CC_CONFIG = Config::getConfig();
|
|
|
|
$conn = new \PhpAmqpLib\Connection\AMQPConnection($CC_CONFIG["rabbitmq"]["host"],
|
|
$CC_CONFIG["rabbitmq"]["port"],
|
|
$CC_CONFIG["rabbitmq"]["user"],
|
|
$CC_CONFIG["rabbitmq"]["password"],
|
|
$CC_CONFIG["rabbitmq"]["vhost"]);
|
|
|
|
if (!isset($conn)) {
|
|
throw new Exception("Cannot connect to RabbitMQ server");
|
|
}
|
|
|
|
$channel = $conn->channel();
|
|
$channel->access_request($CC_CONFIG["rabbitmq"]["vhost"], false, false,
|
|
true, true);
|
|
|
|
//I'm pretty sure we DON'T want to autodelete ANY exchanges but I'm keeping the code
|
|
//the way it is just so I don't accidentally break anything when I add the Analyzer code in. -- Albert, March 13, 2014
|
|
$channel->exchange_declare($exchange, $exchangeType, false, true, $autoDeleteExchange);
|
|
|
|
$msg = new \PhpAmqpLib\Message\AMQPMessage($data, array('content_type' => 'text/plain'));
|
|
|
|
$channel->basic_publish($msg, $exchange);
|
|
$channel->close();
|
|
$conn->close();
|
|
}
|
|
|
|
public static function SendMessageToPypo($event_type, $md)
|
|
{
|
|
$md["event_type"] = $event_type;
|
|
|
|
$exchange = 'airtime-pypo';
|
|
$data = json_encode($md, JSON_FORCE_OBJECT);
|
|
self::sendMessage($exchange, 'direct', true, $data);
|
|
}
|
|
|
|
public static function SendMessageToMediaMonitor($event_type, $md)
|
|
{
|
|
$md["event_type"] = $event_type;
|
|
|
|
$exchange = 'airtime-media-monitor';
|
|
$data = json_encode($md);
|
|
self::sendMessage($exchange, 'direct', true, $data);
|
|
}
|
|
|
|
public static function SendMessageToShowRecorder($event_type)
|
|
{
|
|
$exchange = 'airtime-pypo';
|
|
|
|
$now = new DateTime("@".time()); //in UTC timezone
|
|
$end_timestamp = new DateTime("@".(time() + 3600*2)); //in UTC timezone
|
|
|
|
$temp = array();
|
|
$temp['event_type'] = $event_type;
|
|
$temp['server_timezone'] = Application_Model_Preference::GetTimezone();
|
|
if ($event_type == "update_recorder_schedule") {
|
|
$temp['shows'] = Application_Model_Show::getShows($now,
|
|
$end_timestamp, $onlyRecord=true);
|
|
}
|
|
$data = json_encode($temp);
|
|
|
|
self::sendMessage($exchange, 'direct', true, $data);
|
|
}
|
|
|
|
public static function SendMessageToAnalyzer($tmpFilePath, $importedStorageDirectory, $originalFilename,
|
|
$callbackUrl, $apiKey, $storageBackend, $filePrefix)
|
|
{
|
|
$config = Config::getConfig();
|
|
|
|
$conn = new \PhpAmqpLib\Connection\AMQPConnection($config["rabbitmq"]["host"],
|
|
$config["rabbitmq"]["port"],
|
|
$config["rabbitmq"]["user"],
|
|
$config["rabbitmq"]["password"],
|
|
$config["rabbitmq"]["vhost"]);
|
|
|
|
$exchange = 'airtime-uploads';
|
|
$exchangeType = 'topic';
|
|
$queue = 'airtime-uploads';
|
|
$autoDeleteExchange = false;
|
|
$data['tmp_file_path'] = $tmpFilePath;
|
|
$data['storage_backend'] = $storageBackend;
|
|
$data['import_directory'] = $importedStorageDirectory;
|
|
$data['original_filename'] = $originalFilename;
|
|
$data['callback_url'] = $callbackUrl;
|
|
$data['api_key'] = $apiKey;
|
|
|
|
// We add a prefix to the resource name so files are not all placed
|
|
// under the root folder. We do this in case we need to restore a
|
|
// customer's file/s; File restoration is done via the S3 Browser
|
|
// client. The client will hang if there are too many files under the
|
|
// same folder.
|
|
$data['file_prefix'] = $filePrefix;
|
|
|
|
$jsonData = json_encode($data);
|
|
//self::sendMessage($exchange, 'topic', false, $jsonData, 'airtime-uploads');
|
|
|
|
if (!isset($conn)) {
|
|
throw new Exception("Cannot connect to RabbitMQ server");
|
|
}
|
|
|
|
$channel = $conn->channel();
|
|
$channel->access_request($config["rabbitmq"]["vhost"], false, false,
|
|
true, true);
|
|
|
|
//I'm pretty sure we DON'T want to autodelete ANY exchanges but I'm keeping the code
|
|
//the way it is just so I don't accidentally break anything when I add the Analyzer code in. -- Albert, March 13, 2014
|
|
$channel->exchange_declare($exchange, $exchangeType, false, true, $autoDeleteExchange);
|
|
|
|
$msg = new \PhpAmqpLib\Message\AMQPMessage($jsonData, array('content_type' => 'text/plain'));
|
|
|
|
$channel->basic_publish($msg, $exchange);
|
|
$channel->close();
|
|
$conn->close();
|
|
|
|
}
|
|
|
|
|
|
public static function SendMessageToHaproxyConfigDaemon($md){
|
|
//XXX: This function has been deprecated and is no longer needed
|
|
}
|
|
|
|
}
|