#! /usr/bin/perl -w

use strict;
use File::Path qw(make_path);

# nfsen channel name => exporter IP address
my %exporters = ( "foo" => "192.168.2.3",
		  "bar" => "10.0.0.10" );

#while(</srv/flows/*/*/*>) {
while(</srv/flows/2010/2010-07/2010-07-01>) {
	my $srcdir = $_;
	while(<$srcdir/ft-v05.*>) {
		my $SRC = $_;
		print "<= $SRC\n";
		$SRC =~ m|.*/ft-v05\.(\d{4})-(\d{2})-(\d{2})\.(\d{2})(\d{2})\d{2}\+\d{4}$| or die "?? $SRC";
		my $year = $1;
		my $month = $2;
		my $day = $3;
		my $hour = $4;
		my $minute = $5;
		for my $exporter (sort(keys(%exporters))) {
			my $exporter_ip = $exporters{$exporter};
			my $DSTDIR = "/srv/nfsen/profiles-data/live/$exporter/$year/$month/$day";
			make_path($DSTDIR, { mode => 0755, error => \my $e });
			die("make_path($DSTDIR)") if(@$e);

			my $DSTFILE;
			my $CMD;

			# step 1: first five minutes of file
			$DSTFILE = "nfcapd.$year$month$day$hour$minute";
			$CMD = sprintf("/usr/bin/flow-cat $SRC | /usr/bin/flow-nfilter -f /etc/flow-tools/nfdump-conversion.nfilter -F to -v END=$hour:%02d -v RID=$exporter_ip | /usr/local/bin/ft2nfdump | /usr/bin/nfdump -w $DSTDIR/$DSTFILE", $minute+5);
			print "=> $DSTDIR/$DSTFILE ($CMD)\n";
			system($CMD);
			if($? >> 8) {
				die("system($CMD) failed");
			}

			# step 2: mid five minutes of file
			$DSTFILE = sprintf("nfcapd.$year$month$day$hour%02d", $minute+5);
			$CMD = sprintf("/usr/bin/flow-cat $SRC | /usr/bin/flow-nfilter -f /etc/flow-tools/nfdump-conversion.nfilter -F fromto -v START=$hour:%02d -v END=$hour:%02d -v RID=$exporter_ip | /usr/local/bin/ft2nfdump | /usr/bin/nfdump -w $DSTDIR/$DSTFILE", $minute+5, $minute+10);
			print "=> $DSTDIR/$DSTFILE ($CMD)\n";
			system($CMD);
			if($? >> 8) {
				die("system($CMD) failed");
			}

			# step 3: last five minutes of file
			$DSTFILE = sprintf("nfcapd.$year$month$day$hour%02d", $minute+10);
			$CMD = sprintf("/usr/bin/flow-cat $SRC | /usr/bin/flow-nfilter -f /etc/flow-tools/nfdump-conversion.nfilter -F from -v START=$hour:%02d -v RID=$exporter_ip | /usr/local/bin/ft2nfdump | /usr/bin/nfdump -w $DSTDIR/$DSTFILE", $minute+10);
			print "=> $DSTDIR/$DSTFILE ($CMD)\n";
			system($CMD);
			if($? >> 8) {
				die("system($CMD) failed");
			}
		}

	}

}


