+#!/usr/bin/perl
+
+# Comparador de fecha para los archivos de llamada
+sub byDate {
+ ($year1,$mon1,$day1,$hr1,$min1) = $a =~ /([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/;
+ ($year2,$mon2,$day2,$hr2,$min2) = $b =~ /([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/;
+
+ # Descarto por año
+ if ($year1 > $year2) { return 1; }
+ elsif ($year1 < $year2) { return -1; }
+
+ # Descarto por mes
+ if ($mon1 > $mon2) { return 1; }
+ elsif ($mon1 < $mon2) { return -1; }
+
+ # Calculo minutos de lo restante
+ $totalmin1 = ($day1 * 24 * 60) + ($hr1 * 60) + $min1;
+ $totalmin2 = ($day2 * 24 * 60) + ($hr2 * 60) + $min2;
+ if ($totalmin1 > $totalmin2) { return 1; }
+ elsif ($totalmin1 < $totalmin2) { return -1; }
+ else { return 0; }
+}
+
+# Devuelve un listado de archivos de llamada y ordenado por fecha ASC
+sub getCallFiles {
+ # Obtengo listado de archivos de llamadas y lo ordeno por fecha
+ $data_dir = shift;
+ opendir($DIR,"$data_dir/enproceso") or die 'Could not open dir';
+ # Valido solo fisicamente, lo logico ya valido afimonio..
+ @files = grep {/[0-9]{12}\.[0-9]{4}$/ && -f "$data_dir/enproceso/$_"}
+ readdir($DIR);
+ @sortedfiles = sort byDate @files;
+ closedir($DIR);
+ return @sortedfiles;
+}
+
+# Levanta una variable del archivo AFINSTAL.CONF
+sub getConfVar {
+ $CONFIGFILE = shift;
+ $linenumber = shift;
+ open(CONFIGFILE) or die "No se pudo abrir el archivo $CONFIGFILE";
+ do { $line = <CONFIGFILE> } until $. == $linenumber;
+ close(CONFIGFILE);
+ chop($line);
+ ($confvar = $line) =~ s/^.*= (.*)/$1/;
+ return $confvar;
+}
+
+# Agrega un log entry al logfile del antifraude.pl
+sub logEntry {
+ $logentry = shift;
+ $log = "$CONFDATA{logdir}/$CONFDATA{logfile}";
+ # Fetch date and Format it
+ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time);
+ $year += 1900; $year = sprintf("%02d", $year % 100); ++$mon;
+ $user = getlogin || "Unidentified";
+ $commonstring = "[$mday/$mon/$year $hour:$min:$sec|$user|antifraude]";
+ # Append to log
+ open(LOGFILE,">>$log") or die "No se pudo abrir el archivo de log";
+ seek(LOGFILE,0,2);
+ print LOGFILE "$commonstring - $logentry";
+ close(LOGFILE);
+}
+
+sub badCall {
+ $callreg = shift;
+ logEntry("El siguiente registro de llamada tiene formato invalido\n$callreg");
+}
+# --------- MAIN CODE -------- #
+# En la version final, recibo por param el directorio del .conf, por ahora
+# recibo un dir donde tengo archivos de llamadas
+if ((!$ARGV[0]) || (! -d $ARGV[0])) {
+ print("No se ha ingresado un directorio fuente de llamadas\n");
+ exit 1;
+}
+$CONFDIR = shift;
+$CONFDATA{logdir} = getConfVar("$CONFDIR/afinstal.conf",12);
+$CONFDATA{logfile} = getConfVar("$CONFDIR/afinstal.conf",13);
+$CONFDATA{logsize} = getConfVar("$CONFDIR/afinstal.conf",14);
+$CONFDATA{datadir} = getConfVar("$CONFDIR/afinstal.conf",15);
+
+# For Debug Only
+#print("Logdir: $CONFDATA{logdir}\n");
+#print("Logfile: $CONFDATA{logfile}\n");
+#print("Logsize: $CONFDATA{logsize}\n");
+#print("Datadir: $CONFDATA{datadir}\n");
+
+# Proceso los archivos de llamadas
+@archivos = getCallFiles($CONFDATA{datadir});
+FILE: foreach $filename (@archivos) {
+ $CALLFILE = "$CONFDATA{datadir}/enproceso/$filename";
+ logEntry("Inicio proceso de: $filename\n");
+ open(CALLFILE) or ((warn "No se pudo abrir archivo $filename"),next FILE);
+ REG: foreach $callreg (<CALLFILE>) {
+ $fieldcount = split(';',$callreg);
+ if ($fieldcount != 8) { badCall($callreg); next REG; }
+ @fields = @_;
+ }
+ close(CALLFILE);
+ logEntry("Fin proceso de: $filename\n");
+}