Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 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;
         }
     }
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
Arquivo: Sqs.php Projeto: mheydt/scalr
 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);
 }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
 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;
 }
Exemplo n.º 8
0
 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);
 }
Exemplo n.º 9
0
 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);
 }
Exemplo n.º 10
0
 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);
 }
Exemplo n.º 11
0
 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);
 }
Exemplo n.º 12
0
 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;
 }
Exemplo n.º 13
0
 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;
         }
     }
 }
Exemplo n.º 14
0
 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;
 }
Exemplo n.º 15
0
 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;
 }