#!/usr/bin/perl use strict; use DBI; $|++; my (@mail_counter, @spam_counter, @virus_counter, @unk_user, @date, $query, $rv, $sth, $i, $num_days, $dbh, $rowhash, $line, $month, $day); $dbh = &connect_db; $num_days = 30; $line = 0; for ($i=0; $i < $num_days; $i++) { $query = "select date_format(from_days(to_days(now())-$i),'%b-%e') as date"; ($rv, $sth) = &do_standard_query($dbh, $query); $rowhash = &get_rowhash($sth); ($month, $day) = split(/-/,$rowhash->{'date'}); $day = &space_pad($day); $date[$i] = "$month $day"; &finish($sth); } print "Processing..."; while (<>) { $line++; if ($line % 10000 == 0) { print "."; } for ($i=0; $i < $num_days; $i++) { if (m|^$date[$i]|) { if ($_ =~ /user unknown/i) { $unk_user[$i]++; } if ($_ =~ /mail_in/){ $mail_counter[$i]++; } if ($_ =~ /spam/){ $spam_counter[$i]++; } if ($_ =~ /virus/){ $virus_counter[$i]++; } } } } print "\n"; for ($i=0; $i < $num_days; $i++) { printf("%s -- mail_in:%d mail_spam:%d mail_virus:%d unk_user:%d\n",$date[$i],$mail_counter[$i],$spam_counter[$i],$virus_counter[$i],$unk_user[$i]); } &disconnect_db($dbh); sub do_standard_query { my ($dbh, $query, @values) = @_; my ($sth, $rv); $sth = $dbh->prepare($query); $rv = $sth->execute(@values); return ($rv, $sth); } sub get_rowhash { my ($sth) = @_; my ($hash); $hash = $sth->fetchrow_hashref; return ($hash); } sub connect_db { my ($driver) = "mysql"; my ($database) = "test"; my ($options) = ""; my ($dbuser) = "test"; my ($password) = ""; my ($dsn) = "DBI:$driver:database=$database;$options"; my ($dbh) = DBI->connect($dsn, $dbuser, $password); return $dbh; } sub finish { my ($sth) = @_; $sth->finish; } sub space_pad { my ($num) = @_; $num = int($num); if ($num < 10) { return (" $num"); } return $num; } sub disconnect_db { my ($dbh) = @_; $dbh->disconnect; } sub get_errorlevel { my ($rc) = @_; return (0xfffff & $rc); }