#!/usr/bin/perl
$home = "/usr/users/luyer/snmp/perl";
require "$home/lib/config.pl";
use SNMP;

$oldir = &week;
mkdir $config'outdirs{'RouterD'}."/".$oldir, 0755;
chdir $config'outdirs{'RouterD'}."/".$oldir;
open(PID,">$config'pidfile{'RouterD'}");
print PID "$$\n";
close PID;
SNMP::setMib($config'mib, 0);
$SNMP::auto_init_mib = 0;
$var = new SNMP::VarList(['ifNumber', 0]);
for (;;) {
	$time = time();
	$newdir = &week;
	if ($newdir ne $oldir) {
		$oldir = $newdir;
		mkdir "../$newdir", 0755;
		chdir "../$newdir";
		for $name (keys %isopen) {
			close("OUT$name");
			delete $isopen{$name};
		}
	}
	foreach $router (keys %config'routers) {
		$vars = new SNMP::VarList(['ifDescr', 0],
					  ['ifInOctets', 0],
					  ['ifOutOctets', 0],
					  ['ifInErrors', 0],
					  ['ifOutErrors', 0]);
		$community = "commu1";
		$community = "commu2"
			if ($router eq "splatter.library" || $router eq "WAIX"
				|| $router eq "border-1");
		$community = $config'comm{$router} if ($special = ($router eq "pylos"));
		$special2 = ($router eq "scamander");
		$session = new SNMP::Session(DestHost => $config'routers{$router}, Community => $community);
		($no) = $session->get($var);
		for ($i = 0; $i < $no; $i++) {
			($desr,$bytesin,$bytesout,$errin,$errout) = $session->getnext($vars);
			$desr =~ tr[/ ][._] if $desr;
			if($desr && (!$special || $desr eq "asy17") &&
			   (!$special2 || $desr !~ /^Serial.*:.*$/o)) {
				$int = "/0$i-";
				$int = "/$i-" if $i >= 10;
				$int = "/00-" if $special;
				$int = $router.$int.$desr;
				if(!defined $isopen{$int}) {
					if(!open("OUT$int", ">>$int")) {
					  mkdir $router, 0755;
					  open("OUT$int", ">>$int") ||
					    die "Can\'t open $int!\n";
					}
					select("OUT$int");
					$| = 1;
					$isopen{$int} = 1;
				}
				print {"OUT$int"} "$time|$bytesin|$bytesout|$errin|$errout\n";
			}
		}
	}
	$sleeptime = ($time + $config'sampleinterval - time());
	sleep $sleeptime if ($sleeptime > 0);
}
