From 82544f34d912374b83753a66a0a6f92a8f9a03ca Mon Sep 17 00:00:00 2001 From: Duncan Sommerville Date: Tue, 24 Nov 2015 13:36:54 -0500 Subject: [PATCH] SAAS-1229, SAAS-1230 - initial implementation of station suspend when over bandwidth limit --- airtime_mvc/application/common/HTTPHelper.php | 26 +++++++++++++++++++ .../application/common/ProvisioningHelper.php | 7 +++++ airtime_mvc/application/configs/constants.php | 2 ++ .../application/controllers/ApiController.php | 13 ++++++++++ .../controllers/ProvisioningController.php | 3 +++ airtime_mvc/application/models/Preference.php | 13 ++++++++++ 6 files changed, 64 insertions(+) diff --git a/airtime_mvc/application/common/HTTPHelper.php b/airtime_mvc/application/common/HTTPHelper.php index 8d6c05106..80a40e2fc 100644 --- a/airtime_mvc/application/common/HTTPHelper.php +++ b/airtime_mvc/application/common/HTTPHelper.php @@ -53,6 +53,32 @@ class Application_Common_HTTPHelper return $stationUrl; } + + /** + * Execute a cURL POST + * + * @param string $url the URL to POST to + * @param string[] $userPwd array of user args of the form ['user', 'pwd'] + * @param array $formData array of form data kwargs + * + * @return mixed the cURL result + */ + public static function doPost($url, $userPwd, $formData) { + $params = ""; + foreach($formData as $key=>$value) { + $params .= $key.'='.$value.'&'; + } + rtrim($params, '&'); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + curl_setopt($ch, CURLOPT_USERPWD, implode(':', $userPwd)); + $result = curl_exec($ch); + curl_close($ch); + return $result; + } } class ZendActionHttpException extends Exception { diff --git a/airtime_mvc/application/common/ProvisioningHelper.php b/airtime_mvc/application/common/ProvisioningHelper.php index 113676e5e..80a73b960 100644 --- a/airtime_mvc/application/common/ProvisioningHelper.php +++ b/airtime_mvc/application/common/ProvisioningHelper.php @@ -12,6 +12,7 @@ class ProvisioningHelper private $instanceId; private $stationName, $description; private $defaultIcecastPassword; + private $bandwidthLimit; public function __construct($apikey) { @@ -126,6 +127,9 @@ class ProvisioningHelper if (isset($_POST['icecast_pass'])) { $this->defaultIcecastPassword = $_POST['icecast_pass']; } + if (isset($_POST['bandwidth_limit'])) { + $this->bandwidthLimit = $_POST['bandwidth_limit']; + } } /** @@ -219,6 +223,9 @@ class ProvisioningHelper if (isset($this->defaultIcecastPassword)) { Application_Model_Preference::setDefaultIcecastPassword($this->defaultIcecastPassword); } + if (isset($this->bandwidthLimit)) { + Application_Model_Preference::setBandwidthLimit($this->bandwidthLimit); + } } } diff --git a/airtime_mvc/application/configs/constants.php b/airtime_mvc/application/configs/constants.php index bfad8759e..ea748ef84 100644 --- a/airtime_mvc/application/configs/constants.php +++ b/airtime_mvc/application/configs/constants.php @@ -12,6 +12,8 @@ define('COMPANY_SITE' , 'Sourcefabric.org'); define('COMPANY_SITE_URL' , 'http://sourcefabric.org/'); define('SUPPORT_EMAIL_ADDRESS', "help@sourcefabric.org"); +define("AIRTIMEPRO_API_URL", "https://account.sourcefabric.com/api/"); + define('HELP_URL' , 'http://help.sourcefabric.org/'); define('FAQ_URL' , 'https://sourcefabricberlin.zendesk.com/hc/en-us/sections/200994309-Airtime-FAQ'); define('WHOS_USING_URL' , 'http://sourcefabric.org/en/airtime/whosusing'); diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 6496b428b..ad820d880 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -156,6 +156,19 @@ class ApiController extends Zend_Controller_Action } Application_Model_Preference::incrementBandwidthLimitCounter($usageBytes); Application_Model_Preference::setBandwidthLimitUpdateTimer(); + + $usage = Application_Model_Preference::getBandwidthLimitCounter(); + if ($usage > Application_Model_Preference::getBandwidthLimit()) { + $CC_CONFIG = Config::getConfig(); + $user = array('', $CC_CONFIG['apiKey'][0]); + $data = array('reason' => "Bandwidth limit exceeded"); + try { + $result = Application_Common_HTTPHelper::doPost(AIRTIMEPRO_API_URL, $user, $data); + Logging::info($result); + } catch (Exception $e) { + throw $e; + } + } } //Used by the SaaS monitoring diff --git a/airtime_mvc/application/controllers/ProvisioningController.php b/airtime_mvc/application/controllers/ProvisioningController.php index 3532a9408..a230d6ff1 100644 --- a/airtime_mvc/application/controllers/ProvisioningController.php +++ b/airtime_mvc/application/controllers/ProvisioningController.php @@ -44,6 +44,9 @@ class ProvisioningController extends Zend_Controller_Action if (isset($_POST['icecast_pass'])) { Application_Model_Preference::setDefaultIcecastPassword($_POST['icecast_pass']); } + if (isset($_POST['bandwidth_limit'])) { + Application_Model_Preference::setBandwidthLimit($_POST['bandwidth_limit']); + } } catch (Exception $e) { $this->getResponse() ->setHttpResponseCode(400) diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index 049b0a17a..1b7319313 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -1585,6 +1585,19 @@ class Application_Model_Preference self::setValue("station_podcast_privacy", $value); } + /** + * Accessors for station bandwidth limit. + */ + + public static function getBandwidthLimit() { + $val = self::getValue("bandwidth_limit"); + return empty($val) ? 0 : $val; + } + + public static function setBandwidthLimit($value) { + self::setValue("bandwidth_limit", $value); + } + /** * Accessors for bandwidth limit counter. * Tracks bandwidth usage.