}
#------------------------------------------------------------------------------------------
-
+
+=head2 collect_files_delete( $file )
+
+Ermittelt alle alte Logdateien, die zu loeschen sind.
+
+Dabei sind zwei Konfigparameter entscheidend:
+
+=over 4
+
+=item C<maxage>
+
+Dieser Parameter gibt das maximale Alter einer rotierten Logdatei in Tagen an.
+
+Man kann aber bei dieser Angabe auch andere Masseinheiten, wie Jahre, Monate usw.
+verwenden (Siehe Konfigparameter C<period>).
+
+Alte Logdateien, die aelter als dieser Wert sind, werden geloescht.
+
+Ein Wert von 0 oder die Angabe von C<nomaxage> bedeutet, dass es kein Maximalalter
+fuer alte Logdateien gibt.
+
+=item C<rotate>
+
+Gibt die Maximalzahl an rotierten Dateien fuer diese Logdatei an.
+
+Wenn diese Zahl 0 ist, wird keine rotierte Logdatei aufbewahrt, sondern sofort geloescht.
+
+Wenn diese Zahl -1 oder kleiner ist, gibt es keine Beschraenkung fuer die Maximalzahl.
+
+=back
+
+=cut
+
+sub collect_files_delete($$) {
+
+ my $self = shift;
+ my $file = shift;
+ my $p = verbose() ? __PACKAGE__ . "::collect_files_delete(): " : "";
+
+ 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'};
+ my $maxage = (defined $f->{'maxage'} ? $f->{'maxage'} : 0 ) * 24 * 60 * 60;
+
+ unless ( defined $of and scalar( keys %$of ) ) {
+ print $p . "Keine alten Logdateien vorhanden.\n" if verbose() > 2;
+ return $candidates;
+ }
+
+ my ( $oldfile, $age, $count );
+
+ # Nach Alter sortiert die Liste abklappern ...
+ $count = scalar( keys %$of );
+ foreach $oldfile ( sort { $of->{$a} <=> $of->{$b} } keys %$of ) {
+ $count--;
+ $age = time() - $of->{$oldfile};
+ print $p . "Untersuche, ob '$oldfile' weggeschmissen werden soll ...\n" if verbose() > 2;
+
+ # Erst mal alles weg, was mehr als die Zahl von "rotate" aussagt ...
+ if ( $f->{'rotate'} >= 0 and $count >= $f->{'rotate'} ) {
+ print $p . "Loesche '$oldfile' wegen zuviel (" . $count . " >= " . $f->{'rotate'} . ").\n" if verbose() > 2;
+ $candidates->{$oldfile} = 1;
+ next;
+ }
+
+ if ( $maxage and $age >= $maxage ) {
+ print $p . "Loesche '$oldfile' wegen zu alt (" . $age . " >= " . $maxage . ").\n" if verbose() > 2;
+ $candidates->{$oldfile} = 1;
+ }
+ }
+
+ return $candidates;
+
+}
+
+#------------------------------------------------------------------------------------------
+
=head2 collect_old_logfiles( $file )
Ermittelt alle alten, bisher rotierten Logdateien zu der uebergebenen Logdatei und gibt diese
carp( $p . "Keine Logdatei uebergeben!\n" );
return undef;
}
- print $p . "Ermittle alten Logdateien fuer '$file'.\n" if verbose();
+ print $p . "Ermittle alte Logdateien fuer '$file'.\n" if verbose() > 1;
my $f = $self->{'c'}{'logfiles'}{$file};
my $ext = defined $f->{'extension'} ? $f->{'extension'} : "";
# Ermittlung aller bisherigen Logfiles ...
my $old_logfiles = $self->collect_old_logfiles( $file );
unless ( $old_logfiles ) {
- warn $p . "Fehler beim Ermitteln der bisher rotierten Logfiles.\n";
+ warn $p . "Fehler beim Ermitteln der bisher rotierten Logdateien.\n";
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;
-
$f->{'oldfiles'} = $old_logfiles;
+ if ( scalar( keys %$old_logfiles ) ) {
+ my $files_delete = $self->collect_files_delete($file);
+ unless ( $files_delete ) {
+ warn $p . "Fehler beim Ermitteln der bisher zu loeschenden alten Logdateien.\n";
+ return undef;
+ }
+ print $p . "Insgesamt " . scalar( keys %$files_delete ) . " alte Logdateie" . (scalar( keys %$files_delete ) == 1 ? "" : "n") .
+ " zum Loeschen ermittelt.\n" if verbose() > 1;
+ for ( keys %$files_delete ) {
+ $self->{'files_delete'}{$_} = 1;
+ }
+ }
+
return 1;
}