removed label parameter from logs, in order to avoid needless string allocations by default

This commit is contained in:
HoneyryderChuck 2020-03-31 09:42:52 +01:00
parent 90a4c9a980
commit a78f7afac6
9 changed files with 42 additions and 56 deletions

View File

@ -132,7 +132,7 @@ module HTTPX
def handle_stream(stream, request)
stream.on(:close, &method(:on_stream_close).curry[stream, request])
stream.on(:half_close) do
log(level: 2, label: "#{stream.id}: ") { "waiting for response..." }
log(level: 2) { "#{stream.id}: waiting for response..." }
end
stream.on(:altsvc, &method(:on_altsvc).curry[request.origin])
stream.on(:headers, &method(:on_stream_headers).curry[stream, request])
@ -147,8 +147,8 @@ module HTTPX
headers[":path"] = headline_uri(request)
headers[":authority"] = request.authority
headers = headers.merge(request.headers)
log(level: 1, label: "#{stream.id}: ", color: :yellow) do
headers.map { |k, v| "-> HEADER: #{k}: #{v}" }.join("\n")
log(level: 1, color: :yellow) do
headers.map { |k, v| "#{stream.id}: -> HEADER: #{k}: #{v}" }.join("\n")
end
stream.headers(headers, end_stream: request.empty?)
end
@ -159,8 +159,8 @@ module HTTPX
chunk = @drains.delete(request) || request.drain_body
while chunk
next_chunk = request.drain_body
log(level: 1, label: "#{stream.id}: ", color: :green) { "-> DATA: #{chunk.bytesize} bytes..." }
log(level: 2, label: "#{stream.id}: ", color: :green) { "-> #{chunk.inspect}" }
log(level: 1, color: :green) { "#{stream.id}: -> DATA: #{chunk.bytesize} bytes..." }
log(level: 2, color: :green) { "#{stream.id}: -> #{chunk.inspect}" }
stream.data(chunk, end_stream: !next_chunk)
if next_chunk && @buffer.full?
@drains[request] = next_chunk
@ -175,8 +175,8 @@ module HTTPX
######
def on_stream_headers(stream, request, h)
log(label: "#{stream.id}:", color: :yellow) do
h.map { |k, v| "<- HEADER: #{k}: #{v}" }.join("\n")
log(color: :yellow) do
h.map { |k, v| "#{stream.id}: <- HEADER: #{k}: #{v}" }.join("\n")
end
_, status = h.shift
headers = request.options.headers_class.new(h)
@ -186,8 +186,8 @@ module HTTPX
end
def on_stream_data(stream, request, data)
log(level: 1, label: "#{stream.id}: ", color: :green) { "<- DATA: #{data.bytesize} bytes..." }
log(level: 2, label: "#{stream.id}: ", color: :green) { "<- #{data.inspect}" }
log(level: 1, color: :green) { "#{stream.id}: <- DATA: #{data.bytesize} bytes..." }
log(level: 2, color: :green) { "#{stream.id}: <- #{data.inspect}" }
request.response << data
end
@ -208,7 +208,7 @@ module HTTPX
emit(:response, request, response)
end
end
log(level: 2, label: "#{stream.id}: ") { "closing stream" }
log(level: 2) { "#{stream.id}: closing stream" }
@streams.delete(request)
send(@pending.shift) unless @pending.empty?
@ -246,32 +246,26 @@ module HTTPX
end
def on_frame_sent(frame)
log(level: 2, label: "#{frame[:stream]}: ") { "frame was sent!" }
log(level: 2, label: "#{frame[:stream]}: ", color: :blue) do
case frame[:type]
when :data
frame.merge(payload: frame[:payload].bytesize).inspect
else
frame.inspect
end
log(level: 2) { "#{frame[:stream]}: frame was sent!" }
log(level: 2, color: :blue) do
payload = frame
payload = payload.merge(payload: frame[:payload].bytesize) if frame[:type] == :data
"#{frame[:stream]}: #{payload}"
end
end
def on_frame_received(frame)
log(level: 2, label: "#{frame[:stream]}: ") { "frame was received!" }
log(level: 2, label: "#{frame[:stream]}: ", color: :magenta) do
case frame[:type]
when :data
frame.merge(payload: frame[:payload].bytesize).inspect
else
frame.inspect
end
log(level: 2) { "#{frame[:stream]}: frame was received!" }
log(level: 2, color: :magenta) do
payload = frame
payload = payload.merge(payload: frame[:payload].bytesize) if frame[:type] == :data
"#{frame[:stream]}: #{payload}"
end
end
def on_altsvc(origin, frame)
log(level: 2, label: "#{frame[:stream]}: ") { "altsvc frame was received" }
log(level: 2, label: "#{frame[:stream]}: ") { frame.inspect }
log(level: 2) { "#{frame[:stream]}: altsvc frame was received" }
log(level: 2) { "#{frame[:stream]}: #{frame.inspect}" }
alt_origin = URI.parse("#{frame[:proto]}://#{frame[:host]}:#{frame[:port]}")
params = { "ma" => frame[:max_age] }
emit(:altsvc, origin, alt_origin, origin, params)

View File

