#!/usr/bin/perl

use strict;
my $lib = '/var/www/html/cacti/scripts/tmp/';
my $OUT = "$lib/netstats.pm";

sub get_stats {

    local($_);
    local(*NET);

    open(NET, "< /proc/net/dev") || die "Can't read from /proc/net/dev: $!\n";
    my @lines = (grep(/eth/, <NET>));
    close(NET);

    my %stats;

    for my $line (@lines) {

        $line =~ s/^\s+//;
        $line =~ s/\s+$//;

        my ($in, $in_errors, $out, $out_errors) = (split(" ", $line))[0,2,8,10];

        $in =~ s/^.+://;

        $stats{'in'} += $in;
        $stats{'out'} += $out;
        $stats{'in_errors'} += $in_errors;
        $stats{'out_errors'} += $out_errors;

    }

    return \%stats;
}

sub save_stats {

    my $file = shift;
    my $stats = shift;

    local(*F);
    
    open(F, "> $OUT") || die "Can't write to $OUT: $!\n";
    print F <<EOF;
package netstats;

%netstats::stats = (

    in => $stats->{in},
    out => $stats->{out},
    in_errors => $stats->{in_errors},
    out_errors => $stats->{out_errors}
);

1;

EOF
    close(F);

}

if (! -e $OUT) {
    save_stats($OUT, get_stats());
}

my %new_stats = %{get_stats()};

require $OUT;
import netstats;

save_stats($OUT, get_stats());

print join(' ',
           (map { sprintf "%s:%s", $_, 
                  ($new_stats{$_} - $netstats::stats{$_}); }
           (keys %netstats::stats)));

exit 0;
