#!/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/, )); 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 < $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;