From: Stefan Schantl Date: Tue, 14 Jun 2016 13:31:42 +0000 (+0200) Subject: Merge remote-tracking branch 'logrotate' X-Git-Tag: 2.0~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0fcce00446a285334d9d24b6d7948526e3f9a4df;p=people%2Fstevee%2Fguardian.git Merge remote-tracking branch 'logrotate' Signed-off-by: Stefan Schantl --- 0fcce00446a285334d9d24b6d7948526e3f9a4df diff --cc guardian index d016125,16d4198..0facdc6 --- a/guardian +++ b/guardian @@@ -405,25 -403,49 +405,68 @@@ sub Reload () &StartWorkers(); } +# +## ReloadIgnoreList function. +# +## This function will be called if the signal handler recieves a "SIGUSR1" signal, +## or the reload-ignore-list command will be sent via the socket connection. It just +## performs a simple check if an ignore file has been configured and calls the responsible +## function on the events module. +# +sub ReloadIgnoreList () { + # Update ignore list, if an ignorefile has been specified. + if (exists($mainsettings{IgnoreFile})) { + # Log reload of the ignore list. + $logger->Log("info", "Reloading ignore list..."); + + # Call responsible function from the events module. + &Guardian::Events::GenerateIgnoreList($mainsettings{IgnoreFile}); + } +} + + # + ## 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. # diff --cc modules/Events.pm index 376438f,2be2ac7..2d2c776 --- a/modules/Events.pm +++ b/modules/Events.pm @@@ -13,7 -13,7 +13,8 @@@ my %commands = 'unblock' => \&CallUnblock, 'flush' => \&CallFlush, 'reload' => \&main::Reload, + 'reload-ignore-list' => \&main::ReloadIgnoreList, + 'logrotate' => \&main::Logrotate, ); # Hash to store addresses and their current count.