X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=tools%2Fprivoxy-log-parser.pl;h=9558544ac2a09d1da0ca2b7226ff5e3a5bd29ea9;hp=79f50e0cc159039ec88175d11665169f2b60c00d;hb=3368a380bd6299439d3f4f8298376f79c082530e;hpb=e303f906a196a4d60ba69c5a729119402ad01241 diff --git a/tools/privoxy-log-parser.pl b/tools/privoxy-log-parser.pl index 79f50e0c..9558544a 100755 --- a/tools/privoxy-log-parser.pl +++ b/tools/privoxy-log-parser.pl @@ -6,9 +6,7 @@ # A parser for Privoxy log messages. For incomplete documentation run # perldoc privoxy-log-parser(.pl), for fancy screenshots see: # -# http://www.fabiankeil.de/sourcecode/privoxy-log-parser/ -# -# $Id: privoxy-log-parser.pl,v 1.160 2013/05/28 14:38:15 fabiankeil Exp $ +# https://www.fabiankeil.de/sourcecode/privoxy-log-parser/ # # TODO: # - LOG_LEVEL_CGI, LOG_LEVEL_ERROR, LOG_LEVEL_WRITE content highlighting @@ -25,7 +23,7 @@ # hash key as input. # - Add --compress and --decompress options. # -# Copyright (c) 2007-2013 Fabian Keil +# Copyright (c) 2007-2017 Fabian Keil # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -45,7 +43,7 @@ use warnings; use Getopt::Long; use constant { - PRIVOXY_LOG_PARSER_VERSION => '0.8', + PRIVOXY_LOG_PARSER_VERSION => '0.9', # Feel free to mess with these ... DEFAULT_BACKGROUND => 'black', # Choose registered colour (like 'black') DEFAULT_TEXT_COLOUR => 'white', # Choose registered colour (like 'black') @@ -646,7 +644,7 @@ sub highlight_request_line ($) { $rl = h('invalid-request') . $rl . h('Standard'); - } elsif ($rl =~ m/^([-\w]+) (.*) (HTTP\/\d\.\d)/) { + } elsif ($rl =~ m/^([-\w]+) (.*) (HTTP\/\d+\.\d+)/) { # XXX: might not match in case of HTTP method fuzzing. # XXX: save these: ($method, $path, $http_version) = ($1, $2, $3); @@ -2005,6 +2003,14 @@ sub gather_loglevel_crunch_stats ($$) { } elsif ($c =~ m/^Blocked:/) { # Blocked: blogger.googleusercontent.com:443 $stats{'blocked'}++; + + } elsif ($c =~ m/^Connection timeout:/) { + # Connection timeout: http://c.tile.openstreetmap.org/18/136116/87842.png + $stats{'connection-timeout'}++; + + } elsif ($c =~ m/^Connection failure:/) { + # Connection failure: http://127.0.0.1:8080/ + $stats{'connection-failure'}++; } } @@ -2074,6 +2080,7 @@ sub gather_loglevel_header_stats ($$) { my ($c, $thread) = @_; our %stats; + our %cli_options; if ($c =~ m/^A HTTP\/1\.1 response without/ or $c =~ m/^Keeping the server header 'Connection: keep-alive' around./) @@ -2086,10 +2093,13 @@ sub gather_loglevel_header_stats ($$) { # scan: HTTP/1.1 200 OK $stats{'method'}{$2}++; - $stats{'resource'}{$3}++; + if ($cli_options{'url-statistics-threshold'} != 0) { + $stats{'resource'}{$3}++; + } $stats{'http-version'}{$4}++; - } elsif ($c =~ m/^scan: Host: ([^\s]+)/) { + } elsif ($cli_options{'host-statistics-threshold'} != 0 and + $c =~ m/^scan: Host: ([^\s]+)/) { # scan: Host: p.p $stats{'hosts'}{$1}++; @@ -2107,6 +2117,8 @@ sub init_stats () { 'empty-responses-on-reused-connections' => 0, 'fast-redirections' => 0, 'blocked' => 0, + 'connection-failure' => 0, + 'connection-timeout' => 0, 'reused-connections' => 0, 'server-keep-alive' => 0, 'closed-client-connections' => 0, @@ -2149,6 +2161,10 @@ sub print_stats () { get_percentage($stats{requests}, $stats{'blocked'}) . ")\n"; print "Fast redirections: " . $stats{'fast-redirections'} . " (" . get_percentage($stats{requests}, $stats{'fast-redirections'}) . ")\n"; + print "Connection timeouts: " . $stats{'connection-timeout'} . " (" . + get_percentage($stats{requests}, $stats{'connection-timeout'}) . ")\n"; + print "Connection failures: " . $stats{'connection-failure'} . " (" . + get_percentage($stats{requests}, $stats{'connection-failure'}) . ")\n"; print "Outgoing requests: " . $outgoing_requests . " (" . get_percentage($stats{requests}, $outgoing_requests) . ")\n"; print "Server keep-alive offers: " . $stats{'server-keep-alive'} . " (" . @@ -2191,13 +2207,13 @@ sub print_stats () { # Due to log rotation we may not have a complete picture for all the requests printf "Improperly accounted requests: ~%d\n", abs($stats{requests} - $client_requests_checksum); - if ($stats{method} eq 0) { - print "No response lines parsed yet yet.\n"; - return; - } - print "Method distribution:\n"; - foreach my $method (sort {$stats{'method'}{$b} <=> $stats{'method'}{$a}} keys %{$stats{'method'}}) { - printf "%8d : %-8s\n", $stats{'method'}{$method}, $method; + if (exists $stats{method}) { + print "Method distribution:\n"; + foreach my $method (sort {$stats{'method'}{$b} <=> $stats{'method'}{$a}} keys %{$stats{'method'}}) { + printf "%8d : %-8s\n", $stats{'method'}{$method}, $method; + } + } else { + print "Method distribution unknown. No response headers parsed yet. Is 'debug 8' enabled?\n"; } print "Client HTTP versions:\n"; foreach my $http_version (sort {$stats{'http-version'}{$b} <=> $stats{'http-version'}{$a}} keys %{$stats{'http-version'}}) { @@ -2470,7 +2486,7 @@ sub VersionMessage { my $version_message; $version_message .= 'Privoxy-Log-Parser ' . PRIVOXY_LOG_PARSER_VERSION . "\n"; - $version_message .= 'http://www.fabiankeil.de/sourcecode/privoxy-log-parser/' . "\n"; + $version_message .= 'https://www.fabiankeil.de/sourcecode/privoxy-log-parser/' . "\n"; print $version_message; }