#!/usr/bin/perl
#
# Скрипт запускается cron-ом. Основное его предназначение это
# выполнить выгрузку трафика из trafd.
#

use warnings;
use strict;
use Sys::Syslog qw(:standard :macros);
use File::Basename;
use Getopt::Long;

# параметры командной строки
my $help = '';
my $config = "/etc/trafstat/trafstat.conf";
our $daemon = '';

# Получим параметры командной строки.
GetOptions("help" => \$help, "config=s" => \$config, "daemon" => \$daemon);
if ($help) {help(); exit;}

# используемые константы
my $trafdconf = "/etc/trafd/trafctl.conf";
my $trafsave = "/usr/libexec/trafstat/trafsave.pl";

my $delay = 0;
open(CONFIG, $config) or error("Failed open config file: $config");
while (<CONFIG>) {
	next if /^#|^$|^\[/;
	SWITCH: {
		/^trafcron_time_offset\s*=\s*(-?\d+)/ && do {$delay = $1; last SWITCH;};
	}
}
close(CONFIG);

my @eth;
open(TRAFCONF, $trafdconf) or error("Failed open 'trafctl.conf' file: $trafdconf");
while (<TRAFCONF>) {
	next if /^#|^$/;
	SWITCH: {
		/^interfaces\s*=\s*"(.+)"/ && do {@eth = split /\s+/, $1; last SWITCH;};
	}
}

my $daemon_mode = $daemon ? "--daemon" : "";
system("$trafsave --eth=$_ --oftime=$delay $daemon_mode 2>/dev/null &") foreach @eth;

exit(0);

# вывод сообщения об ошибке и завершение работы
sub error {
	my $str = shift;
	my $msg = "ERROR: $str";

	if ($daemon) {
		openlog(basename($0), "ndelay,pid", LOG_LOCAL0);
		syslog(LOG_ERR, $msg);
		closelog();
		exit(1);
	} else {
		die("$msg\n");
	}
}

# отображает справку
sub help {
	my $progName = basename($0);
	print("Usage: $progName [OPTIONS]...\n" .
		"Run the script upload data to the database.\n" .
		"\n" .
		"  --config=NAME  use a configuration file\n" .
		"  --daemon       run in daemon mode\n" .
		"  --help         display this help and exit\n" .
		"\n");
}
