DEV: Add raw PG connection tracing behind an environment variable

This should be useful for debugging connection problems. Warning: this will generate some large files, and will likely impact performance
This commit is contained in:
David Taylor 2020-02-17 16:21:26 +00:00
parent 72b6f908f4
commit 0c6f2892c6
No known key found for this signature in database
GPG Key ID: 46904C18B1D3F434

View File

@ -0,0 +1,33 @@
# frozen_string_literal: true
# Setting TRACE_PG_CONNECTIONS=1 will cause all pg connections
# to be streamed to files for debugging. The filenames are formatted
# like tmp/pgtrace/{{PID}}_{{CONNECTION_OBJECT_ID}}.txt
#
# Files will be automatically deleted when the connection is closed gracefully
# (e.g. when activerecord closes it after a period of inactivity)
# Files will not be automatically deleted when closed abruptly
# (e.g. terminating/restarting the app process)
#
# Warning: this could create some very large files!
if ENV["TRACE_PG_CONNECTIONS"]
PG::Connection.prepend(Module.new do
TRACE_DIR = "tmp/pgtrace"
def initialize(*args)
super(*args).tap do
FileUtils.mkdir_p(TRACE_DIR)
@trace_filename = "#{TRACE_DIR}/#{Process.pid}_#{self.object_id}.txt"
trace File.new(@trace_filename, "w")
end
end
def close
super.tap do
File.delete(@trace_filename)
end
end
end)
end