Sha256: a3e83dff29a17618067e9552f2406ee26d180a75f9d16ca38a43a2c4a8e219d8

Contents?: true

Size: 1.53 KB

Versions: 37

Compression:

Stored size: 1.53 KB

Contents

# Toplevel Pubnub module.
module Pubnub
  # OriginManager changes origin in client to online one
  # and keeps monitoring available origins
  class OriginManager
    attr_reader :last_ping, :failback

    def initialize(app)
      @app = app
    end

    def start
      origin_to_test = current_origin
      return false unless test_origin(origin_to_test)

      bring_down(origin_to_test)
      @app.reset_subscription
    end

    def current_origin
      @app.current_origin
    end

    def online_origins
      @app.online_origins
    end

    def offline_origins
      @app.offline_origins
    end

    private

    def test_origin(origin)
      if alive_and_valid?(URI.parse(@http + origin + '/time/0'))
        true
      else
        false
      end
    end

    def alive_and_valid?(uri)
      response_valid? get_ping_response(uri)
    rescue Errno::ECONNREFUSED
      false
    rescue StandardError => e
      Pubnub.logger.error('Pubnub::OriginManager') do
        "#{e.inspect} #{e.backtrace}"
      end
      false
    end

    def response_valid?(response)
      if response.is_a?(Net::HTTPSuccess) &&
         Formatter.valid_json?(response.body)
        true
      else
        false
      end
    end

    def get_ping_response(uri)
      Net::HTTP.start(uri.host, uri.port) do |http|
        request = Net::HTTP::Get.new uri
        http.read_timeout = @timeout
        http.request request
      end
    end

    def ping(_origin)
      alive_and_valid?(@http)
    end

    def bring_down(_origin); end

    def bring_up(_origin); end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
pubnub-5.5.0 lib/pubnub/origin_manager.rb
pubnub-5.4.0 lib/pubnub/origin_manager.rb
pubnub-5.3.5 lib/pubnub/origin_manager.rb
pubnub-5.3.4 lib/pubnub/origin_manager.rb
pubnub-5.3.3 lib/pubnub/origin_manager.rb
pubnub-5.3.2 lib/pubnub/origin_manager.rb
pubnub-5.3.1 lib/pubnub/origin_manager.rb
pubnub-5.3.0 lib/pubnub/origin_manager.rb
pubnub-5.2.2 lib/pubnub/origin_manager.rb
pubnub-5.2.1 lib/pubnub/origin_manager.rb
pubnub-5.2.0 lib/pubnub/origin_manager.rb
pubnub-5.1.2 lib/pubnub/origin_manager.rb
pubnub-5.1.1 lib/pubnub/origin_manager.rb
pubnub-5.1.0 lib/pubnub/origin_manager.rb
pubnub-5.0.0 lib/pubnub/origin_manager.rb
pubnub-4.8.0 lib/pubnub/origin_manager.rb
pubnub-4.7.1 lib/pubnub/origin_manager.rb
pubnub-4.7.0 lib/pubnub/origin_manager.rb
pubnub-4.6.2 lib/pubnub/origin_manager.rb
pubnub-4.6.1 lib/pubnub/origin_manager.rb