@ -13,35 +13,35 @@ module HTTPX
white: 37,
}.freeze
def log(level: @options.debug_level, label: "", color: nil, &msg)
def log(level: @options.debug_level, color: nil, &msg)
return unless @options.debug
return unless @options.debug_level >= level
debug_stream = @options.debug
message = (+label << msg.call << "\n")
message = (+"" << msg.call << "\n")
message = "\e[#{COLORS[color]}m#{message}\e[0m" if debug_stream.respond_to?(:isatty) && debug_stream.isatty
debug_stream << message
end
if !Exception.instance_methods.include?(:full_message)
def log_exception(ex, level: @options.debug_level, label: "", color: nil)
def log_exception(ex, level: @options.debug_level, color: nil)
return unless @options.debug
return unless @options.debug_level >= level
message = +"#{ex.message} (#{ex.class})"
message << "\n" << ex.backtrace.join("\n") unless ex.backtrace.nil?
log(level: level, label: label, color: color) { message }
log(level: level, color: color) { message }
end
else
def log_exception(ex, level: @options.debug_level, label: "", color: nil)
def log_exception(ex, level: @options.debug_level, color: nil)
return unless @options.debug
return unless @options.debug_level >= level
log(level: level, label: label, color: color) { ex.full_message }
log(level: level, color: color) { ex.full_message }
end
end

View File

@ -39,7 +39,7 @@ module HTTPX
@parser = nil
end
log(level: 1, label: "SOCKS4: ") { "#{nextstate}: #{@write_buffer.to_s.inspect}" } unless nextstate == :open
log(level: 1) { "SOCKS4: #{nextstate}: #{@write_buffer.to_s.inspect}" } unless nextstate == :open
super
end

View File

@ -60,7 +60,7 @@ module HTTPX
@parser = nil
end
log(level: 1, label: "SOCKS5: ") { "#{nextstate}: #{@write_buffer.to_s.inspect}" } unless nextstate == :open
log(level: 1) { "SOCKS5: #{nextstate}: #{@write_buffer.to_s.inspect}" } unless nextstate == :open
super
end

View File

@ -43,9 +43,9 @@ module HTTPX
end
def __on_promise_request(parser, stream, h)
log(level: 1, label: "#{stream.id}: ") do
log(level: 1) do
# :nocov:
h.map { |k, v| "-> PROMISE HEADER: #{k}: #{v}" }.join("\n")
h.map { |k, v| "#{stream.id}: -> PROMISE HEADER: #{k}: #{v}" }.join("\n")
# :nocov:
end
headers = @options.headers_class.new(h)

View File

@ -84,7 +84,7 @@ module HTTPX
hostname = hostname || @queries.key(connection) || connection.origin.host
type = @_record_types[hostname].first
log(label: "resolver: ") { "query #{type} for #{hostname}" }
log { "resolver: query #{type} for #{hostname}" }
begin
request = build_request(hostname, type)
@requests[request] = connection
@ -111,7 +111,7 @@ module HTTPX
end
def on_promise(_, stream)
log(level: 2, label: "#{stream.id}: ") { "refusing stream!" }
log(level: 2) { "#{stream.id}: refusing stream!" }
stream.refuse
end

View File

@ -93,11 +93,7 @@ module HTTPX
rescue Errno::EHOSTUNREACH => e
@ns_index += 1
if @ns_index < @nameserver.size
log(label: "resolver: ") do
# :nocov:
"failed resolving on nameserver #{@nameserver[@ns_index - 1]} (#{e.message})"
# :nocov:
end
log { "resolver: failed resolving on nameserver #{@nameserver[@ns_index - 1]} (#{e.message})" }
transition(:idle)
else
handle_error(e)
@ -160,11 +156,7 @@ module HTTPX
raise NativeResolveError.new(connection, host)
else
connections << connection
log(label: "resolver: ") do
# :nocov:
"timeout after #{prev_timeout}s, retry(#{timeouts.first}) #{host}..."
# :nocov:
end
log { "resolver: timeout after #{prev_timeout}s, retry(#{timeouts.first}) #{host}..." }
end
end
@queries = queries
@ -180,7 +172,7 @@ module HTTPX
end
return if siz.zero?
log(label: "resolver: ") { "READ: #{siz} bytes..." }
log { "resolver: READ: #{siz} bytes..." }
parse(@read_buffer)
end
end
@ -194,7 +186,7 @@ module HTTPX
emit(:close)
return
end
log(label: "resolver: ") { "WRITE: #{siz} bytes..." }
log { "resolver: WRITE: #{siz} bytes..." }
return if siz.zero?
end
end
@ -253,7 +245,7 @@ module HTTPX
hostname = hostname || @queries.key(connection) || connection.origin.host
@queries[hostname] = connection
type = @_record_types[hostname].first
log(label: "resolver: ") { "query #{type} for #{hostname}" }
log { "resolver: query #{type} for #{hostname}" }
begin
@write_buffer << Resolver.encode_dns_query(hostname, type: RECORD_TYPES[type])
rescue Resolv::DNS::EncodeError => e
@ -269,7 +261,7 @@ module HTTPX
uri = URI::Generic.build(scheme: "udp", port: port)
uri.hostname = ip
type = IO.registry(uri.scheme)
log(label: "resolver: ") { "server: #{uri}..." }
log { "resolver: server: #{uri}..." }
@io = type.new(uri, [IPAddr.new(ip)], @options)
end

View File

@ -30,7 +30,7 @@ module HTTPX
addresses.map! do |address|
address.is_a?(IPAddr) ? address : IPAddr.new(address.to_s)
end
log(label: "resolver: ") { "answer #{connection.origin.host}: #{addresses.inspect}" }
log { "resolver: answer #{connection.origin.host}: #{addresses.inspect}" }
connection.addresses = addresses
catch(:coalesced) { emit(:resolve, connection) }
end

View File

@ -47,7 +47,7 @@ module HTTPX
end
def on_promise(_, stream)
log(level: 2, label: "#{stream.id}: ") { "refusing stream!" }
log(level: 2) { "#{stream.id}: refusing stream!" }
stream.refuse
end