Class: NewRelic::Agent::Database::ConnectionManager

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/new_relic/agent/database.rb

Overview

API:

  • public

Instance Method Summary collapse

Instance Method Details

#close_connectionsObject

Closes all the connections in the internal connection cache

API:

  • public



240
241
242
243
244
245
246
247
248
249
250
# File 'lib/new_relic/agent/database.rb', line 240

def close_connections
  @connections ||= {}
  @connections.values.each do |connection|
    begin
      connection.disconnect!
    rescue
    end
  end

  @connections = {}
end

#discard_connection(config) ⇒ Object

API:

  • public



228
229
230
231
232
233
234
235
236
237
# File 'lib/new_relic/agent/database.rb', line 228

def discard_connection(config)
  @connections ||= {}
  connection = @connections.delete(config)
  return unless connection

  begin
    connection.disconnect!
  rescue
  end
end

#get_connection(config, &connector) ⇒ Object

Returns a cached connection for a given ActiveRecord configuration - these are stored or reopened as needed, and if we cannot get one, we ignore it and move on without explaining the sql

API:

  • public



206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/new_relic/agent/database.rb', line 206

def get_connection(config, &connector)
  @connections ||= {}

  connection = @connections[config]

  return connection if connection

  begin
    @connections[config] = yield(config)
  rescue => e
    ::NewRelic::Agent.logger.error('Caught exception trying to get connection to DB for explain.', e)
    nil
  end
end

#reset_or_discard_connection(config, connection) ⇒ Object

connection.reset! rolls back any open transaction; if that itself fails, evict it.

API:

  • public



222
223
224
225
226
# File 'lib/new_relic/agent/database.rb', line 222

def reset_or_discard_connection(config, connection)
  connection.reset!
rescue
  discard_connection(config)
end