added color as a parameter to logs, using ANSI

This commit is contained in:
HoneyryderChuck 2018-03-28 10:57:35 +01:00
parent 25fd0bbf75
commit e36a91b6cc
3 changed files with 28 additions and 18 deletions

View File

@ -87,8 +87,8 @@ module HTTPX
@parser.status_code,
@parser.http_version.join("."),
headers, @options)
log { "-> HEADLINE: #{response.status} HTTP/#{@parser.http_version.join(".")}" }
log { response.headers.each.map { |f, v| "-> HEADER: #{f}: #{v}" }.join("\n") }
log(color: :yellow) { "-> HEADLINE: #{response.status} HTTP/#{@parser.http_version.join(".")}" }
log(color: :yellow) { response.headers.each.map { |f, v| "-> HEADER: #{f}: #{v}" }.join("\n") }
request.response = response
@ -96,8 +96,8 @@ module HTTPX
end
def on_body(chunk)
log { "-> DATA: #{chunk.bytesize} bytes..." }
log(level: 2) { "-> #{chunk.inspect}" }
log(color: :green) { "-> DATA: #{chunk.bytesize} bytes..." }
log(level: 2, color: :green) { "-> #{chunk.inspect}" }
response = @requests.first.response
response << chunk
@ -184,12 +184,12 @@ module HTTPX
def join_headers(request)
buffer = +""
buffer << "#{request.verb.to_s.upcase} #{headline_uri(request)} HTTP/#{@version.join(".")}" << CRLF
log { "<- HEADLINE: #{buffer.chomp.inspect}" }
log(color: :yellow) { "<- HEADLINE: #{buffer.chomp.inspect}" }
@buffer << buffer
buffer.clear
request.headers.each do |field, value|
buffer << "#{capitalized(field)}: #{value}" << CRLF
log { "<- HEADER: #{buffer.chomp}" }
log(color: :yellow) { "<- HEADER: #{buffer.chomp}" }
@buffer << buffer
buffer.clear
end
@ -200,8 +200,8 @@ module HTTPX
def join_body(request)
return if request.empty?
while (chunk = request.drain_body)
log { "<- DATA: #{chunk.bytesize} bytes..." }
log(level: 2) { "<- #{chunk.inspect}" }
log(color: :green) { "<- DATA: #{chunk.bytesize} bytes..." }
log(level: 2, color: :green) { "<- #{chunk.inspect}" }
@buffer << chunk
throw(:buffer_full, request) if @buffer.full?
end

View File

@ -107,7 +107,7 @@ module HTTPX
headers[":path"] = headline_uri(request)
headers[":authority"] = request.authority
headers = headers.merge(request.headers)
log(level: 1, label: "#{stream.id}: ") do
log(level: 1, label: "#{stream.id}: ", color: :yellow) do
headers.map { |k, v| "-> HEADER: #{k}: #{v}" }.join("\n")
end
stream.headers(headers, end_stream: request.empty?)
@ -117,8 +117,8 @@ module HTTPX
chunk = @drains.delete(request) || request.drain_body
while chunk
next_chunk = request.drain_body
log(level: 1, label: "#{stream.id}: ") { "-> DATA: #{chunk.bytesize} bytes..." }
log(level: 2, label: "#{stream.id}: ") { "-> #{chunk.inspect}" }
log(level: 1, label: "#{stream.id}: ", color: :green) { "-> DATA: #{chunk.bytesize} bytes..." }
log(level: 2, label: "#{stream.id}: ", color: :green) { "-> #{chunk.inspect}" }
stream.data(chunk, end_stream: !next_chunk)
if next_chunk && @buffer.full?
@drains[request] = next_chunk
@ -133,7 +133,7 @@ module HTTPX
######
def on_stream_headers(stream, request, h)
log(label: "#{stream.id}:") do
log(label: "#{stream.id}:", color: :yellow) do
h.map { |k, v| "<- HEADER: #{k}: #{v}" }.join("\n")
end
_, status = h.shift
@ -144,8 +144,8 @@ module HTTPX
end
def on_stream_data(stream, request, data)
log(level: 1, label: "#{stream.id}: ") { "<- DATA: #{data.bytesize} bytes..." }
log(level: 2, label: "#{stream.id}: ") { "<- #{data.inspect}" }
log(level: 1, label: "#{stream.id}: ", color: :green) { "<- DATA: #{data.bytesize} bytes..." }
log(level: 2, label: "#{stream.id}: ", color: :green) { "<- #{data.inspect}" }
request.response << data
end
@ -175,12 +175,10 @@ module HTTPX
def on_frame_sent(frame)
log(level: 2, label: "#{frame[:stream]}: ") { "frame was sent!" }
log(level: 2, label: "#{frame[:stream]}: ") do
log(level: 2, label: "#{frame[:stream]}: ", color: :blue) do
case frame[:type]
when :data
frame.merge(payload: frame[:payload].bytesize).inspect
when :headers
"\e[33m#{frame.inspect}\e[0m"
else
frame.inspect
end
@ -189,7 +187,7 @@ module HTTPX
def on_frame_received(frame)
log(level: 2, label: "#{frame[:stream]}: ") { "frame was received!" }
log(level: 2, label: "#{frame[:stream]}: ") do
log(level: 2, label: "#{frame[:stream]}: ", color: :magenta) do
case frame[:type]
when :data
frame.merge(payload: frame[:payload].bytesize).inspect

View File

@ -2,10 +2,22 @@
module HTTPX
module Loggable
COLORS = {
black: 30,
red: 31,
green: 32,
yellow: 33,
blue: 34,
magenta: 35,
cyan: 36,
white: 37,
}.freeze
def log(level: @options.debug_level, label: "", color: nil, &msg)
return unless @options.debug
return unless @options.debug_level >= level
message = (+label << msg.call << "\n")
message = "\e[#{COLORS[color]}m#{message}\e[0m" if color
@options.debug << message
end
end