From 0c6f2892c678b4e27ae7056d0c8455283f0dde54 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 17 Feb 2020 16:21:26 +0000 Subject: [PATCH] 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 --- .../initializers/000-trace_pg_connections.rb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 config/initializers/000-trace_pg_connections.rb diff --git a/config/initializers/000-trace_pg_connections.rb b/config/initializers/000-trace_pg_connections.rb new file mode 100644 index 00000000000..add1990ba09 --- /dev/null +++ b/config/initializers/000-trace_pg_connections.rb @@ -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