1
0
mirror of https://github.com/squid-cache/squid.git synced 2025-04-18 22:04:07 +03:00
squid/scripts/access-log-matrix.pl
2023-01-22 08:35:27 +00:00

120 lines
3.0 KiB
Raku
Executable File

#!/usr/local/bin/perl
#
## Copyright (C) 1996-2023 The Squid Software Foundation and contributors
##
## Squid software is distributed under GPLv2+ license and includes
## contributions from numerous individuals and organizations.
## Please see the COPYING and CONTRIBUTORS files for details.
##
#
# access-log-matrix.pl
#
# Duane Wessels, Dec 1995
#
# Stdin is a Harvest access log (in the old, non-common logfile format!).
# The output is a matrix of hostnames and log entry types, plus totals.
while (<>) {
chop;
@F = split;
$when = $F[0];
$first = $when unless ($first);
$last = $when;
$what = pop @F;
$size = pop @F;
$host = pop @F;
$HOSTS{$host}++;
$HOSTS{'TOTAL'}++;
if ($what eq 'TCP_DONE') {
$TCP_DONE{$host}++;
$TCP_DONE{'TOTAL'}++;
} elsif ($what eq 'TCP_HIT') {
$TCP_HIT{$host}++;
$TCP_HIT{'TOTAL'}++;
} elsif ($what eq 'TCP_MISS') {
$TCP_MISS{$host}++;
$TCP_MISS{'TOTAL'}++;
} elsif ($what eq 'TCP_MISS_TTL') {
$TCP_MISS_TTL{$host}++;
$TCP_MISS_TTL{'TOTAL'}++;
} elsif ($what eq 'UDP_HIT') {
$UDP_HIT{$host}++;
$UDP_HIT{'TOTAL'}++;
} elsif ($what eq 'UDP_MISS') {
$UDP_MISS{$host}++;
$UDP_MISS{'TOTAL'}++;
} else {
$OTHER{$host}++;
$OTHER{'TOTAL'}++;
}
}
print ' HOSTNAME: '. `hostname`;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime($first);
printf "FIRST LOG ENTRY: %04d/%02d/%02d %.2d:%.2d:%.2d\n", $year+1900,$mon+1,$mday, $hour,$min,$sec;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime($last);
printf " LAST LOG ENTRY: %04d/%02d/%02d %.2d:%.2d:%.2d\n", $year+1900,$mon+1,$mday, $hour,$min,$sec;
print "\n";
printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5s\n",
'',
'TCP', 'TCP', 'TCP', 'TCP',
'UDP', 'UDP', '',
'');
printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5s\n",
'HOST',
'HIT', 'MISS', 'TTL', 'DONE',
'HIT', 'MISS', 'OTHER',
'TOTAL');
printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5s\n",
'-'x25,
'-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5);
foreach $h (sort totalcmp keys %HOSTS) {
next if ($h eq 'TOTAL');
($a1,$a2,$a3,$a4) = split('\.', $h);
($fqdn, @F) = gethostbyaddr(pack('C4',$a1,$a2,$a3,$a4),2);
$fqdn = $h unless ($fqdn ne '');
printf "%25.25s %5d %5d %5d %5d %5d %5d %5d %5d\n",
$fqdn,
$TCP_HIT{$h},
$TCP_MISS{$h},
$TCP_MISS_TTL{$h},
$TCP_DONE{$h},
$UDP_HIT{$h},
$UDP_MISS{$h},
$OTHER{$h},
$HOSTS{$h};
}
printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5s\n",
'-'x25,
'-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5);
printf "%25.25s %5d %5d %5d %5d %5d %5d %5d %5d\n",
'TOTAL',
$TCP_HIT{'TOTAL'},
$TCP_MISS{'TOTAL'},
$TCP_MISS_TTL{'TOTAL'},
$TCP_DONE{'TOTAL'},
$UDP_HIT{'TOTAL'},
$UDP_MISS{'TOTAL'},
$OTHER{'TOTAL'},
$HOSTS{'TOTAL'};
exit 0;
sub hostcmp {
$a cmp $b
}
sub totalcmp {
$HOSTS{$b} <=> $HOSTS{$a}
}