Scalr\Observer\MessagingEventObserver::OnBeforeHostTerminate PHP Метод

OnBeforeHostTerminate() публичный Метод

См. также: Scalr\Observer\AbstractEventObserver::OnBeforeHostTerminate()
public OnBeforeHostTerminate ( BeforeHostTerminateEvent $event )
$event BeforeHostTerminateEvent
    public function OnBeforeHostTerminate(\BeforeHostTerminateEvent $event)
    {
        try {
            $dbFarm = DBFarm::LoadByID($this->FarmID);
        } catch (Exception $e) {
        }
        if ($dbFarm) {
            $servers = $this->DB->Execute("\n                SELECT * FROM servers\n                WHERE farm_id = ?\n                AND status IN (?, ?, ?, ?)\n                AND is_scalarized = '1'\n            ", [$dbFarm->ID, SERVER_STATUS::INIT, SERVER_STATUS::RUNNING, SERVER_STATUS::PENDING_TERMINATE, SERVER_STATUS::PENDING_SUSPEND]);
            $event->messageLongestInsert = 0;
            while ($server = $servers->FetchRow()) {
                $DBServer = DBServer::load($server);
                // We don't need to send beforeHostTerminate event to all "Pending terminate" servers,
                // only to eventServer.
                // Same for terminated farms
                if ($DBServer->status == SERVER_STATUS::PENDING_TERMINATE || $dbFarm->Status == FARM_STATUS::TERMINATED) {
                    if ($DBServer->serverId != $event->DBServer->serverId) {
                        continue;
                    }
                }
                $msg = new Scalr_Messaging_Msg_BeforeHostTerminate();
                $msg->setServerMetaData($event->DBServer);
                $msg->suspend = $event->suspend;
                $msg = Scalr_Scripting_Manager::extendMessage($msg, $event, $event->DBServer, $DBServer);
                if ($event->DBServer->farmRoleId != 0) {
                    foreach (Scalr_Role_Behavior::getListForFarmRole($event->DBServer->GetFarmRoleObject()) as $behavior) {
                        $msg = $behavior->extendMessage($msg, $event->DBServer);
                    }
                }
                $mt = microtime(true);
                $DBServer->SendMessage($msg, false, true);
                $mtResult = microtime(true) - $mt;
                if ($event->messageLongestInsert < $mtResult) {
                    $event->messageLongestInsert = $mtResult;
                }
            }
            try {
                if ($event->DBServer->GetFarmRoleObject()->GetSetting(Scalr_Db_Msr::SLAVE_TO_MASTER) != 1) {
                    if ($event->DBServer->GetFarmRoleObject()->GetRoleObject()->getDbMsrBehavior()) {
                        $this->sendPromoteToMasterMessage($event);
                    }
                }
            } catch (Exception $e) {
            }
        }
    }