class HTTPInstrumentor
Public Class Methods
filter_parameter(parameter)
click to toggle source
# File lib/heroku/http_instrumentor.rb, line 3 def filter_parameter(parameter) @filter_parameters ||= [] @filter_parameters << parameter end
instrument(name, params={}) { || ... }
click to toggle source
# File lib/heroku/http_instrumentor.rb, line 8 def instrument(name, params={}, &block) headers = params[:headers] case name when "excon.error" $stderr.puts params[:error].message when "excon.request" $stderr.print "HTTP #{params[:method].upcase} #{params[:scheme]}://#{params[:host]}#{params[:path]} " $stderr.print "[auth] " if headers['Authorization'] && headers['Authorization'] != 'Basic Og==' $stderr.print "[2fa] " if headers['Heroku-Two-Factor-Code'] $stderr.puts filter(params[:query]) when "excon.response" $stderr.puts "#{params[:status]} #{params[:reason_phrase]}" $stderr.puts "request-id: #{headers['Request-id']}" if headers['Request-Id'] if headers['Content-Encoding'] == 'gzip' $stderr.puts filter(ungzip(params[:body])) else $stderr.puts filter(params[:body]) end else $stderr.puts name end yield if block_given? end
Private Class Methods
filter(obj)
click to toggle source
# File lib/heroku/http_instrumentor.rb, line 38 def filter(obj) string = obj.to_s (@filter_parameters || []).each do |parameter| string.gsub! parameter, '[FILTERED]' end string end
ungzip(string)
click to toggle source
# File lib/heroku/http_instrumentor.rb, line 34 def ungzip(string) Zlib::GzipReader.new(StringIO.new(string)).read() end