2009-01-21 Ramon Novoa <rnovoa@artica.es>

* lib/PandoraFMS/DB.pm: Take into account the alert option
          'matches_value'.

        * bin/pandora_server: Added support for forced alert execution.




git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1373 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
Ramon Novoa 2009-01-20 23:42:21 +00:00
parent f154b7d0d8
commit 7ee00ca354
3 changed files with 54 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2009-01-21 Ramon Novoa <rnovoa@artica.es>
* lib/PandoraFMS/DB.pm: Take into account the alert option
'matches_value'.
* bin/pandora_server: Added support for forced alert execution.
2009-01-20 Sancho Lerena <slerena@artica.es> 2009-01-20 Sancho Lerena <slerena@artica.es>
* Config.pm: Now works without breaking the server :-). Show verbose info * Config.pm: Now works without breaking the server :-). Show verbose info

View File

@ -95,6 +95,8 @@ while (1) {
pandora_serverkeepaliver (\%pa_config, 0, $dbh); pandora_serverkeepaliver (\%pa_config, 0, $dbh);
# Disabled until we can finish code from editor and update server code # Disabled until we can finish code from editor and update server code
pandora_planned_downtime (\%pa_config, $dbh); pandora_planned_downtime (\%pa_config, $dbh);
# Ececute forced alerts
pandora_exec_forced_alerts (\%pa_config, $dbh);
keep_alive_check (\%pa_config, $dbh); keep_alive_check (\%pa_config, $dbh);
threads->yield; threads->yield;
sleep ($pa_config{"server_threshold"}); sleep ($pa_config{"server_threshold"});
@ -451,3 +453,29 @@ sub process_module_data {
logger($pa_config, "ERROR: Received data from an unknown module ($tipo_modulo)", 2); logger($pa_config, "ERROR: Received data from an unknown module ($tipo_modulo)", 2);
} }
} }
##########################################################################
## SUB pandora_exec_forced_alerts ($pa_config, $dbh)
## Execute forced alerts.
##########################################################################
sub pandora_exec_forced_alerts {
my $pa_config = $_[0];
my $dbh = $_[1];
# Get alerts marked for forced execution (even disabled alerts)
my @alerts = get_db_all_rows ("SELECT talert_template_modules.id as id_template_module, talert_template_modules.*, talert_templates.*, tagente.*
FROM talert_template_modules, talert_templates, tagente, tagente_modulo
WHERE talert_template_modules.id_alert_template = talert_templates.id
AND talert_template_modules.id_agent_module = tagente_modulo.id_agente_modulo
AND tagente_modulo.id_agente = tagente.id_agente
AND force_execution = 1", $dbh);
foreach my $alert (@alerts) {
execute_alert ($pa_config, $alert, $alert->{'id_agente'}, $alert->{'id_grupo'}, $alert->{'nombre'},
'', 1, $dbh);
# Reset the force_execution flag, even if the alert could not be executed
db_do ("UPDATE talert_template_modules SET force_execution = 0 WHERE id = " . $alert->{'id_template_module'}, $dbh);
}
}

View File

@ -223,10 +223,17 @@ sub pandora_evaluate_alert (%$%$$$) {
elsif ($alert_data->{'type'} eq "max" && $module_data <= $alert_data->{'max_value'}) { elsif ($alert_data->{'type'} eq "max" && $module_data <= $alert_data->{'max_value'}) {
return $status; return $status;
} }
elsif ($alert_data->{'type'} eq "max_min" elsif ($alert_data->{'type'} eq "max_min") {
&& $module_data >= $alert_data->{'min_value'} if ($alert_data->{'matches_value'} == 1 &&
&& $module_data <= $alert_data->{'max_value'}) { $module_data <= $alert_data->{'min_value'} &&
return $status; $module_data >= $alert_data->{'max_value'}) {
return $status;
}
if ($module_data >= $alert_data->{'min_value'} &&
$module_data <= $alert_data->{'max_value'}) {
return $status;
}
} }
elsif ($alert_data->{'type'} eq "equal" && $module_data == $alert_data->{'value'}) { elsif ($alert_data->{'type'} eq "equal" && $module_data == $alert_data->{'value'}) {
return $status; return $status;
@ -234,8 +241,14 @@ sub pandora_evaluate_alert (%$%$$$) {
elsif ($alert_data->{'type'} eq "not_equal" && $module_data != $alert_data->{'value'}) { elsif ($alert_data->{'type'} eq "not_equal" && $module_data != $alert_data->{'value'}) {
return $status; return $status;
} }
elsif ($alert_data->{'type'} eq "regex" && $module_data !~ m/$alert_data->{'alert_text'}/i) { elsif ($alert_data->{'type'} eq "regex") {
return $status; if ($alert_data->{'matches_value'} == 1 && $module_data =~ m/$alert_data->{'alert_text'}/i) {
return $status;
}
if ($module_data !~ m/$alert_data->{'alert_text'}/i) {
return $status;
}
} }
#if ($id_module_type == -1) { #if ($id_module_type == -1) {