clean instance_mode and allow getting threshold from config

This commit is contained in:
Sims24 2017-03-06 13:30:18 +01:00
parent c7ec02e9db
commit 107371d4ab
1 changed files with 32 additions and 20 deletions

View File

@ -26,7 +26,6 @@ use strict;
use warnings; use warnings;
use List::Util qw (min max sum); use List::Util qw (min max sum);
use JSON; use JSON;
my $instance_mode;
my $config_data; my $config_data;
sub custom_metric_output { sub custom_metric_output {
@ -69,6 +68,7 @@ sub custom_metric_output {
$msg = sprintf("Metric '%s' value is '%s'", $self->{result_values}->{instance}, $self->{result_values}->{value}); $msg = sprintf("Metric '%s' value is '%s'", $self->{result_values}->{instance}, $self->{result_values}->{value});
} }
} }
if (defined($message)) { if (defined($message)) {
$self->{output}->output_add(long_msg => 'printf expression problem: ' . $message); $self->{output}->output_add(long_msg => 'printf expression problem: ' . $message);
$self->{output}->option_exit(); $self->{output}->option_exit();
@ -111,8 +111,15 @@ sub custom_metric_perfdata {
sub custom_metric_threshold { sub custom_metric_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my ($exit, $threshold_value); my ($exit, $threshold_value);
$threshold_value = $self->{result_values}->{value}; $threshold_value = $self->{result_values}->{value};
$exit = $self->{perfdata}->threshold_check(value => $threshold_value, threshold => [ { label => 'critical-'.$self->{label} , exit_litteral => 'critical' }, { label => 'warning-'.$self->{label}, exit_litteral => 'warning' } ]); my $exit_conf = $self->{perfdata}->threshold_check(value => $threshold_value, threshold => [ { label => 'critical-'.$self->{label}.'-'.$self->{result_values}->{instance} , exit_litteral => 'critical' },
{ label => 'warning-'.$self->{label}.'-'.$self->{result_values}->{instance}, exit_litteral => 'warning' } ]);
my $exit_opts = $self->{perfdata}->threshold_check(value => $threshold_value, threshold => [ { label => 'critical-'.$self->{label} , exit_litteral => 'critical' },
{ label => 'warning-'.$self->{label}, exit_litteral => 'warning' } ]);
$exit = $self->{output}->get_most_critical(status => [ $exit_conf, $exit_opts ]);
return $exit; return $exit;
} }
@ -163,8 +170,6 @@ sub check_options {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->SUPER::check_options(%options); $self->SUPER::check_options(%options);
$instance_mode = $self;
if (!defined($self->{option_results}->{config_file}) && !defined($self->{option_results}->{json_data})) { if (!defined($self->{option_results}->{config_file}) && !defined($self->{option_results}->{json_data})) {
$self->{output}->add_option_msg(short_msg => "Please define --config-file or --json-data option"); $self->{output}->add_option_msg(short_msg => "Please define --config-file or --json-data option");
$self->{output}->option_exit(); $self->{output}->option_exit();
@ -244,13 +249,13 @@ sub manage_selection {
$self->{sql}->query(query => $query); $self->{sql}->query(query => $query);
while ((my $row = $self->{sql}->fetchrow_hashref())) { while ((my $row = $self->{sql}->fetchrow_hashref())) {
my $metric_key = $id; my $metric_key = $id;
$self->{metrics}{$metric_key}{name} = $row->{metric_name}; $self->{metrics}->{$metric_key}{name} = $row->{metric_name};
$self->{metrics}{$metric_key}{display_name} = $id; $self->{metrics}->{$metric_key}{display_name} = $id;
$self->{metrics}{$metric_key}{current} = $row->{current_value}; $self->{metrics}->{$metric_key}{current} = $row->{current_value};
$self->{metrics}{$metric_key}{unit} = $row->{unit_name}; $self->{metrics}->{$metric_key}{unit} = $row->{unit_name};
$self->{metrics}{$metric_key}{min} = defined($row->{min}) ? $row->{min} : ''; $self->{metrics}->{$metric_key}{min} = defined($row->{min}) ? $row->{min} : '';
$self->{metrics}{$metric_key}{max} = defined($row->{max}) ? $row->{max} : ''; $self->{metrics}->{$metric_key}{max} = defined($row->{max}) ? $row->{max} : '';
$self->{metrics}{$metric_key}{display} = (defined($config_data->{selection}{$id}->{display}) && $config_data->{selection}{$id}->{display} eq 'true') ? 1 : 0; $self->{metrics}->{$metric_key}{display} = (defined($config_data->{selection}{$id}->{display}) && $config_data->{selection}{$id}->{display} eq 'true') ? 1 : 0;
} }
} }
} elsif (exists($config_data->{filters})) { } elsif (exists($config_data->{filters})) {
@ -265,13 +270,13 @@ sub manage_selection {
$self->{sql}->query(query => $query); $self->{sql}->query(query => $query);
while ((my $row = $self->{sql}->fetchrow_hashref())) { while ((my $row = $self->{sql}->fetchrow_hashref())) {
my $metric_key = $row->{host_name}.$config_data->{formatting}->{cannonical_separator}.$row->{service_description}.$config_data->{formatting}->{cannonical_separator}.$row->{metric_name}; my $metric_key = $row->{host_name}.$config_data->{formatting}->{cannonical_separator}.$row->{service_description}.$config_data->{formatting}->{cannonical_separator}.$row->{metric_name};
$self->{metrics}{$metric_key}{display_name} = $metric_key; $self->{metrics}->{$metric_key}{display_name} = $metric_key;
$self->{metrics}{$metric_key}{name} = $row->{metric_name}; $self->{metrics}->{$metric_key}{name} = $row->{metric_name};
$self->{metrics}{$metric_key}{current} = $row->{current_value}; $self->{metrics}->{$metric_key}{current} = $row->{current_value};
$self->{metrics}{$metric_key}{unit} = $row->{unit_name}; $self->{metrics}->{$metric_key}{unit} = $row->{unit_name};
$self->{metrics}{$metric_key}{min} = defined($row->{min}) ? $row->{min} : ''; $self->{metrics}->{$metric_key}{min} = defined($row->{min}) ? $row->{min} : '';
$self->{metrics}{$metric_key}{max} = defined($row->{max}) ? $row->{max} : ''; $self->{metrics}->{$metric_key}{max} = defined($row->{max}) ? $row->{max} : '';
$self->{metrics}{$metric_key}{display} = (defined($config_data->{filters}->{display})) ? 1 : 0; $self->{metrics}->{$metric_key}{display} = (defined($config_data->{filters}->{display})) ? 1 : 0;
} }
} }
@ -299,6 +304,13 @@ sub manage_selection {
$self->{vmetrics}->{$vcurve}{min} = (defined($config_data->{virtualcurve}{$vcurve}->{min})) ? $config_data->{virtualcurve}{$vcurve}->{min} : ''; $self->{vmetrics}->{$vcurve}{min} = (defined($config_data->{virtualcurve}{$vcurve}->{min})) ? $config_data->{virtualcurve}{$vcurve}->{min} : '';
$self->{vmetrics}->{$vcurve}{max} = (defined($config_data->{virtualcurve}{$vcurve}->{max})) ? $config_data->{virtualcurve}{$vcurve}->{max} : ''; $self->{vmetrics}->{$vcurve}{max} = (defined($config_data->{virtualcurve}{$vcurve}->{max})) ? $config_data->{virtualcurve}{$vcurve}->{max} : '';
if (!defined($self->{option_results}->{warning_global}) && (defined($config_data->{virtualcurve}->{$vcurve}->{warning}))) {
$self->{perfdata}->threshold_validate(label => 'warning-global-'.$vcurve, value => $config_data->{virtualcurve}->{$vcurve}->{warning});
}
if (!defined($self->{option_results}->{critical_global}) && (defined($config_data->{virtualcurve}->{$vcurve}->{critical}))) {
$self->{perfdata}->threshold_validate(label => 'critical-global-'.$vcurve, value => $config_data->{virtualcurve}->{$vcurve}->{critical});
}
$self->{global}->{$vcurve} = {display => $vcurve, $self->{global}->{$vcurve} = {display => $vcurve,
type => 'global', type => 'global',
unit => $self->{vmetrics}->{$vcurve}->{unit}, unit => $self->{vmetrics}->{$vcurve}->{unit},
@ -351,12 +363,12 @@ global/virtual curves
=item B<--warning-*> =item B<--warning-*>
Warning threshold (can be 'unique' or 'global') Warning threshold (can be 'unique' or 'global')
BE CAREFUL, will override config file definition (if also defined in config file, most critical is prefered)
=item B<--critical-*> =item B<--critical-*>
Critical threshold (can be 'unique' or 'global') Critical threshold (can be 'unique' or 'global')
BE CAREFUL, will override config file definition (if also defined in config file, most critical is prefered)
=back =back