#!/usr/local/bin/perl

# Written by Ilker TEMIR (ilker@marketweb.net.tr) 11.27.1998
# Idea taken from Senol GULGONUL (senol@satko.com.tr)
# Designed for Ascend TNT MAX

$basedir="/export/home/ilker/private/marketweb/portmon";
$logdir="$basedir/logs";
$snmpget="/usr/local/bin/snmpget";
$snmpascendinputoctets="interfaces.ifTable.ifEntry.ifInOctets";
$snmpascendoutputoctets="interfaces.ifTable.ifEntry.ifOutOctets";
$snmpascendifnumber="ip.ipRouteTable.ipRouteEntry.ipRouteIfIndex";
$time=`date +%H:%M`;
$date=`date +%d%m%y`;
chop ($time);
chop ($date);

open (configfile,"$basedir/portmon.cf");
while ($cfline=<configfile>) {
	($connname,$portspeed,$trafficlimit,$desc,$nas,$community,$network,$controlpassword)=split (/:/,$cfline);
	($dummy,$ifindex)=split (/=/,`$snmpget $nas $community $snmpascendifnumber.$network`);
	if ($dummy eq "$snmpascendifnumber.$network ") 
		{
#			print "Processing $connname\n";
			chop ($ifindex);
			$ifindex=$ifindex+1-1;	# I know this silly but I must convert
						# this into number and do not know how to
						# do in Perl
			($dummy,$ascendinputoctets)=split (/=/,`$snmpget $nas $community $snmpascendinputoctets.$ifindex`);
			($dummy,$ascendoutputoctets)=split (/=/,`$snmpget $nas $community $snmpascendoutputoctets.$ifindex`);
			chop ($ascendinputoctets);
			chop ($ascendoutputoctets);
	
			open (infile,"$logdir/$connname/temp.do.not.delete");
			($prevascendinputoctets,$prevascendoutputoctets)=split(/:/,<infile>);
			close (infile);
			#chop ($prevascendinputoctets);		# This should be removed
			chop ($prevascendoutputoctets);

			$ascendinputbps=($ascendinputoctets-$prevascendinputoctets)*8/300;
			$ascendoutputbps=($ascendoutputoctets-$prevascendoutputoctets)*8/300;
		
			$ascendinputbps=int ($ascendinputbps);
			$ascendoutputbps=int ($ascendoutputbps);

			open (outfile,">$logdir/$connname/temp.do.not.delete");
			print outfile "$ascendinputoctets:$ascendoutputoctets\n";
			close (outfile);

			if (($ascendinputbps>=0) && ($ascendoutputbps>=0) && ($ascendinputbps<=($portspeed*1000)) && ($ascendoutputbps<=($portspeed*1000))) {
			open (logfile,">>$logdir/$connname/$date.bps");
			print logfile "$time $ascendinputbps $ascendoutputbps $ascendinputoctets $ascendoutputoctets $prevascendinputoctets $prevascendoutputoctets\n"; 
			close (logfile);
		}
	}
}
close (configfile);

