Quote:
Originally Posted by centerstage
I am going to keep searching as ideally i would like the output to look like:
Today's Bandwidth: x/gb
Yesterday's Bandwidth: x/gb
Current Month: x/gb
Previous Month: x/gb
Don't know if i am expecting too much......
Anyways I will give an update tomorrow
|
Code:
#!/usr/bin/perl
# Copyright: ephemera @ daemonforums.org
use POSIX("mktime");
die "Usage: $0 interface\n" if $#ARGV;
$logfile="/var/log/bwmond.$ARGV[0]";
open LOG,"< $logfile" or die "$logfile: $!\n";
@abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
($min,$date,$mon,$year)=(localtime)[1,3..5];
($ydate,$ymon,$yyear)=(localtime mktime 0, 0, 0, $date-1, $mon, $year)[3..5];
($ldate,$lmon,$lyear)=(localtime mktime 0, 0, 0, $date, $mon-1, $year)[3..5];
$year+=1900; $yyear+=1900; $lyear+=1900;
%what=(d=>'Today',yd=>'Yesterday',m=>'This Month',lm=>'Last Month');
for (reverse <LOG>) {
$end=1;
if (!defined $lent) {
/(.*):.*/;
$lent=$1;
}
tr/:/ /;
@F = split;
if ($F[5] == $year && $F[0] eq $abbr[$mon]) {
push @m, [@F];
if ($F[1] == $date) {
push @d, [@F];
}
$end=0;
}
if ($F[5] == $yyear && $F[0] eq $abbr[$ymon] && $F[1]==$ydate) {
push @yd,[@F]; $end=0;
}
if ($F[5] == $lyear && $F[0] eq $abbr[$lmon]) {
push @lm,[@F]; $end=0;
}
last if $end;
}
printf "\n%23s%10s\n", '| Dnload(MB)', '| Upload(MB)|';
printf "%s\n", '-----------+-----------+-----------+';
for (('d','yd','m','lm')) {
if (defined @{"$_"}) {
$up = ${"$_"}[0]->[12] - ${"$_"}[-1]->[12] + ${"$_"}[-1]->[6];
$down = ${"$_"}[0]->[14] - ${"$_"}[-1]->[14] + ${"$_"}[-1]->[9];
printf "%-10s | %8.1f | %8.1f |\n",$what{"$_"},$down/1024,$up/1024;
} else {
printf("%-10s | - | - |\n", $what{"$_"});
}
}
print "\nLast updated on $lent\n";