my @tempfiles = ();
my $parent_pid = $$;
my $interrupt = 0;
+my $tmp_last_parsed = '';
####
# method used to fork as many child as wanted
foreach my $f (@tempfiles) {
unlink("$f->[1]") if (-e "$f->[1]");
}
+ unlink("$tmp_last_parsed") if ($tmp_last_parsed);
_exit(0);
}
$SIG{INT} = \&wait_child;
my %cur_info = ();
my $nlines = 0;
my %last_line = ();
-my %saved_last_line = ();
+our %saved_last_line = ();
my %tsung_session = ();
my $t0 = Benchmark->new;
die "FATAL: can't read last parsed line from $last_parsed, $!\n";
}
}
+$tmp_last_parsed = 'tmp_' . $last_parsed if ($last_parsed);
+
# Main loop reading log files
my $global_totalsize = 0;
$fht->close();
}
+ # Get last line parsed from all process
+ if ($last_parsed) {
+ if (open(IN, "$tmp_last_parsed") ) {
+ while (my $line = <IN>) {
+ chomp($line);
+ my ($d, $l) = split(/\t/, $line, 2);
+ if (!$last_line{datetime} || ($d gt $last_line{datetime})) {
+ $last_line{datetime} = $d;
+ $last_line{orig} = $l;
+ }
+ }
+ close(IN);
+ }
+ unlink("$tmp_last_parsed");
+ }
+
} else {
+
# Multiprocessing disabled, parse log files one by one
foreach my $logfile ( @given_log_files ) {
last if (&process_file($logfile));
@graph_values = ();
%cur_info = ();
$nlines = 0;
- %last_line = ();
- %saved_last_line = ();
%tsung_session = ();
}
kill(12, $parent_pid);
}
+ # Save last line into temporary file
+ if ($last_parsed && scalar keys %last_line) {
+ if (open(OUT, ">>$tmp_last_parsed")) {
+ flock(OUT, 2) || return $getout;
+ print OUT "$last_line{datetime}\t$last_line{orig}\n";
+ close(OUT);
+ } else {
+ &logmsg('ERROR', "can't save last parsed line into $last_parsed, $!");
+ }
+ }
+
return $getout;
}