getConstant() public static méthode

public static getConstant ( $name )
Exemple #1
0
 public function createDataBundle(DBFarmRole $dbFarmRole, array $params = array())
 {
     if (!$params['dataBundleType']) {
         $params['dataBundleType'] = 'full';
     }
     if ($params['compressor'] === null) {
         $params['compressor'] = 'gzip';
     }
     //$params['useSlave']
     if ($dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_IS_RUNNING) == 1) {
         throw new Exception("Data bundle already in progress");
     }
     $currentServer = $this->getServerForDataBundle($dbFarmRole, $params['useSlave']);
     if (!$currentServer) {
         throw new Exception("No suitable server for data bundle");
     }
     $message = new Scalr_Messaging_Msg_DbMsr_CreateDataBundle();
     $storageType = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_STORAGE_ENGINE);
     $storageGeneration = $storageType == 'lvm' ? 2 : 1;
     if ($dbFarmRole->isOpenstack()) {
         $driver = 'swift';
     } else {
         switch ($dbFarmRole->Platform) {
             case SERVER_PLATFORMS::EC2:
                 $driver = 's3';
                 break;
             case SERVER_PLATFORMS::GCE:
                 $driver = 'gcs';
                 break;
         }
     }
     if ($storageGeneration == 2) {
         $behavior = $dbFarmRole->GetRoleObject()->getDbMsrBehavior();
         if (!isset($message->{$behavior})) {
             $message->{$behavior} = new stdClass();
         }
         $message->{$behavior}->backup = new stdClass();
         $message->{$behavior}->backup->type = 'xtrabackup';
         $message->{$behavior}->backup->compressor = $params['compressor'];
         $message->{$behavior}->backup->backupType = $params['dataBundleType'];
         $message->{$behavior}->backup->cloudfsTarget = sprintf("%s://scalr-%s-%s-%s/data-bundles/%s/%s/", $driver, SCALR_ID, $dbFarmRole->GetFarmObject()->EnvID, $dbFarmRole->CloudLocation, $dbFarmRole->FarmID, $behavior);
         if ($params['dataBundleType'] == 'incremental') {
             $previousManifest = $this->db->GetOne("SELECT manifest FROM storage_restore_configs WHERE farm_roleid = ? ORDER BY id DESC LIMIT 1", array($dbFarmRole->ID));
             $message->{$behavior}->backup->prevCloudfsSource = $previousManifest;
         }
     }
     $message->storageType = $storageType;
     $currentServer->SendMessage($message);
     $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_BUNDLE_IS_RUNNING"), 1, DBFarmRole::TYPE_LCL);
     $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_BUNDLE_RUNNING_TS"), time(), DBFarmRole::TYPE_LCL);
     $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_BUNDLE_SERVER_ID"), $currentServer->serverId, DBFarmRole::TYPE_LCL);
 }
