diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index c50235daa7..7cf0d7e9c7 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -149,6 +149,10 @@ network_timeout 4 server_keepalive 45 +# Log server thread status to disk (always set to 0, except when debugging). + +thread_log 0 + # Server Threshold: defines number of seconds of main loop (in sec) server_threshold 5 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 14a85caa28..c045ab47e8 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -468,6 +468,8 @@ sub pandora_load_config { # Enable (1) or disable (0) events related to the unknown status. $pa_config->{"unknown_events"} = 1; # > 6.0SP4 + $pa_config->{"thread_log"} = 0; # 7.0.717 + # Check for UID0 if ($pa_config->{"quiet"} != 0){ if ($> == 0){ @@ -1076,6 +1078,9 @@ sub pandora_load_config { elsif ($parametro =~ m/^syslog_threads\s+([0-9]*)/i) { $pa_config->{'syslog_threads'}= clean_blank($1); } + elsif ($parametro =~ m/^thread_log\s+([0-1])/i) { + $pa_config->{'thread_log'}= clean_blank($1); + } } # end of loop for parameter # # Set to RDBMS' standard port diff --git a/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm b/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm index 8a8cd32a6f..dd37c90eb9 100644 --- a/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm +++ b/pandora_server/lib/PandoraFMS/ProducerConsumerServer.pm @@ -118,6 +118,7 @@ sub data_producer ($$$$$) { while ($RUN == 1) { # Get pending tasks + $self->logThread('[PRODUCER] Queuing tasks.'); my @tasks = &{$self->{'_producer'}}($self); foreach my $task (@tasks) { @@ -169,6 +170,7 @@ sub data_consumer ($$$$$) { while ($RUN == 1) { # Wait for data + $self->logThread('[CONSUMER] Waiting for data.'); $task_sem->down; $sem->down; @@ -179,6 +181,7 @@ sub data_consumer ($$$$$) { last if ($RUN == 0); # Execute task + $self->logThread("[CONSUMER] Executing task: $task"); &{$self->{'_consumer'}}($self, $task); # Update task status diff --git a/pandora_server/lib/PandoraFMS/Server.pm b/pandora_server/lib/PandoraFMS/Server.pm index f5c91869fb..245cdf7033 100644 --- a/pandora_server/lib/PandoraFMS/Server.pm +++ b/pandora_server/lib/PandoraFMS/Server.pm @@ -20,6 +20,7 @@ package PandoraFMS::Server; use strict; use warnings; +use POSIX 'strftime'; use threads; use threads::shared; @@ -272,6 +273,22 @@ sub update ($) { }; } +######################################################################################## +# Log a message for the current thread. +######################################################################################## +sub logThread ($$) { + my ($self, $msg) = @_; + + return unless ($self->{'_pa_config'}->{'thread_log'} == 1); + + eval { + open(my $fh, '>', $self->{'_pa_config'}->{'temporal'} . '/' . $self->{'_pa_config'}->{'servername'} .'.'. $ServerTypes[$self->{'_server_type'}] . '.' . threads->tid() . '.log'); + my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime()); + print $fh $timestamp . ' ' . $self->{'_pa_config'}->{'servername'} . ' ' . $ServerTypes[$self->{'_server_type'}] . ' (thread ' . threads->tid() . '):' . $msg . "\n"; + close($fh); + }; +} + ######################################################################################## # Stop the server, killing all server threads. ########################################################################################