From f8cf38772d631489eba712e877f164dbcff51d31 Mon Sep 17 00:00:00 2001 From: zarzuelo Date: Mon, 9 May 2011 09:42:01 +0000 Subject: [PATCH] 2011-05-09 Sergio Martin * lib/PandoraFMS/DB.pm lib/PandoraFMS/Core.pm util/pandora_manage.pl: Moved some functions from CLI to common files git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4317 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f --- pandora_server/ChangeLog | 7 + pandora_server/lib/PandoraFMS/Core.pm | 77 ++++++ pandora_server/lib/PandoraFMS/DB.pm | 11 + pandora_server/util/pandora_manage.pl | 373 +++++++++++--------------- 4 files changed, 249 insertions(+), 219 deletions(-) diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog index 3a8e295d6f..2095f0ea9b 100644 --- a/pandora_server/ChangeLog +++ b/pandora_server/ChangeLog @@ -1,3 +1,10 @@ +2011-05-09 Sergio Martin + + * lib/PandoraFMS/DB.pm + lib/PandoraFMS/Core.pm + util/pandora_manage.pl: Moved some functions from CLI to common + files + 2011-05-07 Sancho Lerena * lib/PandoraFMS/ReconServer.pm: Ported changes from 3.2 on Recon. diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index eec830a6ab..4b76fc72c5 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -132,7 +132,10 @@ our @EXPORT = qw( pandora_create_incident pandora_create_module pandora_create_module_from_hash + pandora_create_template_module + pandora_create_template_module_action pandora_delete_agent + pandora_delete_all_template_module_actions pandora_delete_module pandora_evaluate_alert pandora_evaluate_compound_alert @@ -156,6 +159,7 @@ our @EXPORT = qw( pandora_update_module_on_error pandora_update_module_from_hash pandora_update_server + pandora_update_template_module pandora_group_statistics pandora_server_statistics pandora_self_monitoring @@ -1030,6 +1034,79 @@ sub pandora_update_agent ($$$$$$$;$$$$$$) { } +########################################################################## +=head2 C<< pandora_create_template_module(I<$pa_config>, I<$id_agent_module>, I<$id_alert_template>, I<$dbh>, I<$id_policy_alerts>, I<$disabled>, I<$standby>) >> + +Create a template module. + +=cut +########################################################################## +sub pandora_create_template_module ($$$$;$$$) { + my ($pa_config, $id_agent_module, $id_alert_template, $dbh, $id_policy_alerts, $disabled, $standby) = @_; + + $id_policy_alerts = 0 unless defined $id_policy_alerts; + $disabled = 0 unless defined $disabled; + $standby = 0 unless defined $standby; + + my $module_name = get_module_name($dbh, $id_agent_module); + logger($pa_config, "Creating alert of template '$id_alert_template' on agent module '$module_name'.", 10); + + $dbh->do("INSERT INTO talert_template_modules (`id_agent_module`, `id_alert_template`, `id_policy_alerts`, `disabled`, `standby`) VALUES ($id_agent_module, $id_alert_template, $id_policy_alerts, $disabled, $standby)"); + return $dbh->{'mysql_insertid'}; +} + +########################################################################## +=head2 C<< pandora_update_template_module(I<$pa_config>, I<$id_alert>, I<$dbh>, I<$id_policy_alerts>, I<$disabled>, I<$standby>) >> + +Update a template module. + +=cut +########################################################################## + +sub pandora_update_template_module ($$$;$$$) { + my ($pa_config, $id_alert, $dbh, $id_policy_alerts, $disabled, $standby) = @_; + + $id_policy_alerts = 0 unless defined $id_policy_alerts; + $disabled = 0 unless defined $disabled; + $standby = 0 unless defined $standby; + + #my $module_name = get_module_name($dbh, $id_agent_module); + #logger($pa_config, "Update alert of template '$id_alert_template' on agent module '$module_name'.", 10); + + $dbh->do("UPDATE talert_template_modules SET `id_policy_alerts` = '$id_policy_alerts', `disabled` = '$disabled', `standby` = '$standby' WHERE id = $id_alert"); + return $dbh->{'mysql_insertid'}; +} + +########################################################################## +=head2 C<< pandora_create_template_module(I<$pa_config>, I<$parameters>, I<$dbh>) >> + +Create a template action. + +=cut +########################################################################## +sub pandora_create_template_module_action ($$$) { + my ($pa_config, $parameters, $dbh) = @_; + + logger($pa_config, "Creating module alert action to alert '$parameters->{'id_alert_template_module'}'.", 10); + + my $action_id = db_process_insert($dbh, 'id', 'talert_template_module_actions', $parameters); + + return $action_id; +} + +########################################################################## +=head2 C<< pandora_delete_all_template_module_actions(I<$dbh>, I<$template_module_id>) >> + +Delete all actions of policy template module. + +=cut +########################################################################## +sub pandora_delete_all_template_module_actions ($$) { + my ($dbh, $template_module_id) = @_; + + return db_do ($dbh, 'DELETE FROM talert_template_module_actions WHERE id_alert_template_module = ?', $template_module_id); +} + ########################################################################## =head2 C<< pandora_update_agent_address(I<$pa_config>, I<$agent_id>, I<$address>, I<$dbh>) >> diff --git a/pandora_server/lib/PandoraFMS/DB.pm b/pandora_server/lib/PandoraFMS/DB.pm index 0e5ff5ba92..a2f8b6b4a0 100644 --- a/pandora_server/lib/PandoraFMS/DB.pm +++ b/pandora_server/lib/PandoraFMS/DB.pm @@ -42,6 +42,7 @@ our @EXPORT = qw( get_agent_id get_agent_name get_agent_module_id + get_alert_template_module_id get_db_rows get_db_single_row get_db_value @@ -398,6 +399,16 @@ sub db_update ($$;@) { return $rows; } +########################################################################## +## Return alert template-module ID given the module and template ids. +########################################################################## +sub get_alert_template_module_id ($$$) { + my ($dbh, $id_module, $id_template) = @_; + + my $rc = get_db_value ($dbh, "SELECT id FROM talert_template_modules WHERE id_agent_module = ? AND id_alert_template = ?", $id_module, $id_template); + return defined ($rc) ? $rc : -1; +} + ########################################################################## ## SQL insert. Returns the ID of the inserted row. ########################################################################## diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 8cd96fb53e..397565129f 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -174,41 +174,6 @@ sub pandora_manage_init ($) { help_screen () if ($conf->{'pandora_path'} =~ m/--*h\w*\z/i ); } -########################################################################## -## Create a template module. -########################################################################## -sub pandora_create_template_module ($$$$;$$$) { - my ($pa_config, $id_agent_module, $id_alert_template, $dbh, $id_policy_alerts, $disabled, $standby) = @_; - - $id_policy_alerts = 0 unless defined $id_policy_alerts; - $disabled = 0 unless defined $disabled; - $standby = 0 unless defined $standby; - - my $module_name = get_module_name($dbh, $id_agent_module); - logger($pa_config, "Creating alert of template '$id_alert_template' on agent module '$module_name'.", 10); - - $dbh->do("INSERT INTO talert_template_modules (`id_agent_module`, `id_alert_template`, `id_policy_alerts`, `disabled`, `standby`) VALUES ($id_agent_module, $id_alert_template, $id_policy_alerts, $disabled, $standby)"); - return $dbh->{'mysql_insertid'}; -} - -########################################################################## -## Update a template module. -########################################################################## - -sub pandora_update_template_module ($$$;$$$) { - my ($pa_config, $id_alert, $dbh, $id_policy_alerts, $disabled, $standby) = @_; - - $id_policy_alerts = 0 unless defined $id_policy_alerts; - $disabled = 0 unless defined $disabled; - $standby = 0 unless defined $standby; - - #my $module_name = get_module_name($dbh, $id_agent_module); - #logger($pa_config, "Update alert of template '$id_alert_template' on agent module '$module_name'.", 10); - - $dbh->do("UPDATE talert_template_modules SET `id_policy_alerts` = '$id_policy_alerts', `disabled` = '$disabled', `standby` = '$standby' WHERE id = $id_alert"); - return $dbh->{'mysql_insertid'}; -} - ########################################################################## ## Delete a template module. ########################################################################## @@ -231,15 +196,6 @@ sub pandora_delete_template_module_action ($$$) { return db_do ($dbh, 'DELETE FROM talert_template_module_actions WHERE id_alert_template_module = ? AND id_alert_action = ?', $template_module_id, $action_id); } -########################################################################## -## Delete all actions of policy template module -########################################################################## -sub pandora_delete_all_template_module_actions ($$) { - my ($dbh, $template_module_id) = @_; - - return db_do ($dbh, 'DELETE FROM talert_template_module_actions WHERE id_alert_template_module = ?', $template_module_id); -} - ########################################################################## ## Create a user. ########################################################################## @@ -270,19 +226,6 @@ else { } } -########################################################################## -## Create a template action. -########################################################################## -sub pandora_create_template_module_action ($$$) { - my ($pa_config, $parameters, $dbh) = @_; - - logger($pa_config, "Creating module alert action to alert '$parameters->{'id_alert_template_module'}'.", 10); - - my $action_id = db_process_insert($dbh, 'id', 'talert_template_module_actions', $parameters); - - return $action_id; -} - ########################################################################## ## Assign a profile to the given user/group. ########################################################################## @@ -405,16 +348,6 @@ sub pandora_validate_event_filter ($$$$$$$$$) { db_do ($dbh, "UPDATE tevento SET estado = 1 WHERE estado = 0".$filter); } -########################################################################## -## Return alert template-module ID given the module and template ids. -########################################################################## -sub get_alert_template_module_id ($$$) { - my ($dbh, $id_module, $id_template) = @_; - - my $rc = get_db_value ($dbh, "SELECT id FROM talert_template_modules WHERE id_agent_module = ? AND id_alert_template = ?", $id_module, $id_template); - return defined ($rc) ? $rc : -1; -} - ############################################################################### ############################################################################### # PRINT HELP AND CHECK ERRORS FUNCTIONS @@ -1295,159 +1228,161 @@ sub pandora_manage_main ($$$) { my $policy_id = enterprise_hook('get_policy_id',[$dbh, $policy_name]); exist_check($policy_id,'policy',$policy_name); - my $blocked_policies = enterprise_hook('pandora_block_policies', [$dbh]); - - if($blocked_policies eq '0E0') { - print "[ERROR] The policies are blocked in other terminal.\n\n"; - exit; - } + enterprise_hook('pandora_apply_policy', [$dbh, $conf, $policy_id]); - # Get the agents - my $array_pointer_ag = enterprise_hook('get_policy_agents',[$dbh, $policy_id]); - - if(!defined($array_pointer_ag)) { - print "[ERROR] This option is not available in OPEN version.\n\n"; - exit; - } - - print "[INFO] Applying policy '$policy_name'\n\n"; - - foreach my $agent (@{$array_pointer_ag}) { - my $id_agent = $agent->{'id_agent'}; - my $agent_name = get_agent_name($dbh, $id_agent); - - # Get the modules - my $array_pointer_mod = enterprise_hook('get_policy_modules',[$dbh, $policy_id]); - - if(!defined($array_pointer_mod)) { - print "[ERROR] This option is not available in OPEN version.\n\n"; - exit; - } - - foreach my $module (@{$array_pointer_mod}) { - # Adapt the fields from tpolicy_modules to tagente_modulos - $module->{'id_agente'} = $id_agent; - - $module->{'id_policy_module'} = $module->{'id'}; - delete $module->{'id'}; - - $module->{'descripcion'} = $module->{'description'}; - delete $module->{'description'}; - - $module->{'nombre'} = $module->{'name'}; - delete $module->{'name'}; - - $module->{'id_modulo'} = $module->{'id_module'}; - delete $module->{'id_module'}; - - delete $module->{'id_policy'}; - - #Store the conf data - $configuration_data .= safe_output("\n\n$module->{'configuration_data'}"); - - delete $module->{'configuration_data'}; - - my $id_module = get_agent_module_id ($dbh, $module->{'nombre'}, $module->{'id_agente'}); - - # If the module doesn't exist we create it, otherwise we update it - - if($id_module == -1) { - # Create module - $id_module = pandora_create_module_from_hash ($conf, $module, $dbh); - } - else { - # Update module - pandora_update_module_from_hash ($conf, $module, 'id_agente_modulo', $id_module, $dbh); - } - - # Get policy alerts and create it on created modules - my $array_pointer_ale = enterprise_hook('get_policy_module_alerts',[$dbh, $policy_id, $module->{'id_policy_module'}]); - - foreach my $alert (@{$array_pointer_ale}) { - my $id_alert_template_module = get_alert_template_module_id($dbh, $id_module, $alert->{'id_alert_template'}); - - # Only if the template doesnt exist we create it. If exists we update it - if($id_alert_template_module == -1) { - $id_alert_template_module = pandora_create_template_module ($conf, $id_module, $alert->{'id_alert_template'}, $dbh, $alert->{'id'}, $alert->{'disabled'}, $alert->{'standby'}); - } - else { - pandora_update_template_module ($conf, $id_alert_template_module, $dbh, $alert->{'id'}, $alert->{'disabled'}, $alert->{'standby'}); - } - - # Get policy alert actions and create it on modules created - my $array_pointer_aleact = enterprise_hook('get_policy_alert_actions',[$dbh, $alert->{'id'}]); - - pandora_delete_all_template_module_actions ($dbh, $id_alert_template_module); - - foreach my $alert_action (@{$array_pointer_aleact}) { - delete $alert_action->{'id_policy_alert'}; - delete $alert_action->{'id'}; - $alert_action->{'id_alert_template_module'} = $id_alert_template_module; - - pandora_create_template_module_action ($conf, $alert_action, $dbh); - - } - } - - #Add the conf information to the agent conf file - enterprise_hook('pandora_create_policy_conf_info',[$conf, $policy_name, $configuration_data, $agent_name, $dbh]); - - # Flag applyed the agent - enterprise_hook('pandora_apply_agent_policy',[$policy_id, $id_agent, $dbh]); - - } - - # Get policy collections and link it on created modules - my $array_pointer_col = enterprise_hook('get_policy_collections',[$dbh, $policy_id]); - - my $collection_data = ''; - - foreach my $collection (@{$array_pointer_col}) { - my $collection_name = enterprise_hook('get_collection_name',[$dbh, $collection->{'id_collection'}]); - - $collection_data = "\n#file_collection $collection_name\n"; - $collection_data .= "\nfile_collection fc_$collection->{'id_collection'}\n\n"; - } - - if($collection_data ne '') { - enterprise_hook('pandora_delete_collection_agent_from_info',[$conf, $agent_name, $policy_id]); - enterprise_hook('pandora_create_collection_conf_info',[$conf, $policy_name, $collection_data,$agent_name,$dbh]); - } - - $configuration_data = ''; - $collection_data = ''; - } - - # Get extern policy alerts and create it on modules - my $array_pointer_ale_ext = enterprise_hook('get_policy_module_alerts',[$dbh, $policy_id, 0]); - - foreach my $alert (@{$array_pointer_ale_ext}) { - - my $array_modules_id = enterprise_hook('get_policy_agents_modules_id',[$dbh, $policy_id, $alert->{'name_extern_module'}]); - - foreach my $module_id (@{$array_modules_id}) { - my $id_alert_template_module = get_alert_template_module_id($dbh, $module_id->{'id_agente_modulo'}, $alert->{'id_alert_template'}); - - if($id_alert_template_module == -1) { - $id_alert_template_module = pandora_create_template_module ($conf, $module_id->{'id_agente_modulo'}, $alert->{'id_alert_template'}, $dbh, $alert->{'id'}); - } - - # Get policy alert actions and create it on modules created - my $array_pointer_aleact = enterprise_hook('get_policy_alert_actions',[$dbh, $alert->{'id'}]); - - pandora_delete_all_template_module_actions ($dbh, $id_alert_template_module); - - foreach my $alert_action (@{$array_pointer_aleact}) { - delete $alert_action->{'id_policy_alert'}; - delete $alert_action->{'id'}; - - $alert_action->{'id_alert_template_module'} = $id_alert_template_module; - - pandora_create_template_module_action ($conf, $alert_action, $dbh); - } - } - } - enterprise_hook('pandora_unblock_policies', [$dbh]); + #~ my $blocked_policies = enterprise_hook('pandora_block_policies', [$dbh]); + #~ + #~ if($blocked_policies eq '0E0') { + #~ print "[ERROR] The policies are blocked in other terminal.\n\n"; + #~ exit; + #~ } + #~ + #~ # Get the agents + #~ my $array_pointer_ag = enterprise_hook('get_policy_agents',[$dbh, $policy_id]); + #~ + #~ if(!defined($array_pointer_ag)) { + #~ print "[ERROR] This option is not available in OPEN version.\n\n"; + #~ exit; + #~ } + #~ + #~ print "[INFO] Applying policy '$policy_name'\n\n"; +#~ + #~ foreach my $agent (@{$array_pointer_ag}) { + #~ my $id_agent = $agent->{'id_agent'}; + #~ my $agent_name = get_agent_name($dbh, $id_agent); + #~ + #~ # Get the modules + #~ my $array_pointer_mod = enterprise_hook('get_policy_modules',[$dbh, $policy_id]); + #~ + #~ if(!defined($array_pointer_mod)) { + #~ print "[ERROR] This option is not available in OPEN version.\n\n"; + #~ exit; + #~ } + #~ + #~ foreach my $module (@{$array_pointer_mod}) { + #~ # Adapt the fields from tpolicy_modules to tagente_modulos + #~ $module->{'id_agente'} = $id_agent; +#~ + #~ $module->{'id_policy_module'} = $module->{'id'}; + #~ delete $module->{'id'}; + #~ + #~ $module->{'descripcion'} = $module->{'description'}; + #~ delete $module->{'description'}; + #~ + #~ $module->{'nombre'} = $module->{'name'}; + #~ delete $module->{'name'}; + #~ + #~ $module->{'id_modulo'} = $module->{'id_module'}; + #~ delete $module->{'id_module'}; +#~ + #~ delete $module->{'id_policy'}; + #~ + #~ #Store the conf data + #~ $configuration_data .= safe_output("\n\n$module->{'configuration_data'}"); +#~ + #~ delete $module->{'configuration_data'}; + #~ + #~ my $id_module = get_agent_module_id ($dbh, $module->{'nombre'}, $module->{'id_agente'}); + #~ + #~ # If the module doesn't exist we create it, otherwise we update it + #~ + #~ if($id_module == -1) { + #~ # Create module + #~ $id_module = pandora_create_module_from_hash ($conf, $module, $dbh); + #~ } + #~ else { + #~ # Update module + #~ pandora_update_module_from_hash ($conf, $module, 'id_agente_modulo', $id_module, $dbh); + #~ } +#~ + #~ # Get policy alerts and create it on created modules + #~ my $array_pointer_ale = enterprise_hook('get_policy_module_alerts',[$dbh, $policy_id, $module->{'id_policy_module'}]); + #~ + #~ foreach my $alert (@{$array_pointer_ale}) { + #~ my $id_alert_template_module = get_alert_template_module_id($dbh, $id_module, $alert->{'id_alert_template'}); +#~ + #~ # Only if the template doesnt exist we create it. If exists we update it + #~ if($id_alert_template_module == -1) { + #~ $id_alert_template_module = pandora_create_template_module ($conf, $id_module, $alert->{'id_alert_template'}, $dbh, $alert->{'id'}, $alert->{'disabled'}, $alert->{'standby'}); + #~ } + #~ else { + #~ pandora_update_template_module ($conf, $id_alert_template_module, $dbh, $alert->{'id'}, $alert->{'disabled'}, $alert->{'standby'}); + #~ } +#~ + #~ # Get policy alert actions and create it on modules created + #~ my $array_pointer_aleact = enterprise_hook('get_policy_alert_actions',[$dbh, $alert->{'id'}]); + #~ + #~ pandora_delete_all_template_module_actions ($dbh, $id_alert_template_module); + #~ + #~ foreach my $alert_action (@{$array_pointer_aleact}) { + #~ delete $alert_action->{'id_policy_alert'}; + #~ delete $alert_action->{'id'}; + #~ $alert_action->{'id_alert_template_module'} = $id_alert_template_module; +#~ + #~ pandora_create_template_module_action ($conf, $alert_action, $dbh); +#~ + #~ } + #~ } + #~ + #~ #Add the conf information to the agent conf file + #~ enterprise_hook('pandora_create_policy_conf_info',[$conf, $policy_name, $configuration_data, $agent_name, $dbh]); +#~ + #~ # Flag applyed the agent + #~ enterprise_hook('pandora_apply_agent_policy',[$policy_id, $id_agent, $dbh]); + #~ + #~ } +#~ + #~ # Get policy collections and link it on created modules + #~ my $array_pointer_col = enterprise_hook('get_policy_collections',[$dbh, $policy_id]); + #~ + #~ my $collection_data = ''; + #~ + #~ foreach my $collection (@{$array_pointer_col}) { + #~ my $collection_name = enterprise_hook('get_collection_name',[$dbh, $collection->{'id_collection'}]); +#~ + #~ $collection_data = "\n#file_collection $collection_name\n"; + #~ $collection_data .= "\nfile_collection fc_$collection->{'id_collection'}\n\n"; + #~ } + #~ + #~ if($collection_data ne '') { + #~ enterprise_hook('pandora_delete_collection_agent_from_info',[$conf, $agent_name, $policy_id]); + #~ enterprise_hook('pandora_create_collection_conf_info',[$conf, $policy_name, $collection_data,$agent_name,$dbh]); + #~ } + #~ + #~ $configuration_data = ''; + #~ $collection_data = ''; + #~ } +#~ + #~ # Get extern policy alerts and create it on modules + #~ my $array_pointer_ale_ext = enterprise_hook('get_policy_module_alerts',[$dbh, $policy_id, 0]); +#~ + #~ foreach my $alert (@{$array_pointer_ale_ext}) { +#~ + #~ my $array_modules_id = enterprise_hook('get_policy_agents_modules_id',[$dbh, $policy_id, $alert->{'name_extern_module'}]); +#~ + #~ foreach my $module_id (@{$array_modules_id}) { + #~ my $id_alert_template_module = get_alert_template_module_id($dbh, $module_id->{'id_agente_modulo'}, $alert->{'id_alert_template'}); +#~ + #~ if($id_alert_template_module == -1) { + #~ $id_alert_template_module = pandora_create_template_module ($conf, $module_id->{'id_agente_modulo'}, $alert->{'id_alert_template'}, $dbh, $alert->{'id'}); + #~ } +#~ + #~ # Get policy alert actions and create it on modules created + #~ my $array_pointer_aleact = enterprise_hook('get_policy_alert_actions',[$dbh, $alert->{'id'}]); + #~ + #~ pandora_delete_all_template_module_actions ($dbh, $id_alert_template_module); +#~ + #~ foreach my $alert_action (@{$array_pointer_aleact}) { + #~ delete $alert_action->{'id_policy_alert'}; + #~ delete $alert_action->{'id'}; + #~ + #~ $alert_action->{'id_alert_template_module'} = $id_alert_template_module; + #~ + #~ pandora_create_template_module_action ($conf, $alert_action, $dbh); + #~ } + #~ } + #~ } + #~ enterprise_hook('pandora_unblock_policies', [$dbh]); } elsif ($param eq '--force_unblock_policies') { enterprise_hook('pandora_unblock_policies', [$dbh]);