PageRenderTime 56ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/scalr-2/tags/scalr-2.1.0/app/www/server/farm_builder_roles_list.php

http://scalr.googlecode.com/
PHP | 247 lines | 211 code | 31 blank | 5 comment | 21 complexity | d68bcf30f34b76f47de1b53fdf0c122b MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, GPL-3.0
  1. <?
  2. define("NO_TEMPLATES", true);
  3. function GetCustomVariables($template)
  4. {
  5. $text = preg_replace('/(\\\%)/si', '$$scalr$$', $template);
  6. preg_match_all("/\%([^\%\s]+)\%/si", $text, $matches);
  7. return $matches[1];
  8. }
  9. try
  10. {
  11. require(dirname(__FILE__)."/../src/prepend.inc.php");
  12. header('Pragma: private');
  13. header('Cache-control: private, must-revalidate');
  14. //header("Content-type: text/javascript");
  15. if ($req_list == 'scaling_metrics') {
  16. $dbmetrics = $db->Execute("SELECT * FROM scaling_metrics WHERE env_id=0 OR env_id=?",
  17. array(Scalr_Session::getInstance()->getEnvironmentId())
  18. );
  19. $metrics = array();
  20. while ($metric = $dbmetrics->FetchRow())
  21. {
  22. $metrics[] = array(
  23. 'id' => $metric['id'],
  24. 'name' => $metric['name'],
  25. 'alias' => $metric['alias']
  26. );
  27. }
  28. $result = array(
  29. 'metrics' => $metrics
  30. );
  31. }
  32. elseif ($req_list == 'scripting') {
  33. $filter_sql .= " AND (";
  34. // Show shared roles
  35. $filter_sql .= " origin='".SCRIPT_ORIGIN_TYPE::SHARED."'";
  36. // Show custom roles
  37. $filter_sql .= " OR (origin='".SCRIPT_ORIGIN_TYPE::CUSTOM."' AND clientid='".Scalr_Session::getInstance()->getClientId()."')";
  38. //Show approved contributed roles
  39. $filter_sql .= " OR (origin='".SCRIPT_ORIGIN_TYPE::USER_CONTRIBUTED."' AND (approval_state='".APPROVAL_STATE::APPROVED."' OR clientid='".Scalr_Session::getInstance()->getClientId()."'))";
  40. $filter_sql .= ")";
  41. $sql = "select * from scripts WHERE 1=1 {$filter_sql}";
  42. $scripts = $db->Execute($sql);
  43. $scriptsList = array();
  44. while ($script = $scripts->FetchRow())
  45. {
  46. $dbversions = $db->Execute("SELECT * FROM script_revisions WHERE scriptid=? AND (approval_state=? OR (SELECT clientid FROM scripts WHERE scripts.id=script_revisions.scriptid) = '".Scalr_Session::getInstance()->getClientId()."')",
  47. array($script['id'], APPROVAL_STATE::APPROVED)
  48. );
  49. $versions = array();
  50. while ($version = $dbversions->FetchRow())
  51. {
  52. $vars = GetCustomVariables($version["script"]);
  53. $data = array();
  54. foreach ($vars as $var)
  55. {
  56. if (!in_array($var, array_keys(CONFIG::$SCRIPT_BUILTIN_VARIABLES)))
  57. $data[$var] = ucwords(str_replace("_", " ", $var));
  58. }
  59. $data = json_encode($data);
  60. $versions[] = array("revision" => $version['revision'], "fields" => $data);
  61. }
  62. $scr = array(
  63. 'id' => $script['id'],
  64. 'name' => $script['name'],
  65. 'description' => $script['description'],
  66. 'issync' => $script['issync'],
  67. 'timeout' => ($script['issync'] == 1) ? CONFIG::$SYNCHRONOUS_SCRIPT_TIMEOUT : CONFIG::$ASYNCHRONOUS_SCRIPT_TIMEOUT,
  68. 'revisions' => $versions
  69. );
  70. $scriptsList[] = $scr;
  71. }
  72. $result = array(
  73. 'scripts' => $scriptsList,
  74. 'events' => array(
  75. array(EVENT_TYPE::HOST_UP, EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_UP)),
  76. array(EVENT_TYPE::HOST_INIT, EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_INIT)),
  77. array(EVENT_TYPE::HOST_DOWN, EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_DOWN)),
  78. array(EVENT_TYPE::REBOOT_COMPLETE, EVENT_TYPE::GetEventDescription(EVENT_TYPE::REBOOT_COMPLETE)),
  79. array(EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED, EVENT_TYPE::GetEventDescription(EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED)),
  80. array(EVENT_TYPE::NEW_MYSQL_MASTER, EVENT_TYPE::GetEventDescription(EVENT_TYPE::NEW_MYSQL_MASTER)),
  81. array(EVENT_TYPE::EBS_VOLUME_MOUNTED, EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_MOUNTED)),
  82. array(EVENT_TYPE::BEFORE_INSTANCE_LAUNCH, EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_INSTANCE_LAUNCH)),
  83. array(EVENT_TYPE::BEFORE_HOST_TERMINATE, EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_HOST_TERMINATE)),
  84. array(EVENT_TYPE::DNS_ZONE_UPDATED, EVENT_TYPE::GetEventDescription(EVENT_TYPE::DNS_ZONE_UPDATED)),
  85. array(EVENT_TYPE::EBS_VOLUME_ATTACHED, EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_ATTACHED))
  86. )
  87. );
  88. }
  89. elseif ($req_list == 'roles')
  90. {
  91. // Enabled platforms list
  92. $e_platforms = Scalr_Session::getInstance()->getEnvironment()->getEnabledPlatforms();
  93. $platforms = array();
  94. $l_platforms = SERVER_PLATFORMS::GetList();
  95. foreach ($e_platforms as $platform)
  96. {
  97. $platforms[$platform] = $l_platforms[$platform];
  98. $locations_list[$platform] = PlatformFactory::NewPlatform($platform)->getLocations();
  99. }
  100. $roles = array();
  101. $roles_sql = "SELECT id FROM roles WHERE (env_id = 0 OR env_id=?) AND id IN (SELECT role_id FROM role_images WHERE platform IN ('".implode("','", array_keys($platforms))."'))";
  102. $args[] = Scalr_Session::getInstance()->getEnvironmentId();
  103. $dbroles = $db->Execute($roles_sql, $args);
  104. while ($role = $dbroles->FetchRow())
  105. {
  106. $dbRole = DBRole::loadById($role['id']);
  107. if ($dbRole->origin == ROLE_TYPE::SHARED && $dbRole->clientId != 0)
  108. {
  109. if (($dbRole->clientId != Scalr_Session::getInstance()->getClientId() && $dbRole->approvalState != APPROVAL_STATE::APPROVED))
  110. continue;
  111. }
  112. $role_platforms = $dbRole->getPlatforms();
  113. $role_locations = array();
  114. foreach ($role_platforms as $platform)
  115. $role_locations[$platform] = $dbRole->getCloudLocations($platform);
  116. $roles[] = array(
  117. 'role_id' => $dbRole->id,
  118. 'arch' => $dbRole->architecture,
  119. 'group' => ROLE_GROUPS::GetConstByBehavior($dbRole->getBehaviors()),
  120. 'name' => $dbRole->name,
  121. 'generation' => $dbRole->generation,
  122. 'behaviors' => implode(",", $dbRole->getBehaviors()),
  123. 'origin' => $dbRole->origin,
  124. 'isstable' => (bool)$dbRole->isStable,
  125. 'platforms' => implode(",", $role_platforms),
  126. 'locations' => $role_locations,
  127. 'os' => $dbRole->os == 'Unknown' ? 'Unknown OS' : $dbRole->os
  128. );
  129. }
  130. $result = array(
  131. 'roles' => $roles,
  132. 'groups' => ROLE_GROUPS::GetName(null, true),
  133. 'platforms' => $platforms,
  134. 'locations' => $locations_list
  135. );
  136. }
  137. else
  138. {
  139. $farm_roles = array();
  140. if ($req_farmid)
  141. {
  142. try
  143. {
  144. $dbFarm = DBFarm::LoadByID($req_farmid);
  145. if (!Scalr_Session::getInstance()->getAuthToken()->hasAccessEnvironment($dbFarm->EnvID))
  146. throw new Exception("No access");
  147. foreach ($dbFarm->GetFarmRoles() as $dbFarmRole)
  148. {
  149. $scripts = $db->GetAll("SELECT farm_role_scripts.*, scripts.name FROM farm_role_scripts
  150. INNER JOIN scripts ON scripts.id = farm_role_scripts.scriptid
  151. WHERE farm_roleid=? AND issystem='1'",
  152. array($dbFarmRole->ID)
  153. );
  154. $scripts_object = array();
  155. foreach ($scripts as $script)
  156. {
  157. $scripts_object[] = array(
  158. 'script_id' => $script['scriptid'],
  159. 'script' => $script['name'],
  160. 'params' => unserialize($script['params']),
  161. 'target' => $script['target'],
  162. 'version' => $script['version'],
  163. 'timeout' => $script['timeout'],
  164. 'issync' => $script['issync'],
  165. 'order_index' => $script['order_index'],
  166. 'event' => $script['event_name'],
  167. 'order_index' => $script['order_index']
  168. );
  169. }
  170. $scalingManager = new Scalr_Scaling_Manager($dbFarmRole);
  171. $scaling = array();
  172. foreach ($scalingManager->getFarmRoleMetrics() as $farmRoleMetric)
  173. $scaling[$farmRoleMetric->metricId] = $farmRoleMetric->getSettings();
  174. $dbPresets = $db->GetAll("SELECT * FROM farm_role_service_config_presets WHERE farm_roleid=?", array($dbFarmRole->ID));
  175. $presets = array();
  176. foreach ($dbPresets as $preset)
  177. $presets[$preset['behavior']] = $preset['preset_id'];
  178. $farm_role = array(
  179. 'role_id' => $dbFarmRole->RoleID,
  180. 'platform' => $dbFarmRole->Platform,
  181. 'arch' => $dbFarmRole->GetRoleObject()->architecture,
  182. 'group' => ROLE_GROUPS::GetConstByBehavior($dbFarmRole->GetRoleObject()->getBehaviors()),
  183. 'name' => $dbFarmRole->GetRoleObject()->name,
  184. 'behaviors' => implode(",", $dbFarmRole->GetRoleObject()->getBehaviors()),
  185. 'scripting' => $scripts_object,
  186. 'settings' => $dbFarmRole->GetAllSettings(),
  187. 'cloud_location'=> $dbFarmRole->GetSetting(DBFarmRole::SETTING_CLOUD_LOCATION),
  188. 'launch_index' => (int)$dbFarmRole->LaunchIndex,
  189. 'scaling' => $scaling,
  190. 'config_presets'=> $presets
  191. );
  192. array_push($farm_roles, $farm_role);
  193. }
  194. $farm = array(
  195. 'name' => $dbFarm->Name,
  196. 'description' => $dbFarm->Comments,
  197. 'roles_launch_order'=> $dbFarm->RolesLaunchOrder
  198. );
  199. }
  200. catch (Exception $e)
  201. {
  202. var_dump($e->getMessage());
  203. }
  204. }
  205. $result = array('farm_roles' => $farm_roles, 'farm' => $farm);
  206. }
  207. }
  208. catch(Exception $e)
  209. {
  210. var_dump($e->getMessage());
  211. }
  212. $result = json_encode($result);
  213. header("Content-length: ".strlen($result));
  214. print $result;
  215. exit();
  216. ?>