#!/usr/bin/perl use strict; if (@ARGV <= 0) { die "no user specified\n"; } my $user=$ARGV[0]; my $filename = "/usr/local/etc/mrtg/ipa-${user}.dat"; my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename); my $time = time()-$atime; my $year = `date +"%Y"`; my $mon = `date +"%m"`; my $day = `date +"%d"`; my $hour = `date +"%H"`; my $min = `date +"%M"`; chomp $year; chomp $mon; chomp $day; chomp $hour; chomp $min; $min /= 5; $min =~ s/\..*//g; $min *= 5; $min -= 5; if ($min < 0) { $hour -= 1; $min += 60; if ($hour < 0) { $day -= 1; $hour += 24; if ($day < 1) { $mon -= 1; if ($mon == 2 || $mon == 4 || $mon == 6 || $mon == 8 || $mon == 9 || $mon == 11 || $mon == 1 ) { $day = 31; } elsif ($mon == 5 || $mon == 7 || $mon == 10 || $mon == 12) { $day = 30; } elsif ($year%4 == 0) { $day = 29; } else { $day = 28; } if ($mon < 1) { $mon += 12; $year -= 1; } } } } my $interval = "$year.$mon-$year.$mon"; my $down = `/usr/local/bin/ipastat -qr ${user}-downstream -i \"$interval\" | tail -n 1| sed -e "s/^[^0-9]*\([0-9]*\).*/\1/g"`; my $up = `/usr/local/bin/ipastat -qr ${user}-upstream -i \"$interval\" | tail -n 1| sed -e "s/^[^0-9]*\([0-9]*\).*/\1/g"`; chomp $down; chomp $up; $down =~ s/^[^0-9]*//g; $down =~ s/\ .*$//g; $up =~ s/^[^0-9]*//g; $up =~ s/\ .*$//g; my ($old_down, $old_up); open(FILE, "<".$filename); while() { $old_down = $old_up; $old_up = $_; } chomp $old_down; chomp $old_up; close(FILE); open(FILE, ">".$filename); print(FILE "$down\n$up\n"); close(FILE); if ($time < 450) { $down -= $old_down; $up -= $old_up; if ($down < 0 || $up < 0) { $down = 0; $up = 0; } else { $down /= $time; $up /= $time; $down =~ s/\..*//g; $up =~ s/\..*//g; } } else { $down = 0; $up = 0; } print "${down}\n${up}\n0\n0\n"; print "$interval\n"