LoadByID() public static method

Returns DBFarmRole object by id
public static LoadByID ( $id ) : DBFarmRole
$id
return DBFarmRole
Esempio n. 1
0
 public function xSaveAction()
 {
     //TODO: Think about WebSockets
     $this->request->defineParams(array('config' => array('type' => 'json')));
     $farmRole = DBFarmRole::LoadByID($this->getParam('farmRoleId'));
     $this->user->getPermissions()->validate($farmRole);
     $behavior = $this->getParam('behavior');
     $updateFarmRoleSettings = false;
     if (!$farmRole->GetRoleObject()->hasBehavior($behavior)) {
         throw new Exception("Behavior not assigned to this role");
     }
     $config = array();
     foreach ($this->getParam('config') as $conf) {
         if (!$config[$conf['configFile']]) {
             $config[$conf['configFile']] = array();
         }
         if ($config[$conf['configFile']][$conf['key']] === null) {
             $config[$conf['configFile']][$conf['key']] = $conf['value'];
         } else {
             throw new Exception("Variable {$conf['key']} from {$conf['configFile']} already defined. Please remove second definition");
         }
     }
     // Update master
     if ($this->getParam('masterServerId')) {
         $dbServer = DBServer::LoadByID($this->getParam('masterServerId'));
         $this->user->getPermissions()->validate($dbServer);
         if ($dbServer->farmRoleId != $farmRole->ID) {
             throw new Exception("Server not found");
         }
         if ($dbServer->status != SERVER_STATUS::RUNNING) {
             throw new Exception("Master server is not running. Config cannot be applied.");
         }
         $this->setConfig($dbServer, $behavior, $config);
         $servers = 0;
         $savedServers = 1;
         $updateFarmRoleSettings = true;
         foreach ($farmRole->GetServersByFilter(array('status' => array(SERVER_STATUS::RUNNING, SERVER_STATUS::INIT))) as $server) {
             $servers++;
             try {
                 if ($server->serverId == $dbServer->serverId) {
                     continue;
                 }
                 $this->setConfig($server, $behavior, $config);
                 $savedServers++;
             } catch (Exception $e) {
                 $warn[] = sprintf("Cannot update configuration on %s (%s): %s", $server->serverId, $server->remoteIp, $e->getMessage());
             }
         }
     } else {
         $updateFarmRoleSettings = true;
     }
     if ($updateFarmRoleSettings) {
         $farmRole->SetServiceConfiguration($behavior, $config);
     }
     if (!$warn) {
         $this->response->success(sprintf("Config successfully applied on %s of %s servers", $savedServers, $servers));
     } else {
         $this->response->warning(sprintf("Config was applied on %s of %s servers: %s", $savedServers, $servers, implode("\n", $warn)));
     }
 }
Esempio n. 2
0
 public function xListTasksAction()
 {
     $this->request->defineParams(array('sort' => array('type' => 'json', 'default' => array('property' => 'dtadded', 'direction' => 'DESC'))));
     $sql = "SELECT id FROM dm_deployment_tasks WHERE status !='" . Scalr_Dm_DeploymentTask::STATUS_ARCHIVED . "' AND env_id = '{$this->getEnvironmentId()}'";
     $response = $this->buildResponseFromSql($sql, array("id"));
     foreach ($response["data"] as $k => $row) {
         $data = false;
         try {
             $deploymentTask = Scalr_Dm_DeploymentTask::init()->loadById($row['id']);
             $application = $deploymentTask->getApplication();
             try {
                 $dbServer = DBServer::LoadByID($deploymentTask->serverId);
                 $serverIndex = $dbServer->index;
             } catch (Exception $e) {
             }
             $data = array('id' => $deploymentTask->id, 'application_name' => $application->name, 'application_id' => $deploymentTask->applicationId, 'server_id' => $deploymentTask->serverId, 'server_index' => $serverIndex, 'remote_path' => $deploymentTask->remotePath, 'status' => $deploymentTask->status, 'dtadded' => $deploymentTask->dtAdded ? Scalr_Util_DateTime::convertTz($deploymentTask->dtAdded) : "", 'dtdeployed' => $deploymentTask->dtDeployed ? Scalr_Util_DateTime::convertTz($deploymentTask->dtDeployed) : "Never");
             try {
                 $dbFarmRole = DBFarmRole::LoadByID($deploymentTask->farmRoleId);
                 $data['farm_roleid'] = $dbFarmRole->ID;
                 $data['role_name'] = $dbFarmRole->GetRoleObject()->name;
                 $data['farm_id'] = $dbFarmRole->FarmID;
                 $data['farm_name'] = $dbFarmRole->GetFarmObject()->Name;
             } catch (Exception $e) {
             }
         } catch (Exception $e) {
         }
         $response["data"][$k] = $data;
     }
     $this->response->data($response);
 }
Esempio n. 3
0
 public function xListTasksAction()
 {
     $this->request->defineParams(array('sort' => array('type' => 'json', 'default' => array('property' => 'dtadded', 'direction' => 'DESC'))));
     $sql = "\n            SELECT\n                dt.id, dma.name AS application_name, servers.index AS server_index, farms.name AS farm_name, roles.name AS role_name,\n                dt.status AS status, dt.dtadded AS dtadded\n            FROM dm_deployment_tasks dt\n            LEFT JOIN dm_applications dma ON dt.dm_application_id = dma.id\n            LEFT JOIN servers ON servers.id = dt.server_id\n            LEFT JOIN farms ON servers.farm_id = farms.id\n            LEFT JOIN roles ON servers.farm_roleid = roles.id\n            WHERE dt.`status` != ? AND dt.env_id = ?\n        ";
     $args = array(Scalr_Dm_DeploymentTask::STATUS_ARCHIVED, $this->getEnvironmentId());
     list($sql, $args) = $this->request->prepareFarmSqlQuery($sql, $args, 'farms');
     $response = $this->buildResponseFromSql2($sql, array('id', 'application_name', 'farm_name', 'role_name', 'server_index', 'status', 'dtadded', 'dtdeployed'), array(), $args);
     foreach ($response["data"] as $k => $row) {
         $data = false;
         try {
             $deploymentTask = Scalr_Dm_DeploymentTask::init()->loadById($row['id']);
             $application = $deploymentTask->getApplication();
             try {
                 $dbServer = DBServer::LoadByID($deploymentTask->serverId);
                 $serverIndex = $dbServer->index;
             } catch (Exception $e) {
             }
             $data = array('id' => $deploymentTask->id, 'application_name' => $application->name, 'application_id' => $deploymentTask->applicationId, 'server_id' => $deploymentTask->serverId, 'server_index' => $serverIndex, 'remote_path' => $deploymentTask->remotePath, 'status' => $deploymentTask->status, 'dtadded' => $deploymentTask->dtAdded ? Scalr_Util_DateTime::convertTz($deploymentTask->dtAdded) : "", 'dtdeployed' => $deploymentTask->dtDeployed ? Scalr_Util_DateTime::convertTz($deploymentTask->dtDeployed) : "Never");
             try {
                 $dbFarmRole = DBFarmRole::LoadByID($deploymentTask->farmRoleId);
                 $data['farm_roleid'] = $dbFarmRole->ID;
                 $data['role_name'] = $dbFarmRole->GetRoleObject()->name;
                 $data['farm_id'] = $dbFarmRole->FarmID;
                 $data['farm_name'] = $dbFarmRole->GetFarmObject()->Name;
             } catch (Exception $e) {
             }
         } catch (Exception $e) {
         }
         $response["data"][$k] = $data;
     }
     $this->response->data($response);
 }
