Thanks for your reply. I realized the code due to your kind help. my last code was Global mail stats. It has BOTH Inbound and Outbound mails. Now I want to write separate codes for Inbound and Outbound mails.
I wrote below code for Inbound mails. It works. I hope it is OK. If there are any problems with my code, Pls enlighten me.
Below code with grep Is what I want.
#Passed CLEAN - Clean Mails
my $clean_total = qx(sudo grep -Ec 'amavis.*Passed CLEAN.*RelayedInbou
+nd' /var/log/maillog);
chomp($clean_total);
#$clean_total =~ s/^\s+|\s+$//g;
#Blocked SPAM - Spam Mails
my $spam_total = qx(sudo grep -Ec 'amavis.*Blocked SPAM.*DiscardedInbo
+und' /var/log/maillog);
chomp($spam_total);
#$spam_total =~ s/^\s+|\s+$//g;
#Blocked INFECTED - Virus Mails
my $virus_total = qx(sudo grep -Ec 'amavis.*Blocked INFECTED.*Discarde
+dInbound' /var/log/maillog);
chomp($virus_total);
#$virus_total =~ s/^\s+|\s+$//g;
#Blocked BANNED - Banned Mails exe,scr etc.
my $banned_total = qx(sudo grep -Ec 'amavis.*Blocked BANNED.*Discarded
+Inbound' /var/log/maillog);
chomp($banned_total);
#$banned_total =~ s/^\s+|\s+$//g;
#BAD-HEADER- - Bad Header Mails
my $badheader_total = qx(sudo grep -Ec 'amavis.*BAD-HEADER-.*RelayedIn
+bound' /var/log/maillog);
chomp($badheader_total);
#$badheader_total =~ s/^\s+|\s+$//g;
#REJECT - REJECT Mails
my $reject_total = qx(sudo grep -c 'smtpd.*reject' /var/log/maillog);
chomp($reject_total);
#$reject_total =~ s/^\s+|\s+$//g;
But, Since it is NOT very professional perl method, I wrote below code. It works well. pls see it and give your comments
#!/usr/bin/perl
# inbound.cgi
use CGI qw(:standard);
#use CGI ':standard';
use strict;
use warnings;
use GD::Graph;
use GD::Graph::bars;
use CGI::Carp 'fatalsToBrowser'; # use only for testing
my $logfile = '/var/log/maillog';
open my $fh, '<', $logfile or die "Could not open $logfile : $!";
my %count=();
while (<$fh>){
if (/amavis.*(Passed|Blocked) (CLEAN|SPAM|INFECTED|BANNED).*(Relayed
+Inbound|DiscardedInbound)/){
++$count{$2};
} elsif (/amavis.*(BAD-HEADER)-.*RelayedInbound/) {
++$count{$1};
} elsif (/smtpd.*reject/){
++$count{'REJECTED'};
}
}
close $fh;
my @data = map{ $count{$_} || 0 } qw(CLEAN SPAM INFECTED BANNED BAD-HE
+ADER REJECTED);
my $data = GD::Graph::Data->new([
["Cleaned","Spam","Virus","Banned","BadHeader","Rejected"],
[@data],
]) or die GD::Graph::Data->error;
my $graph = GD::Graph::bars->new(600,300);
$graph->set(
x_label => 'Category',
y_label => 'Count',
title => 'Inbound Mail Statistics '.localtime,
show_values => 1,
y_tick_number => 8,
bar_spacing => 10,
shadow_depth => -4,
shadowclr => 'dred',
transparent => 0,
) or die $graph->error;
my $font = '/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf';
$graph->set_title_font($font,12);
$graph->set_values_font($font, 8);
$graph->set_x_axis_font($font,8);
$graph->set_y_axis_font($font,8);
$graph->set_x_label_font($font,12);
$graph->set_y_label_font($font,12);
print header('image/png');
$graph->plot($data) or die $graph->error;
binmode STDOUT;
print $graph->gd->png;
I want to generate both graphs withing page.cgi. So I rearranged it.
#!/usr/bin/perl
# page.cgi
use strict;
use CGI ':standard';
print header();
print start_html(-title =>'Global Mail Statistics',
-bgcolor=>'#95B8DB');
print qq!<br/><center>
<h1>Mail Statistics</h1>
<img src = "bargraph.cgi"></center>!;
print qq!<br/><br/><center>
<img src = "inbound.cgi"></center>!;
print end_html;
pls advice me if it is OK?
Next, I am going to write outbound.cgi. I will let you know if I I have any issues?
Sir, Thanks you very much for your meritorious deed. Hope to hear from you.
|