class KumoDockerCloud::HaproxyContainer

Public Class Methods

new(container_id, client) click to toggle source
# File lib/kumo_dockercloud/haproxy_container.rb, line 5
def initialize(container_id, client)
  @container_id = container_id
  @client = client
end

Public Instance Methods

disable_server(server_name) click to toggle source
# File lib/kumo_dockercloud/haproxy_container.rb, line 10
def disable_server(server_name)
  haproxy_server_name = haproxy_server_name(server_name)
  HaproxyCommand.new(@container_id, @client).execute("disable server #{haproxy_server_name}")
end
enable_server(server_name) click to toggle source
# File lib/kumo_dockercloud/haproxy_container.rb, line 15
def enable_server(server_name)
  haproxy_server_name = haproxy_server_name(server_name)
  HaproxyCommand.new(@container_id, @client).execute("enable server #{haproxy_server_name}")
end

Private Instance Methods

get_server_names(stats_object) click to toggle source
# File lib/kumo_dockercloud/haproxy_container.rb, line 47
def get_server_names(stats_object)
  stats_object.select { |record| record['# pxname'] == 'default_service' }.map { |record| record['svname']}.join(', ')
end
haproxy_server_name(server_name) click to toggle source
# File lib/kumo_dockercloud/haproxy_container.rb, line 34
def haproxy_server_name(server_name)
  current_stats = stats
  haproxy_server_record = current_stats.find { |stat| prefix_match? stat, server_name }

  raise HAProxyStateError.new("Unable to map #{server_name} to a HAProxy backend, I saw #{ get_server_names(current_stats) }") unless haproxy_server_record

  "#{haproxy_server_record['# pxname']}/#{haproxy_server_record['svname']}"
end
prefix_match?(stat_record, server_name) click to toggle source
# File lib/kumo_dockercloud/haproxy_container.rb, line 43
def prefix_match?(stat_record, server_name)
  stat_record["svname"].downcase.start_with? server_name.downcase.gsub('-', '_')
end
stats() click to toggle source
# File lib/kumo_dockercloud/haproxy_container.rb, line 22
def stats
  haproxy_command = HaproxyCommand.new(@container_id, @client)
  command_output = ''
  retry_counter = 0
  while command_output.empty? && retry_counter < 3
    command_output = haproxy_command.execute('show stat')
    retry_counter += 1
  end
  raise HAProxyStateError.new("Could not get stats from HAProxy backend from container id: #{@container_id}") if command_output.empty?
  CSV.parse(command_output, headers: true)
end