Since: 5.11.7 (25.01.2016)
Author: Andrii Penchuk (a.penchuk@scalr.com)
Inheritance: extends Scalr\Model\AbstractEntity
Example #1
0
 /**
  * {@inheritdoc}
  * @see ScalingRuleAdapter::validateEntity()
  */
 public function validateEntity($entity)
 {
     parent::validateEntity($entity);
     if (!$entity->getFarmRole()->getRole()->isScalarized) {
         throw new ApiErrorException(409, ErrorMessage::ERR_CONFIGURATION_MISMATCH, sprintf('Can not add %s Scaling metric to the agentless Role', ScalingMetricAdapter::metricNameToData($entity->metric->name)));
     }
     $criteria[] = ['farmRoleId' => $entity->farmRoleId];
     $criteria[] = ['metricId' => ScalingMetric::METRIC_DATE_AND_TIME_ID];
     if (!empty(FarmRoleScalingMetric::findOne($criteria))) {
         throw new ApiErrorException(409, ErrorMessage::ERR_UNICITY_VIOLATION, 'DateAndTime metric cannot be used with others');
     }
     $settings = $entity->settings;
     if ($entity->metric->isInvert) {
         $this->validateNumericSetting($settings, FarmRoleScalingMetric::MIN, 'scaleUp');
         $this->validateNumericSetting($settings, FarmRoleScalingMetric::MAX, 'scaleDown');
     } else {
         $this->validateNumericSetting($settings, FarmRoleScalingMetric::MIN, 'scaleDown');
         $this->validateNumericSetting($settings, FarmRoleScalingMetric::MAX, 'scaleUp');
     }
     if ($entity->metricId != ScalingMetric::METRIC_SQS_QUEUE_SIZE_ID && $entity->settings[FarmRoleScalingMetric::MIN] >= $entity->settings[FarmRoleScalingMetric::MAX]) {
         throw new ApiErrorException(400, ErrorMessage::ERR_INVALID_VALUE, sprintf('Scale up value must be %s than Scale down value', $entity->metric->isInvert ? 'less' : 'greater'));
     }
 }
 /**
  * {@inheritdoc}
  * @see BasicScalingRuleAdapter::validateEntity()
  */
 public function validateEntity($entity)
 {
     parent::validateEntity($entity);
     if (!empty(Entity\FarmRoleScalingMetric::findOne([['farmRoleId' => $entity->farmRoleId], ['id' => ['$ne' => $entity->id]]]))) {
         throw new ApiErrorException(409, ErrorMessage::ERR_UNICITY_VIOLATION, 'DateAndTime metric cannot be used with others');
     }
     if ($entity->settings->count() === 0) {
         throw new ApiErrorException(400, ErrorMessage::ERR_INVALID_STRUCTURE, 'Missed property schedule');
     }
 }
Example #3
0
 /**
  * Get FarmRoleScalingMetric entity
  *
  * @param string $criteria search criteria
  * @param array  $params   optional query params
  * @return FarmRoleScalingMetric
  */
 protected function getFarmRoleScalingMetrics($criteria, $params = [])
 {
     $metric = ScalingMetric::findOne([['name' => $criteria]]);
     /* @var  $farmRoleMetric FarmRoleScalingMetric  */
     $farmRoleMetric = FarmRoleScalingMetric::findOne([['metricId' => $metric->id], ['farmRoleId' => $params['farmRoleId']]]);
     $farmRoleMetric->metric = $metric;
     static::toDelete(FarmRoleScalingMetric::class, [$farmRoleMetric->id]);
     return $farmRoleMetric;
 }
Example #4
0
 /**
  * Get a list of names farm-role scaling metrics.
  *
  * @param int $farmRoleId farm-role identifier
  * @return array
  */
 public static function listFarmRoleMetric($farmRoleId)
 {
     $result = [];
     /* @var $metric ScalingMetric */
     $metric = new ScalingMetric();
     /* @var $farmRoleMetric FarmRoleScalingMetric */
     $farmRoleMetric = new FarmRoleScalingMetric();
     $criteria[static::STMT_FROM] = "{$metric->table()} JOIN  {$farmRoleMetric->table()}  ON {$farmRoleMetric->columnMetricId} = {$metric->columnId}";
     $criteria[static::STMT_WHERE] = "{$farmRoleMetric->columnFarmRoleId} = {$farmRoleId}";
     $farmRoleMetrics = ScalingMetric::find($criteria);
     if ($farmRoleMetrics->count() > 0) {
         /* @var $scalingMetric ScalingMetric */
         foreach ($farmRoleMetrics as $scalingMetric) {
             $result[] = $scalingMetric->name;
         }
     }
     return $result;
 }
Example #5
0
 /**
  * {@inheritdoc}
  * @see ApiEntityAdapter::validateEntity()
  * @param Entity\FarmRoleScalingMetric $entity scaling metric entity
  */
 public function validateEntity($entity)
 {
     if (!$entity instanceof Entity\FarmRoleScalingMetric) {
         throw new InvalidArgumentException(sprintf("First argument must be instance of Scalr\\Model\\Entity\\FarmRoleScalingMetric class"));
     }
     $farmRole = $entity->getFarmRole();
     if (empty($farmRole)) {
         throw new ApiErrorException(404, ErrorMessage::ERR_OBJECT_NOT_FOUND, sprintf("Could not find out the Farm role with ID: %d", $entity->farmRoleId));
     }
     $disabledScalingBehaviors = array_intersect(FarmRoleAdapter::$disableScalingBehaviors, $farmRole->getRole()->getBehaviors());
     if (!empty($disabledScalingBehaviors)) {
         throw new ApiErrorException(409, ErrorMessage::ERR_CONFIGURATION_MISMATCH, sprintf('Can not add Scaling Metric to the Role with the following built-in automation types: %s.', implode(', ', RoleAdapter::behaviorsToData($disabledScalingBehaviors))));
     }
     if (empty($entity->id)) {
         if (empty($entity->metricId)) {
             throw new ApiErrorException(400, ErrorMessage::ERR_INVALID_STRUCTURE, "Missed property name");
         }
         $criteria = [['farmRoleId' => $entity->farmRoleId], ['metricId' => $entity->metricId]];
         if (!empty(Entity\FarmRoleScalingMetric::findOne($criteria))) {
             throw new ApiErrorException(409, ErrorMessage::ERR_UNICITY_VIOLATION, 'This Scaling metric already added to the current Farm role.');
         }
     }
 }