Esempio n. 4
0
 function getScalingDecision()
 {
     $algo = Scalr_Scaling_Algorithm::get($this->getMetric()->algorithm);
     $sensor = Scalr_Scaling_Sensor::get($this->getMetric()->alias);
     $dbFarmRole = DBFarmRole::LoadByID($this->farmRoleId);
     if ($sensor) {
         try {
             $sensorValue = $sensor->getValue($dbFarmRole, $this);
         } catch (Exception $e) {
             $this->logger->warn(new FarmLogMessage($dbFarmRole->FarmID, sprintf("Unable to read Scaling Metric value: %s", $e->getMessage())));
             return Scalr_Scaling_Decision::NOOP;
         }
         $this->logger->info(sprintf(_("Raw sensor value (id: %s, metric_id: %s, metric name: %s): %s"), $this->id, $this->metricId, $this->getMetric()->name, serialize($sensorValue)));
         switch ($this->getMetric()->calcFunction) {
             default:
                 $value = $sensorValue[0];
                 break;
             case "avg":
                 $value = count($sensorValue) != 0 ? @array_sum($sensorValue) / count($sensorValue) : 0;
                 break;
             case "sum":
                 $value = @array_sum($sensorValue);
                 break;
         }
         $this->lastValue = round($value, 5);
         $this->save();
         $invert = $sensor->isInvert;
     } else {
         $invert = false;
     }
     return $algo->makeDecision($dbFarmRole, $this, $invert);
 }
Esempio n. 5
0
 /**
  * Release used elastic IPs if farm terminated
  *
  * @param FarmTerminatedEvent $event
  */
 public function OnFarmTerminated(\FarmTerminatedEvent $event)
 {
     $this->Logger->info(sprintf(_("Keep elastic IPs: %s"), $event->KeepElasticIPs));
     if ($event->KeepElasticIPs == 1) {
         return;
     }
     $DBFarm = \DBFarm::LoadByID($this->FarmID);
     $ips = $this->DB->GetAll("SELECT * FROM elastic_ips WHERE farmid=?", array($this->FarmID));
     if (count($ips) > 0) {
         foreach ($ips as $ip) {
             try {
                 $DBFarmRole = \DBFarmRole::LoadByID($ip['farm_roleid']);
                 if (in_array($DBFarmRole->Platform, array(\SERVER_PLATFORMS::CLOUDSTACK, \SERVER_PLATFORMS::IDCF))) {
                     $cs = $DBFarm->GetEnvironmentObject()->cloudstack($DBFarmRole->Platform);
                     $cs->disassociateIpAddress($ip['allocation_id']);
                     $this->DB->Execute("DELETE FROM elastic_ips WHERE ipaddress=?", array($ip['ipaddress']));
                 }
             } catch (\Exception $e) {
                 if (!stristr($e->getMessage(), "does not belong to you")) {
                     $this->Logger->error(sprintf(_("Cannot release elastic IP %s from farm %s: %s"), $ip['ipaddress'], $DBFarm->Name, $e->getMessage()));
                     continue;
                 }
             }
         }
     }
 }
Esempio n. 6
0
File: Gce.php Progetto: scalr/scalr
 public function xGetFarmRoleStaticIpsAction($region, $cloudLocation, $farmRoleId)
 {
     $p = PlatformFactory::NewPlatform(SERVER_PLATFORMS::GCE);
     $gceClient = $p->getClient($this->environment);
     $projectId = $this->environment->keychain(SERVER_PLATFORMS::GCE)->properties[Entity\CloudCredentialsProperty::GCE_PROJECT_ID];
     $map = [];
     if ($farmRoleId) {
         $dbFarmRole = DBFarmRole::LoadByID($farmRoleId);
         $this->user->getPermissions()->validate($dbFarmRole);
         $maxInstances = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_MAX_INSTANCES);
         for ($i = 1; $i <= $maxInstances; $i++) {
             $map[] = array('serverIndex' => $i);
         }
         $servers = $dbFarmRole->GetServersByFilter();
         for ($i = 0, $c = count($servers); $i < $c; $i++) {
             if ($servers[$i]->status != SERVER_STATUS::TERMINATED && $servers[$i]->index) {
                 $map[$servers[$i]->index - 1]['serverIndex'] = $servers[$i]->index;
                 $map[$servers[$i]->index - 1]['serverId'] = $servers[$i]->serverId;
                 $map[$servers[$i]->index - 1]['remoteIp'] = $servers[$i]->remoteIp;
                 $map[$servers[$i]->index - 1]['instanceId'] = $servers[$i]->GetProperty(GCE_SERVER_PROPERTIES::SERVER_NAME);
             }
         }
         $ips = $this->db->GetAll('SELECT ipaddress, instance_index FROM elastic_ips WHERE farm_roleid = ?', array($dbFarmRole->ID));
         for ($i = 0, $c = count($ips); $i < $c; $i++) {
             $map[$ips[$i]['instance_index'] - 1]['elasticIp'] = $ips[$i]['ipaddress'];
         }
     }
     $response = $gceClient->addresses->listAddresses($projectId, $region);
     $ips = [];
     /* @var $ip \Google_Service_Compute_Address */
     foreach ($response as $ip) {
         $itm = array('ipAddress' => $ip->getAddress(), 'description' => $ip->getDescription());
         if ($ip->status == 'IN_USE') {
             $itm['instanceId'] = substr(strrchr($ip->users[0], "/"), 1);
         }
         $info = $this->db->GetRow("SELECT * FROM elastic_ips WHERE ipaddress = ? LIMIT 1", [$itm['ipAddress']]);
         if ($info) {
             try {
                 if ($info['server_id'] == $itm['instanceId']) {
                     for ($i = 0, $c = count($map); $i < $c; $i++) {
                         if ($map[$i]['elasticIp'] == $itm['ipAddress']) {
                             $map[$i]['warningInstanceIdDoesntMatch'] = true;
                         }
                     }
                 }
                 $farmRole = DBFarmRole::LoadByID($info['farm_roleid']);
                 $this->user->getPermissions()->validate($farmRole);
                 $itm['roleName'] = $farmRole->Alias;
                 $itm['farmName'] = $farmRole->GetFarmObject()->Name;
                 $itm['serverIndex'] = $info['instance_index'];
             } catch (Exception $e) {
             }
         }
         //Invar: Mark Router EIP ad USED
         $ips[] = $itm;
     }
     $this->response->data(['data' => ['staticIps' => ['map' => $map, 'ips' => $ips]]]);
 }
Esempio n. 7
0
 private function getFarmRoleStaticIps($cloudLocation, $farmRoleId)
 {
     $gceClient = $this->getGceClient($this->environment);
     $projectId = $this->environment->getPlatformConfigValue(GoogleCEPlatformModule::PROJECT_ID);
     $map = array();
     if ($farmRoleId) {
         $dbFarmRole = DBFarmRole::LoadByID($farmRoleId);
         $this->user->getPermissions()->validate($dbFarmRole);
         $maxInstances = $dbFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MAX_INSTANCES);
         for ($i = 1; $i <= $maxInstances; $i++) {
             $map[] = array('serverIndex' => $i);
         }
         $servers = $dbFarmRole->GetServersByFilter();
         for ($i = 0; $i < count($servers); $i++) {
             if ($servers[$i]->status != SERVER_STATUS::TERMINATED && $servers[$i]->status != SERVER_STATUS::TROUBLESHOOTING && $servers[$i]->index) {
                 $map[$servers[$i]->index - 1]['serverIndex'] = $servers[$i]->index;
                 $map[$servers[$i]->index - 1]['serverId'] = $servers[$i]->serverId;
                 $map[$servers[$i]->index - 1]['remoteIp'] = $servers[$i]->remoteIp;
                 $map[$servers[$i]->index - 1]['instanceId'] = $servers[$i]->GetProperty(GCE_SERVER_PROPERTIES::SERVER_NAME);
             }
         }
         $ips = $this->db->GetAll('SELECT ipaddress, instance_index FROM elastic_ips WHERE farm_roleid = ?', array($dbFarmRole->ID));
         for ($i = 0; $i < count($ips); $i++) {
             $map[$ips[$i]['instance_index'] - 1]['elasticIp'] = $ips[$i]['ipaddress'];
         }
     }
     $response = $gceClient->addresses->listAddresses($projectId, $cloudLocation);
     $ips = array();
     /* @var $ip \Google_Service_Compute_Address */
     foreach ($response as $ip) {
         var_dump($ip);
         $itm = array('ipAddress' => $ip->address);
         $info = $this->db->GetRow("\n                SELECT * FROM elastic_ips WHERE ipaddress = ? LIMIT 1\n            ", array($itm['ipAddress']));
         if ($info) {
             try {
                 if ($info['server_id'] && $itm['instanceId']) {
                     $dbServer = DBServer::LoadByID($info['server_id']);
                     if ($dbServer->GetProperty(EC2_SERVER_PROPERTIES::INSTANCE_ID) != $itm['instanceId']) {
                         for ($i = 0; $i < count($map); $i++) {
                             if ($map[$i]['elasticIp'] == $itm['ipAddress']) {
                                 $map[$i]['warningInstanceIdDoesntMatch'] = true;
                             }
                         }
                     }
                 }
                 $farmRole = DBFarmRole::LoadByID($info['farm_roleid']);
                 $this->user->getPermissions()->validate($farmRole);
                 $itm['roleName'] = $farmRole->GetRoleObject()->name;
                 $itm['farmName'] = $farmRole->GetFarmObject()->Name;
                 $itm['serverIndex'] = $info['instance_index'];
             } catch (Exception $e) {
             }
         }
         //TODO: Mark Router EIP ad USED
         $ips[] = $itm;
     }
     return array('map' => $map, 'ips' => $ips);
 }
 public function ListFarmRoleParams()
 {
     $farmRoleId = $this->GetArg("farm-role-id");
     if (!$farmRoleId) {
         throw new Exception("'farm-role-id' required");
     }
     $dbFarmRole = DBFarmRole::LoadByID($farmRoleId);
     if ($dbFarmRole->FarmID != $this->DBServer->farmId) {
         throw new Exception("You can request this information ONLY for roles within server farm");
     }
     $ResponseDOMDocument = $this->CreateResponse();
     // Base configuration
     if ($this->DBServer->farmRoleId == $farmRoleId) {
         $data = Scalr_Role_Behavior::loadByName(ROLE_BEHAVIORS::BASE)->getBaseConfiguration($this->DBServer);
         foreach ((array) $data as $k => $v) {
             $bodyEl = $this->serialize($v, $k, $ResponseDOMDocument);
             $ResponseDOMDocument->documentElement->appendChild($bodyEl);
         }
     }
     $role = $dbFarmRole->GetRoleObject();
     $behaviors = $role->getBehaviors();
     foreach ($behaviors as $behavior) {
         $data = null;
         if ($behavior == ROLE_BEHAVIORS::MONGODB || $behavior == ROLE_BEHAVIORS::CHEF || $behavior == ROLE_BEHAVIORS::HAPROXY || $behavior == ROLE_BEHAVIORS::NGINX || $behavior == ROLE_BEHAVIORS::RABBITMQ || $behavior == ROLE_BEHAVIORS::APACHE || $behavior == ROLE_BEHAVIORS::VPC_ROUTER) {
             $data = Scalr_Role_Behavior::loadByName($behavior)->getConfiguration($this->DBServer);
         }
         if ($data === null) {
             if ($behavior == ROLE_BEHAVIORS::CF_CLOUD_CONTROLLER) {
                 $data = new stdClass();
                 $data->version = $dbFarmRole->GetSetting(Scalr_Role_Behavior_CfCloudController::ROLE_VERSION);
             } else {
                 if ($behavior == ROLE_BEHAVIORS::MYSQL) {
                     $data = new stdClass();
                     $data->logFile = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LOG_FILE);
                     $data->logPos = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LOG_POS);
                     $data->rootPassword = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_ROOT_PASSWORD);
                     $data->replPassword = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_REPL_PASSWORD);
                     $data->statPassword = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_STAT_PASSWORD);
                     $data->replicationMaster = (int) $this->DBServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER);
                     //TODO: Storage
                 } else {
                     try {
                         $dbMsrInfo = Scalr_Db_Msr_Info::init($dbFarmRole, $this->DBServer, $behavior);
                         $data = $dbMsrInfo->getMessageProperties();
                     } catch (Exception $e) {
                     }
                 }
             }
         }
         if ($data) {
             $bodyEl = $this->serialize($data, $behavior, $ResponseDOMDocument);
             $ResponseDOMDocument->documentElement->appendChild($bodyEl);
         }
     }
     return $ResponseDOMDocument;
 }
Esempio n. 9
0
 public function ApacheVhostCreate($DomainName, $FarmID, $FarmRoleID, $DocumentRootDir, $EnableSSL, $SSLPrivateKey = null, $SSLCertificate = null)
 {
     $this->restrictAccess(Acl::RESOURCE_SERVICES_APACHE);
     $validator = new Scalr_Validator();
     if ($validator->validateDomain($DomainName) !== true) {
         $err[] = _("Domain name is incorrect");
     }
     $DBFarm = DBFarm::LoadByID($FarmID);
     if ($DBFarm->EnvID != $this->Environment->id) {
         throw new Exception(sprintf("Farm #%s not found", $FarmID));
     }
     $this->user->getPermissions()->validate($DBFarm);
     $DBFarmRole = DBFarmRole::LoadByID($FarmRoleID);
     if ($DBFarm->ID != $DBFarmRole->FarmID) {
         throw new Exception(sprintf("FarmRole #%s not found on Farm #%s", $FarmRoleID, $FarmID));
     }
     if (!$DocumentRootDir) {
         throw new Exception(_("DocumentRootDir required"));
     }
     $options = serialize(array("document_root" => trim($DocumentRootDir), "logs_dir" => "/var/log", "server_admin" => $this->user->getEmail()));
     $httpConfigTemplateSSL = @file_get_contents(dirname(__FILE__) . "/../../templates/services/apache/ssl.vhost.tpl");
     $httpConfigTemplate = @file_get_contents(dirname(__FILE__) . "/../../templates/services/apache/nonssl.vhost.tpl");
     $vHost = Scalr_Service_Apache_Vhost::init();
     $vHost->envId = (int) $this->Environment->id;
     $vHost->clientId = $this->user->getAccountId();
     $vHost->domainName = $DomainName;
     $vHost->isSslEnabled = $EnableSSL ? true : false;
     $vHost->farmId = $FarmID;
     $vHost->farmRoleId = $FarmRoleID;
     $vHost->httpdConf = $httpConfigTemplate;
     $vHost->templateOptions = $options;
     //SSL stuff
     if ($vHost->isSslEnabled) {
         $cert = new Scalr_Service_Ssl_Certificate();
         $cert->envId = $DBFarm->EnvID;
         $cert->name = $DomainName;
         $cert->privateKey = base64_decode($SSLPrivateKey);
         $cert->certificate = base64_decode($SSLCertificate);
         $cert->save();
         $vHost->sslCertId = $cert->id;
         $vHost->httpdConfSsl = $httpConfigTemplateSSL;
     } else {
         $vHost->sslCertId = 0;
     }
     $vHost->save();
     $servers = $DBFarm->GetServersByFilter(array('status' => array(SERVER_STATUS::INIT, SERVER_STATUS::RUNNING)));
     foreach ($servers as $DBServer) {
         if ($DBServer->GetFarmRoleObject()->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::NGINX) || $DBServer->GetFarmRoleObject()->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::APACHE)) {
             $DBServer->SendMessage(new Scalr_Messaging_Msg_VhostReconfigure());
         }
     }
     $response = $this->CreateInitialResponse();
     $response->Result = 1;
     return $response;
 }
Esempio n. 10
0
 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);
     }
 }
Esempio n. 11
0
 public function Run()
 {
     $container = Scalr::getContainer();
     $db = $container->adodb;
     $services = $db->Execute("SELECT * FROM farm_role_cloud_services");
     while ($service = $services->FetchRow()) {
         $dbFarmRole = DBFarmRole::LoadByID($service['farm_role_id']);
         if (!$dbFarmRole->GetSetting(DBFarmRole::SETTING_AWS_ELB_ENABLED)) {
             $dbFarmRole->SetSetting(DBFarmRole::SETTING_AWS_ELB_ENABLED, 1);
             $dbFarmRole->SetSetting(DBFarmRole::SETTING_AWS_ELB_ID, $service['id']);
         }
     }
 }
Esempio n. 12
0
 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->info(sprintf(_("Raw sensor value (id: %s, metric_id: %s, metric name: %s): %s"), $this->id, $this->metricId, $this->getMetric()->name, serialize($sensorValue)));
         switch ($this->getMetric()->calcFunction) {
             default:
                 $value = $sensorValue[0];
                 break;
             case "avg":
                 $value = is_array($sensorValue) && count($sensorValue) != 0 ? @array_sum($sensorValue) / count($sensorValue) : 0;
                 break;
             case "sum":
                 $value = @array_sum($sensorValue);
                 break;
             case "max":
                 $value = @max($sensorValue);
                 break;
         }
         $this->lastValue = round($value, 5);
         $this->save();
         $invert = $sensor->isInvert;
     } else {
         $invert = false;
     }
     if ($this->getMetric()->name == 'DateAndTime') {
         $decision = $algo->makeDecision($dbFarmRole, $this, $invert);
         $this->instancesNumber = $algo->instancesNumber;
         $this->lastValue = $algo->lastValue;
         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);
     }
 }
Esempio n. 13
0
 /**
  * @param integer $envId
  * @param string $serviceId
  * @return \Scalr\Farm\Role\FarmRoleService|boolean
  */
 public static function findFarmRoleService($envId, $serviceId)
 {
     $db = \Scalr::getDb();
     $service = $db->GetRow("SELECT id, farm_role_id FROM farm_role_cloud_services WHERE id = ? AND env_id = ?", array($serviceId, $envId));
     if ($service) {
         try {
             $dbFarmRole = \DBFarmRole::LoadByID($service['farm_role_id']);
             return new self($dbFarmRole, $service['id']);
         } catch (\Exception $e) {
             return false;
         }
     }
     return false;
 }
 public function ListFarmRoleParamsJson()
 {
     $farmRoleId = $this->GetArg("farm-role-id");
     if (!$farmRoleId) {
         throw new Exception("'farm-role-id' required");
     }
     $dbFarmRole = DBFarmRole::LoadByID($farmRoleId);
     if ($dbFarmRole->FarmID != $this->DBServer->farmId) {
         throw new Exception("You can request this information ONLY for roles within server farm");
     }
     $result = new stdClass();
     // Base configuration
     if ($this->DBServer->farmRoleId == $farmRoleId) {
         $data = Scalr_Role_Behavior::loadByName(ROLE_BEHAVIORS::BASE)->getBaseConfiguration($this->DBServer);
         foreach ((array) $data as $k => $v) {
             $result->{$k} = $v;
         }
     }
     $role = $dbFarmRole->GetRoleObject();
     $behaviors = $role->getBehaviors();
     foreach ($behaviors as $behavior) {
         $data = null;
         if ($behavior == ROLE_BEHAVIORS::MONGODB || $behavior == ROLE_BEHAVIORS::CHEF || $behavior == ROLE_BEHAVIORS::HAPROXY || $behavior == ROLE_BEHAVIORS::NGINX || $behavior == ROLE_BEHAVIORS::RABBITMQ || $behavior == ROLE_BEHAVIORS::APACHE || $behavior == ROLE_BEHAVIORS::VPC_ROUTER) {
             $data = Scalr_Role_Behavior::loadByName($behavior)->getConfiguration($this->DBServer);
         }
         if ($data === null) {
             if ($behavior == ROLE_BEHAVIORS::MYSQL) {
                 $data = new stdClass();
                 $data->logFile = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LOG_FILE);
                 $data->logPos = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LOG_POS);
                 $data->rootPassword = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_ROOT_PASSWORD);
                 $data->replPassword = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_REPL_PASSWORD);
                 $data->statPassword = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_STAT_PASSWORD);
                 $data->replicationMaster = (int) $this->DBServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER);
             } else {
                 try {
                     $dbMsrInfo = Scalr_Db_Msr_Info::init($dbFarmRole, $this->DBServer, $behavior);
                     $data = $dbMsrInfo->getMessageProperties();
                 } catch (Exception $e) {
                 }
             }
         }
         if ($data) {
             $result->{$behavior} = $data;
         }
     }
     return $result;
 }
 public function FarmGetDetails($FarmID)
 {
     $response = parent::FarmGetDetails($FarmID);
     foreach ($response->FarmRoleSet->Item as &$item) {
         $dbFarmRole = DBFarmRole::LoadByID($item->ID);
         $item->{"CloudLocation"} = $dbFarmRole->CloudLocation;
         if ($dbFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MYSQL)) {
             $item->{"MySQLProperties"} = new stdClass();
             $item->{"MySQLProperties"}->{"LastBackupTime"} = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LAST_BCP_TS);
             $item->{"MySQLProperties"}->{"LastBundleTime"} = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LAST_BUNDLE_TS);
             $item->{"MySQLProperties"}->{"IsBackupRunning"} = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_IS_BCP_RUNNING);
             $item->{"MySQLProperties"}->{"IsBundleRunning"} = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_IS_BUNDLE_RUNNING);
         }
     }
     return $response;
 }
Esempio n. 16
0
 public function xListEipsAction()
 {
     $amazonEC2Client = Scalr_Service_Cloud_Aws::newEc2($this->getParam('cloudLocation'), $this->getEnvironment()->getPlatformConfigValue(Modules_Platforms_Ec2::PRIVATE_KEY), $this->getEnvironment()->getPlatformConfigValue(Modules_Platforms_Ec2::CERTIFICATE));
     // Rows
     $aws_response = $amazonEC2Client->DescribeAddresses();
     $rowz = $aws_response->addressesSet->item;
     if ($rowz instanceof stdClass) {
         $rowz = array($rowz);
     }
     foreach ($rowz as &$pv) {
         $item = array('ipaddress' => $pv->publicIp, 'instance_id' => $pv->instanceId);
         $info = $this->db->GetRow("SELECT * FROM elastic_ips WHERE ipaddress=?", array($pv->publicIp));
         if ($info) {
             $item['farm_id'] = $info['farmid'];
             $item['farm_roleid'] = $info['farm_roleid'];
             $item['server_id'] = $info['server_id'];
             $item['indb'] = true;
             $item['server_index'] = $info['instance_index'];
             //WORKAROUND: EIPS not imported correclty from 1.2 to 2.0
             if (!$item['server_id'] && $info['state'] == 1) {
                 try {
                     $DBServer = DBServer::LoadByPropertyValue(EC2_SERVER_PROPERTIES::INSTANCE_ID, $item['instance_id']);
                     $item['server_id'] = $DBServer->serverId;
                 } catch (Exception $e) {
                 }
             }
             if ($item['farm_roleid']) {
                 try {
                     $DBFarmRole = DBFarmRole::LoadByID($item['farm_roleid']);
                     $item['role_name'] = $DBFarmRole->GetRoleObject()->name;
                     $item['farm_name'] = $DBFarmRole->GetFarmObject()->Name;
                 } catch (Exception $e) {
                 }
             }
         } else {
             try {
                 $DBServer = DBServer::LoadByPropertyValue(EC2_SERVER_PROPERTIES::INSTANCE_ID, $pv->instanceId);
                 $item['server_id'] = $DBServer->serverId;
                 $item['farm_id'] = $DBServer->farmId;
             } catch (Exception $e) {
             }
         }
         $pv = $item;
     }
     $response = $this->buildResponseFromData($rowz);
     $this->response->data($response);
 }
