Overview

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CloudMonitoring
      • Exception
      • Resource
    • Common
      • Collection
      • Constants
      • Exceptions
      • Http
        • Message
      • Log
      • Resource
      • Service
    • Compute
      • Constants
      • Exception
      • Resource
    • Database
      • Resource
    • DNS
      • Collection
      • Resource
    • Identity
      • Constants
      • Resource
    • Image
      • Enum
      • Resource
        • JsonPatch
        • Schema
    • LoadBalancer
      • Enum
      • Resource
    • ObjectStore
      • Constants
      • Exception
      • Resource
      • Upload
    • Orchestration
    • Queues
      • Exception
      • Resource
    • Volume
      • Resource
  • PHP

Classes

  • AbstractResource
  • AsyncResponse
  • Domain
  • PtrRecord
  • Record
  • Subdomain

Interfaces

  • HasPtrRecordsInterface
  • Overview
  • Namespace
  • Class
  • Tree
  • Download
  1: <?php
  2: /**
  3:  * Copyright 2012-2014 Rackspace US, Inc.
  4:  *
  5:  * Licensed under the Apache License, Version 2.0 (the "License");
  6:  * you may not use this file except in compliance with the License.
  7:  * You may obtain a copy of the License at
  8:  *
  9:  * http://www.apache.org/licenses/LICENSE-2.0
 10:  *
 11:  * Unless required by applicable law or agreed to in writing, software
 12:  * distributed under the License is distributed on an "AS IS" BASIS,
 13:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14:  * See the License for the specific language governing permissions and
 15:  * limitations under the License.
 16:  */
 17: 
 18: namespace OpenCloud\DNS\Resource;
 19: 
 20: use Guzzle\Http\Url;
 21: use OpenCloud\Common\Constants\State;
 22: use OpenCloud\Common\PersistentObject;
 23: use OpenCloud\Common\Service\ServiceInterface;
 24: 
 25: /**
 26:  * The AsyncResponse class encapsulates the data returned by a Cloud DNS
 27:  * asynchronous response.
 28:  */
 29: class AsyncResponse extends PersistentObject
 30: {
 31:     const DEFAULT_INTERVAL = 2;
 32: 
 33:     public $jobId;
 34:     public $callbackUrl;
 35:     public $status;
 36:     public $requestUrl;
 37:     public $verb;
 38:     public $request;
 39:     public $response;
 40:     public $error;
 41:     public $domains;
 42: 
 43:     protected static $json_name = false;
 44: 
 45:     /**
 46:      * constructs a new AsyncResponse object from a JSON
 47:      * string
 48:      *
 49:      * @param \OpenCloud\Service $service the calling service
 50:      * @param string             $json    the json response from the initial request
 51:      */
 52:     public function __construct(ServiceInterface $service, $object = null)
 53:     {
 54:         if (!$object) {
 55:             return;
 56:         }
 57: 
 58:         parent::__construct($service, $object);
 59:     }
 60: 
 61:     /**
 62:      * URL for status
 63:      *
 64:      * We always show details
 65:      *
 66:      * @return string
 67:      */
 68:     public function getUrl($path = null, array $query = array())
 69:     {
 70:         return Url::factory($this->callbackUrl)
 71:             ->setQuery(array('showDetails' => 'True'));
 72:     }
 73: 
 74:     /**
 75:      * returns the Name of the request (the job ID)
 76:      *
 77:      * @return string
 78:      */
 79:     public function name()
 80:     {
 81:         return $this->jobId;
 82:     }
 83: 
 84:     /**
 85:      * overrides for methods
 86:      */
 87:     public function create($params = array())
 88:     {
 89:         return $this->noCreate();
 90:     }
 91: 
 92:     public function update($params = array())
 93:     {
 94:         return $this->noUpdate();
 95:     }
 96: 
 97:     public function delete()
 98:     {
 99:         return $this->noDelete();
100:     }
101: 
102:     public function primaryKeyField()
103:     {
104:         return 'jobId';
105:     }
106: 
107:     public function waitFor($state = null, $timeout = null, $callback = null, $interval = null)
108:     {
109:         $state    = $state ?: 'COMPLETED';
110:         $timeout  = $timeout ?: State::DEFAULT_TIMEOUT;
111:         $interval = $interval ?: self::DEFAULT_INTERVAL;
112: 
113:         $jobUrl = Url::factory($this->callbackUrl);
114:         $jobUrl->setQuery(array('showDetails' => 'true'));
115: 
116:         $continue = true;
117:         $startTime = time();
118:         $states = array('ERROR', $state);
119: 
120:         while ($continue) {
121: 
122:             $body = $this->getClient()->get($jobUrl)->send()->json();
123: 
124:             if ($callback) {
125:                 call_user_func($callback, $body);
126:             }
127: 
128:             if (in_array($body['status'], $states) || (time() - $startTime) > $timeout) {
129:                 $continue = false;
130:             }
131: 
132:             sleep($interval);
133:         }
134: 
135:         return isset($body['response']) ? $body['response'] : false;
136:     }
137: }
138: 
PHP OpenCloud API API documentation generated by ApiGen 2.8.0