����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.110 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/www/vendor/rackspace/php-opencloud/lib/OpenCloud/Autoscale/Resource/ |
Upload File : |
<?php
/**
* Copyright 2012-2014 Rackspace US, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace OpenCloud\Autoscale\Resource;
use OpenCloud\Common\Exceptions;
use OpenCloud\Common\Http\Message\Formatter;
/**
* An autoscaling group is monitored by Rackspace CloudMonitoring. When
* Monitoring triggers an alarm for high utilization within the autoscaling
* group, a webhook is triggered. The webhook stimulates the autoscale service
* which consults a policy in accordance with the webhook. The policy determines
* how many additional cloud servers should be added or removed in accordance
* with the alarm.
*
* There are three components to Autoscale:
*
* - The Scaling Group Configuration ($this->groupConfiguration)
* - The Scaling Group's Launch Configuration ($this->launchConfiguration)
* - The Scaling Group's Policies ($this->scalingPolicies)
*
* @link https://github.com/rackerlabs/otter/blob/master/doc/getting_started.rst
* @link http://docs.autoscale.apiary.io/
*/
class Group extends AbstractResource
{
private $id;
private $links;
private $groupConfiguration;
private $launchConfiguration;
private $scalingPolicies;
private $name;
protected $metadata;
private $active;
private $activeCapacity;
private $pendingCapacity;
private $desiredCapacity;
private $paused;
protected static $json_name = 'group';
protected static $url_resource = 'groups';
protected static $json_collection_name = 'groups';
/**
* {@inheritDoc}
*/
public $createKeys = array(
'groupConfiguration',
'launchConfiguration',
'scalingPolicies'
);
/**
* {@inheritDoc}
*/
public $associatedResources = array(
'groupConfiguration' => 'GroupConfiguration',
'launchConfiguration' => 'LaunchConfiguration',
);
/**
* {@inheritDoc}
*/
public $associatedCollections = array(
'scalingPolicies' => 'ScalingPolicy'
);
/**
* {@inheritDoc}
*/
public function update($params = array())
{
return $this->noUpdate();
}
/**
* Get the current state of the scaling group, including the current set of
* active entities, the number of pending entities, and the desired number
* of entities.
*
* @return object|boolean
* @throws Exceptions\HttpError
* @throws Exceptions\ServerActionError
*/
public function getState()
{
$response = $this->getService()
->getClient()
->get($this->url('state'))
->send();
$body = Formatter::decode($response);
return (!empty($body->group)) ? $body->group : false;
}
/**
* Get the group configuration for this autoscale group.
*
* @return GroupConfiguration
*/
public function getGroupConfig()
{
if (($config = $this->getProperty('groupConfiguration')) instanceof GroupConfiguration) {
return $config;
}
$config = $this->getService()->resource('GroupConfiguration');
$config->setParent($this);
if ($this->getId()) {
$config->refresh(null, $config->url());
}
return $config;
}
/**
* Get the launch configuration for this autoscale group.
*
* @return LaunchConfiguration
*/
public function getLaunchConfig()
{
if (($config = $this->getProperty('launchConfiguration')) instanceof LaunchConfiguration) {
return $config;
}
$config = $this->getService()->resource('LaunchConfiguration');
$config->setParent($this);
if ($this->getId()) {
$config->refresh(null, $config->url());
}
return $config;
}
/**
* NB: NOT SUPPORTED YET.
*
* @codeCoverageIgnore
*/
public function pause()
{
return $this->getService()->getClient()->post($this->url('pause'))->send();
}
/**
* NB: NOT SUPPORTED YET.
*
* @codeCoverageIgnore
*/
public function resume()
{
return $this->getService()->getClient()->post($this->url('resume'))->send();
}
/**
* Get the scaling policies associated with this autoscale group.
*
* @return Collection
*/
public function getScalingPolicies($override = false)
{
if (null === $this->scalingPolicies || $override === true) {
$this->scalingPolicies = $this->getService()->resourceList('ScalingPolicy', null, $this);
}
return $this->scalingPolicies;
}
/**
* Get a particular scaling policy for this autoscale group.
*
* @param object|int $id
* @return ScalingPolicy
*/
public function getScalingPolicy($id = null)
{
$config = $this->getService()->resource('ScalingPolicy');
$config->setParent($this);
if ($id) {
$config->populate($id);
}
return $config;
}
public function createScalingPolicies(array $policies)
{
$url = clone $this->getUrl();
$url->addPath('policies');
$body = json_encode($policies);
$this->checkJsonError();
return $this->getService()
->getClient()
->post($url, self::getJsonHeader(), $body)
->send();
}
}