2010-10-18 Sergio Martin <sergio.martin@artica.es>

* lib/PandoraFMS/DB.pm
	util/pandora_manage.pl: Splitted in 4 parameters the CLI module creation
	parameter: create_data_module, create_network_module, create_snmp_module, 
	create_plugin_module



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@3417 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
zarzuelo 2010-10-18 16:21:13 +00:00
parent e29fc12755
commit c4ce391649
3 changed files with 245 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2010-10-18 Sergio Martin <sergio.martin@artica.es>
* lib/PandoraFMS/DB.pm
util/pandora_manage.pl: Splitted in 4 parameters the CLI module creation
parameter: create_data_module, create_network_module, create_snmp_module,
create_plugin_module
2010-10-15 Ramon Novoa <rnovoa@artica.es>
* lib/PandoraFMS/ReconServer.pm: Added support for recon scripts.

View File

@ -41,10 +41,12 @@ our @EXPORT = qw(
get_db_value
get_group_id
get_group_name
get_module_group_id
get_module_id
get_module_name
get_nc_profile_name
get_os_id
get_plugin_id
get_profile_id
get_server_id
get_template_id
@ -203,6 +205,30 @@ sub get_module_id ($$) {
return defined ($rc) ? $rc : -1;
}
##########################################################################
## Return plugin ID given the plugin name.
##########################################################################
sub get_plugin_id ($$) {
my ($dbh, $plugin_name) = @_;
my $rc = get_db_value ($dbh, "SELECT id FROM tplugin WHERE name = ?", $plugin_name);
return defined ($rc) ? $rc : -1;
}
##########################################################################
## Return module group ID given the module group name.
##########################################################################
sub get_module_group_id ($$) {
my ($dbh, $module_group_name) = @_;
if(!defined($module_group_name) || $module_group_name eq '') {
return 0;
}
my $rc = get_db_value ($dbh, "SELECT id_mg FROM tmodule_group WHERE name = ?", $module_group_name);
return defined ($rc) ? $rc : -1;
}
##########################################################################
## Return a network component's profile name given its ID.
##########################################################################

View File

@ -397,9 +397,9 @@ sub pandora_delete_module_data ($$) {
}
##########################################################################
## Create a network module
## Create an agent module
##########################################################################
sub pandora_create_network_module ($$$) {
sub pandora_create_agent_module ($$$) {
my ($pa_config, $parameters, $dbh) = @_;
logger($pa_config, "Creating module '$parameters->{'name'}' for agent ID $parameters->{'id_agente'}.", 10);
@ -528,7 +528,10 @@ sub help_screen{
help_screen_line('--enable_group', '<group_name>', 'Enable agents from an entire group');
help_screen_line('--create_agent', '<agent_name> <operating_system> <group> <server_name> [<address> <description> <interval>]', 'Create agent');
help_screen_line('--delete_agent', '<agent_name>', 'Delete agent');
help_screen_line('--create_module', '<module_name> <module_type> <agent_name> <module_address> [<module_port> <description> <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> <history_data> <definition_file>]', 'Add module to agent');
help_screen_line('--create_data_module', '<module_name> <module_type> <agent_name> [<description> <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> <history_data> <definition_file>]', 'Add data server module to agent');
help_screen_line('--create_network_module', '<module_name> <module_type> <agent_name> <module_address> [<module_port> <description> <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> <history_data>]', 'Add not snmp network module to agent');
help_screen_line('--create_snmp_module', '<module_name> <module_type> <agent_name> <module_address> <module_port> <version> [<community> <oid> <description> <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> <history_data> <snmp3_priv_method> <snmp3_priv_pass> <snmp3_sec_level> <snmp3_auth_method> <snmp3_auth_user> <snmp3_priv_pass>]', 'Add snmp network module to agent');
help_screen_line('--create_plugin_module', '<module_name> <module_type> <agent_name> <module_address> <module_port> <plugin_name> <user> <password> <parameters> [<description> <module_group> <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> <history_data>]', 'Add plug-in module to agent');
help_screen_line('--delete_module', 'Delete module from agent', '<module_name> <agent_name>');
help_screen_line('--create_template_module', '<template_name> <module_name> <agent_name>', 'Add alert template to module');
help_screen_line('--delete_template_module', '<template_name> <module_name> <agent_name>', 'Delete alert template from module');
@ -653,12 +656,12 @@ sub pandora_manage_main ($$$) {
pandora_delete_agent($dbh,$id_agent,$conf);
}
elsif ($param eq '--create_module') {
param_check($ltotal, 16, 12);
elsif ($param eq '--create_data_module') {
param_check($ltotal, 15, 12);
my ($module_name, $module_type, $agent_name, $module_address, $module_port, $description,
my ($module_name, $module_type, $agent_name, $description, $module_group,
$min,$max,$post_process, $interval, $warning_min, $warning_max, $critical_min,
$critical_max, $history_data, $definition_file) = @ARGV[2..17];
$critical_max, $history_data, $definition_file) = @ARGV[2..16];
my $module_name_def;
my $module_type_def;
@ -713,9 +716,74 @@ sub pandora_manage_main ($$$) {
my $module_type_id = get_module_id($dbh,$module_type);
exist_check($module_type_id,'module type',$module_type);
if ($module_type !~ m/.?generic.?/ && $module_type !~ m/.?async.?/ && $module_type ne 'log4x' && $module_type ne 'keep_alive') {
print "[ERROR] '$module_type' is not valid type for data modules. Try with generic, asyncronous, keep alive or log4x types\n\n";
exit;
}
my $agent_id = get_agent_id($dbh,$agent_name);
exist_check($agent_id,'agent',$agent_name);
my $module_group_id = get_module_group_id($dbh,$module_group);
exist_check($module_group_id,'module group',$module_group);
my %parameters;
$parameters{'id_tipo_modulo'} = $module_type_id;
$parameters{'nombre'} = $module_name;
$parameters{'id_agente'} = $agent_id;
# Optional parameters
$parameters{'id_module_group'} = $module_group_id unless !defined ($module_group);
$parameters{'min_warning'} = $warning_min unless !defined ($warning_min);
$parameters{'max_warning'} = $warning_max unless !defined ($warning_max);
$parameters{'min_critical'} = $critical_min unless !defined ($critical_min);
$parameters{'max_critical'} = $critical_max unless !defined ($critical_max);
$parameters{'history_data'} = $history_data unless !defined ($history_data);
$parameters{'descripcion'} = $description unless !defined ($description);
$parameters{'min'} = $min unless !defined ($min);
$parameters{'max'} = $max unless !defined ($max);
$parameters{'post_process'} = $post_process unless !defined ($post_process);
$parameters{'module_interval'} = $interval unless !defined ($interval);
$parameters{'id_modulo'} = 1;
pandora_create_agent_module ($conf, \%parameters, $dbh);
}
elsif ($param eq '--create_network_module') {
param_check($ltotal, 17, 13);
my ($module_name, $module_type, $agent_name, $module_address, $module_port, $description,
$module_group, $min, $max, $post_process, $interval, $warning_min, $warning_max, $critical_min,
$critical_max, $history_data, $definition_file) = @ARGV[2..17];
my $module_name_def;
my $module_type_def;
print "[INFO] Adding module '$module_name' to agent '$agent_name'\n\n";
if ($module_type =~ m/.?snmp.?/) {
print "[ERROR] '$module_type' is not a valid type. For snmp modules use --create_snmp_module parameter\n\n";
$param = '--create_snmp_module';
help_screen ();
exit 1;
}
if ($module_type !~ m/.?icmp.?/ && $module_type !~ m/.?tcp.?/) {
print "[ERROR] '$module_type' is not valid type for (not snmp) network modules. Try with icmp or tcp types\n\n";
exit;
}
# The get_module_id has wrong name. Change in future
my $module_type_id = get_module_id($dbh,$module_type);
exist_check($module_type_id,'module type',$module_type);
my $agent_id = get_agent_id($dbh,$agent_name);
exist_check($agent_id,'agent',$agent_name);
my $module_group_id = get_module_group_id($dbh,$module_group);
exist_check($module_group_id,'module group',$module_group);
if ($module_type !~ m/.?icmp.?/) {
if (not defined($module_port)) {
print "[ERROR] Port error. Agents of type distinct of icmp need port\n\n";
@ -734,6 +802,7 @@ sub pandora_manage_main ($$$) {
$parameters{'ip_target'} = $module_address;
# Optional parameters
$parameters{'id_module_group'} = $module_group_id unless !defined ($module_group);
$parameters{'min_warning'} = $warning_min unless !defined ($warning_min);
$parameters{'max_warning'} = $warning_max unless !defined ($warning_max);
$parameters{'min_critical'} = $critical_min unless !defined ($critical_min);
@ -746,10 +815,143 @@ sub pandora_manage_main ($$$) {
$parameters{'post_process'} = $post_process unless !defined ($post_process);
$parameters{'module_interval'} = $interval unless !defined ($interval);
$parameters{'id_modulo'} = 1;
pandora_create_network_module ($conf, \%parameters, $dbh);
pandora_create_agent_module ($conf, \%parameters, $dbh);
}
elsif ($param eq '--create_snmp_module') {
param_check($ltotal, 25, 19);
my ($module_name, $module_type, $agent_name, $module_address, $module_port, $version, $community,
$oid, $description, $module_group, $min, $max, $post_process, $interval, $warning_min,
$warning_max, $critical_min, $critical_max, $history_data, $snmp3_priv_method, $snmp3_priv_pass,
$snmp3_sec_level, $snmp3_auth_method, $snmp3_auth_user, $snmp3_priv_pass) = @ARGV[2..26];
my $module_name_def;
my $module_type_def;
print "[INFO] Adding snmp module '$module_name' to agent '$agent_name'\n\n";
# The get_module_id has wrong name. Change in future
my $module_type_id = get_module_id($dbh,$module_type);
exist_check($module_type_id,'module type',$module_type);
my $agent_id = get_agent_id($dbh,$agent_name);
exist_check($agent_id,'agent',$agent_name);
my $module_group_id = get_module_group_id($dbh,$module_group);
exist_check($module_group_id,'module group',$module_group);
if ($module_type !~ m/.?snmp.?/) {
print "[ERROR] '$module_type' is not a valid snmp type\n\n";
exit;
}
if ($module_port > 65535 || $module_port < 1) {
print "[ERROR] Port error. Port must into [1-65535]\n\n";
exit;
}
my %parameters;
$parameters{'id_tipo_modulo'} = $module_type_id;
$parameters{'nombre'} = $module_name;
$parameters{'id_agente'} = $agent_id;
$parameters{'ip_target'} = $module_address;
$parameters{'tcp_port'} = $module_port;
$parameters{'tcp_send'} = $version;
# Optional parameters
$parameters{'id_module_group'} = $module_group_id unless !defined ($module_group);
$parameters{'min_warning'} = $warning_min unless !defined ($warning_min);
$parameters{'max_warning'} = $warning_max unless !defined ($warning_max);
$parameters{'min_critical'} = $critical_min unless !defined ($critical_min);
$parameters{'max_critical'} = $critical_max unless !defined ($critical_max);
$parameters{'history_data'} = $history_data unless !defined ($history_data);
$parameters{'descripcion'} = $description unless !defined ($description);
$parameters{'min'} = $min unless !defined ($min);
$parameters{'max'} = $max unless !defined ($max);
$parameters{'post_process'} = $post_process unless !defined ($post_process);
$parameters{'module_interval'} = $interval unless !defined ($interval);
if($version == 3) {
$parameters{'custom_string_1'} = $snmp3_priv_method;
$parameters{'custom_string_2'} = $snmp3_priv_pass;
$parameters{'custom_string_3'} = $snmp3_sec_level;
$parameters{'plugin_parameter'} = $snmp3_auth_method;
$parameters{'plugin_user'} = $snmp3_auth_user;
$parameters{'plugin_pass'} = $snmp3_priv_pass;
}
# id_modulo = 2 for snmp modules
$parameters{'id_modulo'} = 2;
pandora_create_agent_module ($conf, \%parameters, $dbh);
}
elsif ($param eq '--create_plugin_module') {
param_check($ltotal, 20, 11);
my ($module_name, $module_type, $agent_name, $module_address, $module_port, $plugin_name,
$user, $password, $parameters, $description, $module_group, $min, $max, $post_process,
$interval, $warning_min, $warning_max, $critical_min, $critical_max, $history_data,
$definition_file) = @ARGV[2..21];
my $module_name_def;
my $module_type_def;
print "[INFO] Adding module '$module_name' to agent '$agent_name'\n\n";
# The get_module_id has wrong name. Change in future
my $module_type_id = get_module_id($dbh,$module_type);
exist_check($module_type_id,'module type',$module_type);
if ($module_type !~ m/.?generic.?/ && $module_type ne 'log4x') {
print "[ERROR] '$module_type' is not valid type for plugin modules. Try with generic or log4x types\n\n";
exit;
}
my $agent_id = get_agent_id($dbh,$agent_name);
exist_check($agent_id,'agent',$agent_name);
my $module_group_id = get_module_group_id($dbh,$module_group);
exist_check($module_group_id,'module group',$module_group);
my $plugin_id = get_plugin_id($dbh,$plugin_name);
exist_check($plugin_id,'plugin',$plugin_name);
if ($module_port > 65535 || $module_port < 1) {
print "[ERROR] Port error. Port must into [1-65535]\n\n";
exit;
}
my %parameters;
$parameters{'id_tipo_modulo'} = $module_type_id;
$parameters{'nombre'} = $module_name;
$parameters{'id_agente'} = $agent_id;
$parameters{'ip_target'} = $module_address;
$parameters{'tcp_port'} = $module_port;
$parameters{'id_plugin'} = $plugin_id;
$parameters{'plugin_user'} = $user;
$parameters{'plugin_pass'} = $password;
$parameters{'plugin_parameter'} = $parameters;
# Optional parameters
$parameters{'id_module_group'} = $module_group_id unless !defined ($module_group);
$parameters{'min_warning'} = $warning_min unless !defined ($warning_min);
$parameters{'max_warning'} = $warning_max unless !defined ($warning_max);
$parameters{'min_critical'} = $critical_min unless !defined ($critical_min);
$parameters{'max_critical'} = $critical_max unless !defined ($critical_max);
$parameters{'history_data'} = $history_data unless !defined ($history_data);
$parameters{'descripcion'} = $description unless !defined ($description);
$parameters{'min'} = $min unless !defined ($min);
$parameters{'max'} = $max unless !defined ($max);
$parameters{'post_process'} = $post_process unless !defined ($post_process);
$parameters{'module_interval'} = $interval unless !defined ($interval);
$parameters{'id_modulo'} = 4;
pandora_create_agent_module ($conf, \%parameters, $dbh);
}
elsif ($param eq '--delete_module') {
param_check($ltotal, 2);
@ -1167,7 +1369,7 @@ sub pandora_manage_main ($$$) {
delete $module->{'configuration_data'};
# Create module
my $id_module = pandora_create_network_module ($conf, $module, $dbh);
my $id_module = pandora_create_agent_module ($conf, $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'}]);