View Single Post
  #8   (View Single Post)  
Old 15th June 2008
ephemera's Avatar
ephemera ephemera is offline
Knuth's homeboy
 
Join Date: Apr 2008
Posts: 537
Default

Quote:
Originally Posted by centerstage View Post
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";

Last edited by ephemera; 22nd October 2008 at 12:36 PM.
Reply With Quote