/** * File event in database * * @param integer $farmid * @param string $event_name */ 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); }