Blame contrib/linux_stat/linux_stats.pl

Packit 667938
#!/usr/bin/perl -Tw
Packit 667938
####################################################################
Packit 667938
#  linux_stats.pl     1.0            Mike Machado                  #
Packit 667938
#                                    mike@innercite.com            #
Packit 667938
#                                    2000-07-19                    #
Packit 667938
#                                                                  #
Packit 667938
#  Script to read traffic stats off linux 2.2 and greater systems  #
Packit 667938
#                                                                  #
Packit 667938
####################################################################
Packit 667938
use strict;
Packit 667938
Packit 667938
Packit 667938
Packit 667938
#### Options ####
Packit 667938
my $uptimeprog = '/usr/bin/uptime';	# Set to program to give system uptime
Packit 667938
my $hostnameprog = '/bin/hostname';	# Set to program to give system hostname
Packit 667938
my $defaultinterface = 'eth0';		# Set to default interface
Packit 667938
my $defaultstatfile = '/proc/net/dev';	# Set to traffic stats file location
Packit 667938
Packit 667938
Packit 667938
##### Nothing below here should have to be changed #####
Packit 667938
Packit 667938
if (@ARGV && $ARGV[0] eq '-h') {
Packit 667938
	print "Usage: linux_stats.pl [interface] [stats file]\n";
Packit 667938
	print "\tIf left blank 'eth0' and '/proc/net/dev' are used\n";
Packit 667938
	print "\tInterface of 'ALL' will total all interface traffic, excluding lo\n";
Packit 667938
	exit;
Packit 667938
}
Packit 667938
Packit 667938
my $interface = shift || $defaultinterface;
Packit 667938
my $statfile = shift || $defaultstatfile;
Packit 667938
Packit 667938
# Clear path and get uptime
Packit 667938
delete $ENV{PATH};
Packit 667938
delete $ENV{BASH_ENV};
Packit 667938
my $uptime = `$uptimeprog`;
Packit 667938
chomp($uptime);
Packit 667938
my $hostname = `$hostnameprog`;
Packit 667938
chomp($hostname);
Packit 667938
Packit 667938
my ($in, $out, $found);
Packit 667938
open(STATS, $statfile) || die "Cannot open $statfile: $!\n";
Packit 667938
while (<STATS>) {
Packit 667938
	my $line = $_;
Packit 667938
	chomp($line);
Packit 667938
	if (uc($interface) eq 'ALL') {
Packit 667938
		if ($line =~ /^\s+(.*):\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+$/) {
Packit 667938
			next if $1 eq 'lo';
Packit 667938
			$in += $2;
Packit 667938
			$out += $3;
Packit 667938
			$found++;
Packit 667938
		}
Packit 667938
	} else {
Packit 667938
		if ($line =~ /^\s*$interface:\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+$/) {
Packit 667938
			$in = $1;
Packit 667938
			$out = $2;
Packit 667938
			$found = 1;
Packit 667938
			last;
Packit 667938
		}
Packit 667938
	}
Packit 667938
}
Packit 667938
close(STATS);
Packit 667938
Packit 667938
if (!$found) {
Packit 667938
	print "0\n0\n$uptime\n$hostname: Unknown Interface: $interface\n";
Packit 667938
} else {
Packit 667938
	print "$in\n$out\n$uptime\n$hostname: Interface: $interface";
Packit 667938
	if (uc($interface) eq 'ALL') {
Packit 667938
		print " (counted $found interface";
Packit 667938
		if ($found > 1) {
Packit 667938
			print "s";
Packit 667938
		}
Packit 667938
		print ")";
Packit 667938
	}
Packit 667938
	print "\n";
Packit 667938
}