Scalr_Scaling_FarmRoleMetric::getScalingDecision PHP Метод

getScalingDecision() публичный Метод

public getScalingDecision ( )
    function getScalingDecision()
    {
        $algo = Entity\ScalingMetric::getAlgorithm($this->getMetric()->algorithm);
        $sensor = Scalr_Scaling_Sensor::get($this->getMetric()->alias);
        $dbFarmRole = DBFarmRole::LoadByID($this->farmRoleId);
        if ($sensor) {
            try {
                $sensorValue = $sensor->getValue($dbFarmRole, $this);
                if ($sensorValue === false) {
                    return Scalr_Scaling_Decision::NOOP;
                }
            } catch (Exception $e) {
                $this->logger->warn(new FarmLogMessage($dbFarmRole->FarmID, sprintf("Unable to read Scaling Metric (%s) on farmrole %s value: %s", $this->getMetric()->alias, $dbFarmRole->ID, $e->getMessage())));
                return Scalr_Scaling_Decision::NOOP;
            }
            $this->logger->debug(sprintf(_("Raw sensor value (id: %s, metric_id: %s, metric name: %s): %s"), $this->id, $this->metricId, $this->getMetric()->name, json_encode($sensorValue)));
            switch ($this->getMetric()->calcFunction) {
                case Entity\ScalingMetric::CALC_FUNCTION_AVERAGE:
                    $value = is_array($sensorValue) && count($sensorValue) != 0 ? @array_sum($sensorValue) / count($sensorValue) : 0;
                    break;
                case Entity\ScalingMetric::CALC_FUNCTION_SUM:
                    $value = @array_sum($sensorValue);
                    break;
                case Entity\ScalingMetric::CALC_FUNCTION_MAXIMUM:
                    $value = @max($sensorValue);
                    break;
                case Entity\ScalingMetric::CALC_FUNCTION_MINIMUM:
                    $value = @min($sensorValue);
                    break;
                default:
                    $value = $sensorValue[0];
            }
            $this->lastValue = round($value, 5);
            // Sets the Server time to avoid differences between Database and Server time
            $this->dtLastPolled = time();
            $this->save(false, ['settings', 'metric_id']);
            $invert = $sensor instanceof Scalr_Scaling_Sensors_Custom ? $this->getMetric()->isInvert : $sensor->isInvert;
        } else {
            $invert = false;
        }
        if ($this->getMetric()->name == 'DateAndTime') {
            $decision = $algo->makeDecision($dbFarmRole, $this, $invert);
            $this->instancesNumber = $algo->instancesNumber;
            $this->lastValue = isset($algo->lastValue) ? $algo->lastValue : null;
            return $decision;
        } elseif ($this->getMetric()->name == 'FreeRam') {
            if ($this->lastValue == 0) {
                return Scalr_Scaling_Decision::NOOP;
            } else {
                return $algo->makeDecision($dbFarmRole, $this, $invert);
            }
        } else {
            return $algo->makeDecision($dbFarmRole, $this, $invert);
        }
    }