Exemple #2
0
 private function performDbMsrAction($action, DBFarmRole $dbFarmRole, $tz)
 {
     $timeouted = false;
     if ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_ENABLED")) && $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY")) != 0) {
         if ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING")) == 1) {
             // Wait for timeout time * 2 (Example: NIVs problem with big mysql snapshots)
             // We must wait for running bundle process.
             $timeout = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY")) * (3600 * 2);
             $lastTs = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_RUNNING_TS"));
             if ($lastTs + $timeout < time()) {
                 $timeouted = true;
             }
             if ($timeouted) {
                 $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING"), 0, DBFarmRole::TYPE_LCL);
             }
         } else {
             /*
              * Check bundle window
              */
             $period = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY"));
             $timeout = $period * 3600;
             $lastActionTime = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_LAST_TS"));
             $performAction = false;
             if ($period % 24 == 0) {
                 if ($lastActionTime) {
                     $days = $period / 24;
                     $dateTime = new DateTime(null, new DateTimeZone($tz));
                     $currentDate = (int) $dateTime->format("Ymd");
                     $dateTime->setTimestamp(strtotime("+{$days} day", $lastActionTime));
                     $nextDate = (int) $dateTime->format("Ymd");
                     if ($nextDate > $currentDate) {
                         return;
                     }
                 }
                 $pbwFrom = (int) ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_START_HH")) . $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_START_MM")));
                 $pbwTo = (int) ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_END_HH")) . $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_END_MM")));
                 if ($pbwFrom && $pbwTo) {
                     $dateTime = new DateTime(null, new DateTimeZone($tz));
                     $currentTime = (int) $dateTime->format("Hi");
                     //$current_time = (int)date("Hi");
                     //BUG HERE: 22:00 - 6:00 - doesn't work
                     if ($pbwFrom <= $currentTime && $pbwTo >= $currentTime) {
                         $performAction = true;
                     }
                 } else {
                     $performAction = true;
                 }
             } else {
                 //Check timeout
                 if ($lastActionTime + $timeout < time()) {
                     $performAction = true;
                 }
             }
             if ($performAction) {
                 $behavior = Scalr_Role_Behavior::loadByName($dbFarmRole->GetRoleObject()->getDbMsrBehavior());
                 if ($action == 'BUNDLE') {
                     $behavior->createDataBundle($dbFarmRole, array('compressor' => $dbFarmRole->GetSetting(Scalr_Role_DbMsrBehavior::ROLE_DATA_BUNDLE_COMPRESSION), 'useSlave' => $dbFarmRole->GetSetting(Scalr_Role_DbMsrBehavior::ROLE_DATA_BUNDLE_USE_SLAVE)));
                 }
                 if ($action == 'BACKUP') {
                     $behavior->createBackup($dbFarmRole);
                 }
             }
         }
     }
 }
 private function performDbMsrAction($action, $dbFarmRole)
 {
     if ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_ENABLED")) && $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY")) != 0) {
         if ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING")) == 1) {
             // Wait for timeout time * 2 (Example: NIVs problem with big mysql snapshots)
             // We must wait for running bundle process.
             $timeout = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY")) * (3600 * 2);
             $lastTs = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_RUNNING_TS"));
             if ($lastTs + $timeout < time()) {
                 $timeouted = true;
             }
             if ($timeouted) {
                 $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING"), 0);
             }
         } else {
             /*
              * Check bundle window
              */
             $period = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY"));
             $timeout = $period * 3600;
             $lastActionTime = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_LAST_TS"));
             $performAction = false;
             if ($period % 24 == 0) {
                 if ($lastActionTime) {
                     $days = $period / 24;
                     $day = (int) date("md", strtotime("+{$days} day", $lastActionTime));
                     if ($day > (int) date("md")) {
                         return;
                     }
                 }
                 $pbwFrom = (int) ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_START_HH")) . $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_START_MM")));
                 $pbwTo = (int) ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_END_HH")) . $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_END_MM")));
                 if ($pbwFrom && $pbwTo) {
                     $current_time = (int) date("Hi");
                     if ($pbwFrom <= $current_time && $pbwTo >= $current_time) {
                         $performAction = true;
                     }
                 } else {
                     $performAction = true;
                 }
             } else {
                 //Check timeout
                 if ($lastActionTime + $timeout < time()) {
                     $performAction = true;
                 }
             }
             if ($performAction) {
                 // perform data bundle on master
                 $servers = $dbFarmRole->GetServersByFilter(array('status' => array(SERVER_STATUS::RUNNING)));
                 foreach ($servers as $dbServer) {
                     if ($action == 'BUNDLE') {
                         if ($dbServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER)) {
                             $dbServer->SendMessage(new Scalr_Messaging_Msg_DbMsr_CreateDataBundle());
                             $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING"), 1);
                             $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_RUNNING_TS"), time());
                             $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_SERVER_ID"), $dbServer->serverId);
                             break;
                         }
                     } elseif ($action == 'BACKUP') {
                         if ($dbServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER)) {
                             $master = $dbServer;
                             continue;
                         }
                         $bcpServer = $dbServer;
                         break;
                     }
                 }
                 if ($action == 'BACKUP') {
                     if (!$bcpServer) {
                         $bcpServer = $master;
                     }
                     if ($bcpServer) {
                         $bcpServer->SendMessage(new Scalr_Messaging_Msg_DbMsr_CreateBackup());
                         $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING"), 1);
                         $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_RUNNING_TS"), time());
                         $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_SERVER_ID"), $bcpServer->serverId);
                     }
                 }
             }
         }
     }
 }
