class Proxi::RequestResponseLogging

Log all incoming and outgoing traffic to files under ‘/tmp`

For example:

Proxi.tcp_server(...).subscribe(RequestResponseLogging.new).call

The in and outgoing traffic will be captured per connection in ‘/tmp/proxi.1.in` and `/tmp/proxi.1.out`; `/tmp/proxi.2.in`, etc.

Public Class Methods

new(dir: Dir.tmpdir, name: "proxi") click to toggle source
# File lib/proxi/listeners.rb, line 16
def initialize(dir: Dir.tmpdir, name: "proxi")
  @dir = dir
  @name = name
  @count = 0
  @mutex = Mutex.new
end

Public Instance Methods

log_name(num, suffix) click to toggle source
# File lib/proxi/listeners.rb, line 34
def log_name(num, suffix)
  '%s/%s.%d.%s' % [@dir, @name, num, suffix]
end
new_connection(connection) click to toggle source
# File lib/proxi/listeners.rb, line 23
def new_connection(connection)
  count = @mutex.synchronize { @count += 1 }
  in_fd = File.open(log_name(count, "in"), 'w')
  out_fd = File.open(log_name(count, "out"), 'w')

  connection
    .on(:data_in) { |_, data| in_fd.write(data) ; in_fd.flush }
    .on(:data_out) { |_, data| out_fd.write(data) ; out_fd.flush }
    .on(:end_connection) { in_fd.close ; out_fd.close }
end