Skip to content

Instantly share code, notes, and snippets.

@pganti
Created November 3, 2019 15:39
Show Gist options
  • Save pganti/c1327df238ddf933d4a1da477262a360 to your computer and use it in GitHub Desktop.
Save pganti/c1327df238ddf933d4a1da477262a360 to your computer and use it in GitHub Desktop.
when CLIENT_ACCEPTED {
set req 0
TCP::collect 7
}
when CLIENT_DATA {
if { [string range [TCP::payload] 0 6] equals "CONNECT" } {
set lines [split [TCP::payload] "\n"]
log local0.info "lines = $lines"
set m 0
for {set i 1} {$i < [llength $lines]} {incr i} {
if { [lindex $lines $i] equals "\r" and $m == 0 } {
set m $i
incr m
} else {
set items [split [lindex $lines $i] ": "]
if { [lindex $items 0] equals "X-Nst-Real-IP" } {
set cip [lindex $items 2]
}
}
}
TCP::release
} else {
TCP::release
}
}
when HTTP_REQUEST {
set heads [HTTP::header names]
foreach head $heads {
HTTP::header remove $head
}
HTTP::header insert X-Nst-Real-IP $cip
set n $m
incr n
set j [llength $lines]
incr j -1
for {set i $n} {$i < $j} {incr i} {
if { [lindex $lines $i] ne "\r" } {
set items [split [lindex $lines $i] ": "]
HTTP::header insert [lindex $items 0] [lindex $items 2]
}
}
set request [HTTP::request]
log local0.info "[HTTP::request]"
}
when HTTP_RESPONSE {
log local0.info "req = $req"
if { [HTTP::status] != 200 and $req == 0 } {
incr req
log local0.info "req = $req"
set request [string replace $request 0 17 [lindex $lines $m]]
log local0.info "$request"
HTTP::retry $request
}
}
when HTTP_REQUEST {
set headers [HTTP::header names]
foreach header_name $headers {
if { [string length [HTTP::header $header_name]] > 32768 }{
log local0. "HTTP header [HTTP::header $header_name] ([string length [HTTP::header $header_name]]) is culprit"
}
}
}
when HTTP_RESPONSE {
set headers [HTTP::header names]
foreach header_name $headers {
if { [string length [HTTP::header $header_name]] > 32768 }{
log local0. "HTTP header [HTTP::header $header_name] ([string length [HTTP::header $header_name]]) is culprit"
}
}
}
when CLIENT_ACCEPTED {
set tcp_start_time [clock clicks -milliseconds]
}
when HTTP_REQUEST {
set http_request_time [clock clicks -milliseconds]
}
when HTTP_RESPONSE {
set http_response_time [ clock clicks -milliseconds ]
}
when CLIENT_CLOSED {
set tcp_end_time [ clock clicks -milliseconds ]
log local0. "HTTP request/response difference: $http_response_time - $http_request_time = [expr $http_response_time - $http_request_time]"
log local0. "Total connection time: $tcp_end_time - $tcp_start_time = [expr ($tcp_end_time - $tcp_start_time)]"
}
when HTTP_REQUEST {
if { [HTTP::header exists "X-Want-Timing"] }
{
set print 1
set clicks_client_request [clock clicks -milliseconds]
}
}
when HTTP_RESPONSE {
if { $print == 1 }
{
set clicks_server_response [clock clicks -milliseconds]
set time_taken [expr $clicks_server_response - $clicks_client_request ]
if {$time_taken < 10} {
set final_time_taken [string range "0.00$time_taken" 0 4]
} elseif { $time_taken < 100 } {
set final_time_taken [string range "0.0$time_taken" 0 4]
} elseif { $time_taken < 1000} {
set final_time_taken [string range "0.$time_taken" 0 4]
} else {
set final_time_taken "[string index $time_taken 0].[string range $time_taken 1 w3 ]"
}
HTTP::header insert "Elapsed:" $final_time_taken
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment