/** * * @param ServerCreateInfo $serverCreateInfo * @param bool $isImport * @return DBServer */ public static function Create(ServerCreateInfo $creInfo, $isImport = false, $setPendingStatus = false) { $db = \Scalr::getDb(); $startWithLetter = in_array($creInfo->platform, array(SERVER_PLATFORMS::CLOUDSTACK, SERVER_PLATFORMS::IDCF, SERVER_PLATFORMS::GCE)); if ($isImport) { $startWithLetter = true; } $server_id = Scalr::GenerateUID(false, $startWithLetter); $status = !$isImport ? SERVER_STATUS::PENDING_LAUNCH : SERVER_STATUS::IMPORTING; if ($setPendingStatus) { $status = SERVER_STATUS::PENDING; } // IF no index defined if (!$creInfo->index && !$isImport) { $indexes = $db->GetAll("\n SELECT `index` FROM servers\n WHERE farm_roleid=?\n AND status NOT IN (?,?,?)\n ", array($creInfo->dbFarmRole->ID, SERVER_STATUS::TERMINATED, SERVER_STATUS::PENDING_TERMINATE, SERVER_STATUS::TROUBLESHOOTING)); $used_indexes = array(); if (count($indexes) > 0) { foreach ($indexes as $index) { $used_indexes[$index['index']] = true; } } for ($i = 1;; $i++) { if (!$used_indexes[$i]) { $creInfo->index = $i; break; } } } elseif ($isImport) { $creInfo->index = 0; } $client_id = $creInfo->clientId ? $creInfo->clientId : $creInfo->dbFarmRole->GetFarmObject()->ClientID; $db->Execute("\n INSERT INTO servers SET\n `server_id` = ?,\n `farm_id` = ?,\n `env_id` = ?,\n `farm_roleid` = ?,\n `client_id` = ?,\n `platform` = ?,\n `status` = ?,\n `remote_ip` = ?,\n `local_ip` = ?,\n `dtadded` = NOW(),\n `index` = ?\n ", array($server_id, $creInfo->farmId ? $creInfo->farmId : $creInfo->dbFarmRole->FarmID, $creInfo->envId, $creInfo->dbFarmRole ? $creInfo->dbFarmRole->ID : 0, $client_id, $creInfo->platform, $status, $creInfo->remoteIp, $creInfo->localIp, $creInfo->index)); $DBServer = DBServer::LoadByID($server_id); $DBServer->SetProperties($creInfo->GetProperties()); $DBServer->setOsType($DBServer->osType); try { if ($DBServer->farmRoleId) { $db->Execute("INSERT INTO servers_launch_timelog SET\n `server_id` = ?,\n `os_family` = ?,\n `os_version` = ?,\n `cloud` = ?,\n `cloud_location` = ?,\n `server_type` = ?,\n `behaviors` = ?,\n `ts_created` = ?\n ", array($server_id, $DBServer->GetFarmRoleObject()->GetRoleObject()->getOs()->family, $DBServer->GetFarmRoleObject()->GetRoleObject()->getOs()->version, $DBServer->platform, $DBServer->cloudLocation, $DBServer->GetFlavor(), implode(",", $DBServer->GetFarmRoleObject()->GetRoleObject()->getBehaviors()), time())); } } catch (Exception $e) { } return $DBServer; }
/** * * @param ServerCreateInfo $serverCreateInfo * @param bool $isImport * @return DBServer */ public static function Create(ServerCreateInfo $creInfo, $isImport = false, $setPendingStatus = false) { $db = \Scalr::getDb(); $startWithLetter = in_array($creInfo->platform, array(SERVER_PLATFORMS::CLOUDSTACK, SERVER_PLATFORMS::IDCF, SERVER_PLATFORMS::GCE)); if ($isImport) { $startWithLetter = true; } $server_id = Scalr::GenerateUID(false, $startWithLetter); $status = !$isImport ? SERVER_STATUS::PENDING_LAUNCH : SERVER_STATUS::IMPORTING; if ($setPendingStatus) { $status = SERVER_STATUS::PENDING; } // Assigns Farm index to the server if (!$isImport) { // This query select the least lower vacant Farm index from the available. // If there are no available indexes the query returns NULL so we need cast result to integer // to make sure it will use Farm index equal to 1 in this case. // We ingore terminated and pending terminating instances to release their indexes. $farmIndex = 1 + intval($db->GetOne("\n SELECT s.farm_index\n FROM servers s\n WHERE s.farm_id = ? AND s.status NOT IN (?, ?)\n AND NOT EXISTS (SELECT 1 FROM servers WHERE farm_id = s.farm_id AND farm_index = s.farm_index + 1 AND status NOT IN (?, ?))\n ORDER BY s.farm_index\n LIMIT 1\n ", [$creInfo->farmId ? $creInfo->farmId : $creInfo->dbFarmRole->FarmID, SERVER_STATUS::TERMINATED, SERVER_STATUS::PENDING_TERMINATE, SERVER_STATUS::TERMINATED, SERVER_STATUS::PENDING_TERMINATE])); } else { // Default Farm index value is considered to equal 1 $farmIndex = 1; } // IF no index defined if (!$creInfo->index && !$isImport) { $indexes = $db->GetAll("SELECT `index` FROM servers WHERE farm_roleid = ? AND status NOT IN (?, ?)", [$creInfo->dbFarmRole->ID, SERVER_STATUS::TERMINATED, SERVER_STATUS::PENDING_TERMINATE]); $usedIndexes = []; if (!empty($indexes)) { foreach ($indexes as $index) { $usedIndexes[$index['index']] = true; } } for ($i = 1;; $i++) { if (!isset($usedIndexes[$i])) { $creInfo->index = $i; break; } } } elseif ($isImport) { $creInfo->index = 0; } $client_id = $creInfo->clientId ? $creInfo->clientId : $creInfo->dbFarmRole->GetFarmObject()->ClientID; $instanceTypeName = null; $instanceTypeId = $creInfo->dbFarmRole ? $creInfo->dbFarmRole->getInstanceType() : null; if (in_array($creInfo->platform, [SERVER_PLATFORMS::EC2, SERVER_PLATFORMS::GCE])) { $instanceTypeName = $instanceTypeId; } $db->Execute("\n INSERT INTO servers\n SET `server_id` = ?,\n `farm_id` = ?,\n `env_id` = ?,\n `farm_roleid` = ?,\n `client_id` = ?,\n `platform` = ?,\n `status` = ?,\n `remote_ip` = ?,\n `local_ip` = ?,\n `dtadded` = NOW(),\n `index` = ?,\n `farm_index` = ?,\n `cloud_location` = ?,\n `type` = ?,\n `instance_type_name`= ?\n ", [$server_id, $creInfo->farmId ? $creInfo->farmId : $creInfo->dbFarmRole->FarmID, $creInfo->envId, $creInfo->dbFarmRole ? $creInfo->dbFarmRole->ID : 0, $client_id, $creInfo->platform, $status, $creInfo->remoteIp, $creInfo->localIp, $creInfo->index, $farmIndex, $creInfo->dbFarmRole ? $creInfo->dbFarmRole->CloudLocation : null, $instanceTypeId, $instanceTypeName]); $DBServer = DBServer::LoadByID($server_id); $DBServer->SetProperties($creInfo->GetProperties()); $DBServer->setOsType($DBServer->osType); try { if ($DBServer->farmRoleId) { $db->Execute("\n INSERT INTO servers_launch_timelog\n SET `server_id` = ?,\n `os_family` = ?,\n `os_version` = ?,\n `cloud` = ?,\n `cloud_location` = ?,\n `server_type` = ?,\n `behaviors` = ?,\n `ts_created` = ?\n ", [$server_id, $DBServer->GetFarmRoleObject()->GetRoleObject()->getOs()->family, $DBServer->GetFarmRoleObject()->GetRoleObject()->getOs()->version, $DBServer->platform, $DBServer->cloudLocation, $DBServer->getType(), implode(",", $DBServer->GetFarmRoleObject()->GetRoleObject()->getBehaviors()), time()]); } } catch (Exception $e) { } return $DBServer; }
/** * * @param ServerCreateInfo $serverCreateInfo * @param bool $isImport * @return DBServer */ public static function Create(ServerCreateInfo $creInfo, $isImport = false, $setPendingStatus = false) { $db = \Scalr::getDb(); $startWithLetter = in_array($creInfo->platform, array(SERVER_PLATFORMS::CLOUDSTACK, SERVER_PLATFORMS::UCLOUD, SERVER_PLATFORMS::IDCF, SERVER_PLATFORMS::GCE)); if ($isImport) { $startWithLetter = true; } $server_id = Scalr::GenerateUID(false, $startWithLetter); $status = !$isImport ? SERVER_STATUS::PENDING_LAUNCH : SERVER_STATUS::IMPORTING; if ($setPendingStatus) { $status = SERVER_STATUS::PENDING; } // IF no index defined if (!$creInfo->index && !$isImport) { $indexes = $db->GetAll("SELECT `index` FROM servers WHERE farm_roleid=? AND status NOT IN (?,?,?)", array($creInfo->dbFarmRole->ID, SERVER_STATUS::TERMINATED, SERVER_STATUS::PENDING_TERMINATE, SERVER_STATUS::TROUBLESHOOTING)); $used_indexes = array(); if (count($indexes) > 0) { foreach ($indexes as $index) { $used_indexes[$index['index']] = true; } } for ($i = 1;; $i++) { if (!$used_indexes[$i]) { $creInfo->index = $i; break; } } } elseif ($isImport) { $creInfo->index = 0; } $client_id = $creInfo->clientId ? $creInfo->clientId : $creInfo->dbFarmRole->GetFarmObject()->ClientID; $db->Execute("INSERT INTO servers SET\n `server_id`\t\t= ?,\n `farm_id`\t\t= ?,\n `role_id`\t\t= ?,\n `env_id`\t\t= ?,\n `farm_roleid`\t= ?,\n `client_id`\t\t= ?,\n `platform`\t\t= ?,\n `status`\t\t= ?,\n `remote_ip`\t\t= ?,\n `local_ip`\t\t= ?,\n `dtadded`\t\t= NOW(),\n `index`\t\t\t= ?\n ", array($server_id, $creInfo->farmId ? $creInfo->farmId : $creInfo->dbFarmRole->FarmID, $creInfo->roleId, $creInfo->envId, $creInfo->dbFarmRole ? $creInfo->dbFarmRole->ID : 0, $client_id, $creInfo->platform, $status, $creInfo->remoteIp, $creInfo->localIp, $creInfo->index)); $DBServer = DBServer::LoadByID($server_id); $DBServer->SetProperties($creInfo->GetProperties()); return $DBServer; }