Fix #1812
This commit is contained in:
parent
6f2ac05fe3
commit
4488de5a65
|
@ -31,21 +31,21 @@ sub new {
|
||||||
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
|
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
$options{options}->add_options(arguments =>
|
$options{options}->add_options(arguments => {
|
||||||
{
|
'hostname:s' => { name => 'hostname' },
|
||||||
"hostname:s" => { name => 'hostname' },
|
'remote' => { name => 'remote' },
|
||||||
"remote" => { name => 'remote' },
|
'ssh-option:s@' => { name => 'ssh_option' },
|
||||||
"ssh-option:s@" => { name => 'ssh_option' },
|
'ssh-path:s' => { name => 'ssh_path' },
|
||||||
"ssh-path:s" => { name => 'ssh_path' },
|
'ssh-command:s' => { name => 'ssh_command', default => 'ssh' },
|
||||||
"ssh-command:s" => { name => 'ssh_command', default => 'ssh' },
|
'timeout:s' => { name => 'timeout', default => 30 },
|
||||||
"timeout:s" => { name => 'timeout', default => 30 },
|
'sudo' => { name => 'sudo' },
|
||||||
"sudo" => { name => 'sudo' },
|
'command:s' => { name => 'command', default => 'cat' },
|
||||||
"command:s" => { name => 'command', default => 'cat' },
|
'command-path:s' => { name => 'command_path' },
|
||||||
"command-path:s" => { name => 'command_path' },
|
'command-options:s' => { name => 'command_options', default => '/proc/meminfo /etc/redhat-release 2>&1' },
|
||||||
"command-options:s" => { name => 'command_options', default => '/proc/meminfo 2>&1' },
|
'warning:s' => { name => 'warning' },
|
||||||
"warning:s" => { name => 'warning', },
|
'critical:s' => { name => 'critical' },
|
||||||
"critical:s" => { name => 'critical', },
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,19 +63,30 @@ sub check_options {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub check_rhel_version {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
$self->{rhel_71} = 0;
|
||||||
|
return if ($options{stdout} !~ /(?:Redhat|CentOS).*?release\s+(\d+)\.(\d+)/mi);
|
||||||
|
$self->{rhel_71} = 1 if ($1 >= 7 && $2 >= 1);
|
||||||
|
}
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
my $stdout = centreon::plugins::misc::execute(output => $self->{output},
|
my ($stdout) = centreon::plugins::misc::execute(
|
||||||
|
output => $self->{output},
|
||||||
options => $self->{option_results},
|
options => $self->{option_results},
|
||||||
sudo => $self->{option_results}->{sudo},
|
sudo => $self->{option_results}->{sudo},
|
||||||
command => $self->{option_results}->{command},
|
command => $self->{option_results}->{command},
|
||||||
command_path => $self->{option_results}->{command_path},
|
command_path => $self->{option_results}->{command_path},
|
||||||
command_options => $self->{option_results}->{command_options});
|
command_options => $self->{option_results}->{command_options},
|
||||||
|
no_quit => 1
|
||||||
|
);
|
||||||
|
|
||||||
# Buffer can be missing. In Openvz container for example.
|
# Buffer can be missing. In Openvz container for example.
|
||||||
my $buffer_used = 0;
|
my $buffer_used = 0;
|
||||||
my ($cached_used, $free, $total_size);
|
my ($cached_used, $free, $total_size, $slab_used);
|
||||||
foreach (split(/\n/, $stdout)) {
|
foreach (split(/\n/, $stdout)) {
|
||||||
if (/^MemTotal:\s+(\d+)/i) {
|
if (/^MemTotal:\s+(\d+)/i) {
|
||||||
$total_size = $1 * 1024;
|
$total_size = $1 * 1024;
|
||||||
|
@ -83,18 +94,23 @@ sub run {
|
||||||
$cached_used = $1 * 1024;
|
$cached_used = $1 * 1024;
|
||||||
} elsif (/^Buffers:\s+(\d+)/i) {
|
} elsif (/^Buffers:\s+(\d+)/i) {
|
||||||
$buffer_used = $1 * 1024;
|
$buffer_used = $1 * 1024;
|
||||||
|
} elsif (/^Slab:\s+(\d+)/i) {
|
||||||
|
$slab_used = $1 * 1024;
|
||||||
} elsif (/^MemFree:\s+(\d+)/i) {
|
} elsif (/^MemFree:\s+(\d+)/i) {
|
||||||
$free = $1 * 1024;
|
$free = $1 * 1024;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!defined($total_size) || !defined($cached_used) || !defined($free)) {
|
if (!defined($total_size) || !defined($cached_used) || !defined($free)) {
|
||||||
$self->{output}->add_option_msg(short_msg => "Some informations missing.");
|
$self->{output}->add_option_msg(short_msg => 'Some informations missing.');
|
||||||
$self->{output}->option_exit();
|
$self->{output}->option_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$self->check_rhel_version(stdout => $stdout);
|
||||||
|
|
||||||
my $physical_used = $total_size - $free;
|
my $physical_used = $total_size - $free;
|
||||||
my $nobuf_used = $physical_used - $buffer_used - $cached_used;
|
my $nobuf_used = $physical_used - $buffer_used - $cached_used;
|
||||||
|
$nobuf_used -= $slab_used if ($self->{rhel_71} == 1);
|
||||||
|
|
||||||
my $prct_used = $nobuf_used * 100 / $total_size;
|
my $prct_used = $nobuf_used * 100 / $total_size;
|
||||||
my $exit = $self->{perfdata}->threshold_check(value => $prct_used, threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]);
|
my $exit = $self->{perfdata}->threshold_check(value => $prct_used, threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]);
|
||||||
|
@ -103,23 +119,33 @@ sub run {
|
||||||
my ($buffer_value, $buffer_unit) = $self->{perfdata}->change_bytes(value => $buffer_used);
|
my ($buffer_value, $buffer_unit) = $self->{perfdata}->change_bytes(value => $buffer_used);
|
||||||
my ($cached_value, $cached_unit) = $self->{perfdata}->change_bytes(value => $cached_used);
|
my ($cached_value, $cached_unit) = $self->{perfdata}->change_bytes(value => $cached_used);
|
||||||
|
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Ram used (-buffers/cache) %s (%.2f%%), Buffer: %s, Cached: %s",
|
severity => $exit,
|
||||||
|
short_msg => sprintf(
|
||||||
|
"Ram used (-buffers/cache) %s (%.2f%%), Buffer: %s, Cached: %s",
|
||||||
$nobuf_value . " " . $nobuf_unit, $prct_used,
|
$nobuf_value . " " . $nobuf_unit, $prct_used,
|
||||||
$buffer_value . " " . $buffer_unit,
|
$buffer_value . " " . $buffer_unit,
|
||||||
$cached_value . " " . $cached_unit));
|
$cached_value . " " . $cached_unit
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
$self->{output}->perfdata_add(label => "cached", unit => 'B',
|
$self->{output}->perfdata_add(
|
||||||
|
label => "cached", unit => 'B',
|
||||||
value => $cached_used,
|
value => $cached_used,
|
||||||
min => 0);
|
min => 0
|
||||||
$self->{output}->perfdata_add(label => "buffer", unit => 'B',
|
);
|
||||||
|
$self->{output}->perfdata_add(
|
||||||
|
label => "buffer", unit => 'B',
|
||||||
value => $buffer_used,
|
value => $buffer_used,
|
||||||
min => 0);
|
min => 0
|
||||||
$self->{output}->perfdata_add(label => "used", unit => 'B',
|
);
|
||||||
|
$self->{output}->perfdata_add(
|
||||||
|
label => "used", unit => 'B',
|
||||||
value => $nobuf_used,
|
value => $nobuf_used,
|
||||||
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning', total => $total_size),
|
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning', total => $total_size),
|
||||||
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical', total => $total_size),
|
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical', total => $total_size),
|
||||||
min => 0, max => $total_size);
|
min => 0, max => $total_size
|
||||||
|
);
|
||||||
|
|
||||||
$self->{output}->display();
|
$self->{output}->display();
|
||||||
$self->{output}->exit();
|
$self->{output}->exit();
|
||||||
|
|
Loading…
Reference in New Issue