Exemple #4
0
 public function dashboardAction()
 {
     $this->request->defineParams(array('farmId' => array('type' => 'int'), 'farmRoleId' => array('type' => 'int'), 'type'));
     $dbFarm = DBFarm::LoadByID($this->getParam('farmId'));
     $this->user->getPermissions()->validate($dbFarm);
     if ($this->getParam('farmRoleId')) {
         $dbFarmRole = DBFarmRole::LoadByID($this->getParam('farmRoleId'));
         if ($dbFarmRole->FarmID != $dbFarm->ID) {
             throw new Exception("Role not found");
         }
     } elseif ($this->getParam('type')) {
         foreach ($dbFarm->GetFarmRoles() as $sDbFarmRole) {
             if ($sDbFarmRole->GetRoleObject()->hasBehavior($this->getParam('type'))) {
                 $dbFarmRole = $sDbFarmRole;
                 break;
             }
         }
         if (!$dbFarmRole) {
             throw new Exception("Role not found");
         }
     } else {
         throw new Scalr_UI_Exception_NotFound();
     }
     $data = array('farmRoleId' => $dbFarmRole->ID, 'farmId' => $dbFarmRole->FarmID);
     $data['dbType'] = $dbFarmRole->GetRoleObject()->getDbMsrBehavior();
     if (!$data['dbType']) {
         $this->response->failure("Unknown db type");
         return;
     }
     switch ($data['dbType']) {
         case ROLE_BEHAVIORS::MYSQL2:
         case ROLE_BEHAVIORS::PERCONA:
         case ROLE_BEHAVIORS::MARIADB:
             $szrApiNamespace = Scalr_Net_Scalarizr_Client::NAMESPACE_MYSQL;
             break;
         case ROLE_BEHAVIORS::REDIS:
             $szrApiNamespace = Scalr_Net_Scalarizr_Client::NAMESPACE_REDIS;
             $data['extras'] = array(array('name' => 'Processes', 'value' => $dbFarmRole->GetSetting(Scalr_Db_Msr_Redis::NUM_PROCESSES)), array('name' => 'Persistence type', 'value' => $dbFarmRole->GetSetting(Scalr_Db_Msr_Redis::PERSISTENCE_TYPE)));
             break;
         case ROLE_BEHAVIORS::POSTGRESQL:
             $szrApiNamespace = Scalr_Net_Scalarizr_Client::NAMESPACE_POSTGRESQL;
             break;
     }
     // Get PMA details for MySQL / Percona
     if (in_array($data['dbType'], array(ROLE_BEHAVIORS::MYSQL, ROLE_BEHAVIORS::MYSQL2, ROLE_BEHAVIORS::PERCONA, ROLE_BEHAVIORS::MARIADB))) {
         $data['pma'] = $this->getPmaDetails($dbFarmRole);
     }
     $behavior = Scalr_Role_Behavior::loadByName($data['dbType']);
     $masterServer = $behavior->getMasterServer($dbFarmRole);
     if ($masterServer) {
         // Get Storage details
         $data['storage'] = $this->getDbStorageStatus($masterServer, $data['dbType']);
     }
     // Get Access details and DNS endpoints
     $data['accessDetails'] = $this->getDbAccessDetails($dbFarmRole);
     $data['name'] = ROLE_BEHAVIORS::GetName($data['dbType']);
     // Get data bundle info
     $bundlesEnabled = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_ENABLED);
     $lastActionTime = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_BUNDLE_LAST_TS"));
     $data['bundles'] = array('history' => $this->db->GetAll("SELECT *, UNIX_TIMESTAMP(date) as date FROM services_db_backups_history WHERE `farm_role_id` = ? AND `operation` = ? ORDER BY id ASC", array($dbFarmRole->ID, 'bundle')), 'inProgress' => array('status' => (int) $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_IS_RUNNING), 'serverId' => $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_SERVER_ID)), 'last' => $lastActionTime ? Scalr_Util_DateTime::convertTz((int) $lastActionTime, 'd M Y \\a\\t H:i:s') : 'Never');
     foreach ($data['bundles']['history'] as &$h) {
         $h['date'] = Scalr_Util_DateTime::convertTz((int) $h['date'], 'd M Y \\a\\t H:i:s');
     }
     if ($bundlesEnabled) {
         $period = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_EVERY);
         if ($lastActionTime) {
             $nextTime = $lastActionTime + $period * 3600;
         }
         $data['bundles']['next'] = !$nextTime || $nextTime < time() ? "Within 30 minutes" : Scalr_Util_DateTime::convertTz((int) $nextTime, 'd M Y \\a\\t H:i:s');
         $data['bundles']['schedule'] = "Every {$period} hours";
     } else {
         $data['bundles']['next'] = " - ";
         $data['bundles']['schedule'] = "Auto-snapshotting disabled";
     }
     // Get backups info
     $lastActionTime = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_BACKUP_LAST_TS"));
     $nextTime = false;
     $backupsEnabled = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_ENABLED);
     $data['backups'] = array('history' => $this->db->GetAll("SELECT *, UNIX_TIMESTAMP(date) as date FROM services_db_backups_history WHERE `farm_role_id` = ? AND `operation` = ? ORDER BY id ASC", array($dbFarmRole->ID, 'backup')), 'inProgress' => array('status' => (int) $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_IS_RUNNING), 'serverId' => $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_SERVER_ID)), 'last' => $lastActionTime ? Scalr_Util_DateTime::convertTz((int) $lastActionTime, 'd M Y \\a\\t H:i:s') : 'Never', 'supported' => !PlatformFactory::isCloudstack($dbFarmRole->Platform) && (!PlatformFactory::isOpenstack($dbFarmRole->Platform) || PlatformFactory::NewPlatform($dbFarmRole->Platform)->getConfigVariable(OpenstackPlatformModule::EXT_SWIFT_ENABLED, $this->getEnvironment(), false)));
     foreach ($data['backups']['history'] as &$h) {
         $h['date'] = Scalr_Util_DateTime::convertTz((int) $h['date'], 'd M Y \\a\\t H:i:s');
     }
     if ($backupsEnabled) {
         $period = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BACKUP_EVERY);
         if ($lastActionTime) {
             $nextTime = $lastActionTime + $period * 3600;
         }
         $data['backups']['next'] = !$nextTime || $nextTime < time() ? "Within 30 minutes" : Scalr_Util_DateTime::convertTz((int) $nextTime, 'd M Y \\a\\t H:i:s');
         $data['backups']['schedule'] = "Every {$period} hours";
     } else {
         $data['backups']['next'] = " - ";
         $data['backups']['schedule'] = "Auto-backups disabled";
     }
     /*
     if ($dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_STORAGE_ENGINE) == 'lvm') {
         $data['noDataBundleForSlaves'] = ($dbFarmRole->GetSetting(Scalr_Role_DbMsrBehavior::ROLE_NO_DATA_BUNDLE_FOR_SLAVES)) ? true : false;
     }
     */
     $conf = $this->getContainer()->config->get('scalr.load_statistics.connections.plotter');
     foreach ($dbFarmRole->GetServersByFilter(array('status' => array(SERVER_STATUS::INIT, SERVER_STATUS::RUNNING, SERVER_STATUS::PENDING))) as $dbServer) {
         $isMaster = $dbServer->GetProperty(Scalr_Db_Msr::REPLICATION_MASTER) == 1;
         $serverRole = $isMaster ? 'master' : 'slave';
         $serverInfo = array('status' => $dbServer->status, 'remoteIp' => $dbServer->remoteIp, 'localIp' => $dbServer->localIp, 'serverId' => $dbServer->serverId, 'cloudServerId' => $dbServer->GetCloudServerID(), 'cloudLocation' => $dbServer->GetCloudLocation(), 'serverRole' => $serverRole, 'index' => $dbServer->index);
         $serverInfo['monitoring'] = array('farmId' => $dbFarmRole->FarmID, 'farmRoleId' => $dbFarmRole->ID, 'index' => $dbServer->index, 'hash' => $dbFarm->Hash, 'hostUrl' => "{$conf['scheme']}://{$conf['host']}:{$conf['port']}");
         if ($dbServer->platform == SERVER_PLATFORMS::EC2) {
             $serverInfo['cloudLocation'] = $dbServer->GetProperty(EC2_SERVER_PROPERTIES::AVAIL_ZONE);
         }
         if ($dbServer->status == SERVER_STATUS::RUNNING) {
             try {
                 $rStatus = $dbServer->scalarizr->{$szrApiNamespace}->replicationStatus();
                 if ($data['dbType'] != ROLE_BEHAVIORS::REDIS) {
                     $rStatus = (array) $rStatus->{$serverRole};
                     $replication = $rStatus;
                 } else {
                     if ($isMaster) {
                         $rStatus = (array) $rStatus->masters;
                         foreach ($rStatus as $port => $status) {
                             $rStatus['status'] = $status;
                             if ($status != 'up') {
                                 break;
                             }
                         }
                     } else {
                         $rStatus = (array) $rStatus->slaves;
                         foreach ($rStatus as $port => $status) {
                             $rStatus['status'] = $status->status;
                             if ($status->status != 'up') {
                                 break;
                             }
                         }
                     }
                     $replication = $rStatus;
                 }
                 if (in_array($data['dbType'], array(ROLE_BEHAVIORS::MYSQL2, ROLE_BEHAVIORS::PERCONA, ROLE_BEHAVIORS::MARIADB))) {
                     if ($rStatus['status'] == 'up' && $replication['seconds_behind_master'] > 0) {
                         $status = 'lagging';
                     } else {
                         $status = $rStatus['status'];
                     }
                 } elseif ($data['dbType'] == ROLE_BEHAVIORS::REDIS) {
                     $status = $rStatus['status'];
                 } elseif ($data['dbType'] == ROLE_BEHAVIORS::POSTGRESQL) {
                     if ($rStatus['status'] == 'up' && $replication['Xlog_delay'] > 1000) {
                         $status = 'lagging';
                     } else {
                         $status = $rStatus['status'];
                     }
                 }
                 $serverInfo['replication'] = array('status' => $status, $data['dbType'] => $replication);
             } catch (Exception $e) {
                 $serverInfo['replication'] = array('status' => 'error', 'message' => $e->getMessage());
             }
         }
         $data['servers'][] = $serverInfo;
     }
     $this->response->page('ui/db/manager/dashboard.js', $data, array('ui/monitoring/window.js'), array('ui/db/manager/dashboard.css'));
 }