Merge branch '2016-plugin-monitorizacion-con-docker-swarm' into 'develop'

Functionalities added - docker swarm

See merge request artica/pandorafms!1547
This commit is contained in:
nramon 2018-06-19 11:33:07 +02:00
commit 2071568b16
1 changed files with 39 additions and 5 deletions

View File

@ -24,6 +24,7 @@ use Scalar::Util qw(looks_like_number);
use Time::HiRes qw(time);
use POSIX qw(strftime setsid floor);
use MIME::Base64;
use JSON qw(decode_json encode_json);
use base 'Exporter';
@ -62,6 +63,7 @@ our @EXPORT = qw(
in_array
init
is_enabled
join_by_field
load_perl_modules
logger
merge_hashes
@ -1003,6 +1005,22 @@ sub init_system {
return $conf;
}
################################################################################
# Return a string with the concatenation of a hash array based on a field
################################################################################
sub join_by_field {
my ($separator, $field, $array_hashref) = @_;
$separator = ',' if empty($separator);
my $str = '';
foreach my $item (@{$array_hashref}) {
$str .= (defined($item->{$field})?$item->{$field}:'') . $separator;
}
chop($str);
return $str;
}
################################################################################
# Return system environment
################################################################################
@ -1500,14 +1518,14 @@ sub api_available {
# apidata->{other} = [field1,field2,...,fieldi,...,fieldn]
#########################################################################################
sub api_call {
my ($conf, $apidata) = @_;
my ($conf, $apidata, $decode_json) = @_;
my ($api_url, $api_pass, $api_user, $api_user_pass,
$op, $op2, $other_mode, $other, $return_type);
$op, $op2, $id, $id2, $other_mode, $other, $return_type);
my $separator;
if (ref $apidata eq "ARRAY") {
($api_url, $api_pass, $api_user, $api_user_pass,
$op, $op2, $return_type, $other_mode, $other) = @{$apidata};
$op, $op2, $id, $id2, $return_type, $other_mode, $other) = @{$apidata};
}
if (ref $apidata eq "HASH") {
$api_url = $apidata->{'api_url'};
@ -1516,6 +1534,8 @@ sub api_call {
$api_user_pass = $apidata->{'api_user_pass'};
$op = $apidata->{'op'};
$op2 = $apidata->{'op2'};
$id = $apidata->{'id'};
$id2 = $apidata->{'id2'};
$return_type = $apidata->{'return_type'};
$other_mode = "url_encode_separator_" . $apidata->{'url_encode_separator'} unless empty($apidata->{'url_encode_separator'});
$other_mode = "url_encode_separator_|" if empty($other_mode);
@ -1528,6 +1548,8 @@ sub api_call {
$api_user_pass = $conf->{'api_user_pass'} if empty($api_user_pass);
$op = $conf->{'op'} if empty($op);
$op2 = $conf->{'op2'} if empty($op2);
$id = $conf->{'id'} if empty($id);
$id2 = $conf->{'id2'} if empty($id2);
$return_type = $conf->{'return_type'} if empty($return_type);
$return_type = 'json' if empty($return_type);
if (ref ($apidata->{'other'}) eq "ARRAY") {
@ -1545,18 +1567,30 @@ sub api_call {
$other = $apidata->{'other'};
}
$other = '' if empty($other);
$id = '' if empty($id);
$id2 = '' if empty($id2);
my $call;
$call = $api_url . '?';
$call .= 'op=' . $op . '&op2=' . $op2;
$call .= 'op=' . $op . '&op2=' . $op2 . '&id=' . $id;
$call .= '&other_mode=url_encode_separator_' . $separator;
$call .= '&other=' . $other;
$call .= '&apipass=' . $api_pass . '&user=' . $api_user . '&pass=' . $api_user_pass;
$call .= '&return_type=' . $return_type;
my $rs = call_url($conf, "$call");
if (ref($rs) ne "HASH") {
if (is_enabled($decode_json)) {
eval {
my $tmp = decode_json($rs);
$rs = $tmp;
};
if ($@) {
print_stderror($conf, "Error: " . $@);
}
}
return {
rs => (empty($rs)?1:0),
error => (empty($rs)?"Empty response.":undef),