File: trace-context.pl

package info (click to toggle)
squid 7.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,440 kB
  • sloc: cpp: 184,513; ansic: 12,442; sh: 5,688; makefile: 5,247; perl: 2,560; sql: 326; python: 240; awk: 141; sed: 1
file content (49 lines) | stat: -rwxr-xr-x 1,289 bytes parent folder | download
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);