######################################################## # Please file all bug reports, patches, and feature # requests under: # https://sourceforge.net/p/logwatch/_list/tickets # and copy: # frank@fam-breedijk.com. # Help requests and discusion can be filed under: # https://sourceforge.net/p/logwatch/discussion/ ######################################################## ####################################################### ## Copyright (c) 2008 Kirk Bauer ## Covered under the included MIT/X-Consortium License: ## http://www.opensource.org/licenses/mit-license.php ## All modifications and contributions by other persons to ## this script are assumed to have been donated to the ## Logwatch project and thus assume the above copyright ## and licensing terms. If you want to make contributions ## under your own copyright or a different license this ## must be explicitly stated in the contribution an the ## Logwatch project reserves the right to not accept such ## contributions. If you have made significant ######################################################## use strict; my ($ThisLine, @fields, %activity, %isdn, @OtherList); my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0; while (defined($ThisLine = )) { @fields = split /\t/, $ThisLine; if ( @fields == 11 && $fields[10] =~ /^cmd=/ ) { unless ( exists $activity{$fields[1]} ) { $activity{$fields[1]} = {}; } unless ( exists $activity{$fields[1]}->{$fields[2]} ) { $activity{$fields[1]}->{$fields[2]} = {}; } chomp $fields[10]; $fields[10] =~ s/^cmd=//; $activity{$fields[1]}->{$fields[2]}->{$fields[10]}++; } elsif ( @fields == 12 && $fields[11] =~ /^cmd=/ ) { unless ( exists $activity{$fields[1]} ) { $activity{$fields[1]} = {}; } unless ( exists $activity{$fields[1]}->{$fields[2]} ) { $activity{$fields[1]}->{$fields[2]} = {}; } chomp $fields[11]; $fields[11] =~ s/^cmd=//; $activity{$fields[1]}->{$fields[2]}->{$fields[11]}++; } elsif ( @fields == 27 && $fields[24] =~ /^elapsed_time=/ ) { unless ( exists $isdn{$fields[2]} ) { $isdn{$fields[2]} = {}; } unless ( exists $isdn{$fields[2]}->{$fields[4]} ) { $isdn{$fields[2]}->{$fields[4]} = {}; $isdn{$fields[2]}->{$fields[4]}->{'seconds'} = 0; } chomp $fields[24]; $fields[24] =~ s/^elapsed_time=//; $isdn{$fields[2]}->{$fields[4]}->{'seconds'} += $fields[24]; } elsif ( @fields == 10 && $fields[5] =~ /^start/ ) { unless ( exists $isdn{$fields[2]} ) { $isdn{$fields[2]} = {}; } unless ( exists $isdn{$fields[2]}->{$fields[4]} ) { $isdn{$fields[2]}->{$fields[4]}->{'start'} = 0; } $isdn{$fields[2]}->{$fields[4]}->{'start'}++; } else { # Report any unmatched entries... push @OtherList,$ThisLine; } } if ((keys %activity) and ($Detail >= 5)) { foreach my $host ( sort keys %activity ) { print "\nActivity on $host:\n"; foreach my $user ( sort keys %{$activity{$host}} ) { print "User: $user\n"; foreach my $command ( sort keys %{$activity{$host}->{$user}} ) { print "$command\t$activity{$host}->{$user}->{$command} time(s)\n"; } } } } if ((keys %isdn) and ($Detail >= 5)) { foreach my $host ( sort keys %isdn ) { print "\nISDN on $host:\n"; foreach my $number ( sort keys %{$isdn{$host}} ) { print "Number: $number dialed total $isdn{$host}->{$number}->{'seconds'} seconds"; if ($isdn{$host}->{$number}->{'start'}) { print " started $isdn{$host}->{$number}->{'start'} times\n"; } else { print "\n"; } } } } if ($#OtherList >= 0) { print "\n**Unmatched Entries**\n\n"; print @OtherList; } exit(0); # vi: shiftwidth=3 tabstop=3 syntax=perl et # Local Variables: # mode: perl # perl-indent-level: 3 # indent-tabs-mode: nil # End: