public static function GetConfigurationForm() { $ConfigurationForm = new DataForm(); $ConfigurationForm->SetInlineHelp(""); $ConfigurationForm->AppendField(new DataFormField("IsEnabled", FORM_FIELD_TYPE::CHECKBOX, "Enabled")); $ReflectionInterface = new ReflectionClass("IEventObserver"); $events = $ReflectionInterface->getMethods(); $ConfigurationForm->AppendField(new DataFormField("", FORM_FIELD_TYPE::SEPARATOR, "Request URL on following events")); foreach ($events as $event) { $name = substr($event->getName(), 2); $ConfigurationForm->AppendField(new DataFormField("{$event->getName()}NotifyURL", FORM_FIELD_TYPE::TEXT, "{$name} URL", false, array(), null, null, EVENT_TYPE::GetEventDescription($name))); } return $ConfigurationForm; }
public function scriptingAction() { $this->request->restrictAccess(Acl::RESOURCE_LOGS_SCRIPTING_LOGS); $farms = self::loadController('Farms')->getList(); array_unshift($farms, array('id' => '0', 'name' => 'All farms')); $scripts = array_map(function ($s) { return ['id' => $s['id'], 'name' => $s['name']]; }, Script::getList($this->user->getAccountId(), $this->getEnvironmentId())); array_unshift($scripts, array('id' => 0, 'name' => '')); $glEvents = array_keys(EVENT_TYPE::getScriptingEvents()); sort($glEvents); array_unshift($glEvents, ''); $events = array_merge($glEvents, $this->db->GetCol('SELECT name FROM event_definitions WHERE env_id = ? ORDER BY name ASC', array($this->getEnvironmentId()))); $tasks = $this->db->GetAll('SELECT id, name FROM scheduler WHERE env_id = ? ORDER BY name ASC', array($this->getEnvironmentId())); array_unshift($tasks, array('id' => 0, 'name' => '')); $this->response->page('ui/logs/scripting.js', array('farms' => $farms, 'scripts' => $scripts, 'events' => $events, 'tasks' => $tasks)); }
public function orchestrationAction() { $this->request->restrictAccess(Acl::RESOURCE_LOGS_ORCHESTRATION_LOGS); $farms = self::loadController('Farms')->getList(); array_unshift($farms, ['id' => '0', 'name' => 'All farms']); //todo: use Script::getScriptingData $scripts = array_map(function ($s) { return ['id' => $s['id'], 'name' => $s['name']]; }, Script::getList($this->user->getAccountId(), $this->getEnvironmentId())); array_unshift($scripts, ['id' => 0, 'name' => '']); $glEvents = array_keys(EVENT_TYPE::getScriptingEvents()); sort($glEvents); array_unshift($glEvents, ''); $events = array_merge($glEvents, array_keys(\Scalr\Model\Entity\EventDefinition::getList($this->user->getAccountId(), $this->getEnvironmentId()))); $tasks = $this->db->GetAll('SELECT id, name FROM scheduler WHERE env_id = ? ORDER BY name ASC', [$this->getEnvironmentId()]); array_unshift($tasks, ['id' => 0, 'name' => '']); $this->response->page('ui/logs/orchestration.js', ['farms' => $farms, 'scripts' => $scripts, 'events' => $events, 'tasks' => $tasks]); }
public function xSaveAction() { $this->request->defineParams(array('eventId', 'name', 'description')); if (!preg_match("/^[A-Za-z0-9]+\$/si", $this->getParam('name'))) { throw new Exception("Name should contain only alphanumeric characters"); } if (strlen($this->getParam('name')) > 25) { throw new Exception("Name should be less than 25 characters"); } if (in_array($this->getParam('name'), array_keys(EVENT_TYPE::getScriptingEvents()))) { throw new Exception(sprintf("'%' is reserved name for event. Please select another one.", $this->getParam('name'))); } if (!$this->getParam('eventId')) { $this->db->Execute("INSERT INTO event_definitions SET\n name = ?,\n description = ?,\n env_id = ?\n ", array($this->getParam('name'), $this->getParam('description'), $this->getEnvironmentId())); } else { $this->db->Execute("UPDATE event_definitions SET\n name = ?,\n description = ?\n WHERE\n env_id = ? AND id = ?\n ", array($this->getParam('name'), $this->getParam('description'), $this->getEnvironmentId(), $this->getParam('eventId'))); } $this->response->success('Custom event definition successfully saved'); }
private function getEventsList() { $events = EVENT_TYPE::getScriptingEventsWithScope(); $envId = null; if ($this->request->getScope() == WebhookConfig::SCOPE_ENVIRONMENT) { $envId = (int) $this->getEnvironmentId(true); } //Temporary added new events like this, workign on events refactoring $events['HostInitFailed'] = ['name' => 'HostInitFailed', 'description' => 'Instance was unable to initialize', 'scope' => 'scalr']; $events['InstanceLaunchFailed'] = ['name' => 'InstanceLaunchFailed', 'description' => 'Scalr failed to launch instance due to cloud error', 'scope' => 'scalr']; $events = array_merge($events, \Scalr\Model\Entity\EventDefinition::getList($this->user->getAccountId(), $envId)); return $events; }
public static function getScriptingData($accountId, $envId) { return ['events' => array_merge(\EVENT_TYPE::getScriptingEventsWithScope(), EventDefinition::getList($accountId, $envId)), 'scripts' => static::getList($accountId, $envId)]; }
public static function getScriptingEvents() { return array(EVENT_TYPE::BEFORE_INSTANCE_LAUNCH => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_INSTANCE_LAUNCH), EVENT_TYPE::HOST_INIT => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_INIT), EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED), EVENT_TYPE::EBS_VOLUME_ATTACHED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_ATTACHED), EVENT_TYPE::EBS_VOLUME_MOUNTED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_MOUNTED), EVENT_TYPE::BEFORE_HOST_UP => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_HOST_UP), EVENT_TYPE::HOST_UP => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_UP), EVENT_TYPE::BEFORE_HOST_TERMINATE => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_HOST_TERMINATE), EVENT_TYPE::HOST_DOWN => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_DOWN), EVENT_TYPE::REBOOT_COMPLETE => EVENT_TYPE::GetEventDescription(EVENT_TYPE::REBOOT_COMPLETE), EVENT_TYPE::RESUME_COMPLETE => EVENT_TYPE::GetEventDescription(EVENT_TYPE::RESUME_COMPLETE), EVENT_TYPE::CHECK_FAILED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::CHECK_FAILED), EVENT_TYPE::CHECK_RECOVERED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::CHECK_RECOVERED)); }
public static function getScriptingEvents() { return array(EVENT_TYPE::HOST_UP => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_UP), EVENT_TYPE::HOST_INIT => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_INIT), EVENT_TYPE::HOST_DOWN => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_DOWN), EVENT_TYPE::REBOOT_COMPLETE => EVENT_TYPE::GetEventDescription(EVENT_TYPE::REBOOT_COMPLETE), EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED), EVENT_TYPE::NEW_MYSQL_MASTER => EVENT_TYPE::GetEventDescription(EVENT_TYPE::NEW_MYSQL_MASTER), EVENT_TYPE::EBS_VOLUME_MOUNTED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_MOUNTED), EVENT_TYPE::BEFORE_INSTANCE_LAUNCH => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_INSTANCE_LAUNCH), EVENT_TYPE::BEFORE_HOST_TERMINATE => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_HOST_TERMINATE), EVENT_TYPE::DNS_ZONE_UPDATED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::DNS_ZONE_UPDATED), EVENT_TYPE::EBS_VOLUME_ATTACHED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_ATTACHED), EVENT_TYPE::BEFORE_HOST_UP => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_HOST_UP)); }
private function getEventsList() { $events = EVENT_TYPE::getScriptingEvents(); $envId = $this->getEnvironmentId(); //Temporary added new events like this, workign on events refactoring $events['HostInitFailed'] = 'Instance was unable to initialize'; $events['InstanceLaunchFailed'] = 'Scalr failed to launch instance due to cloud error'; if ($envId) { $userEvents = $this->db->Execute("SELECT * FROM event_definitions WHERE env_id = ?", array($envId)); while ($event = $userEvents->FetchRow()) { $events[$event['name']] = $event['description']; } } return $events; }
public function getScriptingData() { $retval = array('events' => EVENT_TYPE::getScriptingEvents(), 'scripts' => $this->getList()); try { $envId = $this->getEnvironmentId(); if ($envId) { $events = $this->db->Execute("SELECT * FROM event_definitions WHERE env_id = ?", array($envId)); while ($event = $events->FetchRow()) { $retval['events'][$event['name']] = $event['description']; } } } catch (Exception $e) { } return $retval; }
public function getScriptingData() { return array('events' => EVENT_TYPE::getScriptingEvents(), 'scripts' => $this->getList()); }
/** * @param integer $id * @param string $name * @param string $description * @param bool $replaceEvent * @throws Exception * @throws Scalr_Exception_Core */ public function xSaveAction($id = 0, $name, $description, $replaceEvent = false) { $this->request->restrictAccess(Acl::RESOURCE_GENERAL_CUSTOM_EVENTS, Acl::PERM_GENERAL_CUSTOM_EVENTS_MANAGE); $validator = new \Scalr\UI\Request\Validator(); $validator->addErrorIf(!preg_match("/^[A-Za-z0-9]+\$/si", $name), 'name', "Name should contain only alphanumeric characters"); $validator->addErrorIf(strlen($name) > 25, 'name', "Name should be less than 25 characters"); $validator->addErrorIf(in_array($name, array_keys(EVENT_TYPE::getScriptingEvents())), 'name', sprintf("'%' is reserved name for event. Please select another one.", $name)); $scope = $this->request->getScope(); if (!$id) { $criteria = [['name' => $name]]; if ($this->user->isScalrAdmin()) { $criteria[] = ['accountId' => NULL]; } else { $criteria[] = ['$or' => [['accountId' => $this->user->getAccountId()], ['accountId' => NULL]]]; if ($scope == 'account') { $criteria[] = ['envId' => NULL]; } else { $criteria[] = ['$or' => [['envId' => NULL], ['envId' => $this->getEnvironmentId(true)]]]; } } $validator->addErrorIf(EventDefinition::find($criteria)->count(), 'name', 'This name is already in use. Note that Event names are case-insensitive.'); // check replacements $replacements = NULL; if ($this->user->isScalrAdmin()) { $replacements = EventDefinition::find([['name' => $name], ['accountId' => ['$ne' => NULL]]]); } else { if ($scope == 'account') { $replacements = EventDefinition::find([['name' => $name], ['accountId' => $this->user->getAccountId()], ['envId' => ['$ne' => NULL]]]); } } } if (!$validator->isValid($this->response)) { return; } if ($replacements && $replacements->count() && !$replaceEvent) { $this->response->data(['replaceEvent' => true]); $this->response->failure(); return; } if ($id) { $event = EventDefinition::findPk($id); /* @var $event EventDefinition */ if (!$event) { throw new Exception('Event not found'); } if ($this->user->isScalrAdmin() && $event->accountId == NULL && $event->envId == NULL || $this->user->isUser() && $event->accountId == $this->user->getAccountId() && ($event->envId == NULL || $event->envId == $this->getEnvironmentId())) { $event->description = $description; } else { throw new Scalr_Exception_InsufficientPermissions(); } $event->save(); } else { $event = new EventDefinition(); if ($this->user->isScalrAdmin()) { $event->accountId = NULL; $event->envId = NULL; } else { $event->accountId = $this->user->getAccountId(); $event->envId = $scope == 'account' ? NULL : $this->getEnvironmentId(); } $event->name = $name; $event->description = $description; $event->save(); if ($replacements) { foreach ($replacements as $e) { $e->delete(); } } } $used = $event->getUsed($this->user->getAccountId(), $this->getEnvironmentId(true)); $this->response->data(['event' => ['id' => $event->id, 'name' => $event->name, 'description' => $event->description, 'used' => $used, 'scope' => $scope, 'status' => $used ? 'In use' : 'Not used']]); $this->response->success('Custom event definition successfully saved'); }
public function xGetScriptsAction() { $filterSql = " AND ("; // Show shared roles $filterSql .= " origin='" . SCRIPT_ORIGIN_TYPE::SHARED . "'"; // Show custom roles $filterSql .= " OR (origin='" . SCRIPT_ORIGIN_TYPE::CUSTOM . "' AND clientid='" . $this->user->getAccountId() . "')"; //Show approved contributed roles $filterSql .= " OR (origin='" . SCRIPT_ORIGIN_TYPE::USER_CONTRIBUTED . "' AND (approval_state='" . APPROVAL_STATE::APPROVED . "' OR clientid='" . $this->user->getAccountId() . "'))"; $filterSql .= ")"; $scripts = $this->db->Execute("SELECT * FROM scripts WHERE 1=1 {$filterSql}"); $scriptsList = array(); $builtInVariables = array_keys(CONFIG::getScriptingBuiltinVariables()); while ($script = $scripts->FetchRow()) { $dbversions = $this->db->Execute("SELECT * FROM script_revisions WHERE scriptid=? AND (approval_state=? OR (SELECT clientid FROM scripts WHERE scripts.id=script_revisions.scriptid) = '" . $this->user->getAccountId() . "')", array($script['id'], APPROVAL_STATE::APPROVED)); $versions = array(); while ($version = $dbversions->FetchRow()) { $vars = Scalr_UI_Controller_Scripts::GetCustomVariables($version["script"]); $data = array(); foreach ($vars as $var) { if (!in_array($var, $builtInVariables)) { $data[$var] = ucwords(str_replace("_", " ", $var)); } } $versions[] = array("revision" => $version['revision'], "fields" => $data); } $scr = array('id' => $script['id'], 'name' => $script['name'], 'description' => $script['description'], 'issync' => $script['issync'], 'timeout' => $script['issync'] == 1 ? CONFIG::$SYNCHRONOUS_SCRIPT_TIMEOUT : CONFIG::$ASYNCHRONOUS_SCRIPT_TIMEOUT, 'revisions' => $versions); $scriptsList[$script['id']] = $scr; } $dbRole = DBRole::loadById($this->getParam('roleId')); if ($dbRole->origin == ROLE_TYPE::CUSTOM) { $this->user->getPermissions()->validate($dbRole); } $this->response->data(array('scripts' => $scriptsList, 'events' => array(EVENT_TYPE::HOST_UP => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_UP), EVENT_TYPE::HOST_INIT => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_INIT), EVENT_TYPE::HOST_DOWN => EVENT_TYPE::GetEventDescription(EVENT_TYPE::HOST_DOWN), EVENT_TYPE::REBOOT_COMPLETE => EVENT_TYPE::GetEventDescription(EVENT_TYPE::REBOOT_COMPLETE), EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED), EVENT_TYPE::NEW_MYSQL_MASTER => EVENT_TYPE::GetEventDescription(EVENT_TYPE::NEW_MYSQL_MASTER), EVENT_TYPE::EBS_VOLUME_MOUNTED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_MOUNTED), EVENT_TYPE::BEFORE_INSTANCE_LAUNCH => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_INSTANCE_LAUNCH), EVENT_TYPE::BEFORE_HOST_TERMINATE => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_HOST_TERMINATE), EVENT_TYPE::DNS_ZONE_UPDATED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::DNS_ZONE_UPDATED), EVENT_TYPE::EBS_VOLUME_ATTACHED => EVENT_TYPE::GetEventDescription(EVENT_TYPE::EBS_VOLUME_ATTACHED), EVENT_TYPE::BEFORE_HOST_UP => EVENT_TYPE::GetEventDescription(EVENT_TYPE::BEFORE_HOST_UP)), 'roleScripts' => $dbRole->getScripts())); }