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); } } }
/** * 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; }