Esempio n. 17
0
 public function xListAction($serverId = null, $farmId = null, $farmRoleId = null, $status = null)
 {
     $sql = "SELECT sa.* FROM server_alerts sa LEFT JOIN farms f ON f.id = sa.farm_id WHERE sa.env_id = ?";
     $args = [$this->getEnvironmentId()];
     if ($serverId) {
         $sql .= ' AND sa.server_id = ?';
         $args[] = $serverId;
     }
     if ($farmId) {
         $sql .= ' AND sa.farm_id = ?';
         $args[] = $farmId;
         if ($farmRoleId) {
             $sql .= ' AND sa.farm_roleid = ?';
             $args[] = $farmRoleId;
         }
     }
     if ($status) {
         $sql .= ' AND sa.status = ?';
         $args[] = $status;
     }
     list($sql, $args) = $this->request->prepareFarmSqlQuery($sql, $args, 'f');
     $response = $this->buildResponseFromSql2($sql, ['metric', 'status', 'dtoccured', 'dtlastcheck', 'dtsolved', 'details'], ['server_id', 'details'], $args);
     foreach ($response['data'] as $i => $row) {
         $row['dtoccured'] = Scalr_Util_DateTime::convertTz($row['dtoccured']);
         if ($row['dtlastcheck']) {
             $row['dtlastcheck'] = Scalr_Util_DateTime::convertTz($row['dtlastcheck']);
         } else {
             $row['dtlastcheck'] = false;
         }
         if ($row['status'] == Alerts::STATUS_RESOLVED) {
             $row['dtsolved'] = Scalr_Util_DateTime::convertTz($row['dtsolved']);
         } else {
             $row['dtsolved'] = false;
         }
         $row['metric'] = Alerts::getMetricName($row['metric']);
         $row['farm_name'] = DBFarm::LoadByID($row['farm_id'])->Name;
         try {
             $row['role_name'] = DBFarmRole::LoadByID($row['farm_roleid'])->GetRoleObject()->name;
             $dbServer = DBServer::LoadByID($row['server_id']);
             $row['server_exists'] = $dbServer->status == SERVER_STATUS::RUNNING ? true : false;
         } catch (Exception $e) {
         }
         $response['data'][$i] = $row;
     }
     $this->response->data($response);
 }
Esempio n. 18
0
 public function xListShortcutsAction()
 {
     $this->request->defineParams(array('sort' => array('type' => 'string', 'default' => 'id'), 'dir' => array('type' => 'string', 'default' => 'DESC')));
     $sql = "SELECT farm_role_scripts.*, scripts.name as scriptname from farm_role_scripts\r\n\t\tINNER JOIN scripts ON scripts.id = farm_role_scripts.scriptid\r\n\t\tWHERE ismenuitem='1' AND farmid IN (SELECT id FROM farms WHERE env_id='" . $this->getEnvironmentId() . "')";
     $response = $this->buildResponseFromSql($sql);
     foreach ($response['data'] as &$row) {
         $row['farmname'] = $this->db->GetOne("SELECT name FROM farms WHERE id=?", array($row['farmid']));
         if ($row['farm_roleid']) {
             try {
                 $DBFarmRole = DBFarmRole::LoadByID($row['farm_roleid']);
                 $row['rolename'] = $DBFarmRole->GetRoleObject()->name;
             } catch (Exception $e) {
             }
         }
     }
     $this->response->data($response);
 }
Esempio n. 19
0
 public function Run()
 {
     $container = Scalr::getContainer();
     $db = $container->adodb;
     $time = microtime(true);
     //Get all farm_roles with defined Security groups
     $settings = $db->Execute("SELECT * FROM farm_role_settings WHERE `name`='dns.exclude_role'");
     while ($setting = $settings->FetchRow()) {
         try {
             $dbFarmRole = DBFarmRole::LoadByID($setting['farm_roleid']);
             if ($setting['value'] == 1) {
                 $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_CREATE_RECORDS, 0);
                 $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_EXT_RECORD_ALIAS, null);
                 $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_EXT_RECORD_ALIAS, null);
             } else {
                 $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_CREATE_RECORDS, 1);
                 if (!$dbFarmRole->GetSetting(DBFarmRole::SETTING_DNS_EXT_RECORD_ALIAS)) {
                     $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_EXT_RECORD_ALIAS, "ext-" . $dbFarmRole->GetRoleObject()->name);
                 }
                 if (!$dbFarmRole->GetSetting(DBFarmRole::SETTING_DNS_INT_RECORD_ALIAS)) {
                     $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_INT_RECORD_ALIAS, "int-" . $dbFarmRole->GetRoleObject()->name);
                 }
             }
             $dbFarmRole->SetSetting(DBFarmRole::SETTING_EXCLUDE_FROM_DNS, null);
         } catch (Exception $e) {
         }
     }
     $settings = $db->Execute("SELECT * FROM farm_role_settings WHERE `name`='dns.create_records' AND value='1'");
     while ($setting = $settings->FetchRow()) {
         try {
             $dbFarmRole = DBFarmRole::LoadByID($setting['farm_roleid']);
             if (!$dbFarmRole->GetSetting(DBFarmRole::SETTING_DNS_EXT_RECORD_ALIAS)) {
                 $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_EXT_RECORD_ALIAS, "ext-" . $dbFarmRole->GetRoleObject()->name);
             }
             if (!$dbFarmRole->GetSetting(DBFarmRole::SETTING_DNS_INT_RECORD_ALIAS)) {
                 $dbFarmRole->SetSetting(DBFarmRole::SETTING_DNS_INT_RECORD_ALIAS, "int-" . $dbFarmRole->GetRoleObject()->name);
             }
         } catch (Exception $e) {
         }
     }
     $db->Execute("ALTER TABLE `farm_roles` ADD `alias` VARCHAR(50) NULL AFTER `farmid`");
     print "Done.\n";
     $t = round(microtime(true) - $time, 2);
     printf("Upgrade process took %0.2f seconds\n\n", $t);
 }
Esempio n. 20
0
 public function xListShortcutsAction()
 {
     $this->request->defineParams(array('sort' => array('type' => 'string', 'default' => 'id'), 'dir' => array('type' => 'string', 'default' => 'DESC')));
     $allFarms = $this->request->isAllowed(Acl::RESOURCE_FARMS, Acl::PERM_FARMS_NOT_OWNED_FARMS);
     $sql = "\n            SELECT farm_role_scripts.*, scripts.name as scriptname\n            FROM farm_role_scripts\n            JOIN scripts ON scripts.id = farm_role_scripts.scriptid\n            WHERE ismenuitem='1'\n            AND farmid IN (SELECT id FROM farms WHERE env_id='" . intval($this->getEnvironmentId()) . "'\n            " . (!$allFarms ? " AND created_by_id = " . $this->db->qstr($this->user->getId()) : "") . ")\n        ";
     $response = $this->buildResponseFromSql($sql);
     foreach ($response['data'] as &$row) {
         $row['farmname'] = $this->db->GetOne("\n                SELECT name FROM farms\n                WHERE id=?" . (!$allFarms ? " AND created_by_id = " . $this->db->qstr($this->user->getId()) : "") . "\n                LIMIT 1\n            ", array($row['farmid']));
         if ($row['farm_roleid']) {
             try {
                 $DBFarmRole = DBFarmRole::LoadByID($row['farm_roleid']);
                 $row['rolename'] = $DBFarmRole->GetRoleObject()->name;
             } catch (Exception $e) {
             }
         }
     }
     $this->response->data($response);
 }
