web/lib/Zend/Cloud/Infrastructure/Instance.php
changeset 808 6b6c2214f778
child 1230 68c69c656a2c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/Zend/Cloud/Infrastructure/Instance.php	Thu Mar 21 19:52:38 2013 +0100
@@ -0,0 +1,320 @@
+<?php
+/**
+ * @category   Zend
+ * @package    Zend_Cloud
+ * @subpackage Infrastructure
+ * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+
+/**
+ * Instance of an infrastructure service
+ *
+ * @package    Zend_Cloud
+ * @subpackage Infrastructure
+ * @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_Cloud_Infrastructure_Instance 
+{
+    const STATUS_RUNNING       = 'running';
+    const STATUS_STOPPED       = 'stopped';
+    const STATUS_SHUTTING_DOWN = 'shutting-down';
+    const STATUS_REBOOTING     = 'rebooting';
+    const STATUS_TERMINATED    = 'terminated';
+    const STATUS_PENDING       = 'pending';
+    const STATUS_REBUILD       = 'rebuild';
+    const INSTANCE_ID          = 'id';
+    const INSTANCE_IMAGEID     = 'imageId';
+    const INSTANCE_NAME        = 'name';
+    const INSTANCE_STATUS      = 'status';
+    const INSTANCE_PUBLICDNS   = 'publicDns';
+    const INSTANCE_CPU         = 'cpu';
+    const INSTANCE_RAM         = 'ram';
+    const INSTANCE_STORAGE     = 'storageSize';
+    const INSTANCE_ZONE        = 'zone';
+    const INSTANCE_LAUNCHTIME  = 'launchTime';
+    const MONITOR_CPU          = 'CpuUsage';
+    const MONITOR_RAM          = 'RamUsage';
+    const MONITOR_NETWORK_IN   = 'NetworkIn';
+    const MONITOR_NETWORK_OUT  = 'NetworkOut';
+    const MONITOR_DISK         = 'DiskUsage';
+    const MONITOR_DISK_WRITE   = 'DiskWrite';
+    const MONITOR_DISK_READ    = 'DiskRead';
+    const MONITOR_START_TIME   = 'StartTime';
+    const MONITOR_END_TIME     = 'EndTime';
+    const SSH_USERNAME         = 'username';
+    const SSH_PASSWORD         = 'password';
+    const SSH_PRIVATE_KEY      = 'privateKey';
+    const SSH_PUBLIC_KEY       = 'publicKey';
+    const SSH_PASSPHRASE       = 'passphrase';
+
+    /**
+     * @var Zend_Cloud_Infrastructure_Adapter
+     */
+    protected $adapter;
+
+    /**
+     * Instance's attribute
+     * 
+     * @var array 
+     */
+    protected $attributes;
+
+    /**
+     * Attributes required for an instance
+     * 
+     * @var array 
+     */
+    protected $attributeRequired = array(
+        self::INSTANCE_ID,
+        self::INSTANCE_STATUS,
+        self::INSTANCE_IMAGEID,
+        self::INSTANCE_ZONE
+    );
+
+    /**
+     * Constructor
+     * 
+     * @param  Adapter $adapter
+     * @param  array $data 
+     * @return void
+     */
+    public function __construct($adapter, $data = null)
+    {
+        if (!($adapter instanceof Zend_Cloud_Infrastructure_Adapter)) {
+            require_once 'Zend/Cloud/Infrastructure/Exception.php';
+            throw new Zend_Cloud_Infrastructure_Exception("You must pass a Zend_Cloud_Infrastructure_Adapter instance");
+        }
+
+        if (is_object($data)) {
+            if (method_exists($data, 'toArray')) {
+                $data= $data->toArray();
+            } elseif ($data instanceof Traversable) {
+                $data = iterator_to_array($data);
+            }
+        }
+        
+        if (empty($data) || !is_array($data)) {
+            require_once 'Zend/Cloud/Infrastructure/Exception.php';
+            throw new Zend_Cloud_Infrastructure_Exception("You must pass an array of parameters");
+        }
+
+        foreach ($this->attributeRequired as $key) {
+            if (empty($data[$key])) {
+                require_once 'Zend/Cloud/Infrastructure/Exception.php';
+                throw new Zend_Cloud_Infrastructure_Exception(sprintf(
+                    'The param "%s" is a required param for %s', 
+                    $key,
+                    __CLASS__
+                ));
+            }
+        }
+
+        $this->adapter    = $adapter;
+        $this->attributes = $data;
+    }
+
+    /**
+     * Get Attribute with a specific key
+     *
+     * @param array $data
+     * @return misc|false
+     */
+    public function getAttribute($key) 
+    {
+        if (!empty($this->attributes[$key])) {
+            return $this->attributes[$key];
+        }
+        return false;
+    }
+
+    /**
+     * Get all the attributes
+     * 
+     * @return array
+     */
+    public function getAttributes()
+    {
+        return $this->attributes;
+    }
+
+    /**
+     * Get the instance's id
+     * 
+     * @return string 
+     */
+    public function getId()
+    {
+        return $this->attributes[self::INSTANCE_ID];
+    }
+
+    /**
+     * Get the instance's image id
+     * 
+     * @return string 
+     */
+    public function getImageId()
+    {
+        return $this->attributes[self::INSTANCE_IMAGEID];
+    }
+
+    /**
+     * Get the instance's name
+     * 
+     * @return string 
+     */
+    public function getName()
+    {
+        return $this->attributes[self::INSTANCE_NAME];
+    }
+
+    /**
+     * Get the status of the instance
+     * 
+     * @return string|boolean 
+     */
+    public function getStatus()
+    {
+        return $this->adapter->statusInstance($this->attributes[self::INSTANCE_ID]);
+    }
+
+    /**
+     * Wait for status $status with a timeout of $timeout seconds
+     * 
+     * @param  string $status
+     * @param  integer $timeout 
+     * @return boolean
+     */
+    public function waitStatus($status, $timeout = Adapter::TIMEOUT_STATUS_CHANGE)
+    {
+        return $this->adapter->waitStatusInstance($this->attributes[self::INSTANCE_ID], $status, $timeout);
+    }
+
+    /**
+     * Get the public DNS of the instance
+     * 
+     * @return string 
+     */
+    public function getPublicDns()
+    {
+        if (!isset($this->attributes[self::INSTANCE_PUBLICDNS])) {
+            $this->attributes[self::INSTANCE_PUBLICDNS] =  $this->adapter->publicDnsInstance($this->attributes[self::INSTANCE_ID]);
+        }
+        return $this->attributes[self::INSTANCE_PUBLICDNS];
+    }
+
+    /**
+     * Get the instance's CPU
+     * 
+     * @return string
+     */
+    public function getCpu()
+    {
+        return $this->attributes[self::INSTANCE_CPU];
+    }
+
+    /**
+     * Get the instance's RAM size
+     * 
+     * @return string
+     */
+    public function getRamSize()
+    {
+        return $this->attributes[self::INSTANCE_RAM];
+    }
+
+    /**
+     * Get the instance's storage size
+     * 
+     * @return string
+     */
+    public function getStorageSize()
+    {
+        return $this->attributes[self::INSTANCE_STORAGE];
+    }
+
+    /**
+     * Get the instance's zone
+     * 
+     * @return string 
+     */
+    public function getZone()
+    {
+        return $this->attributes[self::INSTANCE_ZONE];
+    }
+
+    /**
+     * Get the instance's launch time
+     * 
+     * @return string
+     */
+    public function getLaunchTime()
+    {
+        return $this->attributes[self::INSTANCE_LAUNCHTIME];
+    }
+
+    /**
+     * Reboot the instance
+     * 
+     * @return boolean 
+     */
+    public function reboot()
+    {
+        return $this->adapter->rebootInstance($this->attributes[self::INSTANCE_ID]);
+    }
+
+    /**
+     * Stop the instance
+     * 
+     * @return boolean 
+     */
+    public function stop()
+    {
+        return $this->adapter->stopInstance($this->attributes[self::INSTANCE_ID]);
+    }
+
+    /**
+     * Start the instance
+     * 
+     * @return boolean 
+     */
+    public function start()
+    {
+        return $this->adapter->startInstance($this->attributes[self::INSTANCE_ID]);
+    }
+
+    /**
+     * Destroy the instance
+     * 
+     * @return boolean 
+     */
+    public function destroy()
+    {
+        return $this->adapter->destroyInstance($this->attributes[self::INSTANCE_ID]);
+    }
+
+    /**
+     * Return the system informations about the $metric of an instance
+     * 
+     * @param  string $metric
+     * @param  null|array $options
+     * @return array|boolean
+     */ 
+    public function monitor($metric, $options = null)
+    {
+        return $this->adapter->monitorInstance($this->attributes[self::INSTANCE_ID], $metric, $options);
+    }
+
+    /**
+     * Run arbitrary shell script on the instance
+     *
+     * @param  array $param
+     * @param  string|array $cmd
+     * @return string|array
+     */
+    public function deploy($params, $cmd)
+    {
+        return $this->adapter->deployInstance($this->attributes[self::INSTANCE_ID], $params, $cmd);
+    }
+}