protected function GetScalingMetrics() { $ResponseDOMDocument = $this->CreateResponse(); $metricsNode = $ResponseDOMDocument->createElement("metrics"); $dbFarmRole = $this->DBServer->GetFarmRoleObject(); $scalingManager = new Scalr_Scaling_Manager($dbFarmRole); foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleScalingMetric) { $scalingMetric = $farmRoleScalingMetric->getMetric(); if ($scalingMetric->accountId == 0) { continue; } $metric = $ResponseDOMDocument->createElement("metric"); $metric->setAttribute("id", $scalingMetric->id); $metric->setAttribute("name", $scalingMetric->name); $metricFilePath = $ResponseDOMDocument->createElement("path", $scalingMetric->filePath); $metricRM = $ResponseDOMDocument->createElement("retrieve-method", $scalingMetric->retrieveMethod); $metric->appendChild($metricFilePath); $metric->appendChild($metricRM); $metricsNode->appendChild($metric); } $ResponseDOMDocument->documentElement->appendChild($metricsNode); return $ResponseDOMDocument; }
public function xListFarmRolesAction() { $this->request->defineParams(array('farmId' => array('type' => 'int'), 'farmRoleId' => array('type' => 'int'), 'roleId' => array('type' => 'int'), 'id' => array('type' => 'int'), 'sort' => array('type' => 'json'))); $this->request->restrictFarmAccess(DBFarm::LoadByID($this->getParam('farmId'))); $sql = "\n SELECT farm_roles.*\n FROM farm_roles\n JOIN roles ON farm_roles.role_id = roles.id\n WHERE farmid = ?\n AND :FILTER:\n "; $params = array($this->getParam('farmId')); if ($this->getParam('roleId')) { $sql .= ' AND role_id = ?'; $params[] = $this->getParam('roleId'); } if ($this->getParam('farmRoleId')) { $sql .= ' AND farm_roles.id = ?'; $params[] = $this->getParam('farmRoleId'); } $response = $this->buildResponseFromSql($sql, array('platform', 'name', 'alias'), array('name'), $params); foreach ($response['data'] as &$row) { $row["running_servers"] = $this->db->GetOne("SELECT COUNT(*) FROM servers WHERE farm_roleid='{$row['id']}' AND status IN ('Pending', 'Initializing', 'Running', 'Temporary')"); $row["suspended_servers"] = $this->db->GetOne("SELECT COUNT(*) FROM servers WHERE farm_roleid='{$row['id']}' AND status IN ('Suspended', 'Pending suspend')"); $row["non_running_servers"] = $this->db->GetOne("SELECT COUNT(*) FROM servers WHERE farm_roleid='{$row['id']}' AND status NOT IN ('Pending', 'Initializing', 'Running', 'Temporary')"); $row['farm_status'] = $this->db->GetOne("SELECT status FROM farms WHERE id=? LIMIT 1", array($row['farmid'])); $row["domains"] = $this->db->GetOne("SELECT COUNT(*) FROM dns_zones WHERE farm_roleid=? AND status != ? AND farm_id=?", array($row["id"], DNS_ZONE_STATUS::PENDING_DELETE, $row['farmid'])); $DBFarmRole = DBFarmRole::LoadByID($row['id']); $row['min_count'] = $DBFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MIN_INSTANCES); $row['max_count'] = $DBFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MAX_INSTANCES); $row['allow_launch_instance'] = !$DBFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MONGODB) && !$DBFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::CF_CLOUD_CONTROLLER); $vpcId = $this->environment->getPlatformConfigValue(Ec2PlatformModule::DEFAULT_VPC_ID . ".{$DBFarmRole->CloudLocation}"); $row['is_vpc'] = $vpcId || $DBFarmRole->GetFarmObject()->GetSetting(DBFarm::SETTING_EC2_VPC_ID) ? true : false; $row['location'] = $DBFarmRole->CloudLocation; $DBRole = DBRole::loadById($row['role_id']); $row["name"] = $DBRole->name; $row['image_id'] = $DBRole->__getNewRoleObject()->getImage($DBFarmRole->Platform, $DBFarmRole->CloudLocation)->imageId; if ($DBFarmRole->GetFarmObject()->Status == FARM_STATUS::RUNNING) { $row['shortcuts'] = []; foreach (\Scalr\Model\Entity\ScriptShortcut::find(array(array('farmRoleId' => $row['id']))) as $shortcut) { /* @var $shortcut \Scalr\Model\Entity\ScriptShortcut */ $row['shortcuts'][] = array('id' => $shortcut->id, 'name' => $shortcut->getScriptName()); } } $scalingManager = new Scalr_Scaling_Manager($DBFarmRole); $scaling_algos = array(); foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric) { $scaling_algos[] = $farmRoleMetric->getMetric()->name; } if (count($scaling_algos) == 0) { $row['scaling_algos'] = _("Scaling disabled"); } else { $row['scaling_algos'] = implode(', ', $scaling_algos); } } $this->response->data($response); }
public function xListFarmRolesAction() { $this->request->defineParams(array('farmId' => array('type' => 'int'), 'farmRoleId' => array('type' => 'int'), 'roleId' => array('type' => 'int'), 'id' => array('type' => 'int'), 'sort' => array('type' => 'json'))); $sql = "\n SELECT farm_roles.*\n FROM farm_roles\n JOIN roles ON farm_roles.role_id = roles.id\n WHERE farmid = ?\n AND :FILTER:\n "; $params = array($this->getParam('farmId')); if ($this->getParam('roleId')) { $sql .= ' AND role_id = ?'; $params[] = $this->getParam('roleId'); } if ($this->getParam('farmRoleId')) { $sql .= ' AND farm_roles.id = ?'; $params[] = $this->getParam('farmRoleId'); } $response = $this->buildResponseFromSql($sql, array('platform', 'name', 'alias'), array('name'), $params); foreach ($response['data'] as &$row) { $servers = $this->db->GetRow("\n SELECT SUM(IF(`status` IN (?,?,?,?,?),1,0)) AS running_servers,\n SUM(IF(`status` IN (?,?),1,0)) AS suspended_servers,\n SUM(IF(`status` IN (?,?),1,0)) AS non_running_servers\n FROM `servers` WHERE `farm_roleid` = ?\n ", [Entity\Server::STATUS_PENDING, Entity\Server::STATUS_INIT, Entity\Server::STATUS_RUNNING, Entity\Server::STATUS_TEMPORARY, Entity\Server::STATUS_RESUMING, Entity\Server::STATUS_SUSPENDED, Entity\Server::STATUS_PENDING_SUSPEND, Entity\Server::STATUS_TERMINATED, Entity\Server::STATUS_PENDING_TERMINATE, $row['id']]); if (is_null($servers['running_servers'])) { $servers = ['running_servers' => 0, 'suspended_servers' => 0, 'non_running_servers' => 0]; } $row = array_merge($row, $servers); $row['farm_status'] = $this->db->GetOne("SELECT status FROM farms WHERE id=? LIMIT 1", array($row['farmid'])); $row["domains"] = $this->db->GetOne("SELECT COUNT(*) FROM dns_zones WHERE farm_roleid=? AND status != ? AND farm_id=?", array($row["id"], DNS_ZONE_STATUS::PENDING_DELETE, $row['farmid'])); $DBFarmRole = DBFarmRole::LoadByID($row['id']); $row['allow_launch_instance'] = !$DBFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MONGODB) && !$DBFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::CF_CLOUD_CONTROLLER); $vpcId = $this->environment->getPlatformConfigValue(Ec2PlatformModule::DEFAULT_VPC_ID . ".{$DBFarmRole->CloudLocation}"); $row['is_vpc'] = $vpcId || $DBFarmRole->GetFarmObject()->GetSetting(Entity\FarmSetting::EC2_VPC_ID) ? true : false; $row['location'] = $DBFarmRole->CloudLocation; $DBRole = DBRole::loadById($row['role_id']); $row["name"] = $DBRole->name; $row['image_id'] = $DBRole->__getNewRoleObject()->getImage($DBFarmRole->Platform, $DBFarmRole->CloudLocation)->imageId; if ($DBFarmRole->GetFarmObject()->Status == FARM_STATUS::RUNNING) { $row['shortcuts'] = []; foreach (\Scalr\Model\Entity\ScriptShortcut::find([['farmRoleId' => $row['id']]]) as $shortcut) { /* @var $shortcut \Scalr\Model\Entity\ScriptShortcut */ $row['shortcuts'][] = array('id' => $shortcut->id, 'name' => $shortcut->getScriptName()); } } $row['scaling_enabled'] = $DBFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_ENABLED); if ($row['scaling_enabled'] == 1) { $row['min_count'] = $DBFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_MIN_INSTANCES); $row['max_count'] = $DBFarmRole->GetSetting(Entity\FarmRoleSetting::SCALING_MAX_INSTANCES); $scalingManager = new Scalr_Scaling_Manager($DBFarmRole); $scaling_algos = []; foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric) { $scaling_algos[] = $farmRoleMetric->getMetric()->name; } $row['scaling_algos'] = implode(', ', $scaling_algos); } $row['farmOwnerIdPerm'] = $DBFarmRole->GetFarmObject()->createdByUserId == $this->user->getId(); $row['farmTeamIdPerm'] = $DBFarmRole->GetFarmObject()->teamId ? $this->user->isInTeam($DBFarmRole->GetFarmObject()->teamId) : false; } $this->response->data($response); }
public function xListFarmRolesAction() { $this->request->defineParams(array('farmId' => array('type' => 'int'), 'farmRoleId' => array('type' => 'int'), 'roleId' => array('type' => 'int'), 'id' => array('type' => 'int'), 'sort' => array('type' => 'string', 'default' => 'id'), 'dir' => array('type' => 'string', 'default' => 'ASC'))); $sql = "SELECT * from farm_roles WHERE farmid=" . $this->db->qstr($this->getParam('farmId')); if ($this->getParam('roleId')) { $sql .= " AND role_id=" . $this->db->qstr($this->getParam('roleId')); } if ($this->getParam('farmRoleId')) { $sql .= " AND id=" . $this->db->qstr($this->getParam('farmRoleId')); } $response = $this->buildResponseFromSql($sql, array("role_id", "platform")); foreach ($response['data'] as &$row) { $row["running_servers"] = $this->db->GetOne("SELECT COUNT(*) FROM servers WHERE farm_roleid='{$row['id']}' AND status IN ('Pending', 'Initializing', 'Running', 'Temporary')"); $row["non_running_servers"] = $this->db->GetOne("SELECT COUNT(*) FROM servers WHERE farm_roleid='{$row['id']}' AND status NOT IN ('Pending', 'Initializing', 'Running', 'Temporary')"); $row['farm_status'] = $this->db->GetOne("SELECT status FROM farms WHERE id=?", array($row['farmid'])); $row["domains"] = $this->db->GetOne("SELECT COUNT(*) FROM dns_zones WHERE farm_roleid=? AND status != ? AND farm_id=?", array($row["id"], DNS_ZONE_STATUS::PENDING_DELETE, $row['farmid'])); $DBFarmRole = DBFarmRole::LoadByID($row['id']); $row['min_count'] = $DBFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MIN_INSTANCES); $row['max_count'] = $DBFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MAX_INSTANCES); $row['location'] = $DBFarmRole->CloudLocation; $DBRole = DBRole::loadById($row['role_id']); $row["name"] = $DBRole->name; $row['image_id'] = $DBRole->getImageId($DBFarmRole->Platform, $DBFarmRole->CloudLocation); $row['shortcuts'] = $this->db->GetAll("SELECT * FROM farm_role_scripts WHERE farm_roleid=? AND ismenuitem='1'", array($row['id'])); foreach ($row['shortcuts'] as &$shortcut) { $shortcut['name'] = $this->db->GetOne("SELECT name FROM scripts WHERE id=?", array($shortcut['scriptid'])); } $scalingManager = new Scalr_Scaling_Manager($DBFarmRole); $scaling_algos = array(); foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric) { $scaling_algos[] = $farmRoleMetric->getMetric()->name; } if (count($scaling_algos) == 0) { $row['scaling_algos'] = _("Scaling disabled"); } else { $row['scaling_algos'] = implode(', ', $scaling_algos); } } $this->response->data($response); }
public function getFarm2($farmId) { $dbFarm = DBFarm::LoadByID($farmId); $this->user->getPermissions()->validate($dbFarm); $farmRoles = array(); $variables = new Scalr_Scripting_GlobalVariables($this->user->getAccountId(), $this->getEnvironmentId(), Scalr_Scripting_GlobalVariables::SCOPE_FARM); $farmRoleVariables = new Scalr_Scripting_GlobalVariables($this->user->getAccountId(), $this->getEnvironmentId(), Scalr_Scripting_GlobalVariables::SCOPE_FARMROLE); foreach ($dbFarm->GetFarmRoles() as $dbFarmRole) { $scripts = $this->db->GetAll("\n SELECT farm_role_scripts.*, scripts.name, scripts.os\n FROM farm_role_scripts\n LEFT JOIN scripts ON scripts.id = farm_role_scripts.scriptid\n WHERE farm_roleid=? AND issystem='1'\n ", array($dbFarmRole->ID)); $scriptsObject = array(); foreach ($scripts as $script) { if (!empty($script['scriptid']) && $script['script_type'] == Scalr_Scripting_Manager::ORCHESTRATION_SCRIPT_TYPE_SCALR || !empty($script['script_path']) && $script['script_type'] == Scalr_Scripting_Manager::ORCHESTRATION_SCRIPT_TYPE_LOCAL || !empty($script['params']) && $script['script_type'] == Scalr_Scripting_Manager::ORCHESTRATION_SCRIPT_TYPE_CHEF) { $s = array('script_type' => $script['script_type'], 'script_id' => (int) $script['scriptid'], 'script' => $script['name'], 'os' => $script['os'], 'params' => unserialize($script['params']), 'target' => $script['target'], 'version' => (int) $script['version'], 'timeout' => $script['timeout'], 'isSync' => (int) $script['issync'], 'order_index' => $script['order_index'], 'event' => $script['event_name'], 'script_path' => $script['script_path'], 'run_as' => $script['run_as']); if ($script['target'] == Script::TARGET_BEHAVIORS || $script['target'] == Script::TARGET_ROLES || $script['target'] == Script::TARGET_FARMROLES) { switch ($script['target']) { case $script['target'] == Script::TARGET_ROLES: $varName = 'target_roles'; break; case $script['target'] == Script::TARGET_FARMROLES: $varName = 'target_farmroles'; break; case $script['target'] == Script::TARGET_BEHAVIORS: $varName = 'target_behaviors'; break; } $s[$varName] = array(); $r = $this->db->GetAll("SELECT `target` FROM farm_role_scripting_targets WHERE farm_role_script_id = ?", array($script['id'])); foreach ($r as $v) { array_push($s[$varName], $v['target']); } } $scriptsObject[] = $s; } } //Scripting params $scriptingParams = $this->db->Execute("\n SELECT * FROM farm_role_scripting_params\n WHERE farm_role_id = ? AND farm_role_script_id = '0'\n ", array($dbFarmRole->ID)); $sParams = array(); while ($p = $scriptingParams->FetchRow()) { $sParams[] = array('hash' => $p['hash'], 'role_script_id' => $p['role_script_id'], 'params' => unserialize($p['params'])); } $scalingManager = new Scalr_Scaling_Manager($dbFarmRole); $scaling = array(); foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric) { $scaling[$farmRoleMetric->metricId] = $farmRoleMetric->getSettings(); } $dbPresets = $this->db->GetAll("SELECT * FROM farm_role_service_config_presets WHERE farm_roleid=?", array($dbFarmRole->ID)); $presets = array(); foreach ($dbPresets as $preset) { $presets[$preset['behavior']] = $preset['preset_id']; } if ($dbFarmRole->NewRoleID) { $roleName = DBRole::loadById($dbFarmRole->NewRoleID)->name; $isBundling = true; } else { $roleName = $dbFarmRole->GetRoleObject()->name; $isBundling = false; } $storages = array('configs' => $dbFarmRole->getStorage()->getConfigs()); foreach ($dbFarmRole->getStorage()->getVolumes() as $configKey => $config) { $storages['devices'][$configKey] = array(); foreach ($config as $device) { $info = array('farmRoleId' => $device->farmRoleId, 'placement' => $device->placement, 'serverIndex' => $device->serverIndex, 'storageId' => $device->storageId, 'storageConfigId' => $device->storageConfigId, 'status' => $device->status); try { $server = DBServer::LoadByFarmRoleIDAndIndex($device->farmRoleId, $device->serverIndex); if ($server->status != SERVER_STATUS::TERMINATED && $server->status != SERVER_STATUS::TROUBLESHOOTING) { $info['serverId'] = $server->serverId; $info['serverInstanceId'] = $server->GetProperty(EC2_SERVER_PROPERTIES::INSTANCE_ID); } } catch (Exception $e) { $this->response->debugException($e); } $storages['devices'][$configKey][] = $info; } } $image = $dbFarmRole->GetRoleObject()->__getNewRoleObject()->getImage($dbFarmRole->Platform, $dbFarmRole->CloudLocation); $securityGroups = $this->getInitialSecurityGroupsList($dbFarmRole); $farmRoles[] = array('farm_role_id' => $dbFarmRole->ID, 'alias' => $dbFarmRole->Alias ? $dbFarmRole->Alias : $dbFarmRole->GetRoleObject()->name, 'role_id' => $dbFarmRole->RoleID, 'platform' => $dbFarmRole->Platform, 'os' => $dbFarmRole->GetRoleObject()->getOs()->name, 'os_family' => $dbFarmRole->GetRoleObject()->getOs()->family, 'os_generation' => $dbFarmRole->GetRoleObject()->getOs()->generation, 'os_version' => $dbFarmRole->GetRoleObject()->getOs()->version, 'osId' => $dbFarmRole->GetRoleObject()->getOs()->id, 'generation' => $dbFarmRole->GetRoleObject()->generation, 'group' => $dbFarmRole->GetRoleObject()->getCategoryName(), 'cat_id' => $dbFarmRole->GetRoleObject()->catId, 'name' => $roleName, 'is_bundle_running' => $isBundling, 'behaviors' => implode(",", $dbFarmRole->GetRoleObject()->getBehaviors()), 'scripting' => $scriptsObject, 'scripting_params' => $sParams, 'settings' => $dbFarmRole->GetAllSettings(), 'cloud_location' => $dbFarmRole->CloudLocation, 'launch_index' => (int) $dbFarmRole->LaunchIndex, 'scaling' => $scaling, 'config_presets' => $presets, 'image' => $image->getImage(), 'storages' => $storages, 'variables' => $farmRoleVariables->getValues($dbFarmRole->GetRoleID(), $dbFarm->ID, $dbFarmRole->ID), 'running_servers' => $dbFarmRole->GetRunningInstancesCount(), 'suspended_servers' => $dbFarmRole->GetSuspendedInstancesCount(), 'security_groups' => $securityGroups, 'hourly_rate' => $this->getInstanceTypeHourlyRate($dbFarmRole->Platform, $dbFarmRole->CloudLocation, $dbFarmRole->getInstanceType(), $dbFarmRole->GetRoleObject()->osFamily)); } $vpc = array(); if ($dbFarm->GetSetting(DBFarm::SETTING_EC2_VPC_ID)) { $vpc = array('id' => $dbFarm->GetSetting(DBFarm::SETTING_EC2_VPC_ID), 'region' => $dbFarm->GetSetting(DBFarm::SETTING_EC2_VPC_REGION)); } $farmOwnerEditable = $dbFarm->createdByUserId == $this->user->getId() || $this->user->isAccountOwner() || $this->request->isFarmAllowed($dbFarm, Acl::PERM_FARMS_CHANGE_OWNERSHIP); return array('farm' => array('name' => $dbFarm->Name, 'description' => $dbFarm->Comments, 'rolesLaunchOrder' => $dbFarm->RolesLaunchOrder, 'timezone' => $dbFarm->GetSetting(DBFarm::SETTING_TIMEZONE), 'variables' => $variables->getValues(0, $dbFarm->ID), 'vpc' => $vpc, 'status' => $dbFarm->Status, 'hash' => $dbFarm->Hash, 'owner' => $farmOwnerEditable ? $dbFarm->createdByUserId : $dbFarm->createdByUserEmail, 'ownerEditable' => $farmOwnerEditable, 'teamOwner' => $farmOwnerEditable ? $dbFarm->teamId : ($dbFarm->teamId ? (new Scalr_Account_Team())->loadById($dbFarm->teamId)->name : ''), 'teamOwnerEditable' => $farmOwnerEditable, 'launchPermission' => $this->request->isFarmAllowed($dbFarm, Acl::PERM_FARMS_LAUNCH_TERMINATE), DBFarm::SETTING_SZR_UPD_REPOSITORY => $dbFarm->GetSetting(DBFarm::SETTING_SZR_UPD_REPOSITORY), DBFarm::SETTING_SZR_UPD_SCHEDULE => $dbFarm->GetSetting(DBFarm::SETTING_SZR_UPD_SCHEDULE)), 'roles' => $farmRoles, 'lock' => $dbFarm->isLocked(false), 'changed' => $dbFarm->changedTime); }
public function getFarm($farmId) { $dbFarm = DBFarm::LoadByID($farmId); $this->user->getPermissions()->validate($dbFarm); $farmRoleId = $this->getParam('farmRoleId'); $farmRoles = array(); foreach ($dbFarm->GetFarmRoles() as $dbFarmRole) { if ($farmRoleId && $farmRoleId != $dbFarmRole->ID) { continue; } $scripts = $this->db->GetAll("SELECT farm_role_scripts.*, scripts.name FROM farm_role_scripts\n\t\t\t\tINNER JOIN scripts ON scripts.id = farm_role_scripts.scriptid\n\t\t\t\tWHERE farm_roleid=? AND issystem='1'", array($dbFarmRole->ID)); $scriptsObject = array(); foreach ($scripts as $script) { $scriptsObject[] = array('script_id' => $script['scriptid'], 'script' => $script['name'], 'params' => unserialize($script['params']), 'target' => $script['target'], 'version' => $script['version'], 'timeout' => $script['timeout'], 'issync' => $script['issync'], 'order_index' => $script['order_index'], 'event' => $script['event_name']); } $scalingManager = new Scalr_Scaling_Manager($dbFarmRole); $scaling = array(); foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric) { $scaling[$farmRoleMetric->metricId] = $farmRoleMetric->getSettings(); } $dbPresets = $this->db->GetAll("SELECT * FROM farm_role_service_config_presets WHERE farm_roleid=?", array($dbFarmRole->ID)); $presets = array(); foreach ($dbPresets as $preset) { $presets[$preset['behavior']] = $preset['preset_id']; } if ($dbFarmRole->NewRoleID) { $roleName = DBRole::loadById($dbFarmRole->NewRoleID)->name; $isBundling = true; } else { $roleName = $dbFarmRole->GetRoleObject()->name; $isBundling = false; } $farmRoles[] = array('farm_role_id' => $dbFarmRole->ID, 'role_id' => $dbFarmRole->RoleID, 'platform' => $dbFarmRole->Platform, 'generation' => $dbFarmRole->GetRoleObject()->generation, 'arch' => $dbFarmRole->GetRoleObject()->architecture, 'group' => ROLE_GROUPS::GetConstByBehavior($dbFarmRole->GetRoleObject()->getBehaviors()), 'name' => $roleName, 'is_bundle_running' => $isBundling, 'behaviors' => implode(",", $dbFarmRole->GetRoleObject()->getBehaviors()), 'scripting' => $scriptsObject, 'settings' => $dbFarmRole->GetAllSettings(), 'cloud_location' => $dbFarmRole->CloudLocation, 'launch_index' => (int) $dbFarmRole->LaunchIndex, 'scaling' => $scaling, 'config_presets' => $presets, 'tags' => $dbFarmRole->GetRoleObject()->getTags()); } return array('farm' => array('name' => $dbFarm->Name, 'description' => $dbFarm->Comments, 'rolesLaunchOrder' => $dbFarm->RolesLauchOrder), 'roles' => $farmRoles); }
public function getFarm2($farmId) { $dbFarm = DBFarm::LoadByID($farmId); $this->user->getPermissions()->validate($dbFarm); $farmRoleId = $this->getParam('farmRoleId'); $farmRoles = array(); $variables = new Scalr_Scripting_GlobalVariables($this->getEnvironmentId(), Scalr_Scripting_GlobalVariables::SCOPE_FARM); $farmRoleVariables = new Scalr_Scripting_GlobalVariables($this->getEnvironmentId(), Scalr_Scripting_GlobalVariables::SCOPE_FARMROLE); foreach ($dbFarm->GetFarmRoles() as $dbFarmRole) { if ($farmRoleId && $farmRoleId != $dbFarmRole->ID) { continue; } $scripts = $this->db->GetAll("\n SELECT farm_role_scripts.*, scripts.name\n FROM farm_role_scripts\n LEFT JOIN scripts ON scripts.id = farm_role_scripts.scriptid\n WHERE farm_roleid=? AND issystem='1'\n ", array($dbFarmRole->ID)); $scriptsObject = array(); foreach ($scripts as $script) { if (!empty($script['scriptid']) || !empty($script['script_path'])) { $s = array('script_id' => $script['scriptid'], 'script' => $script['name'], 'params' => unserialize($script['params']), 'target' => $script['target'], 'version' => $script['version'], 'timeout' => $script['timeout'], 'issync' => $script['issync'], 'order_index' => $script['order_index'], 'event' => $script['event_name'], 'script_path' => $script['script_path'], 'run_as' => $script['run_as']); } if ($script['target'] == Scalr_Script::TARGET_BEHAVIORS || $script['target'] == Scalr_Script::TARGET_ROLES) { $varName = $script['target'] == Scalr_Script::TARGET_ROLES ? 'target_roles' : 'target_behaviors'; $s[$varName] = array(); $r = $this->db->GetAll("SELECT `target` FROM farm_role_scripting_targets WHERE farm_role_script_id = ?", array($script['id'])); foreach ($r as $v) { array_push($s[$varName], $v['target']); } } $scriptsObject[] = $s; } //Scripting params $scriptingParams = $this->db->Execute("\n SELECT * FROM farm_role_scripting_params\n WHERE farm_role_id = ? AND farm_role_script_id = '0'\n ", array($dbFarmRole->ID)); $sParams = array(); while ($p = $scriptingParams->FetchRow()) { $sParams[] = array('hash' => $p['hash'], 'role_script_id' => $p['role_script_id'], 'params' => unserialize($p['params'])); } $scalingManager = new Scalr_Scaling_Manager($dbFarmRole); $scaling = array(); foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric) { $scaling[$farmRoleMetric->metricId] = $farmRoleMetric->getSettings(); } $dbPresets = $this->db->GetAll("SELECT * FROM farm_role_service_config_presets WHERE farm_roleid=?", array($dbFarmRole->ID)); $presets = array(); foreach ($dbPresets as $preset) { $presets[$preset['behavior']] = $preset['preset_id']; } if ($dbFarmRole->NewRoleID) { $roleName = DBRole::loadById($dbFarmRole->NewRoleID)->name; $isBundling = true; } else { $roleName = $dbFarmRole->GetRoleObject()->name; $isBundling = false; } $imageDetails = $dbFarmRole->GetRoleObject()->getImageDetails($dbFarmRole->Platform, $dbFarmRole->CloudLocation); $storages = array('configs' => $dbFarmRole->getStorage()->getConfigs()); foreach ($dbFarmRole->getStorage()->getVolumes() as $configKey => $config) { $storages['devices'][$configKey] = array(); foreach ($config as $device) { $info = array('farmRoleId' => $device->farmRoleId, 'placement' => $device->placement, 'serverIndex' => $device->serverIndex, 'storageId' => $device->storageId, 'storageConfigId' => $device->storageConfigId, 'status' => $device->status); try { $server = DBServer::LoadByFarmRoleIDAndIndex($device->farmRoleId, $device->serverIndex); if ($server->status != SERVER_STATUS::TERMINATED && $server->status != SERVER_STATUS::TROUBLESHOOTING) { $info['serverId'] = $server->serverId; $info['serverInstanceId'] = $server->GetProperty(EC2_SERVER_PROPERTIES::INSTANCE_ID); } } catch (Exception $e) { $this->response->varDump($e->getMessage()); $this->response->varDump($e->getTraceAsString()); } $storages['devices'][$configKey][] = $info; } } $imageInfo = $dbFarmRole->GetRoleObject()->getImageDetails($dbFarmRole->Platform, $dbFarmRole->CloudLocation); $architecture = $imageInfo['architecture']; $securityGroups = $this->getInitialSecurityGroupsList($dbFarmRole); $farmRoles[] = array('farm_role_id' => $dbFarmRole->ID, 'alias' => $dbFarmRole->Alias ? $dbFarmRole->Alias : $dbFarmRole->GetRoleObject()->name, 'role_id' => $dbFarmRole->RoleID, 'platform' => $dbFarmRole->Platform, 'os' => $dbFarmRole->GetRoleObject()->os, 'os_family' => $dbFarmRole->GetRoleObject()->osFamily, 'os_generation' => $dbFarmRole->GetRoleObject()->osGeneration, 'os_version' => $dbFarmRole->GetRoleObject()->osVersion, 'generation' => $dbFarmRole->GetRoleObject()->generation, 'group' => $dbFarmRole->GetRoleObject()->getCategoryName(), 'cat_id' => $dbFarmRole->GetRoleObject()->catId, 'arch' => $architecture, 'name' => $roleName, 'is_bundle_running' => $isBundling, 'behaviors' => implode(",", $dbFarmRole->GetRoleObject()->getBehaviors()), 'scripting' => $scriptsObject, 'scripting_params' => $sParams, 'settings' => $dbFarmRole->GetAllSettings(), 'cloud_location' => $dbFarmRole->CloudLocation, 'launch_index' => (int) $dbFarmRole->LaunchIndex, 'scaling' => $scaling, 'config_presets' => $presets, 'tags' => $dbFarmRole->GetRoleObject()->getTags(), 'storages' => $storages, 'variables' => $farmRoleVariables->getValues($dbFarmRole->GetRoleID(), $dbFarm->ID, $dbFarmRole->ID), 'running_servers' => $dbFarmRole->GetRunningInstancesCount(), 'security_groups' => $securityGroups); } $vpc = array(); if ($dbFarm->GetSetting(DBFarm::SETTING_EC2_VPC_ID)) { $vpc = array('id' => $dbFarm->GetSetting(DBFarm::SETTING_EC2_VPC_ID), 'region' => $dbFarm->GetSetting(DBFarm::SETTING_EC2_VPC_REGION)); } return array('farm' => array('name' => $dbFarm->Name, 'description' => $dbFarm->Comments, 'rolesLaunchOrder' => $dbFarm->RolesLaunchOrder, 'timezone' => $dbFarm->GetSetting(DBFarm::SETTING_TIMEZONE), 'variables' => $variables->getValues(0, $dbFarm->ID), 'vpc' => $vpc, 'status' => $dbFarm->Status), 'roles' => $farmRoles, 'lock' => $dbFarm->isLocked(false), 'changed' => $dbFarm->changedTime); }
public function xListFarmRolesAction() { $this->request->defineParams(array('farmId' => array('type' => 'int'), 'farmRoleId' => array('type' => 'int'), 'roleId' => array('type' => 'int'), 'id' => array('type' => 'int'), 'sort' => array('type' => 'json'))); $allFarms = $this->request->isAllowed(Acl::RESOURCE_FARMS, Acl::PERM_FARMS_NOT_OWNED_FARMS); $sql = "\n SELECT farm_roles.*\n FROM farm_roles\n JOIN roles ON farm_roles.role_id = roles.id\n WHERE farmid = ?\n AND :FILTER:\n "; $params = array($this->getParam('farmId')); if (!$allFarms) { $sql .= " AND `farmid` IN (SELECT id FROM `farms` WHERE env_id = " . intval($this->getEnvironmentId()) . " AND created_by_id = " . intval($this->user->getId()) . ") "; } if ($this->getParam('roleId')) { $sql .= ' AND role_id = ?'; $params[] = $this->getParam('roleId'); } if ($this->getParam('farmRoleId')) { $sql .= ' AND farm_roles.id = ?'; $params[] = $this->getParam('farmRoleId'); } $response = $this->buildResponseFromSql($sql, array('platform', 'name', 'alias'), array('name'), $params); foreach ($response['data'] as &$row) { $row["running_servers"] = $this->db->GetOne("SELECT COUNT(*) FROM servers WHERE farm_roleid='{$row['id']}' AND status IN ('Pending', 'Initializing', 'Running', 'Temporary')"); $row["non_running_servers"] = $this->db->GetOne("SELECT COUNT(*) FROM servers WHERE farm_roleid='{$row['id']}' AND status NOT IN ('Pending', 'Initializing', 'Running', 'Temporary')"); $row['farm_status'] = $this->db->GetOne("SELECT status FROM farms WHERE id=? LIMIT 1", array($row['farmid'])); $row["domains"] = $this->db->GetOne("SELECT COUNT(*) FROM dns_zones WHERE farm_roleid=? AND status != ? AND farm_id=?", array($row["id"], DNS_ZONE_STATUS::PENDING_DELETE, $row['farmid'])); $DBFarmRole = DBFarmRole::LoadByID($row['id']); $row['min_count'] = $DBFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MIN_INSTANCES); $row['max_count'] = $DBFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MAX_INSTANCES); $row['allow_launch_instance'] = !$DBFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MONGODB) && !$DBFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::CF_CLOUD_CONTROLLER); $vpcId = $this->environment->getPlatformConfigValue(Modules_Platforms_Ec2::DEFAULT_VPC_ID . ".{$DBFarmRole->CloudLocation}"); $row['is_vpc'] = $vpcId || $DBFarmRole->GetFarmObject()->GetSetting(DBFarm::SETTING_EC2_VPC_ID) ? true : false; $row['location'] = $DBFarmRole->CloudLocation; $DBRole = DBRole::loadById($row['role_id']); $row["name"] = $DBRole->name; $row['image_id'] = $DBRole->getImageId($DBFarmRole->Platform, $DBFarmRole->CloudLocation); $row['shortcuts'] = $this->db->GetAll("SELECT * FROM farm_role_scripts WHERE farm_roleid=? AND ismenuitem='1'", array($row['id'])); foreach ($row['shortcuts'] as &$shortcut) { $shortcut['name'] = $this->db->GetOne("SELECT name FROM scripts WHERE id=? LIMIT 1", array($shortcut['scriptid'])); } $scalingManager = new Scalr_Scaling_Manager($DBFarmRole); $scaling_algos = array(); foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric) { $scaling_algos[] = $farmRoleMetric->getMetric()->name; } if (count($scaling_algos) == 0) { $row['scaling_algos'] = _("Scaling disabled"); } else { $row['scaling_algos'] = implode(', ', $scaling_algos); } } $this->response->data($response); }