Esempio n. 21
0
 /**
  * @param JsonData $sort
  * @param int $start
  * @param int $limit
  */
 public function xListAction(JsonData $sort, $start = 0, $limit = 20)
 {
     $result = ScriptShortcut::find(['farmId' => ['$in' => $this->getAllowedFarmId()]], null, Scalr\UI\Utils::convertOrder($sort, ['scriptId' => true], ['scriptId', 'farmId', 'farmRoleId']), $limit, $start, true);
     $data = [];
     foreach ($result as $shortcut) {
         /* @var $shortcut ScriptShortcut */
         $s = get_object_vars($shortcut);
         $s['farmName'] = DBFarm::LoadByIDOnlyName($shortcut->farmId);
         $s['scriptName'] = $shortcut->getScriptName();
         try {
             $farmRole = DBFarmRole::LoadByID($shortcut->farmRoleId);
             $s['farmRoleName'] = $farmRole->Alias ? $farmRole->Alias : $farmRole->GetRoleObject()->name;
         } catch (Exception $e) {
         }
         $data[] = $s;
     }
     $this->response->data(['total' => $result->totalNumber, 'data' => $data]);
 }
 public function OnServiceConfigurationPresetChanged(ServiceConfigurationPresetChangedEvent $event)
 {
     $farmRolesPresetInfo = $this->DB->GetAll("SELECT * FROM farm_role_service_config_presets WHERE\n            preset_id = ? AND behavior = ?\n        ", array($event->ServiceConfiguration->id, $event->ServiceConfiguration->roleBehavior));
     if (count($farmRolesPresetInfo) > 0) {
         $msg = new Scalr_Messaging_Msg_UpdateServiceConfiguration($event->ServiceConfiguration->roleBehavior, $event->ResetToDefaults, 1);
         foreach ($farmRolesPresetInfo as $farmRole) {
             try {
                 $dbFarmRole = DBFarmRole::LoadByID($farmRole['farm_roleid']);
                 foreach ($dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)) as $dbServer) {
                     if ($dbServer->IsSupported("0.6")) {
                         $dbServer->SendMessage($msg, false, true);
                     }
                 }
             } catch (Exception $e) {
             }
         }
     }
 }
Esempio n. 23
0
 public function xListEipsAction()
 {
     $aws = $this->environment->aws($this->getParam('cloudLocation'));
     $addressList = $aws->ec2->address->describe();
     $rowz = array();
     /* @var $address Ec2DataType\AddressData */
     foreach ($addressList as $address) {
         $item = array('ipaddress' => $address->publicIp, 'allocation_id' => $address->allocationId, 'domain' => $address->domain, 'instance_id' => $address->instanceId === null ? '' : $address->instanceId);
         $info = $this->db->GetRow("SELECT * FROM elastic_ips WHERE ipaddress=? LIMIT 1", array($address->publicIp));
         if ($info) {
             $item['farm_id'] = $info['farmid'];
             $item['farm_roleid'] = $info['farm_roleid'];
             $item['server_id'] = $info['server_id'];
             $item['indb'] = true;
             $item['server_index'] = $info['instance_index'];
             //WORKAROUND: EIPS not imported correclty from 1.2 to 2.0
             if (!$item['server_id'] && $info['state'] == 1) {
                 try {
                     $DBServer = DBServer::LoadByPropertyValue(EC2_SERVER_PROPERTIES::INSTANCE_ID, $item['instance_id']);
                     $item['server_id'] = $DBServer->serverId;
                 } catch (Exception $e) {
                 }
             }
             if ($item['farm_roleid']) {
                 try {
                     $DBFarmRole = DBFarmRole::LoadByID($item['farm_roleid']);
                     $item['role_name'] = $DBFarmRole->GetRoleObject()->name;
                     $item['farm_name'] = $DBFarmRole->GetFarmObject()->Name;
                 } catch (Exception $e) {
                 }
             }
         } else {
             try {
                 $DBServer = DBServer::LoadByPropertyValue(EC2_SERVER_PROPERTIES::INSTANCE_ID, $address->instanceId);
                 $item['server_id'] = $DBServer->serverId;
                 $item['farm_id'] = $DBServer->farmId;
             } catch (Exception $e) {
             }
         }
         $rowz[] = $item;
     }
     $response = $this->buildResponseFromData($rowz);
     $this->response->data($response);
 }
Esempio n. 24
0
 public function Run()
 {
     $container = Scalr::getContainer();
     $db = $container->adodb;
     $time = microtime(true);
     //Get all farm_roles with defined Security groups
     $settings = $db->Execute("SELECT * FROM farm_role_settings WHERE `name`='aws.additional_security_groups'");
     while ($setting = $settings->FetchRow()) {
         try {
             $dbFarmRole = DBFarmRole::LoadByID($setting['farm_roleid']);
             $dbFarmRole->SetSetting(DBFarmRole::SETTING_AWS_SG_LIST_APPEND, 1);
             $list = trim(trim(str_replace("scalr.ip-pool", "", $setting['value']), ","));
             $dbFarmRole->SetSetting(DBFarmRole::SETTING_AWS_SG_LIST, $list);
         } catch (Exception $e) {
         }
     }
     print "Done.\n";
     $t = round(microtime(true) - $time, 2);
     printf("Upgrade process took %0.2f seconds\n\n", $t);
 }
Esempio n. 25
0
 public function xDeployAction()
 {
     $this->request->defineParams(array('applicationId' => array('type' => 'int'), 'farmId' => array('type' => 'int'), 'farmRoleId' => array('type' => 'int'), 'remotePath'));
     $application = Scalr_Dm_Application::init()->loadById($this->getParam('applicationId'));
     $this->user->getPermissions()->validate($application);
     $dbFarmRole = DBFarmRole::LoadByID($this->getParam('farmRoleId'));
     $this->user->getPermissions()->validate($dbFarmRole);
     $servers = $dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING));
     if (!$this->getParam('remotePath')) {
         throw new Exception("Remote path reuired for deployment");
     }
     if (count($servers) == 0) {
         throw new Exception("There is no running servers on selected farm/role");
     }
     foreach ($servers as $dbServer) {
         $deploymentTask = Scalr_Dm_DeploymentTask::init();
         $deploymentTask->create($this->getParam('farmRoleId'), $this->getParam('applicationId'), $dbServer->serverId, Scalr_Dm_DeploymentTask::TYPE_MANUAL, $this->getParam('remotePath'));
     }
     $this->response->success('Deployment task created');
 }
Esempio n. 26
0
 public function xListAlertsAction()
 {
     $this->request->defineParams(array('sort' => array('type' => 'string', 'default' => 'id'), 'dir' => array('type' => 'string', 'default' => 'DESC')));
     $sql = "SELECT * FROM server_alerts WHERE env_id='" . $this->getEnvironmentId() . "'";
     if ($this->getParam('serverId')) {
         $sql .= ' AND server_id = ' . $this->db->qstr($this->getParam('serverId'));
     }
     if ($this->getParam('farmId')) {
         $sql .= ' AND farm_id = ' . $this->db->qstr($this->getParam('farmId'));
         if ($this->getParam('farmRoleId')) {
             $sql .= ' AND farm_roleid = ' . $this->db->qstr($this->getParam('farmRoleId'));
         }
     }
     if ($this->getParam('status')) {
         $sql .= ' AND status = ' . $this->db->qstr($this->getParam('status'));
     }
     $response = $this->buildResponseFromSql($sql, array('server_id', 'details'));
     foreach ($response['data'] as $i => $row) {
         $row['dtoccured'] = Scalr_Util_DateTime::convertTz($row['dtoccured']);
         if ($row['dtlastcheck']) {
             $row['dtlastcheck'] = Scalr_Util_DateTime::convertTz($row['dtlastcheck']);
         } else {
             $row['dtlastcheck'] = false;
         }
         if ($row['status'] == Alerts::STATUS_RESOLVED) {
             $row['dtsolved'] = Scalr_Util_DateTime::convertTz($row['dtsolved']);
         } else {
             $row['dtsolved'] = false;
         }
         $row['metric'] = Alerts::getMetricName($row['metric']);
         $row['farm_name'] = DBFarm::LoadByID($row['farm_id'])->Name;
         try {
             $row['role_name'] = DBFarmRole::LoadByID($row['farm_roleid'])->GetRoleObject()->name;
             $dbServer = DBServer::LoadByID($row['server_id']);
             $row['server_exists'] = $dbServer->status == SERVER_STATUS::RUNNING ? true : false;
         } catch (Exception $e) {
         }
         $response['data'][$i] = $row;
     }
     $this->response->data($response);
 }
