diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 7528d99f04..bafb2e309f 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -3086,11 +3086,15 @@ create table IF NOT EXISTS `tcluster_agent`( -- --------------------------------------------------------------------- create table IF NOT EXISTS `tmigration_queue`( - `id_metaconsole_agent` int unsigned not null auto_increment, + `id` int unsigned not null auto_increment, + `id_source_agent` int unsigned not null, + `id_target_agent` int unsigned not null, `id_source_node` int unsigned not null, - `id_target_node` int unsigned not null, - `priority` int unsigned default 0, - `step` int unsigned default 0 + `id_target_node` int unsigned not null, + `priority` int unsigned default 0, + `step` int unsigned default 0, + `running` tinyint(2) unsigned not null default 0, + PRIMARY KEY(`id`) ) engine=InnoDB DEFAULT CHARSET=utf8; -- --------------------------------------------------------------------- @@ -3098,9 +3102,16 @@ create table IF NOT EXISTS `tmigration_queue`( -- --------------------------------------------------------------------- create table IF NOT EXISTS `tmigration_module_queue`( + `id` int unsigned not null auto_increment, + `id_migration` int unsigned not null, `id_source_node` int unsigned not null, `id_target_node` int unsigned not null, - `id_source_agentmodule` int unsigned not null, - `id_target_agentmodule` int unsigned not null, - `last_replication_timestamp` bigint(20) NOT NULL default 0 -) engine=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file + `id_source_agentmodule` int unsigned not null, + `id_target_agentmodule` int unsigned not null, + `last_replication_timestamp` bigint(20) NOT NULL default 0, + PRIMARY KEY(`id`), + FOREIGN KEY(`id_migration`) REFERENCES tmigration_queue(`id`) + ON DELETE CASCADE + ON UPDATE CASCADE +) engine=InnoDB DEFAULT CHARSET=utf8; + diff --git a/pandora_server/lib/PandoraFMS/DB.pm b/pandora_server/lib/PandoraFMS/DB.pm index 4176a47d94..ee032e15e1 100644 --- a/pandora_server/lib/PandoraFMS/DB.pm +++ b/pandora_server/lib/PandoraFMS/DB.pm @@ -40,6 +40,7 @@ our @EXPORT = qw( db_get_lock db_insert db_insert_get_values + db_insert_from_hash db_process_insert db_process_update db_release_lock @@ -900,6 +901,29 @@ sub db_process_insert($$$$;@) { return $res; } +######################################################################## +## SQL insert from hash +## 1st: dbh +## 2nd: table name, +## 2nd: {field => value} ref +######################################################################## +sub db_insert_from_hash { + my ($dbh, $index, $table, $data) = @_; + + my @fields = keys %{$data}; + my $values_prep = ""; + my @values = values %{$data}; + my $nfields = scalar @fields; + + for (my $i=0; $i<$nfields; $i++) { + $values_prep .= "?,"; + } + $values_prep =~ s/,$//; + + return db_insert($dbh, $index, "INSERT INTO " . $table . " (" . join (",", @fields) . ") VALUES ($values_prep)", @values); + +} + ######################################################################## ## SQL update. ######################################################################## diff --git a/pandora_server/lib/PandoraFMS/Tools.pm b/pandora_server/lib/PandoraFMS/Tools.pm index fe528042b8..ff6763c13a 100755 --- a/pandora_server/lib/PandoraFMS/Tools.pm +++ b/pandora_server/lib/PandoraFMS/Tools.pm @@ -27,6 +27,7 @@ use Encode; use Socket qw(inet_ntoa inet_aton); use Sys::Syslog; use Scalar::Util qw(looks_like_number); +use LWP::UserAgent; # New in 3.2. Used to sendmail internally, without external scripts # use Module::Loaded; @@ -62,8 +63,9 @@ our @EXPORT = qw( TRANSACTIONALSERVER SYNCSERVER SYSLOGSERVER - METACONSOLE_LICENSE WUXSERVER + MIGRATIONSERVER + METACONSOLE_LICENSE $DEVNULL $OS $OS_VERSION @@ -74,7 +76,8 @@ our @EXPORT = qw( MODULE_WARNING MODULE_UNKNOWN MODULE_NOTINIT - cron_get_closest_in_range + api_call_url + cron_get_closest_in_range cron_next_execution cron_next_execution_date cron_check_syntax @@ -133,6 +136,7 @@ use constant MFSERVER => 15; use constant SYNCSERVER => 16; use constant WUXSERVER => 17; use constant SYSLOGSERVER => 18; +use constant MIGRATIONSERVER => 19; # Module status use constant MODULE_NORMAL => 0; @@ -1708,6 +1712,35 @@ sub uri_encode_literal_percent { } ## end sub uri_encode_literal_percent +################################################################################ +# Launch API call +################################################################################ +sub api_call_url { + my ($pa_config, $server_url, $api_params, @options) = @_; + + + my $ua = LWP::UserAgent->new(); + $ua->timeout($options->{lwp_timeout}); + # Enable environmental proxy settings + $ua->env_proxy; + # Enable in-memory cookie management + $ua->cookie_jar( {} ); + + # Disable verify host certificate (only needed for self-signed cert) + $ua->ssl_opts( 'verify_hostname' => 0 ); + $ua->ssl_opts( 'SSL_verify_mode' => 0x00 ); + + my $response; + + eval { + $response = $ua->post($server_url, $api_params, @options); + }; + if ((!$@) && $response->is_success) { + return $response->decoded_content; + } + return undef; +} + # End of function declaration # End of defined Code