#!/usr/bin/perl # # $Id$ # # traffic.pl # TiChou # my $version = "1.0"; my $cmdname = (split('/', $0))[-1]; my $rrdlib = "/var/lib/rrd"; use Getopt::Long; use RRDs; sub usage($) { my $usage = "Usage: $cmdname [options] interface[,interface...] Options: -f, --file=FILE[,FILE...] specify RRD files (default $rrdlib/traffic_INTERFACE) -h, --help display this help and exit -v, --version display version Report bugs to .\n"; if (shift) { print STDOUT $usage; exit 0; } else { print STDERR $usage; exit 1; } } sub version { print "$cmdname $version\n"; exit 0; } my @rrdfiles = (); Getopt::Long::Configure ("bundling"); GetOptions("f|file=s@" => \@rrdfiles, "h|help" => \&usage, "v|version" => \&version) or &usage(0); my @interfaces = @ARGV or &usage(0); @rrdfiles = split(/,/,join(',',@rrdfiles)); @interfaces = split(/,/,join(',',@interfaces)); open(DEV, "/proc/net/dev"); while () { /^\s*(\w+):\s*(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+$/ && (@$1 = ($2,$3)); } close(DEV); for (my $i = 0; $i < @interfaces; $i++) { my $interface = $interfaces[$i]; my $rrdfile = $rrdfiles[$i] ? $rrdfiles[$i] : "$rrdlib/traffic_$interface.rrd"; if (not -f $rrdfile) { RRDs::create $rrdfile, qw(DS:in:COUNTER:600:0:U DS:out:COUNTER:600:0:U RRA:AVERAGE:0.5:1:288 RRA:AVERAGE:0.5:6:336 RRA:AVERAGE:0.5:24:360 RRA:AVERAGE:0.5:288:365 RRA:MIN:0.5:1:288 RRA:MIN:0.5:6:336 RRA:MIN:0.5:24:360 RRA:MIN:0.5:288:365 RRA:MAX:0.5:1:288 RRA:MAX:0.5:6:336 RRA:MAX:0.5:24:360 RRA:MAX:0.5:288:365); my $error = RRDs::error; die "$0: $error\n" if $error; } RRDs::update $rrdfile, "N:".(@$interface ? join(':',@$interface) : "U:U"); my $error = RRDs::error; die "$0: $error\n" if $error; }