mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-29 19:30:08 +00:00
fix #2030: use looks_like_number for number check
since numbers can also be in '1.e-10' format, we have to change how we check for a number Scalar::Util is already core and we use it in PVE::Tools, so no new dependecy. in case of "NaN" or "Infinity" we omit the key/value pair else we quote like before Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
742d2ad20e
commit
8077d94a02
@ -5,6 +5,8 @@ use warnings;
|
|||||||
use PVE::Status::Plugin;
|
use PVE::Status::Plugin;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
use PVE::SafeSyslog;
|
use PVE::SafeSyslog;
|
||||||
|
use POSIX qw(isnan isinf);
|
||||||
|
use Scalar::Util 'looks_like_number';
|
||||||
|
|
||||||
# example config (/etc/pve/status.cfg)
|
# example config (/etc/pve/status.cfg)
|
||||||
#influxdb:
|
#influxdb:
|
||||||
@ -111,8 +113,9 @@ sub build_influxdb_payload {
|
|||||||
if (!ref($value) && $value ne '') {
|
if (!ref($value) && $value ne '') {
|
||||||
# value is scalar
|
# value is scalar
|
||||||
|
|
||||||
$value = prepare_value($value);
|
if (defined(my $v = prepare_value($value))) {
|
||||||
push @values, "$key=$value";
|
push @values, "$key=$v";
|
||||||
|
}
|
||||||
} elsif (ref($value) eq 'HASH') {
|
} elsif (ref($value) eq 'HASH') {
|
||||||
# value is a hash
|
# value is a hash
|
||||||
|
|
||||||
@ -145,8 +148,9 @@ sub get_recursive_values {
|
|||||||
if(ref($value) eq 'HASH') {
|
if(ref($value) eq 'HASH') {
|
||||||
push(@values, get_recursive_values($value));
|
push(@values, get_recursive_values($value));
|
||||||
} elsif (!ref($value) && $value ne '') {
|
} elsif (!ref($value) && $value ne '') {
|
||||||
$value = prepare_value($value);
|
if (defined(my $v = prepare_value($value))) {
|
||||||
push @values, "$key=$value";
|
push @values, "$key=$v";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,13 +160,21 @@ sub get_recursive_values {
|
|||||||
sub prepare_value {
|
sub prepare_value {
|
||||||
my ($value) = @_;
|
my ($value) = @_;
|
||||||
|
|
||||||
|
if (looks_like_number($value)) {
|
||||||
|
if (isnan($value) || isinf($value)) {
|
||||||
|
# we cannot send influxdb NaN or Inf
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
# influxdb also accepts 1.0e+10, etc.
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
# if value is not just a number we
|
# if value is not just a number we
|
||||||
# have to replace " with \"
|
# have to replace " with \"
|
||||||
# and surround it with "
|
# and surround it with "
|
||||||
if ($value =~ m/[^\d\.]/) {
|
$value =~ s/\"/\\\"/g;
|
||||||
$value =~ s/\"/\\\"/g;
|
$value = "\"$value\"";
|
||||||
$value = "\"$value\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user