Sha256: e3f51324fce3ee4fe6163d346d513b48c91682a65b7f8066ed5ec7f9f337d413

Contents?: true

Size: 1.86 KB

Versions: 35

Compression:

Stored size: 1.86 KB

Contents

require 'sequel'
require 'sequel/connection_pool/threaded'
require 'yaml'
require 'pact_broker/logging'
require 'erb'
require 'pact_broker/project_root'

module DB
  include PactBroker::Logging
  ##
  # Sequel by default does not test connections in its connection pool before
  # handing them to a client. To enable connection testing you need to load the
  # "connection_validator" extension like below. The connection validator
  # extension is configurable, by default it only checks connections once per
  # hour:
  #
  # http://sequel.rubyforge.org/rdoc-plugins/files/lib/sequel/extensions/connection_validator_rb.html
  #
  # Because most of our applications so far are accessed infrequently, there is
  # very little overhead in checking each connection when it is requested. This
  # takes care of stale connections.
  #
  # A gotcha here is that it is not enough to enable the "connection_validator"
  # extension, we also need to specify that we want to use the threaded connection
  # pool, as noted in the documentation for the extension.
  #
  def self.connect db_credentials
    con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool, :encoding => 'utf8'))
    con.extension(:connection_validator)
    con.pool.connection_validation_timeout = -1 #Check the connection on every request
    con.timezone = :utc
    con
  end

  def self.connection_for_env env
    logger.info "Connecting to #{env} database."
    connect configuration_for_env(env)
  end

  def self.configuration_for_env env
    database_yml = PactBroker.project_root.join('config','database.yml')
    config = YAML.load(ERB.new(File.read(database_yml)).result)
    config.fetch(env)
  end

  PACT_BROKER_DB ||= connection_for_env ENV.fetch('RACK_ENV')

  def self.health_check
    PACT_BROKER_DB.synchronize do |c| c
      PACT_BROKER_DB.valid_connection? c
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
pact_broker-2.0.2 lib/db.rb
pact_broker-2.0.1 lib/db.rb
pact_broker-2.0.0 lib/db.rb
pact_broker-2.0.0.beta.8 lib/db.rb
pact_broker-2.0.0.beta.7 lib/db.rb
pact_broker-2.0.0.beta.6 lib/db.rb
pact_broker-1.18.0 lib/db.rb
pact_broker-2.0.0.beta.5 lib/db.rb
pact_broker-1.18.0.beta.1 lib/db.rb
pact_broker-1.17.2 lib/db.rb
pact_broker-1.17.1 lib/db.rb
pact_broker-2.0.0.beta.4 lib/db.rb
pact_broker-2.0.0.beta.3 lib/db.rb
pact_broker-2.0.0.beta.2 lib/db.rb
pact_broker-2.0.0.beta.1 lib/db.rb
pact_broker-1.17.0 lib/db.rb
pact_broker-1.16.0 lib/db.rb
pact_broker-1.15.0 lib/db.rb
pact_broker-1.14.0 lib/db.rb
pact_broker-1.13.0 lib/db.rb