Sendmail

From Federal Burro of Information
Jump to navigationJump to search

Logchop

#!/usr/bin/perl -w

use strict;
my $data;
my $debug = 0;

while (<>) {
        chomp;
        if ( /(\w{3})\s(\d{2})\s(\d{2}:\d{2}:\d{2})\s(\w+)\s(\w+)\[\d+\]:\s\[.*\]\s(.*):\s(.*)/ ) {
                my $month = $1;
                my $date = $2;
                my $time = $3;
                my $host = $4;
                my $process = $5;
                my $msgid = $6;
                my $rest = $7;
                if ( $debug ) {
                        print "Match $_\n";
                        print "\tMonth: $1\n";
                        print "\tDate: $date\n";
                        print "\tTime: $time\n";
                        print "\tHost: $host\n";
                        print "\tProcess: $process\n";
                        print "\tMsgid: $msgid\n";
                        print "\tRest: $rest\n";
                }
                foreach my $tuple ( split ( /,\s/ , $rest ) ) {
                        $debug && print "\tTuple : $tuple\n";
                        my ( $name , $value ) = split ( /=/ , $tuple ) ;
                        #if ( $name ) { print "\tName: $name\n";} else { print "No Name\n";}
                        #if ( $value ) { print "\tValue: $value\n";} else { print "No Value\n";}
                        if ( $name && $value ) {
                                $data->{"$name"}->{"$value"}++;
                        }
                }
        } else {
                $debug && print "No: ".$_."\n";
        }
}

print "#########################\n# Report \n##################\n";
foreach my $name ( keys( %$data )) {
        next if $name eq "msgid";
        next if $name eq "stat";
        next if $name eq "pri";
        if ( $name eq "size" ) {
                print "Size:\n";
                foreach my $count ( sort {$data->{$name}->{$b} <=> $data->{$name}->{$a}} keys %{$data->{$name}} ) {
                print "\t".$count . " " . $data->{$name}->{$count}."\n";
                }
        } elsif ( $name eq "from" || $name eq "to" ) {
                print $name ."\n";
                foreach my $count ( sort {$data->{$name}->{$b} <=> $data->{$name}->{$a}} keys %{$data->{$name}} ) {
                print "\t".$count . " " . $data->{$name}->{$count}."\n";
                }
        } else {
                print "$name\n";
                foreach my $count ( sort keys %{$data->{$name}} ) {
                        print "\t".$count . " " . $data->{$name}->{$count}."\n";
                }
        }
}