Nagios-Plugin-OverHTTP
view release on metacpan or search on metacpan
lib/Nagios/Plugin/OverHTTP/Middleware/PerformanceData.pm view on Meta::CPAN
###########################################################################
# MOOSE TYPES
use Nagios::Plugin::OverHTTP::Library qw(Status);
###########################################################################
# MODULE IMPORTS
use Nagios::Plugin::OverHTTP::Library 0.14;
use Nagios::Plugin::OverHTTP::PerformanceData;
use Try::Tiny;
###########################################################################
# ALL IMPORTS BEFORE THIS WILL BE ERASED
use namespace::clean 0.04 -except => [qw(meta)];
###########################################################################
# ATTRIBUTES
has 'critical_override' => (
is => 'rw',
isa => 'HashRef[Str]',
documentation => q{Specifies performance levels that result in a }
.q{critical status},
default => sub { {} },
);
has 'honor_remote_thresholds' => (
is => 'rw',
isa => 'Bool',
documentation => q{Specifies if thresholds from the remote plugin }
.q{should be used to change the status},
default => 0,
);
has 'rewrite_in_overrides' => (
is => 'rw',
isa => 'Bool',
documentation => q{Specifies if the given override thresholds should }
.q{be rewritten into the respose},
default => 1,
);
has 'warning_override' => (
is => 'rw',
isa => 'HashRef[Str]',
documentation => q{Specifies performance levels that result in a }
.q{warning status},
default => sub { {} },
);
###########################################################################
# METHODS
sub rewrite {
my ($self, $response) = @_;
if (!$response->has_performance_data) {
# This response has no performance data
return $response;
}
# Parse the performance data, keeping the line order
my @performance_data = map {
# Create array of data for each line to keep line order
[ _parse_data($_) ]
} split m{\n}msx, $response->performance_data;
# Set the new status to the current status
my $new_status = $response->status;
# Set the new performance data to the current performance data
my $new_performance_data = $response->performance_data;
# Get a list of data objects
my @data_objects = grep { ref ne q{} } map { @{$_} } @performance_data;
if ($new_status != $Nagios::Plugin::OverHTTP::Library::STATUS_CRITICAL) {
# Get the number of critical performance data
my $critical = _matching_performance_data(
\@data_objects => q{critical},
check_original => $self->honor_remote_thresholds,
override => $self->critical_override,
);
if ($critical > 0) {
# Set the new status to critical
$new_status = $Nagios::Plugin::OverHTTP::Library::STATUS_CRITICAL;
}
}
if ($new_status != $Nagios::Plugin::OverHTTP::Library::STATUS_CRITICAL
&& $new_status != $Nagios::Plugin::OverHTTP::Library::STATUS_WARNING) {
# Get the number of warning performance data
my $warning = _matching_performance_data(
\@data_objects => q{warning},
check_original => $self->honor_remote_thresholds,
override => $self->warning_override,
);
if ($warning > 0) {
# Set the new status to warning
$new_status = $Nagios::Plugin::OverHTTP::Library::STATUS_WARNING;
}
}
if ($self->rewrite_in_overrides) {
# Update the performance data with the new overrides
_update_performance_data(\@data_objects,
critical => $self->critical_override,
warning => $self->warning_override,
);
foreach my $line (@performance_data) {
# Update the performance data lines
$line = [ map { ref($_) && $_ == $data_objects[0] ? shift(@data_objects) : $_ } @{$line} ];
}
# Create the new performance data line
$new_performance_data = join qq{\n}, map { join q{ },map { ref($_) ? $_->to_string : $_ } @{$_} } @performance_data;
}
# Return the modified response
return $response->clone(
performance_data => $new_performance_data,
status => $new_status,
);
( run in 0.623 second using v1.01-cache-2.11-cpan-5511b514fd6 )