private function SendExecMessage(DBServer $DBServer, Event $Event, Scalr_Messaging_Msg $msg)
 {
     $c = $this->DB->GetOne("SELECT COUNT(*) FROM farm_role_scripts WHERE farmid=? AND event_name=?", array($Event->GetFarmID(), $Event->GetName()));
     if ($c == 0) {
         return;
     }
     $DBFarm = DBFarm::LoadByID($Event->GetFarmID());
     $servers = $DBFarm->GetServersByFilter(array(), array('status' => SERVER_STATUS::TERMINATED));
     foreach ($servers as $farmDBServer) {
         // For some events we must sent trap to all instances include instance where ip adress changed.
         // For other events we must exclude instance that fired event from trap list.
         if ($DBServer && $DBServer->serverId == $farmDBServer->serverId) {
             if (!in_array($Event->GetName(), array(EVENT_TYPE::INSTANCE_IP_ADDRESS_CHANGED, EVENT_TYPE::EBS_VOLUME_MOUNTED, EVENT_TYPE::BEFORE_INSTANCE_LAUNCH, EVENT_TYPE::BEFORE_HOST_TERMINATE))) {
                 continue;
             }
         }
         if (!$farmDBServer->IsSupported("0.5")) {
             $farmDBServer->SendMessage($msg, true);
         }
     }
 }
Example #2
0
 /**
  * Fire event
  *
  * @param integer $farmid
  * @param string $event_name
  * @param string $event_message
  */
 public static function FireDeferredEvent(Event $event)
 {
     if (!self::$observersSetuped) {
         self::setupObservers();
     }
     try {
         // Notify class observers
         foreach (self::$DeferredEventObservers as $observer) {
             // Get observer config for farm
             $config = self::GetFarmNotificationsConfig($event->GetFarmID(), $observer);
             // If observer configured -> set config and fire event
             if ($config) {
                 $observer->SetConfig($config);
                 $res = call_user_func(array($observer, "On{$event->GetName()}"), $event);
             }
         }
     } catch (Exception $e) {
         Logger::getLogger(__CLASS__)->fatal("Exception thrown in Scalr::FireDeferredEvent(): " . $e->getMessage());
     }
     return;
 }