class Kubeclient::Common::WatchStream

HTTP Stream used to watch changes on entities

Public Class Methods

new(uri, http_options, formatter:) click to toggle source
# File lib/kubeclient/watch_stream.rb, line 7
def initialize(uri, http_options, formatter:)
  @uri = uri
  @http_client = nil
  @http_options = http_options
  @http_options[:http_max_redirects] ||= Kubeclient::Client::DEFAULT_HTTP_MAX_REDIRECTS
  @formatter = formatter
end

Public Instance Methods

each() { |call| ... } click to toggle source
# File lib/kubeclient/watch_stream.rb, line 15
def each
  @finished = false

  @http_client = build_client
  response = @http_client.request(:get, @uri, build_client_options)
  unless response.code < 300
    raise Kubeclient::HttpError.new(response.code, response.reason, response)
  end

  buffer = ''
  response.body.each do |chunk|
    buffer << chunk
    while (line = buffer.slice!(/.+\n/))
      yield @formatter.call(line.chomp)
    end
  end
rescue StandardError
  raise unless @finished
end
finish() click to toggle source
# File lib/kubeclient/watch_stream.rb, line 35
def finish
  @finished = true
  @http_client.close unless @http_client.nil?
end

Private Instance Methods

build_client() click to toggle source
# File lib/kubeclient/watch_stream.rb, line 56
def build_client
  client = HTTP::Client.new(follow: follow_option)

  if @http_options[:basic_auth_user] && @http_options[:basic_auth_password]
    client = client.basic_auth(
      user: @http_options[:basic_auth_user],
      pass: @http_options[:basic_auth_password]
    )
  end

  client
end
build_client_options() click to toggle source
# File lib/kubeclient/watch_stream.rb, line 81
def build_client_options
  client_options = {
    headers: @http_options[:headers],
    proxy: using_proxy
  }
  if @http_options[:ssl]
    client_options[:ssl] = @http_options[:ssl]
    socket_option = :ssl_socket_class
  else
    socket_option = :socket_class
  end
  client_options[socket_option] = @http_options[socket_option] if @http_options[socket_option]
  client_options
end
follow_option() click to toggle source
# File lib/kubeclient/watch_stream.rb, line 46
def follow_option
  if max_hops > 1
    { max_hops: max_hops }
  else
    # i.e. Do not follow redirects as we have set http_max_redirects to 0
    # Setting `{ max_hops: 1 }` does not work FWIW
    false
  end
end
max_hops() click to toggle source
# File lib/kubeclient/watch_stream.rb, line 42
def max_hops
  @http_options[:http_max_redirects] + 1
end
using_proxy() click to toggle source
# File lib/kubeclient/watch_stream.rb, line 69
def using_proxy
  proxy = @http_options[:http_proxy_uri]
  return nil unless proxy
  p_uri = URI.parse(proxy)
  {
    proxy_address: p_uri.hostname,
    proxy_port: p_uri.port,
    proxy_username: p_uri.user,
    proxy_password: p_uri.password
  }
end