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;
 }
Ejemplo n.º 2
0
 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));
 }
Ejemplo n.º 3
0
Archivo: Logs.php Proyecto: scalr/scalr
 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]);
 }
Ejemplo n.º 4
0
 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');
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
 public static function getScriptingData($accountId, $envId)
 {
     return ['events' => array_merge(\EVENT_TYPE::getScriptingEventsWithScope(), EventDefinition::getList($accountId, $envId)), 'scripts' => static::getList($accountId, $envId)];
 }
Ejemplo n.º 7
0
 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));
 }
Ejemplo n.º 8
0
 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));
 }
Ejemplo n.º 9
0
 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;
 }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
 public function getScriptingData()
 {
     return array('events' => EVENT_TYPE::getScriptingEvents(), 'scripts' => $this->getList());
 }
Ejemplo n.º 12
0
 /**
  * @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');
 }
Ejemplo n.º 13
0
 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()));
 }