web/Zend/Service/WindowsAzure/Diagnostics/Manager.php
changeset 0 4eba9c11703f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/Zend/Service/WindowsAzure/Diagnostics/Manager.php	Mon Dec 13 18:29:26 2010 +0100
@@ -0,0 +1,191 @@
+<?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-2010 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-2010 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'));
+	}
+}
\ No newline at end of file