class ManageIQ::PostgresHaAdmin::ServerStore

Constants

TABLE_NAME

Attributes

servers[R]

Public Class Methods

new() click to toggle source
# File lib/manageiq/postgres_ha_admin/server_store.rb, line 14
def initialize
  @servers = []
end

Public Instance Methods

connection_info_list() click to toggle source
# File lib/manageiq/postgres_ha_admin/server_store.rb, line 18
def connection_info_list
  valid_keys = PG::Connection.conndefaults_hash.keys + [:requiressl]
  servers.map! do |db_info|
    db_info.keep_if { |k, _v| valid_keys.include?(k) }
  end
end
host_is_primary?(host, connection) click to toggle source
# File lib/manageiq/postgres_ha_admin/server_store.rb, line 36
def host_is_primary?(host, connection)
  query_repmgr(connection).each do |record|
    if record[:host] == host && record[:type] == 'primary'
      return true
    end
  end
  false
end
update_servers(connection) click to toggle source
# File lib/manageiq/postgres_ha_admin/server_store.rb, line 25
def update_servers(connection)
  new_servers = query_repmgr(connection)
  if servers_changed?(new_servers)
    logger.info("Updating servers cache to #{new_servers}")
    @servers = new_servers
  end
rescue IOError => err
  logger.error("#{err.class}: #{err}")
  logger.error(err.backtrace.join("\n"))
end

Private Instance Methods

query_repmgr(connection) click to toggle source
# File lib/manageiq/postgres_ha_admin/server_store.rb, line 51
def query_repmgr(connection)
  return [] unless table_exists?(connection, TABLE_NAME)
  result = []
  db_result = connection.exec("SELECT type, conninfo, active FROM #{TABLE_NAME} WHERE active")
  db_result.map_types!(PG::BasicTypeMapForResults.new(connection)).each do |record|
    dsn = PG::DSNParser.parse(record.delete("conninfo"))
    result << record.symbolize_keys.merge(dsn)
  end
  db_result.clear
  result
rescue PG::Error => err
  logger.error("#{err.class}: #{err}")
  logger.error(err.backtrace.join("\n"))
  result
end
servers_changed?(new_servers) click to toggle source
# File lib/manageiq/postgres_ha_admin/server_store.rb, line 47
def servers_changed?(new_servers)
  ((servers - new_servers) + (new_servers - servers)).any?
end
table_exists?(connection, table_name) click to toggle source
# File lib/manageiq/postgres_ha_admin/server_store.rb, line 67
def table_exists?(connection, table_name)
  result = connection.exec("SELECT to_regclass('#{table_name}')").first
  !result['to_regclass'].nil?
end