Esempio n. 27
0
 public function FarmGetDetails($FarmID)
 {
     $response = parent::FarmGetDetails($FarmID);
     foreach ($response->FarmRoleSet->Item as &$item) {
         $dbFarmRole = DBFarmRole::LoadByID($item->ID);
         $item->CloudLocation = $dbFarmRole->CloudLocation;
         if ($dbFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MYSQL)) {
             $item->MySQLProperties = new stdClass();
             $item->MySQLProperties->LastBackupTime = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_LAST_BCP_TS);
             $item->MySQLProperties->LastBundleTime = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_LAST_BUNDLE_TS);
             $item->MySQLProperties->IsBackupRunning = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_IS_BCP_RUNNING);
             $item->MySQLProperties->IsBundleRunning = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_IS_BUNDLE_RUNNING);
         }
         $dbMsr = $dbFarmRole->GetRoleObject()->getDbMsrBehavior();
         if ($dbMsr) {
             $item->DbMsrProperties = new stdClass();
             $item->DbMsrProperties->LastBackupTime = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_LAST_TS);
             $item->DbMsrProperties->LastBundleTime = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_IS_RUNNING);
             $item->DbMsrProperties->IsBackupRunning = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_LAST_TS);
             $item->DbMsrProperties->IsBundleRunning = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_IS_RUNNING);
         }
     }
     return $response;
 }
Esempio n. 28
0
 /**
  * Release used elastic IPs if farm terminated
  *
  * @param FarmTerminatedEvent $event
  */
 public function OnFarmTerminated(\FarmTerminatedEvent $event)
 {
     $this->Logger->info(sprintf(_("Keep elastic IPs: %s"), $event->KeepElasticIPs));
     if ($event->KeepElasticIPs == 1) {
         return;
     }
     $DBFarm = \DBFarm::LoadByID($this->FarmID);
     $ips = $this->DB->GetAll("SELECT * FROM elastic_ips WHERE farmid=?", array($this->FarmID));
     if (count($ips) > 0) {
         foreach ($ips as $ip) {
             try {
                 $DBFarmRole = \DBFarmRole::LoadByID($ip['farm_roleid']);
                 $aws = $DBFarm->GetEnvironmentObject()->aws($DBFarmRole->CloudLocation);
                 $aws->ec2->address->release($ip["ipaddress"]);
             } catch (\Exception $e) {
                 if (!stristr($e->getMessage(), "does not belong to you")) {
                     $this->Logger->error(sprintf(_("Cannot release elastic IP %s from farm %s: %s"), $ip['ipaddress'], $DBFarm->Name, $e->getMessage()));
                     continue;
                 }
             }
             $this->DB->Execute("DELETE FROM elastic_ips WHERE ipaddress=?", array($ip['ipaddress']));
         }
     }
 }
Esempio n. 29
0
 public function statusAction()
 {
     $this->request->defineParams(array('farmId' => array('type' => 'int'), 'farmRoleId' => array('type' => 'int'), 'type'));
     $dbFarm = DBFarm::LoadByID($this->getParam('farmId'));
     $this->user->getPermissions()->validate($dbFarm);
     if ($this->getParam('farmRoleId')) {
         $dbFarmRole = DBFarmRole::LoadByID($this->getParam('farmRoleId'));
         if ($dbFarmRole->FarmID != $dbFarm->ID) {
             throw new Exception("Role not found");
         }
     } elseif ($this->getParam('type')) {
         foreach ($dbFarm->GetFarmRoles() as $sDbFarmRole) {
             if ($sDbFarmRole->GetRoleObject()->hasBehavior($this->getParam('type'))) {
                 $dbFarmRole = $sDbFarmRole;
                 break;
             }
         }
         if (!$dbFarmRole) {
             throw new Exception("Role not found");
         }
     } else {
         throw new Scalr_UI_Exception_NotFound();
     }
     $data = array('farmRoleId' => $dbFarmRole->ID, 'farmHash' => $dbFarm->Hash, 'pmaAccessConfigured' => false);
     if ($dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_PMA_USER)) {
         $data['pmaAccessConfigured'] = true;
     } else {
         $errmsg = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_PMA_REQUEST_ERROR);
         if (!$errmsg) {
             $time = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_PMA_REQUEST_TIME);
             if ($time) {
                 if ($time + 3600 < time()) {
                     $data['pmaAccessError'] = _("Scalr didn't receive auth info from MySQL instance. Please check that MySQL running and Scalr has access to it.");
                 } else {
                     $data['pmaAccessSetupInProgress'] = true;
                 }
             }
         } else {
             $data['pmaAccessError'] = $errmsg;
         }
     }
     //TODO: Legacy code. Move to DB_MSR
     if ($dbFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MYSQL)) {
         $data['dbType'] = Scalr_Db_Msr::DB_TYPE_MYSQL;
         $data['dtLastBundle'] = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LAST_BUNDLE_TS) ? Scalr_Util_DateTime::convertTz((int) $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LAST_BUNDLE_TS), 'd M Y \\a\\t H:i:s') : 'Never';
         $data['dtLastBackup'] = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LAST_BCP_TS) ? Scalr_Util_DateTime::convertTz((int) $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_LAST_BCP_TS), 'd M Y \\a\\t H:i:s') : 'Never';
         $data['additionalInfo']['MasterUsername'] = '******';
         $data['additionalInfo']['MasterPassword'] = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_ROOT_PASSWORD);
         $slaveNumber = 0;
         foreach ($dbFarmRole->GetServersByFilter() as $dbServer) {
             if ($dbServer->status != SERVER_STATUS::RUNNING) {
                 //TODO:
                 continue;
             }
             if ($dbServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) == 1) {
                 $data['isBundleRunning'] = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_IS_BUNDLE_RUNNING);
                 $data['bundleServerId'] = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_BUNDLE_SERVER_ID);
                 if ($data['isBundleRunning']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? AND status = ? ORDER BY timestamp DESC", array($data['bundleServerId'], 'MySQL data bundle', 'running'));
                 } elseif ($data['bundleServerId']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? ORDER BY timestamp DESC", array($data['bundleServerId'], 'MySQL data bundle'));
                 }
                 if ($opId) {
                     $data['bundleOperationId'] = $opId;
                 }
             }
             $data['isBackupRunning'] = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_IS_BCP_RUNNING);
             $data['backupServerId'] = $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_BCP_SERVER_ID);
             if (!$data['backupOperationId']) {
                 if ($data['isBackupRunning']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? AND status = ? ORDER BY timestamp DESC", array($data['backupServerId'], 'MySQL backup', 'running'));
                 } elseif ($data['backupServerId']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? ORDER BY timestamp DESC", array($data['backupServerId'], 'MySQL backup'));
                 }
                 if ($opId) {
                     $data['backupOperationId'] = $opId;
                 }
             }
             try {
                 $conn =& NewADOConnection("mysqli");
                 $conn->Connect($dbServer->remoteIp, 'scalr_stat', $dbFarmRole->GetSetting(DBFarmRole::SETTING_MYSQL_STAT_PASSWORD), null);
                 $conn->SetFetchMode(ADODB_FETCH_ASSOC);
                 if ($dbServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) == 1) {
                     $r = $conn->GetRow("SHOW MASTER STATUS");
                     $MasterPosition = $r['Position'];
                     $master_ip = $dbServer->remoteIp;
                     $master_iid = $dbServer->serverId;
                 } else {
                     $r = $conn->GetRow("SHOW SLAVE STATUS");
                     $num = ++$slaveNumber;
                     $SlavePosition = $r['Exec_Master_Log_Pos'];
                 }
                 $data["replicationStatus"][] = array("serverId" => $dbServer->serverId, "localIp" => $dbServer->localIp, "remoteIp" => $dbServer->remoteIp, "data" => $r, "masterPosition" => $MasterPosition, "slavePosition" => $SlavePosition, "replicationRole" => $dbServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) ? 'Master' : "Slave #{$num}");
             } catch (Exception $e) {
                 $data["replicationStatus"][] = array("serverId" => $dbServer->serverId, "localIp" => $dbServer->localIp, "remoteIp" => $dbServer->remoteIp, "error" => $e->msg ? $e->msg : $e->getMessage(), "replicationRole" => $dbServer->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER) ? 'Master' : 'Slave');
             }
         }
     } else {
         $data['dbType'] = $dbFarmRole->GetRoleObject()->getDbMsrBehavior();
         if (!$data['dbType']) {
             $this->response->failure("Unknown db type");
         }
         $data['additionalInfo']['MasterUsername'] = '******';
         if ($dbFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::POSTGRESQL)) {
             $data['additionalInfo']['MasterPassword'] = $dbFarmRole->GetSetting(Scalr_Db_Msr_Postgresql::ROOT_PASSWORD);
             $name = 'PostgreSQL';
         } elseif ($dbFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::REDIS)) {
             $data['additionalInfo']['MasterPassword'] = $dbFarmRole->GetSetting(Scalr_Db_Msr_Redis::MASTER_PASSWORD);
             $name = 'Redis';
         } elseif ($dbFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MYSQL2)) {
             $data['additionalInfo']['MasterPassword'] = $dbFarmRole->GetSetting(Scalr_Db_Msr_Mysql2::ROOT_PASSWORD);
             $name = 'MySQL';
         }
         $data['dtLastBackup'] = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_LAST_TS) ? Scalr_Util_DateTime::convertTz((int) $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_LAST_TS), 'd M Y \\a\\t H:i:s') : 'Never';
         $data['dtLastBundle'] = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_LAST_TS) ? Scalr_Util_DateTime::convertTz((int) $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_LAST_TS), 'd M Y \\a\\t H:i:s') : 'Never';
         $slaveNumber = 0;
         foreach ($dbFarmRole->GetServersByFilter() as $dbServer) {
             if ($dbServer->status != SERVER_STATUS::RUNNING) {
                 //TODO:
                 continue;
             }
             if ($dbServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1) {
                 $data['isBundleRunning'] = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_IS_RUNNING);
                 $data['bundleServerId'] = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_SERVER_ID);
                 if ($data['isBundleRunning']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? AND status = ? ORDER BY timestamp DESC", array($data['bundleServerId'], "{$name} data bundle", 'running'));
                 } elseif ($data['bundleServerId']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? ORDER BY timestamp DESC", array($data['bundleServerId'], "{$name} data bundle"));
                 }
                 if ($opId) {
                     $data['bundleOperationId'] = $opId;
                 }
             }
             $data['isBackupRunning'] = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_IS_RUNNING);
             $data['backupServerId'] = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_SERVER_ID);
             if (!$data['backupOperationId']) {
                 if ($data['isBackupRunning']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? AND status = ? ORDER BY timestamp DESC", array($data['backupServerId'], "{$name} backup", 'running'));
                 } elseif ($data['backupServerId']) {
                     $opId = $this->db->GetOne("SELECT id FROM server_operations WHERE server_id = ? AND name = ? ORDER BY timestamp DESC", array($data['backupServerId'], "{$name} backup"));
                 }
                 if ($opId) {
                     $data['backupOperationId'] = $opId;
                 }
             }
             try {
                 if ($dbServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1) {
                     //TODO:
                 } else {
                     $num = ++$slaveNumber;
                 }
                 $data["replicationStatus"][] = array("serverId" => $dbServer->serverId, "localIp" => $dbServer->localIp, "remoteIp" => $dbServer->remoteIp, "data" => array(), "replicationRole" => $dbServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) ? 'Master' : "Slave #{$num}");
             } catch (Exception $e) {
                 $data["replicationStatus"][] = array("serverId" => $dbServer->serverId, "error" => $e->msg ? $e->msg : $e->getMessage(), "replicationRole" => $dbServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) ? 'Master' : 'Slave');
             }
         }
     }
     $this->response->page('ui/dbmsr/status.js', $data);
 }
