Sha256: 1dc5b766d14ccf680b78930b0b076af2022dd8ccad0af6e7d5342bf2c55dfd47

Contents?: true

Size: 1.85 KB

Versions: 153

Compression:

Stored size: 1.85 KB

Contents

# frozen-string-literal: true
#
# The server_logging extension makes the logger include the server/shard
# the query was issued on.  This makes it easier to use the logs when
# using sharding.
#
# Example:
#
#   DB.opts[:server]
#   # {:read_only=>{}, :b=>{}}
#   DB.extension :server_logging
#   DB[:a].all
#   # (0.000005s) (conn: 1014942550, server: read_only) SELECT * FROM a
#   DB[:a].server(:b).all
#   # (0.000004s) (conn: 997304100, server: b) SELECT * FROM a
#   DB[:a].insert
#   # (0.000004s) (conn: 1014374750, server: default) INSERT INTO a DEFAULT VALUES
#
# In order for the server/shard to be correct for all connections, you need to
# use this before connections to the database are made, or you need to call
# <tt>Database#disconnect</tt> after loading this extension.
#
# Related module: Sequel::ServerLogging

#
module Sequel
  module ServerLogging
    # Initialize the hash mapping connections to shards, and turn on logging
    # of connection info unless it has specifically been turned off.
    def self.extended(db)
      db.instance_exec do
        @server_connection_map ||= {}
        self.log_connection_info = true if log_connection_info.nil?
      end
    end

    # When setting up a new connection, associate the connection with the
    # shard.
    def connect(server)
      conn = super
      Sequel.synchronize{@server_connection_map[conn] = server}
      conn
    end

    # When disconnecting a connection, remove the related connection from the mapping.
    def disconnect_connection(conn)
      super
    ensure
      Sequel.synchronize{@server_connection_map.delete(conn)}
    end

    private

    # Include the server with the connection's id.
    def connection_info(conn)
      "(conn: #{conn.__id__}, server: #{Sequel.synchronize{@server_connection_map[conn]}}) "
    end
  end

  Database.register_extension(:server_logging, ServerLogging)
end

Version data entries

153 entries across 134 versions & 2 rubygems

Version Path
sequel-5.90.0 lib/sequel/extensions/server_logging.rb
sequel-5.89.0 lib/sequel/extensions/server_logging.rb
sequel-5.88.0 lib/sequel/extensions/server_logging.rb
sequel-5.87.0 lib/sequel/extensions/server_logging.rb
sequel-5.86.0 lib/sequel/extensions/server_logging.rb
sequel-5.85.0 lib/sequel/extensions/server_logging.rb
sequel-5.84.0 lib/sequel/extensions/server_logging.rb
sequel-5.83.1 lib/sequel/extensions/server_logging.rb
sequel-5.83.0 lib/sequel/extensions/server_logging.rb
sequel-5.82.0 lib/sequel/extensions/server_logging.rb
sequel-5.81.0 lib/sequel/extensions/server_logging.rb
sequel-5.80.0 lib/sequel/extensions/server_logging.rb
sequel-5.79.0 lib/sequel/extensions/server_logging.rb
sequel-5.78.0 lib/sequel/extensions/server_logging.rb
sequel-5.77.0 lib/sequel/extensions/server_logging.rb
sequel-5.76.0 lib/sequel/extensions/server_logging.rb
sequel-5.75.0 lib/sequel/extensions/server_logging.rb
sequel-5.74.0 lib/sequel/extensions/server_logging.rb
sequel-5.73.0 lib/sequel/extensions/server_logging.rb
sequel-5.72.0 lib/sequel/extensions/server_logging.rb