diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php index da0094fd9d..851a77b2a7 100644 --- a/pandora_console/include/functions_api.php +++ b/pandora_console/include/functions_api.php @@ -150,7 +150,7 @@ function returnData($returnType, $data, $separator = ';') { else { if (!empty($data['data'])) { foreach ($data['data'] as $dataContent) { - $clean = array_map("array_apply_io_safe_output", $dataContent); + $clean = array_map("array_apply_io_safe_output", (array)$dataContent); foreach ($clean as $k => $v) { $clean[$k] = str_replace("\r", "\n", $clean[$k]); $clean[$k] = str_replace("\n", " ", $clean[$k]); @@ -7685,6 +7685,94 @@ function api_set_alert_actions($id, $id2, $other, $trash1) { } } +/** + * Create a new module group + * @param $id as module group name (mandatory) + example: + + *http://localhost/pandora_console/include/api.php?op=set&op2=new_module_group&id=Module_group_name&apipass=1234&user=admin&pass=pandora +*/ +function api_set_new_module_group($id, $thrash2, $other, $trash1) { + global $config; + + if (defined ('METACONSOLE')) { + return; + } + + if (!check_acl($config['id_user'], 0, "PM")){ + returnError('forbidden', 'string'); + return; + } + + if ($id == '' || !$id) { + returnError('error_parameter', __('Module group must have a name')); + return; + } + + $name = db_get_value ('name', 'tmodule_group', 'name', $id); + + + if ($name) { + returnError('error_parameter', __('Each module group must have a different name')); + return; + } + + $return = db_process_sql_insert('tmodule_group', array('name' => $id)); + + + if ($return === false) + returnError('error_new_moodule_group', 'There was a problem creating group'); + else + returnData('string', array('type' => 'string', 'data' => $return)); + +} + + +/** + * synchronize module group + * @param $other as server_names (mandatory) + example: + + *api.php?op=set&op2=module_group_synch&other=server_name1|server_name2|server_name3&other_mode=url_encode_separator_|&apipass=1234&user=admin&pass=pandora +*/ + +function api_set_module_group_synch($thrash1, $thrash2, $other, $thrash4) { + global $config; + enterprise_include_once ('meta/include/functions_meta.php'); + + if (is_metaconsole()) { + if (!check_acl($config['id_user'], 0, "PM")) { + returnError('forbidden', 'string'); + return; + } + $targets = array(); + foreach ($other['data'] as $server) { + $targets[] = $server; + } + $return = meta_module_group_synchronizing($targets, true); + + $module_group_update_err = $return["module_group_update_err"]; + $module_group_create_err = $return["module_group_create_err"]; + $module_group_update_ok = $return["module_group_update_ok"]; + $module_group_create_ok = $return["module_group_create_ok"]; + + $string_ok = __('Created/Updated %s/%s module groups', $module_group_create_ok, $module_group_update_ok); + + // User feedback + if ($module_group_create_err > 0 or $module_group_update_err > 0) { + returnError ('module_group_synch_err',__('Error creating/updating %s/%s module groups
', $module_group_create_err, $module_group_update_err)); + } + if ($module_group_create_ok > 0 or $module_group_update_ok > 0){ + returnData ('string', array('type' => 'string', 'data' => $string_ok)); + } + + } + else{ + returnError ('not_defined_in_metaconsole',__('This function is only for metaconsole')); + } +} + + function api_set_new_event($trash1, $trash2, $other, $trash3) { $simulate = false; $time = get_system_time(); @@ -10602,6 +10690,7 @@ function api_set_create_service($thrash1, $thrash2, $other, $thrash3) { } } + /** * Update a service. * diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 86062c3bea..4aa1de7905 100644 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -144,7 +144,9 @@ sub help_screen{ help_screen_line('--create_snmp_module', " \n\t [ \n\t \n\t \n\t \n\t \n\t \n\t \n\t ]", 'Add snmp network module to agent'); help_screen_line('--create_plugin_module', " \n\t [ \n\t \n\t \n\t \n\t \n\t \n\t ]", 'Add plug-in module to agent'); + help_screen_line('--get_module_group', '[]', 'Dysplay all module groups'); help_screen_line('--create_module_group', ''); + help_screen_line('--module_group_synch', " []", 'Synchronize metaconsole module groups'); help_screen_line('--delete_module', 'Delete module from agent', ' '); help_screen_line('--data_module', " \n\t []", 'Insert data to module'); help_screen_line('--get_module_data', " []", "\n\t Show the data of a module in the last X seconds (interval) in CSV format"); @@ -241,8 +243,8 @@ sub help_screen{ ######################################################################## # ######################################################################## -sub api_call($$$;$$$) { - my ($pa_config, $op, $op2, $id, $id2, $other) = @_; +sub api_call($$$;$$$$) { + my ($pa_config, $op, $op2, $id, $id2, $other, $return_type) = @_; my $content = undef; eval { @@ -256,6 +258,7 @@ sub api_call($$$;$$$) { $params->{"id"} = $id; $params->{"id2"} = $id2; $params->{"other"} = $other; + $params->{"return_type"} = $return_type; $params->{"other_mode"} = "url_encode_separator_|"; # Call the API. @@ -1605,6 +1608,54 @@ sub cli_create_module_group () { db_insert ($dbh, 'id_mg', 'INSERT INTO tmodule_group (name) VALUES (?)', safe_input($module_group_name)); } +############################################################################## +# Show all the module group (without parameters) or the module groups with a filter parameters +# Related option: --get_module_group +############################################################################## + +sub cli_get_module_group() { + my ($module_group_name) = @ARGV[2..2]; + + my $condition = ' 1=1 '; + + if($module_group_name ne '') { + $condition .= " AND name LIKE '%$module_group_name%' "; + } + + my @module_group = get_db_rows ($dbh, "SELECT * FROM tmodule_group WHERE $condition"); + + if(scalar(@module_group) == 0) { + print_log "[INFO] No groups found\n\n"; + exit; + } + + my $head_print = 0; + foreach my $groups (@module_group) { + + if($head_print == 0) { + $head_print = 1; + print "id_module_group, group_name\n"; + } + print $groups->{'id_mg'}.",".safe_output($groups->{'name'})."\n"; + } + + if($head_print == 0) { + print_log "[INFO] No groups found\n\n"; + } + +} + + +sub cli_module_group_synch() { + my $other = @ARGV[2]; + my $return_type = @ARGV[3]; + if ($return_type eq '') { + $return_type = 'csv'; + } + my $result = api_call(\%conf,'set', 'module_group_synch', undef, undef, "$other", $return_type); + print "$result \n\n "; +} + ############################################################################## # Create network module from component. # Related option: --create_network_module_from_component @@ -5734,10 +5785,19 @@ sub pandora_manage_main ($$$) { param_check($ltotal, 38, 35); cli_create_web_module(0); } + + elsif ($param eq '--get_module_group') { + param_check($ltotal, 1, 1); + cli_get_module_group(); + } elsif ($param eq '--create_module_group') { param_check($ltotal, 1, 1); cli_create_module_group(); } + elsif ($param eq '--module_group_synch') { + param_check($ltotal, 2, 1); + cli_module_group_synch(); + } elsif ($param eq '--create_network_module') { param_check($ltotal, 32, 20); cli_create_network_module(0);