Esempio n. 30
0
 public function getFarmRoleElasticIps($platform, $cloudLocation, $farmRoleId)
 {
     $cs = $this->getEnvironment()->cloudstack($platform);
     $map = array();
     if ($farmRoleId) {
         $dbFarmRole = DBFarmRole::LoadByID($farmRoleId);
         $this->user->getPermissions()->validate($dbFarmRole);
         $maxInstances = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_MAX_INSTANCES);
         for ($i = 1; $i <= $maxInstances; $i++) {
             $map[] = array('serverIndex' => $i);
         }
         $servers = $dbFarmRole->GetServersByFilter();
         for ($i = 0, $c = count($servers); $i < $c; $i++) {
             if ($servers[$i]->status != SERVER_STATUS::TERMINATED && $servers[$i]->index) {
                 $map[$servers[$i]->index - 1]['serverIndex'] = $servers[$i]->index;
                 $map[$servers[$i]->index - 1]['serverId'] = $servers[$i]->serverId;
                 $map[$servers[$i]->index - 1]['remoteIp'] = $servers[$i]->remoteIp;
                 $map[$servers[$i]->index - 1]['instanceId'] = $servers[$i]->GetProperty(CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID);
             }
         }
         $ips = $this->db->GetAll('SELECT ipaddress, instance_index FROM elastic_ips WHERE farm_roleid = ?', array($dbFarmRole->ID));
         for ($i = 0, $c = count($ips); $i < $c; $i++) {
             $map[$ips[$i]['instance_index'] - 1]['elasticIp'] = $ips[$i]['ipaddress'];
         }
     }
     $ccProps = $this->environment->keychain($platform)->properties;
     $accountName = $ccProps[Entity\CloudCredentialsProperty::CLOUDSTACK_ACCOUNT_NAME];
     $domainId = $ccProps[Entity\CloudCredentialsProperty::CLOUDSTACK_DOMAIN_ID];
     $requestObject = new ListIpAddressesData();
     $requestObject->account = $accountName;
     $requestObject->domainid = $domainId;
     $requestObject->zoneid = $cloudLocation;
     $ipAddresses = $cs->listPublicIpAddresses($requestObject);
     $ips = array();
     if (count($ipAddresses) > 0) {
         /* @var $ip \Scalr\Service\Aws\Ec2\DataType\AddressData */
         foreach ($ipAddresses as $address) {
             if ($address->purpose != '' && !$address->isstaticnat) {
                 continue;
             }
             if ($address->issystem) {
                 continue;
             }
             $itm = array('ipAddress' => $address->ipaddress, 'ipAddressId' => (string) $address->id, 'instanceId' => $address->virtualmachineid);
             $info = $this->db->GetRow("\n                    SELECT * FROM elastic_ips WHERE ipaddress = ? LIMIT 1\n                ", array($itm['ipAddress']));
             if ($info) {
                 try {
                     if ($info['server_id'] && $itm['instanceId']) {
                         $dbServer = DBServer::LoadByID($info['server_id']);
                         if ($dbServer->GetProperty(CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID) != $itm['instanceId']) {
                             for ($i = 0, $c = count($map); $i < $c; $i++) {
                                 if ($map[$i]['elasticIp'] == $itm['ipAddress']) {
                                     $map[$i]['warningInstanceIdDoesntMatch'] = true;
                                 }
                             }
                         }
                     }
                     $farmRole = DBFarmRole::LoadByID($info['farm_roleid']);
                     $this->user->getPermissions()->validate($farmRole);
                     $itm['roleName'] = $farmRole->GetRoleObject()->name;
                     $itm['farmName'] = $farmRole->GetFarmObject()->Name;
                     $itm['serverIndex'] = $info['instance_index'];
                 } catch (Exception $e) {
                 }
             }
             //TODO: Mark System EIP ad USED
             $ips[] = $itm;
         }
     }
     return array('map' => $map, 'ips' => $ips);
 }