centreon-plugins/apps/kingdee/eas/mode/memory.pm

323 lines
15 KiB
Perl
Raw Normal View History

2018-01-29 14:11:11 +01:00
#
2019-01-09 09:57:11 +01:00
# Copyright 2019 Centreon (http://www.centreon.com/)
2018-01-29 14:11:11 +01:00
#
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# service performance.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Author : CHEN JUN , aladdin.china@gmail.com
package apps::kingdee::eas::mode::memory;
use base qw(centreon::plugins::mode);
use strict;
use warnings;
sub new {
my ( $class, %options ) = @_;
my $self = $class->SUPER::new( package => __PACKAGE__, %options );
bless $self, $class;
$self->{version} = '1.0';
$options{options}->add_options(
arguments => {
"urlpath:s" => { name => 'url_path', default => "/easportal/tools/nagios/checkmemory.jsp" },
"warning-heap:s" => { name => 'warning-heap' , default => ",,,"},
"warning-nonheap:s" => { name => 'warning-nonheap' , default => ",,,"},
"critical-heap:s" => { name => 'critical-heap' , default => ",,,"},
"critical-nonheap:s" => { name => 'critical-nonheap' , default => ",,,"},
}
);
return $self;
}
sub check_options {
my ( $self, %options ) = @_;
$self->SUPER::init(%options);
($self->{warn_init_heap}, $self->{warn_max_heap}, $self->{warn_used_heap}, $self->{warn_committed_heap})
= split /,/, $self->{option_results}->{"warning-heap"};
($self->{warn_init_nonheap}, $self->{warn_max_nonheap}, $self->{warn_used_nonheap}, $self->{warn_committed_nonheap})
= split /,/, $self->{option_results}->{"warning-nonheap"};
($self->{crit_init_heap}, $self->{crit_max_heap}, $self->{crit_used_heap}, $self->{crit_committed_heap})
= split /,/, $self->{option_results}->{"critical-heap"};
($self->{crit_init_nonheap}, $self->{crit_max_nonheap}, $self->{crit_used_nonheap}, $self->{crit_committed_nonheap})
= split /,/, $self->{option_results}->{"critical-nonheap"};
# warning-heap
if (($self->{perfdata}->threshold_validate(label => 'warn_init_heap', value => $self->{warn_init_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-heap init threshold '" . $self->{warn_init_heap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'warn_max_heap', value => $self->{warn_max_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-heap max threshold '" . $self->{warn_max_heap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'warn_used_heap', value => $self->{warn_used_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-heap used threshold '" . $self->{warn_used_heap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'warn_committed_heap', value => $self->{warn_committed_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-heap committed threshold '" . $self->{warn_committed_heap} . "'.");
$self->{output}->option_exit();
}
# waring-nonheap
if (($self->{perfdata}->threshold_validate(label => 'warn_init_nonheap', value => $self->{warn_init_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-nonheap init threshold '" . $self->{warn_init_nonheap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'warn_max_nonheap', value => $self->{warn_max_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-nonheap max threshold '" . $self->{warn_max_nonheap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'warn_used_nonheap', value => $self->{warn_used_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-nonheap used threshold '" . $self->{warn_used_nonheap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'warn_committed_nonheap', value => $self->{warn_committed_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong warning-nonheap committed threshold '" . $self->{warn_committed_nonheap} . "'.");
$self->{output}->option_exit();
}
# critical-heap
if (($self->{perfdata}->threshold_validate(label => 'crit_init_heap', value => $self->{crit_init_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-heap init threshold '" . $self->{crit_init_heap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'crit_max_heap', value => $self->{crit_max_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-heap max threshold '" . $self->{crit_max_heap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'crit_used_heap', value => $self->{crit_used_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-heap used threshold '" . $self->{crit_used_heap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'crit_committed_heap', value => $self->{crit_committed_heap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-heap committed threshold '" . $self->{crit_committed_heap} . "'.");
$self->{output}->option_exit();
}
# critical-nonheap
if (($self->{perfdata}->threshold_validate(label => 'crit_init_nonheap', value => $self->{crit_init_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-nonheap init threshold '" . $self->{crit_init_nonheap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'crit_max_nonheap', value => $self->{crit_max_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-nonheap max threshold '" . $self->{crit_max_nonheap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'crit_used_nonheap', value => $self->{crit_used_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-nonheap used threshold '" . $self->{crit_used_nonheap} . "'.");
$self->{output}->option_exit();
}
if (($self->{perfdata}->threshold_validate(label => 'crit_committed_nonheap', value => $self->{crit_committed_nonheap})) == 0) {
$self->{output}->add_option_msg(short_msg => "Wrong critical-nonheap committed threshold '" . $self->{crit_committed_nonheap} . "'.");
$self->{output}->option_exit();
}
}
sub run {
my ( $self, %options ) = @_;
my $webcontent = $options{custom}->request(path => $self->{option_results}->{url_path});
if ($webcontent !~ /(^Type=HeapMemoryUsage|^Type=NonHeapMemoryUsage)/mi) {
$self->{output}->output_add(
severity => 'UNKNOWN',
short_msg => "Cannot find heap or nonheap memory usage status."
);
$self->{output}->option_exit();
}
my ( $init_heap, $max_heap, $used_heap, $committed_heap ) = ( 0, 0, 0, 0 );
my ( $init_nonheap, $max_nonheap, $used_nonheap, $committed_nonheap ) = ( 0, 0, 0, 0 );
if ( $webcontent =~ /^Type=HeapMemoryUsage\sinit=(\d+)\smax=(\d+)\sused=(\d+)\scommitted=(\d+)/mi ){
( $init_heap, $max_heap, $used_heap, $committed_heap ) = ( $1, $2, $3, $4 );
$self->{output}->output_add(
severity => 'ok',
short_msg => sprintf(
"Heap Memory: init %d , max %d ,used %d ,commited %d",
$init_heap, $max_heap, $used_heap, $committed_heap
)
);
}
if ( $webcontent =~ /^Type=NonHeapMemoryUsage\sinit=(\d+)\smax=(-{0,1}\d+)\sused=(\d+)\scommitted=(\d+)/mi ){
( $init_nonheap, $max_nonheap, $used_nonheap, $committed_nonheap ) = ( $1, $2, $3, $4 );
$self->{output}->output_add(
severity => 'ok',
short_msg => sprintf(
"NonHeap Memory: init %d , max %d ,used %d ,commited %d",
$init_nonheap, $max_nonheap,
$used_nonheap, $committed_nonheap
)
);
}
my $exit = $self->{perfdata}->threshold_check(value => $init_heap,
threshold => [ { label => 'crit_init_heap', 'exit_litteral' => 'critical' },
{ label => 'warn_init_heap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Init Heap: %d", $init_heap)
);
}
$exit = $self->{perfdata}->threshold_check(value => $max_heap,
threshold => [ { label => 'crit_max_heap', 'exit_litteral' => 'critical' },
{ label => 'warn_max_heap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Max Heap: %d", $max_heap)
);
}
$exit = $self->{perfdata}->threshold_check(value => $used_heap,
threshold => [ { label => 'crit_used_heap', 'exit_litteral' => 'critical' },
{ label => 'warn_used_heap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Used Heap: %d", $used_heap)
);
}
$exit = $self->{perfdata}->threshold_check(value => $committed_heap,
threshold => [ { label => 'crit_committed_heap', 'exit_litteral' => 'critical' },
{ label => 'warn_committed_heap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Committed Heap: %d", $committed_heap)
);
}
$exit = $self->{perfdata}->threshold_check(value => $init_nonheap,
threshold => [ { label => 'crit_init_nonheap', 'exit_litteral' => 'critical' },
{ label => 'warn_init_nonheap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Init NonHeap: %d", $init_nonheap)
);
}
$exit = $self->{perfdata}->threshold_check(value => $max_nonheap,
threshold => [ { label => 'crit_max_nonheap', 'exit_litteral' => 'critical' },
{ label => 'warn_max_nonheap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Max NonHeap: %d", $max_nonheap)
);
}
$exit = $self->{perfdata}->threshold_check(value => $used_nonheap,
threshold => [ { label => 'crit_used_nonheap', 'exit_litteral' => 'critical' },
{ label => 'warn_used_nonheap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Used NonHeap: %d", $used_nonheap)
);
}
$exit = $self->{perfdata}->threshold_check(value => $committed_nonheap,
threshold => [ { label => 'crit_committed_nonheap', 'exit_litteral' => 'critical' },
{ label => 'warn_committed_nonheap', 'exit_litteral' => 'warning' } ]);
if ($exit ne "ok"){
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("Committed NonHeap: %d", $committed_nonheap)
);
}
$self->{output}->perfdata_add(
label => "init_heap",
value => $init_heap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_init_heap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_init_heap'),
);
$self->{output}->perfdata_add(
label => "max_heap",
value => $max_heap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_max_heap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_max_heap'),
);
$self->{output}->perfdata_add(
label => "used_heap",
value => $used_heap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_used_heap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_used_heap'),
);
$self->{output}->perfdata_add(
label => "committed_heap",
value => $committed_heap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_committed_heap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_committed_heap'),
);
$self->{output}->perfdata_add(
label => "init_nonheap",
value => $init_nonheap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_init_nonheap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_init_nonheap'),
);
$self->{output}->perfdata_add(
label => "max_nonheap",
value => $max_nonheap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_max_nonheap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_max_nonheap'),
);
$self->{output}->perfdata_add(
label => "used_nonheap",
value => $used_nonheap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_used_nonheap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_used_nonheap'),
);
$self->{output}->perfdata_add(
label => "committed_nonheap",
value => $committed_nonheap,
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warn_committed_nonheap'),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'crit_committed_nonheap'),
);
$self->{output}->display();
$self->{output}->exit();
}
1;
__END__
=head1 MODE
Check EAS instance heap & nonheap memory usage.
=over 8
=item B<--urlpath>
Set path to get status page. (Default: '/easportal/tools/nagios/checkmemory.jsp')
=item B<--warning-*>
Warning Threshold (init,max,used,committed), '*' Can be: 'heap', 'nonheap'.
=item B<--critical-*>
Critical Threshold (init,max,used,committed), '*' Can be: 'heap', 'nonheap'.
=back
=cut