convertDateTime() public static method

Converts Time according to timezone parameter.
public static convertDateTime ( DateTime | string | integer $value, string $timezone, string $format = 'M j, Y H:i:s' ) : string
$value DateTime | string | integer DateTime object or Unix Timestamp or string that represents time.
$timezone string TimeZone
$format string Format
return string Returns updated time in given format.
Esempio n. 1
0
 function handleWork($farmId)
 {
     try {
         $dbFarm = DBFarm::LoadByID($farmId);
         $governance = new Scalr_Governance($dbFarm->EnvID);
         $settings = $governance->getValue(Scalr_Governance::CATEGORY_GENERAL, Scalr_Governance::GENERAL_LEASE, 'notifications');
         $curDate = new DateTime();
         $td = new DateTime($dbFarm->GetSetting(DBFarm::SETTING_LEASE_TERMINATE_DATE));
         if ($td > $curDate) {
             // only inform user
             $days = $td->diff($curDate)->days;
             $notifications = json_decode($dbFarm->GetSetting(DBFarm::SETTING_LEASE_NOTIFICATION_SEND), true);
             if (is_array($settings)) {
                 foreach ($settings as $n) {
                     if (!$notifications[$n['key']] && $n['period'] >= $days) {
                         $mailer = Scalr::getContainer()->mailer;
                         $tdHuman = Scalr_Util_DateTime::convertDateTime($td, $dbFarm->GetSetting(DBFarm::SETTING_TIMEZONE), 'M j, Y');
                         if ($n['to'] == 'owner') {
                             $user = new Scalr_Account_User();
                             $user->loadById($dbFarm->createdByUserId);
                             if (Scalr::config('scalr.auth_mode') == 'ldap') {
                                 $email = $user->getSetting(Scalr_Account_User::SETTING_LDAP_EMAIL);
                                 if (!$email) {
                                     $email = $user->getEmail();
                                 }
                             } else {
                                 $email = $user->getEmail();
                             }
                             $mailer->addTo($email);
                         } else {
                             foreach (explode(',', $n['emails']) as $email) {
                                 $mailer->addTo(trim($email));
                             }
                         }
                         $mailer->sendTemplate(SCALR_TEMPLATES_PATH . '/emails/farm_lease_terminate.eml', array('{{terminate_date}}' => $tdHuman, '{{farm}}' => $dbFarm->Name, '{{envName}}' => $dbFarm->GetEnvironmentObject()->name, '{{envId}}' => $dbFarm->GetEnvironmentObject()->id));
                         $notifications[$n['key']] = 1;
                         $dbFarm->SetSetting(DBFarm::SETTING_LEASE_NOTIFICATION_SEND, json_encode($notifications));
                         $this->logger->info("Notification was sent by key: " . $n['key'] . " about farm: " . $dbFarm->Name . " by lease manager");
                     }
                 }
             }
         } else {
             // terminate farm
             $event = new FarmTerminatedEvent(0, 1, false, 1);
             Scalr::FireEvent($farmId, $event);
             $this->logger->info("Farm: " . $dbFarm->Name . " was terminated by lease manager");
         }
     } catch (Exception $e) {
         var_dump($e->getMessage());
     }
 }
Esempio n. 2
0
 private function request($method, Object $params = null)
 {
     $requestObj = new stdClass();
     $requestObj->id = microtime(true);
     $requestObj->method = $method;
     $requestObj->params = $params;
     $jsonRequest = json_encode($requestObj);
     $timestamp = date("D d M Y H:i:s T");
     $dt = new DateTime($timestamp, new DateTimeZone("CDT"));
     $timestamp = Scalr_Util_DateTime::convertDateTime($dt, new DateTimeZone("UTC"), new DateTimeZone("CDT"))->format("D d M Y H:i:s");
     $timestamp .= " UTC";
     $canonical_string = $jsonRequest . $timestamp;
     $signature = base64_encode(hash_hmac('SHA1', $canonical_string, $this->dbServer->GetProperty(SERVER_PROPERTIES::SZR_KEY), 1));
     $request = new HttpRequest("http://{$this->dbServer->remoteIp}:{$this->port}/", HTTP_METH_POST);
     $request->setOptions(array('timeout' => 5, 'connecttimeout' => 5));
     $request->setHeaders(array("Date" => $timestamp, "X-Signature" => $signature, "X-Server-Id" => $this->dbServer->serverId));
     $request->setRawPostData($jsonRequest);
     try {
         // Send request
         $request->send();
         if ($request->getResponseCode() == 200) {
             $response = $request->getResponseData();
             $jResponse = @json_decode($response['body']);
             if ($jResponse->error) {
                 throw new Exception("{$jResponse->error->message} ({$jResponse->error->code}): {$jResponse->error->data}");
             }
             return $jResponse;
         } else {
             throw new Exception(sprintf("Unable to perform request to update client: %s", $request->getResponseCode()));
         }
     } catch (HttpException $e) {
         if (isset($e->innerException)) {
             $msg = $e->innerException->getMessage();
         } else {
             $msg = $e->getMessage();
         }
         throw new Exception(sprintf("Unable to perform request to update client: %s", $msg));
     }
 }
Esempio n. 3
0
 /**
  * xGetPlatformPricingHistoryAction
  *
  * @param   string     $platform       The cloud platform
  * @param   string     $cloudLocation  The cloud location
  * @param   string     $url            optional The cloud's endpoint url
  */
 public function xGetPlatformPricingHistoryAction($platform, $cloudLocation, $url = '')
 {
     $result = [];
     $types = [];
     $history = $this->getContainer()->analytics->prices->getHistory($platform, $cloudLocation, $url, $this->user->getAccountId());
     foreach ($history as $item) {
         /* @var $item PriceHistoryEntity */
         $dt = Scalr_Util_DateTime::convertDateTime($item->applied, null, 'Y-m-d');
         $result[$dt] = $this->getPrice($item);
         foreach ($result[$dt] as $v) {
             $types[$v['type']] = ['type' => $v['type'], 'name' => $v['name']];
         }
     }
     $this->response->data(['types' => array_values($types), 'history' => $result]);
 }
