mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-09-25 19:09:08 +02:00
2014-01-15 Ramon Novoa <rnovoa@artica.es>
* bin/pandora_server: Prevent the thread that executes periodic tasks from dying on database errors. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@9324 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
172008bac3
commit
2c477e6947
@ -1,3 +1,8 @@
|
|||||||
|
2014-01-15 Ramon Novoa <rnovoa@artica.es>
|
||||||
|
|
||||||
|
* bin/pandora_server: Prevent the thread that executes periodic tasks
|
||||||
|
from dying on database errors.
|
||||||
|
|
||||||
2014-01-14 Sergio Martin <sergio.martin@artica.es>
|
2014-01-14 Sergio Martin <sergio.martin@artica.es>
|
||||||
|
|
||||||
* util/recon_scripts/snmpdevices.pl: Added address check
|
* util/recon_scripts/snmpdevices.pl: Added address check
|
||||||
|
@ -244,87 +244,88 @@ sub pandora_server_tasks ($) {
|
|||||||
|
|
||||||
my $counter = 0;
|
my $counter = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
|
eval{
|
||||||
|
# TASKS EXECUTED EVERY 5 SECONDS (Low latency tasks)
|
||||||
|
# --------------------------------------------------
|
||||||
|
if (($counter % 5) == 0) {
|
||||||
|
|
||||||
# TASKS EXECUTED EVERY 5 SECONDS (Low latency tasks)
|
# Update forced alerts
|
||||||
# --------------------------------------------------
|
pandora_exec_forced_alerts ($pa_config, $dbh);
|
||||||
if (($counter % 5) == 0) {
|
}
|
||||||
|
|
||||||
# Update forced alerts
|
# TASKS EXECUTED EVERY 30 SECONDS (Mid latency tasks)
|
||||||
pandora_exec_forced_alerts ($pa_config, $dbh);
|
# ---------------------------------------------------
|
||||||
}
|
if (($counter % 30) == 0) {
|
||||||
|
|
||||||
# TASKS EXECUTED EVERY 30 SECONDS (Mid latency tasks)
|
# Update module status and fired alert counts
|
||||||
# ---------------------------------------------------
|
my @agents = get_db_rows ($dbh, 'SELECT id_agente, nombre, update_module_count, update_alert_count FROM tagente WHERE disabled = 0 AND (update_module_count=1 OR update_alert_count=1)');
|
||||||
if (($counter % 30) == 0) {
|
foreach my $agent (@agents) {
|
||||||
|
logger ($pa_config, "Updating module status and fired alert counts for agent " . $agent->{'nombre'}, 10);
|
||||||
|
|
||||||
# Update module status and fired alert counts
|
if ($agent->{'update_module_count'} == 1) {
|
||||||
my @agents = get_db_rows ($dbh, 'SELECT id_agente, nombre, update_module_count, update_alert_count FROM tagente WHERE disabled = 0 AND (update_module_count=1 OR update_alert_count=1)');
|
pandora_update_agent_module_count ($dbh, $agent->{'id_agente'});
|
||||||
foreach my $agent (@agents) {
|
}
|
||||||
logger ($pa_config, "Updating module status and fired alert counts for agent " . $agent->{'nombre'}, 10);
|
|
||||||
|
|
||||||
if ($agent->{'update_module_count'} == 1) {
|
if ($agent->{'update_alert_count'} == 1) {
|
||||||
pandora_update_agent_module_count ($dbh, $agent->{'id_agente'});
|
pandora_update_agent_alert_count ($dbh, $agent->{'id_agente'});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($agent->{'update_alert_count'} == 1) {
|
# Keepalive module control.(very DB intensive, not run frecuently
|
||||||
pandora_update_agent_alert_count ($dbh, $agent->{'id_agente'});
|
pandora_module_keep_alive_nd ($pa_config, $dbh);
|
||||||
|
|
||||||
|
# Set the status of unknown modules
|
||||||
|
pandora_module_unknown ($pa_config, $dbh);
|
||||||
|
|
||||||
|
# Set event storm protection
|
||||||
|
pandora_set_event_storm_protection (pandora_get_tconfig_token ($dbh, 'event_storm_protection', 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
# TASKS EXECUTED EVERY 60 SECONDS (High latency tasks)
|
||||||
|
# ----------------------------------------------------
|
||||||
|
if (($counter % 60) == 0) {
|
||||||
|
# Downtimes are executed only 30 x Server Threshold secs
|
||||||
|
pandora_planned_downtime ($pa_config, $dbh);
|
||||||
|
|
||||||
|
# Realtime stats (Only master server!) - ( VERY HEAVY !)
|
||||||
|
# Realtimestats == 1, generated by WEB Console, not by server!
|
||||||
|
if ($pa_config->{"pandora_master"} == 1
|
||||||
|
&& defined($pa_config->{"realtimestats"})
|
||||||
|
&& $pa_config->{"realtimestats"} == 0){
|
||||||
|
|
||||||
|
# Check if I need to refresh stats
|
||||||
|
my $last_execution_stats = get_db_value ($dbh, "SELECT MAX(utimestamp) FROM tgroup_stat");
|
||||||
|
if (!defined($last_execution_stats) || $last_execution_stats < (time() - $pa_config->{"stats_interval"})){
|
||||||
|
pandora_group_statistics ($pa_config, $dbh);
|
||||||
|
pandora_server_statistics ($pa_config, $dbh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pandora self monitoring
|
||||||
|
if (defined($pa_config->{"self_monitoring"})
|
||||||
|
&& $pa_config->{"self_monitoring"} == 1){
|
||||||
|
pandora_self_monitoring ($pa_config, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Event auto-expiry
|
||||||
|
my $expiry_time = $pa_config->{"event_expiry_time"};
|
||||||
|
my $expiry_window = $pa_config->{"event_expiry_window"};
|
||||||
|
if ($expiry_time > 0 && $expiry_window > 0 && $expiry_window > $expiry_time) {
|
||||||
|
my $time_ref = time ();
|
||||||
|
my $expiry_limit = $time_ref - $expiry_time;
|
||||||
|
my $expiry_window = $time_ref - $expiry_window;
|
||||||
|
db_do ($dbh, 'UPDATE tevento SET estado=1, ack_utimestamp=? WHERE estado=0 AND utimestamp < ? AND utimestamp > ?', $time_ref, $expiry_limit, $expiry_window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Keepalive module control.(very DB intensive, not run frecuently
|
# Avoid counter overflow
|
||||||
pandora_module_keep_alive_nd ($pa_config, $dbh);
|
if ($counter > 10000){
|
||||||
|
$counter = 0;
|
||||||
# Set the status of unknown modules
|
|
||||||
pandora_module_unknown ($pa_config, $dbh);
|
|
||||||
|
|
||||||
# Set event storm protection
|
|
||||||
pandora_set_event_storm_protection (pandora_get_tconfig_token ($dbh, 'event_storm_protection', 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
# TASKS EXECUTED EVERY 60 SECONDS (High latency tasks)
|
|
||||||
# ----------------------------------------------------
|
|
||||||
if (($counter % 60) == 0) {
|
|
||||||
# Downtimes are executed only 30 x Server Threshold secs
|
|
||||||
pandora_planned_downtime ($pa_config, $dbh);
|
|
||||||
|
|
||||||
# Realtime stats (Only master server!) - ( VERY HEAVY !)
|
|
||||||
# Realtimestats == 1, generated by WEB Console, not by server!
|
|
||||||
if ($pa_config->{"pandora_master"} == 1
|
|
||||||
&& defined($pa_config->{"realtimestats"})
|
|
||||||
&& $pa_config->{"realtimestats"} == 0){
|
|
||||||
|
|
||||||
# Check if I need to refresh stats
|
|
||||||
my $last_execution_stats = get_db_value ($dbh, "SELECT MAX(utimestamp) FROM tgroup_stat");
|
|
||||||
if (!defined($last_execution_stats) || $last_execution_stats < (time() - $pa_config->{"stats_interval"})){
|
|
||||||
pandora_group_statistics ($pa_config, $dbh);
|
|
||||||
pandora_server_statistics ($pa_config, $dbh);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
# Pandora self monitoring
|
$counter++;
|
||||||
if (defined($pa_config->{"self_monitoring"})
|
|
||||||
&& $pa_config->{"self_monitoring"} == 1){
|
|
||||||
pandora_self_monitoring ($pa_config, $dbh);
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
# Event auto-expiry
|
|
||||||
my $expiry_time = $pa_config->{"event_expiry_time"};
|
|
||||||
my $expiry_window = $pa_config->{"event_expiry_window"};
|
|
||||||
if ($expiry_time > 0 && $expiry_window > 0 && $expiry_window > $expiry_time) {
|
|
||||||
my $time_ref = time ();
|
|
||||||
my $expiry_limit = $time_ref - $expiry_time;
|
|
||||||
my $expiry_window = $time_ref - $expiry_window;
|
|
||||||
db_do ($dbh, 'UPDATE tevento SET estado=1, ack_utimestamp=? WHERE estado=0 AND utimestamp < ? AND utimestamp > ?', $time_ref, $expiry_limit, $expiry_window);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Avoid counter overflow
|
|
||||||
if ($counter > 10000){
|
|
||||||
$counter = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$counter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
sleep (1);
|
sleep (1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user