]> git.ipfire.org Git - people/stevee/guardian.git/blobdiff - guardian
Add logrotate support.
[people/stevee/guardian.git] / guardian
index 691ddc66e1f0013add0fd5245f7864d70931d049..16d4198bc873b4dd44c0a0d80b9b6b796400e4e3 100644 (file)
--- a/guardian
+++ b/guardian
@@ -403,6 +403,49 @@ sub Reload () {
        &StartWorkers();
 }
 
+#
+## 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.
 #