Esempio n. 4
0
    public function extendedInfoAction()
    {
        $this->request->restrictAccess(Acl::RESOURCE_FARMS);
        if (!$this->getParam('farmId')) {
            throw new Exception(_('Server not found'));
        }
        $dbFarm = DBFarm::LoadByID($this->getParam('farmId'));
        $this->user->getPermissions()->validate($dbFarm);
        $tz = $dbFarm->GetSetting(DBFarm::SETTING_TIMEZONE);
        $form = array(array('xtype' => 'fieldset', 'title' => 'General', 'labelWidth' => 220, 'items' => array(array('xtype' => 'displayfield', 'fieldLabel' => 'ID', 'value' => $dbFarm->ID), array('xtype' => 'displayfield', 'fieldLabel' => 'Name', 'value' => $dbFarm->Name), array('xtype' => 'displayfield', 'fieldLabel' => 'Hash', 'value' => $dbFarm->Hash), array('xtype' => 'displayfield', 'fieldLabel' => 'Timezone', 'value' => $tz ? $tz : date_default_timezone_get()))));
        ///Update settings
        $scalarizrRepos = array_keys(Scalr::config('scalr.scalarizr_update.repos'));
        $repo = $dbFarm->GetSetting(DBFarm::SETTING_SZR_UPD_REPOSITORY);
        if (!$repo) {
            $repo = Scalr::config('scalr.scalarizr_update.default_repo');
        }
        $schedule = $dbFarm->GetSetting(DBFarm::SETTING_SZR_UPD_SCHEDULE);
        if (!$schedule) {
            $schedule = "* * *";
        }
        $sChunks = explode(" ", $schedule);
        $store = new stdClass();
        $store->fields = array('name', 'description');
        $store->proxy = 'object';
        $itm = array('xtype' => 'fieldset', 'title' => 'Scalr agent update settings', 'labelWidth' => 220, 'items' => array(array('xtype' => 'combo', 'itemId' => 'repo', 'editable' => false, 'name' => 'szrRepository', 'fieldLabel' => 'Repository', 'queryMode' => 'local', 'store' => $store, 'value' => $repo, 'valueField' => 'name', 'displayField' => 'name'), array('xtype' => 'fieldcontainer', 'fieldLabel' => 'Schedule', 'layout' => 'hbox', 'items' => array(array('xtype' => 'textfield', 'hideLabel' => true, 'width' => 50, 'margin' => '0 3 0 0', 'value' => $sChunks[0], 'name' => 'hh'), array('xtype' => 'textfield', 'hideLabel' => true, 'value' => $sChunks[1], 'width' => 50, 'margin' => '0 3 0 0', 'name' => 'dd'), array('xtype' => 'textfield', 'hideLabel' => true, 'width' => 50, 'value' => $sChunks[2], 'name' => 'dw', 'margin' => '0 3 0 0'), array('xtype' => 'displayinfofield', 'info' => '
*&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;*<br>
─&nbsp;&nbsp;&nbsp;─&nbsp;&nbsp;&nbsp;─<br>
│&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;│<br>
│&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;│<br>
│&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;└───── day of week (0 - 6) (0 is Sunday)<br>
│&nbsp;&nbsp;&nbsp;└─────── day of month (1 - 31)<br>
└───────── hour (0 - 23)<br>'))), array('xtype' => 'button', 'itemId' => 'updSettingsSave', 'text' => 'Save', 'flex' => 1)));
        $form[] = $itm;
        $b = $this->db->GetAll("SELECT DISTINCT(behavior) FROM farm_roles\n            INNER JOIN role_behaviors ON role_behaviors.role_id = farm_roles.role_id WHERE farmid=?", array($this->getParam('farmId')));
        $behaviors = array();
        foreach ($b as $behavior) {
            $behaviors[] = $behavior['behavior'];
        }
        //TODO get rid of code duplication here
        $haveMysqlRole = in_array(ROLE_BEHAVIORS::MYSQL, $behaviors);
        if (!$haveMysqlRole) {
            $haveMysql2Role = in_array(ROLE_BEHAVIORS::MYSQL2, $behaviors);
        }
        if (!$haveMysql2Role && !$haveMysqlRole) {
            $havePerconaRole = in_array(ROLE_BEHAVIORS::PERCONA, $behaviors);
        }
        $havePgRole = in_array(ROLE_BEHAVIORS::POSTGRESQL, $behaviors);
        $haveRedisRole = in_array(ROLE_BEHAVIORS::REDIS, $behaviors);
        $haveCFController = in_array(ROLE_BEHAVIORS::CF_CLOUD_CONTROLLER, $behaviors);
        $type = array();
        if ($havePgRole) {
            $type['postgresql'] = 'PostgreSQL';
        }
        if ($haveRedisRole) {
            $type['redis'] = 'Redis';
        }
        if ($haveMysqlRole) {
            $type['mysql'] = 'MySQL';
        }
        if ($haveMysql2Role) {
            $type['mysql2'] = 'MySQL 5.5';
        }
        if ($havePerconaRole) {
            $type['percona'] = 'Percona Server';
        }
        foreach ($type as $dbMsr => $name) {
            $it = array(array('xtype' => 'displayfield', 'fieldCls' => 'x-form-field-info', 'anchor' => '100%', 'value' => 'Public - To connect to the service from the Internet<br / >Private - To connect to the service from another instance'), array('xtype' => 'displayfield', 'fieldLabel' => 'Writes endpoint (Public)', 'value' => "ext.master.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')), array('xtype' => 'displayfield', 'fieldLabel' => 'Reads endpoint (Public)', 'value' => "ext.slave.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')), array('xtype' => 'displayfield', 'fieldLabel' => 'Writes endpoint (Private)', 'value' => "int.master.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')), array('xtype' => 'displayfield', 'fieldLabel' => 'Reads endpoint (Private)', 'value' => "int.slave.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')));
            $form[] = array('xtype' => 'fieldset', 'title' => "{$name} DNS endpoints", 'labelWidth' => 220, 'items' => $it);
        }
        if ($haveCFController) {
            $it = array(array('xtype' => 'displayfield', 'fieldLabel' => 'VMC target endpoint', 'value' => "api.ext.cloudfoundry.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')));
            $form[] = array('xtype' => 'fieldset', 'title' => "CloudFoundry connection information", 'labelWidth' => 220, 'items' => $it);
        }
        $governance = new Scalr_Governance($this->getEnvironmentId());
        if ($governance->isEnabled(Scalr_Governance::CATEGORY_GENERAL, Scalr_Governance::GENERAL_LEASE) && $dbFarm->GetSetting(DBFarm::SETTING_LEASE_STATUS) && $dbFarm->Status == FARM_STATUS::RUNNING) {
            $terminateDate = new DateTime($dbFarm->GetSetting(DBFarm::SETTING_LEASE_TERMINATE_DATE));
            $localeTerminateDate = Scalr_Util_DateTime::convertDateTime($terminateDate, $tz, 'M j, Y');
            $config = $governance->getValue(Scalr_Governance::CATEGORY_GENERAL, Scalr_Governance::GENERAL_LEASE, null);
            $standardExtend = $config['leaseExtension'] == 'allow' && $terminateDate->diff(new DateTime())->days < $config['defaultLifePeriod'] && $dbFarm->GetSetting(DBFarm::SETTING_LEASE_EXTEND_CNT) < $config['leaseExtensionStandardNumber'];
            $standardExtendRemain = $config['leaseExtensionStandardNumber'] - $dbFarm->GetSetting(DBFarm::SETTING_LEASE_EXTEND_CNT);
            if ($config['leaseExtension'] == 'allow' && $terminateDate->diff(new DateTime())->days >= $config['defaultLifePeriod'] && $dbFarm->GetSetting(DBFarm::SETTING_LEASE_EXTEND_CNT) < $config['leaseExtensionStandardNumber']) {
                $standardExtendNextDate = new DateTime($dbFarm->GetSetting(DBFarm::SETTING_LEASE_TERMINATE_DATE));
                $standardExtendNextDate->sub(new DateInterval('P' . intval($config['defaultLifePeriod']) . 'D'));
                $standardExtendRemain .= ' (Next will be available on ' . Scalr_Util_DateTime::convertDateTime($standardExtendNextDate, $tz, 'M j, Y') . ')';
            }
            $nonStandardExtend = $config['leaseExtension'] == 'allow' && (bool) $config['leaseExtensionNonStandard'];
            $lease = new FarmLease($dbFarm);
            $last = $lease->getLastRequest();
            $extendInProgress = NULL;
            $extendLastError = NULL;
            if ($last) {
                if ($last['status'] == FarmLease::STATUS_PENDING) {
                    $standardExtend = false;
                    $nonStandardExtend = false;
                    $extendInProgress = 'Last request was sent at ' . Scalr_Util_DateTime::convertDateTime($last['request_time'], $tz, 'M j, Y');
                    if ($last['request_user_email']) {
                        $extendInProgress .= ' by ' . $last['request_user_email'];
                    }
                } else {
                    if ($last['status'] == FarmLease::STATUS_DECLINE) {
                        $extendLastError = sprintf('Last request was declined by reason "%s"', $last['answer_comment']);
                    }
                }
            }
            $form[] = array('xtype' => 'fieldset', 'title' => "Lease information", 'labelWidth' => 220, 'itemId' => 'lease', 'params' => array('standardExtend' => $standardExtend, 'standardLifePeriod' => $config['defaultLifePeriod'], 'standardExtendRemain' => $standardExtendRemain, 'nonStandardExtend' => $nonStandardExtend, 'nonStandardExtendInProgress' => $extendInProgress, 'nonStandardExtendLastError' => $extendLastError, 'terminateDate' => $terminateDate->format('Y-m-d'), 'localeTerminateDate' => $localeTerminateDate));
        }
        $this->response->page('ui/farms/extendedinfo.js', array('scalarizr_repos' => $scalarizrRepos, 'id' => $dbFarm->ID, 'name' => $dbFarm->Name, 'info' => $form));
    }
Esempio n. 5
0
 public function xListAction()
 {
     $sql = "SELECT `id`, `name`, `type`, `comments`, `target_id` as `targetId`, `target_server_index` as `targetServerIndex`, `target_type` as `targetType`, `start_time` as `startTime`,\n            `last_start_time` as `lastStartTime`, `restart_every` as `restartEvery`, `config`, `status`, `timezone` FROM `scheduler` WHERE `env_id` = ? AND :FILTER:";
     $response = $this->buildResponseFromSql2($sql, ['id', 'name', 'type', 'startTime', 'lastStartTime', 'timezone', 'status'], ['name'], [$this->getEnvironmentId()]);
     foreach ($response['data'] as &$row) {
         switch ($row['targetType']) {
             case Scalr_SchedulerTask::TARGET_FARM:
                 try {
                     $DBFarm = DBFarm::LoadByID($row['targetId']);
                     $row['targetName'] = $DBFarm->Name;
                 } catch (Exception $e) {
                 }
                 break;
             case Scalr_SchedulerTask::TARGET_ROLE:
                 try {
                     $DBFarmRole = DBFarmRole::LoadByID($row['targetId']);
                     $row['targetName'] = $DBFarmRole->GetRoleObject()->name;
                     $row['targetFarmId'] = $DBFarmRole->FarmID;
                     $row['targetFarmName'] = $DBFarmRole->GetFarmObject()->Name;
                 } catch (Exception $e) {
                 }
                 break;
             case Scalr_SchedulerTask::TARGET_INSTANCE:
                 try {
                     $DBServer = DBServer::LoadByFarmRoleIDAndIndex($row['targetId'], $row['targetServerIndex']);
                     $row['targetName'] = "({$DBServer->remoteIp})";
                     $DBFarmRole = $DBServer->GetFarmRoleObject();
                     $row['targetFarmId'] = $DBServer->farmId;
                     $row['targetFarmName'] = $DBFarmRole->GetFarmObject()->Name;
                     $row['targetRoleId'] = $DBServer->farmRoleId;
                     $row['targetRoleName'] = $DBFarmRole->GetRoleObject()->name;
                 } catch (Exception $e) {
                 }
                 break;
             default:
                 break;
         }
         //$row['type'] = Scalr_SchedulerTask::getTypeByName($row['type']);
         $row['startTime'] = $row['startTime'] ? Scalr_Util_DateTime::convertDateTime($row['startTime'], $row['timezone']) : 'Now';
         $row['lastStartTime'] = $row['lastStartTime'] ? Scalr_Util_DateTime::convertDateTime($row['lastStartTime'], $row['timezone']) : '';
         $row['config'] = unserialize($row['config']);
         $script = Script::findPk($row['config']['scriptId']);
         if (!empty($script)) {
             $row['config']['scriptName'] = $script->name;
         }
     }
     $this->response->data($response);
 }
Esempio n. 6
0
 public function xTransferAction()
 {
     foreach ($this->db->GetAll('SELECT * FROM scheduler_tasks WHERE client_id = ?', array($this->user->getAccountId())) as $taskOld) {
         $task = Scalr_SchedulerTask::init();
         $task->name = $taskOld['task_name'];
         $task->type = $taskOld['task_type'];
         $task->targetId = $taskOld['target_id'];
         $task->targetType = $taskOld['target_type'];
         $task->timezone = $taskOld['timezone'];
         $timezone = new DateTimeZone($taskOld['timezone']);
         $startTm = new DateTime($taskOld['start_time_date']);
         $endTm = new DateTime($taskOld['end_time_date']);
         $lastStartTm = new DateTime($taskOld['last_start_time']);
         // old time in timezone (from record) to server time (timezone leave for UI)
         Scalr_Util_DateTime::convertDateTime($startTm, null, $timezone);
         Scalr_Util_DateTime::convertDateTime($endTm, null, $timezone);
         Scalr_Util_DateTime::convertDateTime($lastStartTm, null, $timezone);
         $task->startTime = $startTm->format('Y-m-d H:i:s');
         $task->endTime = $endTm->format('Y-m-d H:i:s');
         $task->lastStartTime = $taskOld['last_start_time'] ? $lastStartTm->format('Y-m-d H:i:s') : NULL;
         switch ($taskOld['target_type']) {
             case SCRIPTING_TARGET::FARM:
                 try {
                     $DBFarm = DBFarm::LoadByID($taskOld['target_id']);
                 } catch (Exception $e) {
                     continue 2;
                 }
                 break;
             case SCRIPTING_TARGET::ROLE:
                 try {
                     $DBFarmRole = DBFarmRole::LoadByID($taskOld['target_id']);
                     $a = $DBFarmRole->GetRoleObject()->name;
                     $a = $DBFarmRole->FarmID;
                     $a = $DBFarmRole->GetFarmObject()->Name;
                 } catch (Exception $e) {
                     continue 2;
                 }
                 break;
             case SCRIPTING_TARGET::INSTANCE:
                 $serverArgs = explode(':', $taskOld['target_id']);
                 try {
                     $DBServer = DBServer::LoadByFarmRoleIDAndIndex($serverArgs[0], $serverArgs[1]);
                     $a = "({$DBServer->remoteIp})";
                     $DBFarmRole = $DBServer->GetFarmRoleObject();
                     $a = $DBServer->farmId;
                     $a = $DBFarmRole->GetFarmObject()->Name;
                     $a = $DBServer->farmRoleId;
                     $a = $DBFarmRole->GetRoleObject()->name;
                 } catch (Exception $e) {
                     continue 2;
                 }
                 break;
         }
         $config = unserialize($taskOld['task_config']);
         $r = array();
         switch ($task->type) {
             case Scalr_SchedulerTask::SCRIPT_EXEC:
                 $r['scriptId'] = (string) $config['script_id'];
                 unset($config['script_id']);
                 $r['scriptIsSync'] = (string) $config['issync'];
                 unset($config['issync']);
                 $r['scriptTimeout'] = (string) $config['timeout'];
                 unset($config['timeout']);
                 $r['scriptVersion'] = (string) $config['revision'];
                 unset($config['revision']);
                 $r['scriptOptions'] = $config;
                 break;
             case Scalr_SchedulerTask::LAUNCH_FARM:
                 break;
             case Scalr_SchedulerTask::TERMINATE_FARM:
                 $r['deleteDNSZones'] = $config['deleteDNS'];
                 $r['deleteCloudObjects'] = $config['keep_elastic_ips'] == '1' || $config['keep_ebs'] == '1' ? NULL : '1';
                 break;
         }
         $task->config = $r;
         $task->restartEvery = $taskOld['restart_every'];
         $task->orderIndex = $taskOld['order_index'];
         $task->status = $taskOld['status'];
         $task->accountId = $taskOld['client_id'];
         $task->envId = $taskOld['env_id'];
         $task->save();
     }
     $this->db->Execute('DELETE FROM scheduler_tasks WHERE client_id = ?', array($this->user->getAccountId()));
     $this->response->success('All tasks transfered successfully');
 }
Esempio n. 7
0
    public function extendedInfoAction()
    {
        if (!$this->getParam('farmId')) {
            throw new Exception(_('Server not found'));
        }
        $dbFarm = DBFarm::LoadByID($this->getParam('farmId'));
        $this->user->getPermissions()->validate($dbFarm);
        $tz = $dbFarm->GetSetting(Entity\FarmSetting::TIMEZONE);
        $form = array(array('xtype' => 'container', 'layout' => array('type' => 'hbox', 'align' => 'stretch'), 'cls' => 'x-fieldset-separator-bottom', 'items' => array(array('xtype' => 'fieldset', 'title' => 'General', 'flex' => 1, 'cls' => 'x-fieldset-separator-none', 'defaults' => array('labelWidth' => 130), 'items' => array(array('xtype' => 'displayfield', 'fieldLabel' => 'ID', 'value' => $dbFarm->ID), array('xtype' => 'displayfield', 'fieldLabel' => 'Name', 'value' => $dbFarm->Name), array('xtype' => 'displayfield', 'fieldLabel' => 'Hash', 'value' => $dbFarm->Hash), array('xtype' => 'displayfield', 'fieldLabel' => 'Timezone', 'value' => $tz ? $tz : date_default_timezone_get()))))));
        $repo = $dbFarm->GetSetting(Entity\FarmSetting::SZR_UPD_REPOSITORY);
        if (!$repo) {
            $repo = Scalr::config('scalr.scalarizr_update.default_repo');
        }
        $schedule = $dbFarm->GetSetting(Entity\FarmSetting::SZR_UPD_SCHEDULE);
        if (!$schedule) {
            $schedule = "* * *";
        }
        $sChunks = explode(" ", $schedule);
        $itm = array('xtype' => 'fieldset', 'title' => 'Scalr agent update settings', 'flex' => 1, 'cls' => 'x-fieldset-separator-left', 'defaults' => array('labelWidth' => 150), 'items' => array(array('xtype' => 'displayfield', 'fieldLabel' => 'Repository', 'value' => Scalr::isHostedScalr() ? Utils::getScalarizrUpdateRepoTitle($repo) : $repo), array('xtype' => 'fieldcontainer', 'fieldLabel' => 'Schedule (UTC time)', 'layout' => 'hbox', 'defaults' => array('margin' => '0 6 0 0'), 'items' => array(array('xtype' => 'textfield', 'hideLabel' => true, 'readOnly' => true, 'width' => 50, 'value' => $sChunks[0], 'name' => 'hh'), array('xtype' => 'textfield', 'hideLabel' => true, 'readOnly' => true, 'value' => $sChunks[1], 'width' => 50, 'name' => 'dd'), array('xtype' => 'textfield', 'hideLabel' => true, 'readOnly' => true, 'width' => 50, 'value' => $sChunks[2], 'name' => 'dw'), array('xtype' => 'displayinfofield', 'info' => '
*&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;*<br>
─&nbsp;&nbsp;&nbsp;─&nbsp;&nbsp;&nbsp;─<br>
│&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;│<br>
│&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;│<br>
│&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;└───── day of week (0 - 6) (0 is Sunday)<br>
│&nbsp;&nbsp;&nbsp;└─────── day of month (1 - 31)<br>
└───────── hour (0 - 23)<br>')))));
        $form[0]['items'][] = $itm;
        $b = $this->db->GetAll("SELECT DISTINCT(behavior) FROM farm_roles\n            INNER JOIN role_behaviors ON role_behaviors.role_id = farm_roles.role_id WHERE farmid=?", array($this->getParam('farmId')));
        $behaviors = array();
        foreach ($b as $behavior) {
            $behaviors[] = $behavior['behavior'];
        }
        //TODO get rid of code duplication here
        $haveMysqlRole = in_array(ROLE_BEHAVIORS::MYSQL, $behaviors);
        if (!$haveMysqlRole) {
            $haveMysql2Role = in_array(ROLE_BEHAVIORS::MYSQL2, $behaviors);
        }
        if (!$haveMysql2Role && !$haveMysqlRole) {
            $havePerconaRole = in_array(ROLE_BEHAVIORS::PERCONA, $behaviors);
        }
        $havePgRole = in_array(ROLE_BEHAVIORS::POSTGRESQL, $behaviors);
        $haveRedisRole = in_array(ROLE_BEHAVIORS::REDIS, $behaviors);
        $haveCFController = in_array(ROLE_BEHAVIORS::CF_CLOUD_CONTROLLER, $behaviors);
        $type = array();
        if ($havePgRole) {
            $type['postgresql'] = 'PostgreSQL';
        }
        if ($haveRedisRole) {
            $type['redis'] = 'Redis';
        }
        if ($haveMysqlRole) {
            $type['mysql'] = 'MySQL';
        }
        if ($haveMysql2Role) {
            $type['mysql2'] = 'MySQL 5.5';
        }
        if ($havePerconaRole) {
            $type['percona'] = 'Percona Server';
        }
        foreach ($type as $dbMsr => $name) {
            $it = array(array('xtype' => 'displayfield', 'anchor' => '100%', 'cls' => 'x-form-field-info', 'value' => 'Public - To connect to the service from the Internet<br / >Private - To connect to the service from another instance'), array('xtype' => 'displayfield', 'fieldLabel' => 'Writes endpoint (Public)', 'value' => "ext.master.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')), array('xtype' => 'displayfield', 'fieldLabel' => 'Reads endpoint (Public)', 'value' => "ext.slave.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')), array('xtype' => 'displayfield', 'fieldLabel' => 'Writes endpoint (Private)', 'value' => "int.master.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')), array('xtype' => 'displayfield', 'fieldLabel' => 'Reads endpoint (Private)', 'value' => "int.slave.{$dbMsr}.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')));
            $form[] = array('xtype' => 'fieldset', 'title' => "{$name} DNS endpoints", 'defaults' => array('labelWidth' => 220), 'items' => $it);
        }
        if ($haveCFController) {
            $it = array(array('xtype' => 'displayfield', 'fieldLabel' => 'VMC target endpoint', 'value' => "api.ext.cloudfoundry.{$dbFarm->Hash}." . \Scalr::config('scalr.dns.static.domain_name')));
            $form[] = array('xtype' => 'fieldset', 'title' => "CloudFoundry connection information", 'defaults' => array('labelWidth' => 220), 'items' => $it);
        }
        $governance = new Scalr_Governance($this->getEnvironmentId());
        if ($governance->isEnabled(Scalr_Governance::CATEGORY_GENERAL, Scalr_Governance::GENERAL_LEASE) && $dbFarm->GetSetting(Entity\FarmSetting::LEASE_STATUS) && $dbFarm->Status == FARM_STATUS::RUNNING) {
            $terminateDate = new DateTime($dbFarm->GetSetting(Entity\FarmSetting::LEASE_TERMINATE_DATE));
            $localeTerminateDate = Scalr_Util_DateTime::convertDateTime($terminateDate, $tz, 'M j, Y');
            $config = $governance->getValue(Scalr_Governance::CATEGORY_GENERAL, Scalr_Governance::GENERAL_LEASE, null);
            $standardExtend = $config['leaseExtension'] == 'allow' && $terminateDate->diff(new DateTime())->days < $config['defaultLifePeriod'] && $dbFarm->GetSetting(Entity\FarmSetting::LEASE_EXTEND_CNT) < $config['leaseExtensionStandardNumber'];
            $standardExtendRemain = $config['leaseExtensionStandardNumber'] - $dbFarm->GetSetting(Entity\FarmSetting::LEASE_EXTEND_CNT);
            if ($config['leaseExtension'] == 'allow' && $terminateDate->diff(new DateTime())->days >= $config['defaultLifePeriod'] && $dbFarm->GetSetting(Entity\FarmSetting::LEASE_EXTEND_CNT) < $config['leaseExtensionStandardNumber']) {
                $standardExtendNextDate = new DateTime($dbFarm->GetSetting(Entity\FarmSetting::LEASE_TERMINATE_DATE));
                $standardExtendNextDate->sub(new DateInterval('P' . intval($config['defaultLifePeriod']) . 'D'));
                $standardExtendRemain .= ' (Next will be available on ' . Scalr_Util_DateTime::convertDateTime($standardExtendNextDate, $tz, 'M j, Y') . ')';
            }
            $nonStandardExtend = $config['leaseExtension'] == 'allow' && (bool) $config['leaseExtensionNonStandard'];
            $lease = new FarmLease($dbFarm);
            $last = $lease->getLastRequest();
            $extendInProgress = NULL;
            $extendLastError = NULL;
            if ($last) {
                if ($last['status'] == FarmLease::STATUS_PENDING) {
                    $standardExtend = false;
                    $nonStandardExtend = false;
                    $extendInProgress = 'Last request was sent at ' . Scalr_Util_DateTime::convertDateTime($last['request_time'], $tz, 'M j, Y');
                    if ($last['request_user_email']) {
                        $extendInProgress .= ' by ' . $last['request_user_email'];
                    }
                } else {
                    if ($last['status'] == FarmLease::STATUS_DECLINE) {
                        $extendLastError = sprintf('Last request was declined by reason "%s"', $last['answer_comment']);
                    }
                }
            }
            $form[] = array('xtype' => 'fieldset', 'title' => "Lease information", 'defaults' => array('labelWidth' => 220), 'itemId' => 'lease', 'params' => array('farmLaunchPermission' => $this->request->hasPermissions($dbFarm->__getNewFarmObject(), Acl::PERM_FARMS_LAUNCH_TERMINATE), 'standardExtend' => $standardExtend, 'standardLifePeriod' => $config['defaultLifePeriod'], 'standardExtendRemain' => $standardExtendRemain, 'nonStandardExtend' => $nonStandardExtend, 'nonStandardExtendInProgress' => $extendInProgress, 'nonStandardExtendLastError' => $extendLastError, 'terminateDate' => $terminateDate->format('Y-m-d'), 'localeTerminateDate' => $localeTerminateDate));
        }
        $moduleParams = array('id' => $dbFarm->ID, 'name' => $dbFarm->Name, 'info' => $form);
        if ($this->getContainer()->analytics->enabled && $this->getEnvironment()->getPlatformConfigValue(Scalr_Environment::SETTING_CC_ID)) {
            $farmCostData = $this->getFarmCostData($dbFarm->ID);
            $moduleParams['analytics'] = $farmCostData['analytics'];
            $moduleParams['projectId'] = $farmCostData['projectId'];
            $moduleParams['analytics']['farmCostMetering'] = $farmCostData['farmCostMetering'];
            $c = self::loadController('Builder', 'Scalr_UI_Controller_Farms');
            $moduleParams['roles'] = [];
            foreach ($c->getFarm2($dbFarm->ID)['roles'] as $role) {
                $moduleParams['roles'][] = ['platform' => $role['platform'], 'alias' => $role['alias'], 'running_servers' => $role['running_servers'], 'suspended_servers' => $role['suspended_servers'], 'hourly_rate' => $role['hourly_rate'], Entity\FarmRoleSetting::SCALING_ENABLED => $role['settings'][Entity\FarmRoleSetting::SCALING_ENABLED], Entity\FarmRoleSetting::SCALING_MIN_INSTANCES => $role['settings'][Entity\FarmRoleSetting::SCALING_MIN_INSTANCES], Entity\FarmRoleSetting::SCALING_MAX_INSTANCES => $role['settings'][Entity\FarmRoleSetting::SCALING_MAX_INSTANCES], Scalr_Role_Behavior::ROLE_BASE_CONSIDER_SUSPENDED => $role['settings'][Scalr_Role_Behavior::ROLE_BASE_CONSIDER_SUSPENDED]];
            }
        }
        $this->response->page('ui/farms/extendedinfo.js', $moduleParams, array('ui/farms/builder/costmetering.js'));
    }
Esempio n. 8
0
 public function xListAction()
 {
     $data = $this->db->GetAll('SELECT id, name, type, comments, target_id as targetId, target_server_index as targetServerIndex, target_type as targetType, start_time as startTime,
         end_time as endTime, last_start_time as lastStartTime, restart_every as restartEvery, config,
         status, timezone FROM `scheduler` WHERE `env_id` = ?', [$this->getEnvironmentId()]);
     foreach ($data as &$row) {
         switch ($row['targetType']) {
             case Scalr_SchedulerTask::TARGET_FARM:
                 try {
                     $DBFarm = DBFarm::LoadByID($row['targetId']);
                     $row['targetName'] = $DBFarm->Name;
                 } catch (Exception $e) {
                 }
                 break;
             case Scalr_SchedulerTask::TARGET_ROLE:
                 try {
                     $DBFarmRole = DBFarmRole::LoadByID($row['targetId']);
                     $row['targetName'] = $DBFarmRole->GetRoleObject()->name;
                     $row['targetFarmId'] = $DBFarmRole->FarmID;
                     $row['targetFarmName'] = $DBFarmRole->GetFarmObject()->Name;
                 } catch (Exception $e) {
                 }
                 break;
             case Scalr_SchedulerTask::TARGET_INSTANCE:
                 try {
                     $DBServer = DBServer::LoadByFarmRoleIDAndIndex($row['targetId'], $row['targetServerIndex']);
                     $row['targetName'] = "({$DBServer->remoteIp})";
                     $DBFarmRole = $DBServer->GetFarmRoleObject();
                     $row['targetFarmId'] = $DBServer->farmId;
                     $row['targetFarmName'] = $DBFarmRole->GetFarmObject()->Name;
                     $row['targetRoleId'] = $DBServer->farmRoleId;
                     $row['targetRoleName'] = $DBFarmRole->GetRoleObject()->name;
                 } catch (Exception $e) {
                 }
                 break;
             default:
                 break;
         }
         //$row['type'] = Scalr_SchedulerTask::getTypeByName($row['type']);
         $row['startTime'] = $row['startTime'] ? Scalr_Util_DateTime::convertDateTime($row['startTime'], $row['timezone']) : 'Now';
         $row['endTime'] = $row['endTime'] ? Scalr_Util_DateTime::convertDateTime($row['endTime'], $row['timezone']) : 'Never';
         $row['lastStartTime'] = $row['lastStartTime'] ? Scalr_Util_DateTime::convertDateTime($row['lastStartTime'], $row['timezone']) : '';
         $row['config'] = unserialize($row['config']);
         $script = Script::findPk($row['config']['scriptId']);
         if ($script) {
             $row['config']['scriptName'] = $script->name;
         }
     }
     $this->response->data(['data' => $data]);
 }
Esempio n. 9
0
 function Run()
 {
     global $db;
     $time = microtime(true);
     $db->Execute("\r\n\t\t\t\tCREATE TABLE IF NOT EXISTS `scheduler` (\r\n\t\t\t\t  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n\t\t\t\t  `name` varchar(255) DEFAULT NULL,\r\n\t\t\t\t  `type` varchar(255) DEFAULT NULL,\r\n\t\t\t\t  `target_id` varchar(255) DEFAULT NULL COMMENT 'id of farm, farm_role or farm_role:index from other tables',\r\n\t\t\t\t  `target_type` varchar(255) DEFAULT NULL COMMENT 'farm, role or instance type',\r\n\t\t\t\t  `start_time` datetime DEFAULT NULL COMMENT 'start task''s time',\r\n\t\t\t\t  `end_time` datetime DEFAULT NULL COMMENT 'end task by this time',\r\n\t\t\t\t  `last_start_time` datetime DEFAULT NULL COMMENT 'the last time task was started',\r\n\t\t\t\t  `restart_every` int(11) DEFAULT '0' COMMENT 'restart task every N minutes',\r\n\t\t\t\t  `config` text COMMENT 'arguments for action',\r\n\t\t\t\t  `order_index` int(11) DEFAULT NULL COMMENT 'task order',\r\n\t\t\t\t  `timezone` varchar(100) DEFAULT NULL,\r\n\t\t\t\t  `status` varchar(11) DEFAULT NULL COMMENT 'active, suspended, finished',\r\n\t\t\t\t  `account_id` int(11) DEFAULT NULL COMMENT 'Task belongs to selected account',\r\n\t\t\t\t  `env_id` int(11) DEFAULT NULL,\r\n\t\t\t\t  PRIMARY KEY (`id`),\r\n\t\t\t\t  KEY `index` (`name`,`type`,`start_time`,`end_time`,`last_start_time`,`restart_every`,`order_index`,`status`,`account_id`,`env_id`)\r\n\t\t\t\t) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;\r\n\t\t\t");
     $cnt = 0;
     foreach ($db->GetAll('SELECT * FROM scheduler_tasks') as $taskOld) {
         $task = Scalr_SchedulerTask::init();
         $task->name = $taskOld['task_name'];
         $task->type = $taskOld['task_type'];
         $task->targetId = $taskOld['target_id'];
         $task->targetType = $taskOld['target_type'];
         $task->timezone = $taskOld['timezone'];
         $timezone = new DateTimeZone($taskOld['timezone']);
         $startTm = new DateTime($taskOld['start_time_date']);
         $endTm = new DateTime($taskOld['end_time_date']);
         $lastStartTm = new DateTime($taskOld['last_start_time']);
         // old time in timezone (from record) to server time (timezone leave for UI)
         Scalr_Util_DateTime::convertDateTime($startTm, null, $timezone);
         Scalr_Util_DateTime::convertDateTime($endTm, null, $timezone);
         Scalr_Util_DateTime::convertDateTime($lastStartTm, null, $timezone);
         $task->startTime = $startTm->format('Y-m-d H:i:s');
         $task->endTime = $endTm->format('Y-m-d H:i:s');
         $task->lastStartTime = $taskOld['last_start_time'] ? $lastStartTm->format('Y-m-d H:i:s') : NULL;
         switch ($taskOld['target_type']) {
             case SCRIPTING_TARGET::FARM:
                 try {
                     $DBFarm = DBFarm::LoadByID($taskOld['target_id']);
                 } catch (Exception $e) {
                     continue 2;
                 }
                 break;
             case SCRIPTING_TARGET::ROLE:
                 try {
                     $DBFarmRole = DBFarmRole::LoadByID($taskOld['target_id']);
                     $a = $DBFarmRole->GetRoleObject()->name;
                     $a = $DBFarmRole->FarmID;
                     $a = $DBFarmRole->GetFarmObject()->Name;
                 } catch (Exception $e) {
                     continue 2;
                 }
                 break;
             case SCRIPTING_TARGET::INSTANCE:
                 $serverArgs = explode(':', $taskOld['target_id']);
                 try {
                     $DBServer = DBServer::LoadByFarmRoleIDAndIndex($serverArgs[0], $serverArgs[1]);
                     $a = "({$DBServer->remoteIp})";
                     $DBFarmRole = $DBServer->GetFarmRoleObject();
                     $a = $DBServer->farmId;
                     $a = $DBFarmRole->GetFarmObject()->Name;
                     $a = $DBServer->farmRoleId;
                     $a = $DBFarmRole->GetRoleObject()->name;
                 } catch (Exception $e) {
                     continue 2;
                 }
                 break;
         }
         $config = unserialize($taskOld['task_config']);
         $r = array();
         switch ($task->type) {
             case Scalr_SchedulerTask::SCRIPT_EXEC:
                 $r['scriptId'] = (string) $config['script_id'];
                 unset($config['script_id']);
                 $r['scriptIsSync'] = (string) $config['issync'];
                 unset($config['issync']);
                 $r['scriptTimeout'] = (string) $config['timeout'];
                 unset($config['timeout']);
                 $r['scriptVersion'] = (string) $config['revision'];
                 unset($config['revision']);
                 $r['scriptOptions'] = $config;
                 break;
             case Scalr_SchedulerTask::LAUNCH_FARM:
                 break;
             case Scalr_SchedulerTask::TERMINATE_FARM:
                 $r['deleteDNSZones'] = $config['deleteDNS'];
                 $r['deleteCloudObjects'] = $config['keep_elastic_ips'] == '1' || $config['keep_ebs'] == '1' ? NULL : '1';
                 break;
         }
         $task->config = $r;
         $task->restartEvery = $taskOld['restart_every'];
         $task->orderIndex = $taskOld['order_index'];
         $task->status = $taskOld['status'];
         $task->accountId = $taskOld['client_id'];
         $task->envId = $taskOld['env_id'];
         $task->save();
     }
     print "Done.\n";
     $t = round(microtime(true) - $time, 2);
     print "Upgrade process took {$t} seconds\n\n\n";
 }
Esempio n. 10
0
 public function xListTasksAction()
 {
     $this->request->defineParams(array('sort' => array('type' => 'json')));
     $sql = 'SELECT id, name, type, comments, target_id as targetId, target_server_index as targetServerIndex, target_type as targetType, start_time as startTime,
         end_time as endTime, last_start_time as lastStartTime, restart_every as restartEvery, config, order_index as orderIndex,
         status, timezone FROM `scheduler` WHERE `env_id` = ? AND :FILTER:';
     $response = $this->buildResponseFromSql2($sql, array('id', 'name', 'type', 'startTime', 'endTime', 'lastStartTime', 'timezone', 'orderIndex', 'status', 'timezone'), array('id', 'name'), array($this->getEnvironmentId()));
     foreach ($response['data'] as &$row) {
         switch ($row['targetType']) {
             case Scalr_SchedulerTask::TARGET_FARM:
                 try {
                     $DBFarm = DBFarm::LoadByID($row['targetId']);
                     $row['targetName'] = $DBFarm->Name;
                 } catch (Exception $e) {
                 }
                 break;
             case Scalr_SchedulerTask::TARGET_ROLE:
                 try {
                     $DBFarmRole = DBFarmRole::LoadByID($row['targetId']);
                     $row['targetName'] = $DBFarmRole->GetRoleObject()->name;
                     $row['targetFarmId'] = $DBFarmRole->FarmID;
                     $row['targetFarmName'] = $DBFarmRole->GetFarmObject()->Name;
                 } catch (Exception $e) {
                 }
                 break;
             case Scalr_SchedulerTask::TARGET_INSTANCE:
                 try {
                     $DBServer = DBServer::LoadByFarmRoleIDAndIndex($row['targetId'], $row['targetServerIndex']);
                     $row['targetName'] = "({$DBServer->remoteIp})";
                     $DBFarmRole = $DBServer->GetFarmRoleObject();
                     $row['targetFarmId'] = $DBServer->farmId;
                     $row['targetFarmName'] = $DBFarmRole->GetFarmObject()->Name;
                     $row['targetRoleId'] = $DBServer->farmRoleId;
                     $row['targetRoleName'] = $DBFarmRole->GetRoleObject()->name;
                 } catch (Exception $e) {
                 }
                 break;
             default:
                 break;
         }
         $row['type'] = Scalr_SchedulerTask::getTypeByName($row['type']);
         $row['startTime'] = $row['startTime'] ? Scalr_Util_DateTime::convertDateTime($row['startTime'], $row['timezone']) : 'Now';
         $row['endTime'] = $row['endTime'] ? Scalr_Util_DateTime::convertDateTime($row['endTime'], $row['timezone']) : 'Never';
         $row['lastStartTime'] = $row['lastStartTime'] ? Scalr_Util_DateTime::convertDateTime($row['lastStartTime'], $row['timezone']) : '';
         $row['config'] = unserialize($row['config']);
         $script = Script::findPk($row['config']['scriptId']);
         if ($script) {
             $row['config']['scriptName'] = $script->name;
         }
     }
     $this->response->data($response);
 }