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