chomp $t;
$self->{'template'}{'machine'} = $t;
- #return undef unless $self->check_state_file();
+ $self->{'files_delete'} = {};
+ $self->{'files_compress'} = {};
return $res;
#------------------------------------------------------------------------------------------
+=head2 collect_compress_logfiles( $file )
+
+Ermittelt alle alte Logdateien, die zu komprimieren sind sind.
+
+Von Einfluss darauf ist der Konfig-Parameter C<delaycompress>, der aussagt,
+wieviele der rotierten Logdateien I<NICHT> komprimiert bleiben sollen.
+
+Die Rueckgabe erfolgt als Hash-Ref
+
+=cut
+
+sub collect_compress_logfiles($$) {
+
+ my $self = shift;
+ my $file = shift;
+ my $p = verbose() ? __PACKAGE__ . "::collect_compress_logfiles(): " : "";
+
+ unless ( $file ) {
+ carp( $p . "Keine Logdatei uebergeben!\n" );
+ return undef;
+ }
+ print $p . "Ermittle alte Logdateien zum Loeschen fuer '$file'.\n" if verbose() > 1;
+ my $f = $self->{'c'}{'logfiles'}{$file};
+
+ my $candidates = {};
+ my $of = $f->{'oldfiles'};
+
+ unless ( $f->{'compress'} ) {
+ print $p . "Es werden keine Logdateien komprimiert.\n" if verbose() > 2;
+ return $candidates;
+ }
+
+ my $behalten = $f->{'delaycompress'} || 0;
+
+ # Compress-Endung ermitteln ...
+ my $ce = $self->{'c'}->compressext();
+ if ( not defined($ce) or $ce =~ /^\s*$/ ) {
+ $ce = ".gz";
+ }
+ $ce = "." . $ce if $ce ne "" and $ce !~ /^\./;
+
+ unless ( defined $of and scalar( keys %$of ) ) {
+ print $p . "Keine alten Logdateien vorhanden.\n" if verbose() > 2;
+ return $candidates;
+ }
+
+ my ( $oldfile, $count );
+
+ # Nach Alter sortiert die Liste abklappern ...
+ $count = scalar( keys %$of );
+ foreach $oldfile ( sort { $of->{$a} <=> $of->{$b} } keys %$of ) {
+ $count--;
+ if ( $oldfile =~ /$ce$/i ) {
+ print $p . "Logdatei '$oldfile' scheint schon komprimiert zu sein.\n" if verbose() > 2;
+ next;
+ }
+ if ( $self->{'files_delete'}{$oldfile} ) {
+ print $p . "Logdatei '$oldfile' ist zum Loeschen vorgesehen.\n" if verbose() > 2;
+ next;
+ }
+ $candidates->{$oldfile} = $of->{$oldfile};
+ }
+
+ if ( $behalten and scalar( keys %$candidates ) ) {
+ my $files_behalten = {};
+ my $i = 0;
+ foreach $oldfile ( sort { $candidates->{$b} <=> $candidates->{$a} } keys %$candidates ) {
+ $i++;
+ last if $i > $behalten;
+ $files_behalten->{$oldfile} = 1;
+ }
+ foreach $oldfile ( keys %$files_behalten ) {
+ delete $candidates->{$oldfile};
+ }
+ $files_behalten = undef;
+ }
+
+ return $candidates;
+
+}
+
+#------------------------------------------------------------------------------------------
+
=head2 collect_old_logfiles( $file )
Ermittelt alle alten, bisher rotierten Logdateien zu der uebergebenen Logdatei und gibt diese
push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9]" . $ext;
push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9][0-9]" . $ext;
push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9][0-9][0-9]" . $ext;
+ push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9][0-9][0-9][0-9]" . $ext;
+
if ( $f->{'compress'} ) {
push @Pattern, $olddir . "/" . $basename . $ext_ohne;
push @Pattern, $olddir . "/" . $basename . ".[0-9]" . $ext_ohne;
push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9]" . $ext_ohne;
push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9][0-9]" . $ext_ohne;
push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9][0-9][0-9]" . $ext_ohne;
+ push @Pattern, $olddir . "/" . $basename . ".[0-9][0-9][0-9][0-9][0-9]" . $ext_ohne;
}
# $pattern = '"' . join( '" "', @Pattern ) . '"';
return undef;
}
print $p . "Insgesamt " . scalar( keys %$old_logfiles ) . " bisher rotierte Logdateie" . (scalar( keys %$old_logfiles ) == 1 ? "" : "n") . ".\n" if verbose();
- print $p . "Liste aller bisher rotierten Logfiles: " . Dumper($old_logfiles) if verbose() > 2;
+ print $p . "Liste aller bisher rotierten Logdateien: " . Dumper($old_logfiles) if verbose() > 2;
$f->{'oldfiles'} = $old_logfiles;
if ( scalar( keys %$old_logfiles ) ) {
}
}
+ # Ermittlung der zu komprimierenden Logdateien ...
+ if ( $f->{'compress'} and scalar( keys %$old_logfiles ) ) {
+ my $files_compress = $self->collect_compress_logfiles($file);
+ unless ( $files_compress ) {
+ warn $p . "Fehler beim Ermitteln der zu komprimierenden Logdateien.\n";
+ return undef;
+ }
+ print $p . "Insgesamt " . scalar( keys %$files_compress ) . " Logdateie" . (scalar( keys %$files_compress ) == 1 ? "" : "n") . " zu komprimieren.\n" if verbose();
+ print $p . "Liste aller zu komprimierenden Logdateien: " . Dumper($files_compress) if verbose() > 2;
+
+ for ( keys %$files_compress ) {
+ $self->{'files_compress'}{$_} = 1;
+ }
+ }
+
return 1;
}