On Wednesday, July 10, 2002, at 09:12 , John W. Krahn wrote:
[..]
>
> Something like that. :-) But what if the log file has been rotated and
> the last line is no longer in the file?
>
> my $last_line = get_last_line_from_cache();
>
> open LOG, .... or die "$!";
>
> while ( <LOG> ) {
> rollback_db_data() if $_ eq $last_line;
>
> process_db_data();
>
> $last_line = $_ if eof( LOG );
> }
>
> commit_db_data();
>
> push_into_cache( $last_line );
that is why I was thinking of avoiding the 'walk the file'
approach by caching the stat data - especially if the file
is like say syslog where there is a known 'step back' strategy
that IF /var/adm/messages has been rolled check /var/adm/mess*.[0-N]
till you find your correct one...
cf perldoc -f stat
hence
my $cache_hash_ref = get_hash_from_cache();
open(LOG, ....)
my @stat_dope = lstat(LOG);
if ( $stat_dope[7] > $cache_hash_ref->{stat_size} ) {
#
# the file has grown, we need to lseek forward to
# $cache_hash_ref->{stat_size}
lseek_der_log();
} else {
# fremonge they rolled the log so let's solve that
# one and then come back through here...
grovel_prior_log($cache_hash_ref);
$new_log++; # boolean initialized to 0
# set here since after we finish processing
# will need to check if we should
whine_at_apes();
}
#
# in theory at this point we are looking at the correct
# line of dope in the Log to grovel...
#
yes, there are those who like to check ino.... but...
ciao
drieux
---
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]