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);