clean instance_mode and allow getting threshold from config

This commit is contained in:
Sims24 2017-03-06 13:30:18 +01:00
parent 061a101b5b
commit 638fc679d3

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