public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $dbFarm = $dbFarmRole->GetFarmObject(); $roleLA = 0; if (count($servers) == 0) { return false; } $retval = array(); foreach ($servers as $DBServer) { if ($dbFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_EXCLUDE_DBMSR_MASTER) == 1) { $isMaster = $DBServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) == 1 || $DBServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1; if ($isMaster) { continue; } } try { $period = $farmRoleMetric->getSetting(self::SETTING_LA_PERIOD); $index = 0; if ($period == 15) { $index = 2; } elseif ($period == 5) { $index = 1; } $la = $DBServer->scalarizr->system->loadAverage(); if ($la[$index] !== null && $la[$index] !== false) { $la = (double) number_format($la[$index], 2); } $retval[] = $la; } catch (Exception $e) { \Scalr::getContainer()->logger(__CLASS__)->warn(new FarmLogMessage($DBServer->farmId, sprintf("Unable to read LoadAverage value from server %s: %s", $DBServer->getNameByConvention(), $e->getMessage()), $DBServer->serverId)); } } return count($retval) > 0 ? $retval : false; }
public function makeDecision(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric, $isInvert = false) { if ($farmRoleMetric->lastValue > $farmRoleMetric->getSetting('max')) { $retval = Scalr_Scaling_Decision::UPSCALE; } elseif ($farmRoleMetric->lastValue < $farmRoleMetric->getSetting('min')) { $retval = Scalr_Scaling_Decision::DOWNSCALE; } if (!$retval) { return Scalr_Scaling_Decision::NOOP; } else { if ($isInvert) { if ($retval == Scalr_Scaling_Decision::UPSCALE) { $retval = Scalr_Scaling_Decision::DOWNSCALE; } else { $retval = Scalr_Scaling_Decision::UPSCALE; } } if ($retval == Scalr_Scaling_Decision::UPSCALE) { if ($dbFarmRole->GetRunningInstancesCount() + $dbFarmRole->GetPendingInstancesCount() >= $dbFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_MAX_INSTANCES)) { $retval = Scalr_Scaling_Decision::NOOP; } } if ($retval == Scalr_Scaling_Decision::DOWNSCALE) { if ($dbFarmRole->GetRunningInstancesCount() <= $dbFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_MIN_INSTANCES)) { $retval = Scalr_Scaling_Decision::NOOP; } } $isSzr = true; if ($retval == Scalr_Scaling_Decision::UPSCALE && ($dbFarmRole->GetPendingInstancesCount() > 5 && !$isSzr)) { return Scalr_Scaling_Decision::NOOP; } else { return $retval; } } }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $dbFarm = $dbFarmRole->GetFarmObject(); $roleLA = 0; if (count($servers) == 0) { return false; } $retval = array(); foreach ($servers as $DBServer) { if ($dbFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_EXCLUDE_DBMSR_MASTER) == 1) { $isMaster = $DBServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) == 1 || $DBServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1; if ($isMaster) { continue; } } $port = $DBServer->GetProperty(SERVER_PROPERTIES::SZR_SNMP_PORT); $period = $farmRoleMetric->getSetting(self::SETTING_LA_PERIOD); if (!$period) { $period = '15'; } $this->snmpClient->connect($DBServer->remoteIp, $port ? $port : 161, $dbFarm->Hash, null, null, false); $res = $this->snmpClient->get($this->snmpOids[$period]); $la = (double) $res; $retval[] = $la; } return $retval; }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $sqs = $dbFarmRole->GetFarmObject()->GetEnvironmentObject()->aws($dbFarmRole)->sqs; try { $sqs->enableEntityManager(); $queue = $sqs->queue->getAttributes($farmRoleMetric->getSetting(self::SETTING_QUEUE_NAME)); $retval = $queue->approximateNumberOfMessages; } catch (Exception $e) { throw new Exception(sprintf("SQSScalingSensor failed during SQS request: %s", $e->getMessage())); } return array($retval); }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $dbFarm = $dbFarmRole->GetFarmObject(); $AmazonSQS = AmazonSQS::GetInstance($dbFarm->GetEnvironmentObject()->getPlatformConfigValue(Modules_Platforms_Ec2::ACCESS_KEY), $dbFarm->GetEnvironmentObject()->getPlatformConfigValue(Modules_Platforms_Ec2::SECRET_KEY)); try { $res = $AmazonSQS->GetQueueAttributes($farmRoleMetric->getSetting(self::SETTING_QUEUE_NAME)); $retval = $res['ApproximateNumberOfMessages']; } catch (Exception $e) { throw new Exception(sprintf("SQSScalingSensor failed during SQS request: %s", $e->getMessage())); } return array($retval); }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $curTime = time(); $newData = []; $servers = $dbFarmRole->GetServersByFilter(['status' => SERVER_STATUS::RUNNING]); if (!empty($farmRoleMetric->dtLastPolled)) { $interval = $curTime - $farmRoleMetric->dtLastPolled; if ($interval < 1) { // The service was started less than one second ago return false; } } $mbitsPerInterface = []; foreach ($servers as $DBServer) { $type = $farmRoleMetric->getSetting(self::SETTING_BW_TYPE) == 'inbound' ? 'receive' : 'transmit'; $netStat = (array) $DBServer->scalarizr->system->netStat(); foreach ($netStat as $interface => $usage) { if ($interface != 'lo' && !empty($usage)) { $totalBytes = round($usage->{$type}->bytes); $dataKey = $DBServer->serverId . '-' . $interface . '-' . $type; $newData[$dataKey] = $totalBytes; if (isset($interval)) { if (is_array($farmRoleMetric->lastData) && array_key_exists($dataKey, $farmRoleMetric->lastData)) { $lastTotalBytes = intval($farmRoleMetric->lastData[$dataKey]); $usedBytes = $totalBytes - $lastTotalBytes; if ($usedBytes > 0) { $usedMBits = $usedBytes * 8 / 1024 / 1024 / $interval; array_push($mbitsPerInterface, round($usedMBits, 2)); } else { // The last value is considered to be incorrect as the server has been restarted $missStep = true; } } else { // The last value hasn't been set yet $missStep = true; } } } } } $farmRoleMetric->lastData = $newData; if (!isset($interval) || !empty($missStep)) { // Sets the Server time to avoid differences between Database and Server time $farmRoleMetric->dtLastPolled = $curTime; $farmRoleMetric->save(false, ['settings', 'metric_id']); return false; } return $mbitsPerInterface; }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $dbFarm = $dbFarmRole->GetFarmObject(); $roleLA = 0; if (count($servers) == 0) { return false; } $retval = array(); foreach ($servers as $DBServer) { if ($dbFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_EXCLUDE_DBMSR_MASTER) == 1) { $isMaster = $DBServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) == 1 || $DBServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1; if ($isMaster) { continue; } } try { if ($DBServer->IsSupported('0.13.0')) { $period = $farmRoleMetric->getSetting(self::SETTING_LA_PERIOD); $index = 0; if ($period == 15) { $index = 2; } elseif ($period == 5) { $index = 1; } $la = $DBServer->scalarizr->system->loadAverage(); if ($la[$index] !== null && $la[$index] !== false) { $la = (double) number_format($la[$index], 2); } } else { $port = $DBServer->GetProperty(SERVER_PROPERTIES::SZR_SNMP_PORT); $period = $farmRoleMetric->getSetting(self::SETTING_LA_PERIOD); if (!$period) { $period = '15'; } $this->snmpClient->connect($DBServer->remoteIp, $port ? $port : 161, $dbFarm->Hash, null, null, false); $res = $this->snmpClient->get($this->snmpOids[$period]); $la = (double) $res; } $retval[] = $la; } catch (Exception $e) { Logger::getLogger(__CLASS__)->warn(new FarmLogMessage($DBServer->farmId, sprintf("Unable to read LoadAverage value from server %s: %s", $DBServer->remoteIp, $e->getMessage()))); } } return count($retval) > 0 ? $retval : false; }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $start_time = microtime(true); $HttpRequest = new Request("GET", $farmRoleMetric->getSetting(self::SETTING_URL)); $HttpRequest->setOptions(["redirect" => 10, "connecttimeout" => 10]); try { \Scalr::getContainer()->http->sendRequest($HttpRequest); } catch (Exception $e) { if ($e->innerException) { $message = $e->innerException->getMessage(); } else { $message = $e->getMessage(); } throw new Exception("HTTPResponseTime Scaling Sensor cannot get value: {$message}"); } $retval = round(microtime(true) - $start_time, 2); return array($retval); }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $start_time = microtime(true); $HttpRequest = new HttpRequest(); $HttpRequest->setOptions(array("redirect" => 10, "useragent" => "Scalr (http://scalr.net) HTTPResponseTime Scaling Sensor", "connecttimeout" => 10)); $HttpRequest->setUrl($farmRoleMetric->getSetting(self::SETTING_URL)); $HttpRequest->setMethod(constant("HTTP_METH_GET")); try { $HttpRequest->send(); } catch (Exception $e) { if ($e->innerException) { $message = $e->innerException->getMessage(); } else { $message = $e->getMessage(); } throw new Exception("HTTPResponseTime Scaling Sensor cannot get value: {$message}"); } $retval = round(microtime(true) - $start_time, 2); return array($retval); }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $DBFarm = $dbFarmRole->GetFarmObject(); if (count($servers) == 0) { return 0; } $roleBWRaw = array(); $retval = array(); foreach ($servers as $DBServer) { $type = $farmRoleMetric->getSetting(self::SETTING_BW_TYPE) == 'inbound' ? 'receive' : 'transmit'; $netStat = (array) $DBServer->scalarizr->system->netStat(); foreach ($netStat as $interface => $usage) { if ($interface != 'lo') { break; } } if ($usage) { array_push($roleBWRaw, round($usage->{$type}->bytes / 1024 / 1024, 2)); } } $roleBW = round(array_sum($roleBWRaw) / count($roleBWRaw), 2); if ($farmRoleMetric->getSetting(self::SETTING_BW_LAST_VALUE_RAW) !== null && $farmRoleMetric->getSetting(self::SETTING_BW_LAST_VALUE_RAW) !== '') { $time = time() - $farmRoleMetric->dtLastPolled; $bandwidthUsage = ($roleBW - (double) $farmRoleMetric->getSetting(self::SETTING_BW_LAST_VALUE_RAW)) * 8; $bandwidthChannelUsage = $bandwidthUsage / $time; // in Mbits/sec $retval = round($bandwidthChannelUsage, 2); } else { $retval = 0; } $farmRoleMetric->setSetting(self::SETTING_BW_LAST_VALUE_RAW, $roleBW); return array($retval); }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $DBFarm = $dbFarmRole->GetFarmObject(); if (count($servers) == 0) { return 0; } $_roleBW = array(); $retval = array(); foreach ($servers as $DBServer) { $port = $DBServer->GetProperty(SERVER_PROPERTIES::SZR_SNMP_PORT); $type = $farmRoleMetric->getSetting(self::SETTING_BW_TYPE); if (!$type) { $type = 'outbound'; } $this->snmpClient->connect($DBServer->remoteIp, $port ? $port : 161, $DBFarm->Hash, null, null, false); preg_match_all("/[0-9]+/si", $this->snmpClient->get($this->snmpOids[$type]), $matches); $bw_out = (double) $matches[0][0]; $bw = round($bw_out / 1024 / 1024, 2); $_roleBW[] = $bw; } $roleBW = round(array_sum($_roleBW) / count($_roleBW), 2); if ($farmRoleMetric->getSetting(self::SETTING_BW_LAST_VALUE_RAW) !== null && $farmRoleMetric->getSetting(self::SETTING_BW_LAST_VALUE_RAW) !== '') { $time = time() - $farmRoleMetric->dtLastPolled; $bandwidth_usage = ($roleBW - (double) $farmRoleMetric->getSetting(self::SETTING_BW_LAST_VALUE_RAW)) * 8; $bandwidth_channel_usage = $bandwidth_usage / $time; // in Mbits/sec $retval = round($bandwidth_channel_usage, 2); } else { $retval = 0; } $farmRoleMetric->setSetting(self::SETTING_BW_LAST_VALUE_RAW, $roleBW); return array($retval); }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $dbFarm = $dbFarmRole->GetFarmObject(); if (count($servers) == 0) { return false; } $retval = array(); foreach ($servers as $DBServer) { if ($dbFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_EXCLUDE_DBMSR_MASTER) == 1) { $isMaster = $DBServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) == 1 || $DBServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1; if ($isMaster) { continue; } } if ($DBServer->IsSupported('0.13.0')) { $szrClient = Scalr_Net_Scalarizr_Client::getClient($DBServer, Scalr_Net_Scalarizr_Client::NAMESPACE_SYSTEM, $DBServer->getPort(DBServer::PORT_API)); $ramUsage = $szrClient->memInfo(); $ram = (double) $ramUsage->total_free; if ($farmRoleMetric->getSetting(self::SETTING_USE_CACHED)) { $ram = $ram + (double) $ramUsage->cached; } } else { $port = $DBServer->GetProperty(SERVER_PROPERTIES::SZR_SNMP_PORT); $this->snmpClient->connect($DBServer->remoteIp, $port ? $port : 161, $dbFarm->Hash, null, null, false); $res = $this->snmpClient->get($this->snmpOids['memswap']); preg_match_all("/[0-9]+/si", $res, $matches); $ram = (double) $matches[0][0]; if ($farmRoleMetric->getSetting(self::SETTING_USE_CACHED)) { $res = $this->snmpClient->get($this->snmpOids['cachedram']); preg_match_all("/[0-9]+/si", $res, $matches); $cram = (double) $matches[0][0]; $ram = $ram + $cram; } } $retval[] = round($ram / 1024, 2); } return $retval; }
public function makeDecision(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric, $isInvert = false) { if ($farmRoleMetric->lastValue > $farmRoleMetric->getSetting('max')) { $retval = Scalr_Scaling_Decision::UPSCALE; } elseif ($farmRoleMetric->lastValue < $farmRoleMetric->getSetting('min')) { $retval = Scalr_Scaling_Decision::DOWNSCALE; } if (!$retval) { return Scalr_Scaling_Decision::NOOP; } else { if ($isInvert) { if ($retval == Scalr_Scaling_Decision::UPSCALE) { $retval = Scalr_Scaling_Decision::DOWNSCALE; } else { $retval = Scalr_Scaling_Decision::UPSCALE; } } if ($retval == Scalr_Scaling_Decision::UPSCALE) { if ($dbFarmRole->GetRunningInstancesCount() + $dbFarmRole->GetPendingInstancesCount() >= $dbFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MAX_INSTANCES)) { $retval = Scalr_Scaling_Decision::NOOP; } } if ($retval == Scalr_Scaling_Decision::DOWNSCALE) { if ($dbFarmRole->GetRunningInstancesCount() <= $dbFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MIN_INSTANCES)) { $retval = Scalr_Scaling_Decision::NOOP; } } $isSzr = $dbFarmRole->GetRoleObject()->isSupported("0.5"); if ($retval == Scalr_Scaling_Decision::UPSCALE && ($dbFarmRole->GetPendingInstancesCount() > 5 && !$isSzr)) { return Scalr_Scaling_Decision::NOOP; } else { //if ($isSzr && $dbFarmRole->GetPendingInstancesCount() > 10) //return Scalr_Scaling_Decision::NOOP; //else return $retval; } } }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $dbFarm = $dbFarmRole->GetFarmObject(); if (count($servers) == 0) { return false; } $retval = array(); foreach ($servers as $DBServer) { $port = $DBServer->GetProperty(SERVER_PROPERTIES::SZR_SNMP_PORT); $this->snmpClient->connect($DBServer->remoteIp, $port ? $port : 161, $dbFarm->Hash, null, null, false); $res = $this->snmpClient->get($this->snmpOids['memswap']); preg_match_all("/[0-9]+/si", $res, $matches); $ram = (double) $matches[0][0]; if ($farmRoleMetric->getSetting(self::SETTING_USE_CACHED)) { $res = $this->snmpClient->get($this->snmpOids['cachedram']); preg_match_all("/[0-9]+/si", $res, $matches); $cram = (double) $matches[0][0]; $ram = $ram + $cram; } $retval[] = round($ram / 1024, 2); } return $retval; }
public function getValue(DBFarmRole $dbFarmRole, Scalr_Scaling_FarmRoleMetric $farmRoleMetric) { $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)); $dbFarm = $dbFarmRole->GetFarmObject(); if (count($servers) == 0) { return false; } $retval = array(); foreach ($servers as $DBServer) { if ($dbFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_EXCLUDE_DBMSR_MASTER) == 1) { $isMaster = $DBServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) == 1 || $DBServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1; if ($isMaster) { continue; } } $ramUsage = $DBServer->scalarizr->system->memInfo(); $ram = (double) $ramUsage->total_free; if ($farmRoleMetric->getSetting(self::SETTING_USE_CACHED)) { $ram = $ram + (double) $ramUsage->cached; } $retval[] = round($ram / 1024, 2); } return $retval; }