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

$oldir = &week;
mkdir $config'outdirs{'ServerD'}."/".$oldir, 0755;
chdir $config'outdirs{'ServerD'}."/".$oldir;
open(PID,">$config'pidfile{'ServerD'}");
print PID "$$\n";
close PID;
SNMP::setMib($config'mib, 0);
$SNMP::auto_init_mib = 0;
$vars = new SNMP::VarList(['totalPorts', '0']);
for ($i=0; $i<$config'maxports; $i++) {
	$vars{$i} = new SNMP::VarList(['anxpPortStatsIndex', $i+1]);
}
foreach $server (keys %config'servers) {
	open("OUT$server", ">>$server");
	select("OUT$server");
	$| = 1;
}
for (;;) {
	$time = time();
	$newdir = &week;
	if ($newdir ne $oldir) {
		$oldir = $newdir;
		mkdir "../$newdir", 0755;
		chdir "../$newdir";
		for $server (keys %config'servers) {
			close("OUT$server");
			open("OUT$server", ">>$server");
			select("OUT$server");
			$| = 1;
		}
	}
	foreach $server (keys %config'servers) {
		$session = new SNMP::Session(DestHost => $config'servers{$server}, Community => $config'comm{$server});
		($no) = $session->get($vars);
		if($no) {
			@val = (0,0,0,0);
			for ($i = 0; $i < $no; $i++) {
				($ret) = $session->get($vars{$i});
				$val[$i/32] |= 1 << ($i%32) if(defined($ret));
			}
			print {"OUT$server"} "$time|$val[0]|$val[1]|$val[2]|$val[3]\n";
		}
	}
	$sleeptime = ($time + $config'sampleinterval - time());
	sleep $sleeptime if ($sleeptime > 0);
}
