/**
*
* @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;
}