]> git.ipfire.org Git - people/stevee/guardian.git/blobdiff - guardian
Merge remote-tracking branch 'logrotate'
[people/stevee/guardian.git] / guardian
index d01612525dfe2ec2332b3aefc6afd3b74dd8f111..0facdc696245abb3ee814e90c496caab75ec3675 100644 (file)
--- a/guardian
+++ b/guardian
@@ -424,6 +424,49 @@ sub ReloadIgnoreList () {
        }
 }
 
+#
+## Logrotate function.
+#
+## This function only get called when the logrotate command will be sent via
+## the socket connection. It is responsible for validating and altering the current
+## curser positions of the monitored files and stopping/starting the worker threads.
+#
+sub Logrotate () {
+       # Stop all running workers.
+       &StopWorkers();
+
+       {
+       # Lock shared hash.
+       lock(%file_positions);
+
+       # Loop through the hash which contains the current
+       # file positions.
+       foreach my $file (keys(%file_positions)) {
+               # Obtain stored value from hash.
+               my $stored_position = $file_positions{$file};
+
+               # Call function to get the current position.
+               my $current_position = &Guardian::Base::GetFileposition($file);
+
+               # Compare if the current position still matches
+               # the stored one.
+               if ($current_position ne $stored_position) {
+                       # Update to the new position, because
+                       # they has changed during file rotation.
+                       $file_positions{$file} = $current_position;
+
+                       # Log notice about rotated file.
+                       $logger->Log("debug", "$file have been rotated - Using new file position.");
+               }
+       }
+
+       # After this bracket, the lock of the hash will be released.
+       }
+
+       # Restart all worker threads.
+       &StartWorkers();
+}
+
 #
 ## Shutdown function.
 #