From 81f4702fbff2214c3e563835e44b75b177b10e0f Mon Sep 17 00:00:00 2001 From: cgagnaire Date: Wed, 8 Feb 2017 13:41:30 +0100 Subject: [PATCH] Add system thresholds by default --- .../snmp/mode/components/temperature.pm | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/network/raisecom/snmp/mode/components/temperature.pm b/network/raisecom/snmp/mode/components/temperature.pm index ae3ac349d..7d84746f6 100644 --- a/network/raisecom/snmp/mode/components/temperature.pm +++ b/network/raisecom/snmp/mode/components/temperature.pm @@ -25,12 +25,15 @@ use warnings; my $mapping = { raisecomTemperatureValue => { oid => '.1.3.6.1.4.1.8886.1.1.4.2.1' }, + raisecomTemperatureThresholdLow => { oid => '.1.3.6.1.4.1.8886.1.1.4.2.5' }, + raisecomTemperatureThresholdHigh => { oid => '.1.3.6.1.4.1.8886.1.1.4.2.6' }, }; +my $oid_raisecomTemperatureEntry = '.1.3.6.1.4.1.8886.1.1.4.2'; sub load { my ($self) = @_; - - push @{$self->{request}}, { oid => $mapping->{raisecomTemperatureValue}->{oid} }; + + push @{$self->{request}}, { oid => $oid_raisecomTemperatureEntry }; } sub check { @@ -40,29 +43,40 @@ sub check { $self->{components}->{temperature} = {name => 'temperatures', total => 0, skip => 0}; return if ($self->check_filter(section => 'temperature')); - foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$mapping->{raisecomTemperatureValue}->{oid}}})) { - $oid =~ /^$mapping->{raisecomTemperatureValue}->{oid}\.(.*)$/; + foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_raisecomTemperatureEntry}})) { + next if ($oid !~ /^$mapping->{raisecomTemperatureValue}->{oid}\.(.*)$/); my $instance = $1; - my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$mapping->{raisecomTemperatureValue}->{oid}}, instance => $instance); - + my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_raisecomTemperatureEntry}, instance => $instance); + next if ($self->check_filter(section => 'temperature', instance => $instance)); - $self->{components}->{temperature}->{total}++; - $self->{output}->output_add(long_msg => sprintf("temperature '%s' is %.2f C [instance: %s].", + + $self->{output}->output_add(long_msg => sprintf("temperature '%s' is %.2f C [instance: %s].", $instance, $result->{raisecomTemperatureValue}, $instance )); - - if (defined($result->{raisecomTemperatureValue}) && $result->{raisecomTemperatureValue} =~ /[0-9]/) { - my ($exit, $warn, $crit, $checked) = $self->get_severity_numeric(section => 'temperature', instance => $instance, value => $result->{sysChassisTempTemperature}); - if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { - $self->{output}->output_add(severity => $exit, - short_msg => sprintf("Temperature '%s' is %.2f C", $instance, $result->{raisecomTemperatureValue})); - } - $self->{output}->perfdata_add(label => "temp_" . $instance, unit => 'C', - value => sprintf("%.2f", $result->{raisecomTemperatureValue}), - warning => $warn, - critical => $crit); + + my ($exit, $warn, $crit, $checked) = $self->get_severity_numeric(section => 'temperature', instance => $instance, value => $result->{raisecomTemperatureValue}); + if ($checked == 0) { + my $warn_th = ':' . $result->{raisecomTemperatureThresholdLow}; + my $crit_th = ':' . $result->{raisecomTemperatureThresholdHigh}; + $self->{perfdata}->threshold_validate(label => 'warning-temperature-instance-' . $instance, value => $warn_th); + $self->{perfdata}->threshold_validate(label => 'critical-temperature-instance-' . $instance, value => $crit_th); + + $exit = $self->{perfdata}->threshold_check(value => $result->{raisecomTemperatureValue}, threshold => [ { label => 'critical-temperature-instance-' . $instance, exit_litteral => 'critical' }, + { label => 'warning-temperature-instance-' . $instance, exit_litteral => 'warning' } ]); + $warn = $self->{perfdata}->get_perfdata_for_output(label => 'warning-temperature-instance-' . $instance); + $crit = $self->{perfdata}->get_perfdata_for_output(label => 'critical-temperature-instance-' . $instance); } + + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("Temperature '%s' is %.2f C", $instance, $result->{raisecomTemperatureValue})); + } + $self->{output}->perfdata_add(label => 'temp_' . $instance, unit => 'C', + value => $result->{raisecomTemperatureValue}, + warning => $warn, + critical => $crit, + ); } }