Scalr::FireEvent PHP Method

FireEvent() public static method

File event in database
public static FireEvent ( integer $farmid, AbstractServerEvent $event )
$farmid integer
$event AbstractServerEvent
    public static function FireEvent($farmid, AbstractServerEvent $event)
    {
        if (!self::$observersSetuped) {
            self::setupObservers();
        }
        $startTime = microtime(true);
        try {
            $event->SetFarmID($farmid);
            $handledObservers = array();
            // Notify class observers
            foreach (self::$EventObservers as $observer) {
                /**
                 * @var $observer \EventObserver
                 */
                // Skip observer if it requires agent (scalarizr), but server doesn't have it.
                if (isset($event->DBServer)) {
                    if ($observer->isScalarizrRequired && !$event->DBServer->isScalarized) {
                        continue;
                    }
                }
                $observerStartTime = microtime(true);
                $observer->SetFarmID($farmid);
                if ($event instanceof CustomEvent) {
                    call_user_func(array($observer, "OnCustomEvent"), $event);
                } else {
                    call_user_func(array($observer, "On{$event->GetName()}"), $event);
                }
                $handledObservers[substr(strrchr(get_class($observer), "\\"), 1)] = round(microtime(true) - $observerStartTime, 5);
                if (isset($event->messageLongestInsert)) {
                    $handledObservers['MessageLongestInsert'] = $event->messageLongestInsert;
                }
            }
        } catch (Exception $e) {
            self::getContainer()->logger(__CLASS__)->fatal(sprintf("Exception thrown in Scalr::FireEvent(%s:%s, %s:%s): %s", @get_class($observer), $event->GetName(), $e->getFile(), $e->getLine(), $e->getMessage()));
            throw new Exception($e->getMessage());
        }
        $event->handledObservers = $handledObservers;
        self::StoreEvent($farmid, $event, microtime(true) - $startTime);
    }

Usage Example

Esempio n. 1
0
 /**
  * {@inheritdoc}
  * @see \Scalr\System\Zmq\Cron\TaskInterface::worker()
  */
 public function worker($request)
 {
     //Warming up static DI cache
     \Scalr::getContainer()->warmup();
     // Reconfigure observers
     \Scalr::ReconfigureObservers();
     try {
         $dbFarm = DBFarm::LoadByID($request->farmId);
         $curDate = new DateTime();
         $tdValue = $dbFarm->GetSetting(DBFarm::SETTING_LEASE_TERMINATE_DATE);
         if ($tdValue) {
             $td = new DateTime($tdValue);
             if ($td < $curDate) {
                 //Terminates farm
                 $event = new FarmTerminatedEvent(0, 1, false, 1);
                 SettingEntity::increase(SettingEntity::LEASE_TERMINATE_FARM);
                 \Scalr::FireEvent($request->farmId, $event);
                 $this->log('INFO', sprintf('Farm: %s [ID: %d] was terminated by lease manager', $dbFarm->Name, $dbFarm->ID));
             } else {
                 // only inform user
                 $days = $td->diff($curDate)->days;
                 $notifications = json_decode($dbFarm->GetSetting(DBFarm::SETTING_LEASE_NOTIFICATION_SEND), true);
                 $governance = new Scalr_Governance($dbFarm->EnvID);
                 $settings = $governance->getValue(Scalr_Governance::CATEGORY_GENERAL, Scalr_Governance::GENERAL_LEASE, 'notifications');
                 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->log('INFO', "Notification was sent by key: %s about farm: %s [ID: %d] by lease manager", $n['key'], $dbFarm->Name, $dbFarm->ID);
                         }
                     }
                 }
             }
         }
     } catch (Exception $e) {
         throw $e;
     }
     return $request;
 }
All Usage Examples Of Scalr::FireEvent