<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Service_WindowsAzure
* @subpackage Diagnostics
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id$
*/
/**
* @see Zend_Service_WindowsAzure_Storage_Blob
*/
require_once 'Zend/Service/WindowsAzure/Storage/Blob.php';
/**
* @see Zend_Service_WindowsAzure_Diagnostics_Exception
*/
require_once 'Zend/Service/WindowsAzure/Diagnostics/Exception.php';
/**
* @see Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance
*/
require_once 'Zend/Service/WindowsAzure/Diagnostics/ConfigurationInstance.php';
/**
* @category Zend
* @package Zend_Service_WindowsAzure
* @subpackage Diagnostics
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Service_WindowsAzure_Diagnostics_Manager
{
/**
* Blob storage client
*
* @var Zend_Service_WindowsAzure_Storage_Blob
*/
protected $_blobStorageClient = null;
/**
* Control container name
*
* @var string
*/
protected $_controlContainer = '';
/**
* Create a new instance of Zend_Service_WindowsAzure_Diagnostics_Manager
*
* @param Zend_Service_WindowsAzure_Storage_Blob $blobStorageClient Blob storage client
* @param string $controlContainer Control container name
*/
public function __construct(Zend_Service_WindowsAzure_Storage_Blob $blobStorageClient = null, $controlContainer = 'wad-control-container')
{
$this->_blobStorageClient = $blobStorageClient;
$this->_controlContainer = $controlContainer;
$this->_ensureStorageInitialized();
}
/**
* Ensure storage has been initialized
*/
protected function _ensureStorageInitialized()
{
if (!$this->_blobStorageClient->containerExists($this->_controlContainer)) {
$this->_blobStorageClient->createContainer($this->_controlContainer);
}
}
/**
* Get default configuration values
*
* @return Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance
*/
public function getDefaultConfiguration()
{
return new Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance();
}
/**
* Checks if a configuration for a specific role instance exists.
*
* @param string $roleInstance Role instance name, can be found in $_SERVER['RdRoleId'] when hosted on Windows Azure.
* @return boolean
* @throws Zend_Service_WindowsAzure_Diagnostics_Exception
*/
public function configurationForRoleInstanceExists($roleInstance = null)
{
if ($roleInstance === null) {
throw new Zend_Service_WindowsAzure_Diagnostics_Exception('Role instance should be specified. Try reading $_SERVER[\'RdRoleId\'] for this information if the application is hosted on Windows Azure Fabric or Development Fabric.');
}
return $this->_blobStorageClient->blobExists($this->_controlContainer, $roleInstance);
}
/**
* Checks if a configuration for current role instance exists. Only works on Development Fabric or Windows Azure Fabric.
*
* @return boolean
* @throws Zend_Service_WindowsAzure_Diagnostics_Exception
*/
public function configurationForCurrentRoleInstanceExists()
{
if (!isset($_SERVER['RdRoleId'])) {
throw new Zend_Service_WindowsAzure_Diagnostics_Exception('Server variable \'RdRoleId\' is unknown. Please verify the application is running in Development Fabric or Windows Azure Fabric.');
}
return $this->_blobStorageClient->blobExists($this->_controlContainer, $_SERVER['RdRoleId']);
}
/**
* Get configuration for current role instance. Only works on Development Fabric or Windows Azure Fabric.
*
* @return Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance
* @throws Zend_Service_WindowsAzure_Diagnostics_Exception
*/
public function getConfigurationForCurrentRoleInstance()
{
if (!isset($_SERVER['RdRoleId'])) {
throw new Zend_Service_WindowsAzure_Diagnostics_Exception('Server variable \'RdRoleId\' is unknown. Please verify the application is running in Development Fabric or Windows Azure Fabric.');
}
return $this->getConfigurationForRoleInstance($_SERVER['RdRoleId']);
}
/**
* Set configuration for current role instance. Only works on Development Fabric or Windows Azure Fabric.
*
* @param Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance $configuration Configuration to apply
* @throws Zend_Service_WindowsAzure_Diagnostics_Exception
*/
public function setConfigurationForCurrentRoleInstance(Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance $configuration)
{
if (!isset($_SERVER['RdRoleId'])) {
throw new Zend_Service_WindowsAzure_Diagnostics_Exception('Server variable \'RdRoleId\' is unknown. Please verify the application is running in Development Fabric or Windows Azure Fabric.');
}
$this->setConfigurationForRoleInstance($_SERVER['RdRoleId'], $configuration);
}
/**
* Get configuration for a specific role instance
*
* @param string $roleInstance Role instance name, can be found in $_SERVER['RdRoleId'] when hosted on Windows Azure.
* @return Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance
* @throws Zend_Service_WindowsAzure_Diagnostics_Exception
*/
public function getConfigurationForRoleInstance($roleInstance = null)
{
if ($roleInstance === null) {
throw new Zend_Service_WindowsAzure_Diagnostics_Exception('Role instance should be specified. Try reading $_SERVER[\'RdRoleId\'] for this information if the application is hosted on Windows Azure Fabric or Development Fabric.');
}
if ($this->_blobStorageClient->blobExists($this->_controlContainer, $roleInstance)) {
$configurationInstance = new Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance();
$configurationInstance->loadXml( $this->_blobStorageClient->getBlobData($this->_controlContainer, $roleInstance) );
return $configurationInstance;
}
return new Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance();
}
/**
* Set configuration for a specific role instance
*
* @param string $roleInstance Role instance name, can be found in $_SERVER['RdRoleId'] when hosted on Windows Azure.
* @param Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance $configuration Configuration to apply
* @throws Zend_Service_WindowsAzure_Diagnostics_Exception
*/
public function setConfigurationForRoleInstance($roleInstance = null, Zend_Service_WindowsAzure_Diagnostics_ConfigurationInstance $configuration)
{
if ($roleInstance === null) {
throw new Zend_Service_WindowsAzure_Diagnostics_Exception('Role instance should be specified. Try reading $_SERVER[\'RdRoleId\'] for this information if the application is hosted on Windows Azure Fabric or Development Fabric.');
}
$this->_blobStorageClient->putBlobData($this->_controlContainer, $roleInstance, $configuration->toXml(), array(), null, array('Content-Type' => 'text/xml'));
}
}