Scalr\System\Zmq\Cron\Task\ScalarizrMessaging::onHostDown PHP Method

onHostDown() private method

private onHostDown ( Scalr_Messaging_Msg $message, DBServer $dbserver )
$message Scalr_Messaging_Msg
$dbserver DBServer
    private function onHostDown(\Scalr_Messaging_Msg $message, DBServer $dbserver)
    {
        // If insatnce is already SUSPENDED or TERMINATED it means that hostdown was already processed by CloudPoller
        // and no need to process it again
        if (in_array($dbserver->status, array(\SERVER_STATUS::SUSPENDED, \SERVER_STATUS::TERMINATED))) {
            return true;
        }
        $isStopping = false;
        $isRebooting = false;
        $p = PlatformFactory::NewPlatform($dbserver->platform);
        $status = $p->GetServerRealStatus($dbserver);
        if ($dbserver->isOpenstack()) {
            $status = $p->GetServerRealStatus($dbserver);
            if (stristr($status->getName(), 'REBOOT') || stristr($status->getName(), 'HARD_REBOOT')) {
                //Hard reboot
                $isRebooting = true;
            } elseif ($status->isRunning()) {
                // Soft reboot
                $isRebooting = true;
            } elseif (!$status->isTerminated()) {
                $isStopping = true;
            }
        } elseif ($dbserver->platform == \SERVER_PLATFORMS::GCE) {
            if ($status->getName() == 'STOPPING') {
                // We don't know is this shutdown or stop so let's ignore HostDown
                // and wait for status change
                return false;
            } elseif ($status->getName() == 'RUNNING') {
                $isRebooting = true;
            } elseif ($status->isSuspended() && $dbserver->status != \SERVER_STATUS::PENDING_TERMINATE) {
                $isStopping = true;
            }
        } else {
            if ($status->isRunning()) {
                $isRebooting = true;
            } elseif (!$status->isTerminated()) {
                $isStopping = true;
            }
        }
        if ($isStopping) {
            $event = new HostDownEvent($dbserver);
            $event->isSuspended = true;
        } elseif ($isRebooting) {
            $event = new RebootBeginEvent($dbserver);
        } else {
            $event = false;
            if ($dbserver->farmId) {
                $wasHostDownFired = $this->db->GetOne("SELECT id FROM events WHERE event_server_id = ? AND type = ? AND is_suspend = '0'", array($dbserver->serverId, 'HostDown'));
                //TODO:
                if (!$wasHostDownFired) {
                    $event = new HostDownEvent($dbserver);
                }
            }
        }
        return $event;
    }