1 |
#!/usr/bin/perl -w |
2 |
|
3 |
# this script can be run periodicly on log mail.log file to report |
4 |
# change since last run. |
5 |
# |
6 |
# Dobrica Pavlinusic <dpavlin@rot13.org> |
7 |
|
8 |
use strict; |
9 |
|
10 |
my $log="/var/log/mail.log"; |
11 |
|
12 |
# edit this to your configuration! |
13 |
|
14 |
my $domain='@pliva.hr'; |
15 |
my $delta="/var/tmp/"; |
16 |
|
17 |
my $debug=0; |
18 |
|
19 |
$log = $ARGV[0] if ($ARGV[0] && -r $ARGV[0]); |
20 |
|
21 |
# counters |
22 |
my ($mail_int, $mail_ext) = (0,0,0,0); |
23 |
# size |
24 |
my ($size_int, $size_ext) = (0,0,0,0); |
25 |
|
26 |
open(LOG,$log) || die "can't open log: $!"; |
27 |
|
28 |
my $tmp_log=$log; |
29 |
$tmp_log=~s/\W/_/g; |
30 |
$delta.=$tmp_log.".offset"; |
31 |
|
32 |
if (-e $delta) { |
33 |
open(D,$delta) || die "can't open delta file '$delta' for log '$log': $!"; |
34 |
my $offset=<D>; |
35 |
chomp $offset; |
36 |
close(D); |
37 |
my $log_size = -s $log; |
38 |
print "log size: $log_size\n" if ($debug); |
39 |
if ($offset <= $log_size) { |
40 |
seek(LOG,$offset,0); |
41 |
print STDERR "skipping to position: $offset\n" if ($debug); |
42 |
} else { |
43 |
print STDERR "reset position to begin\n" if ($debug); |
44 |
} |
45 |
} |
46 |
|
47 |
my $lines=0; |
48 |
|
49 |
while(<LOG>) { |
50 |
chomp; |
51 |
if (m/from=[^\@]+\@[^\@]+$domain[>,]+\s+.*size=(\d+)/ || m/from=[^\@]+[,\s]+.*size=(\d+)/ ) { |
52 |
$mail_int++; |
53 |
$size_int+=$1; |
54 |
} elsif (m/from=.*size=(\d+)/) { |
55 |
$mail_ext++; |
56 |
$size_ext+=$1; |
57 |
} |
58 |
$lines++; |
59 |
} |
60 |
|
61 |
print STDERR "processed $lines lines...\n" if ($debug); |
62 |
|
63 |
open(D,"> $delta") || die "can't open delta file '$delta' for log '$log': $!"; |
64 |
print D tell(LOG); |
65 |
close(D); |
66 |
|
67 |
print STDERR "last position in log: ".tell(LOG)."\n" if ($debug); |
68 |
|
69 |
print "$mail_int |
70 |
$size_int |
71 |
$mail_ext |
72 |
$size_ext |
73 |
"; |