1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#!/usr/bin/perl -w
#
## Copyright (C) 1996-2025 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.
##
# Reads cache.log and displays lines that correspond to a given CodeContext.
use strict;
use warnings;
die("usage: $0 <CodeContext id> [log filename]\n") unless @ARGV;
my $ContextId = shift;
my $GroupSeparator = "--\n";
my $inside = 0;
my $currentGroup = 0;
my $lastReportedGroup = undef();
while (<>) {
if (/\bCodeContext.*?\bEntering: (.*)/) {
my $wasInside = $inside;
$inside = $1 eq $ContextId;
# detect no-Leaving switches from our CodeContext to another
++$currentGroup if $wasInside && !$inside;
}
my $external = !$inside && /\b$ContextId\b/o;
if ($inside || $external) {
++$currentGroup if $external;
print $GroupSeparator if defined($lastReportedGroup) && $currentGroup != $lastReportedGroup;
print $_;
$lastReportedGroup = $currentGroup;
} else {
++$currentGroup;
}
if ($inside && /\bCodeContext.*?\bLeaving: /) {
$inside = 0;
++$currentGroup;
}
}
exit(0);
|