From 8ab322d3d9e4902c1b63f0b8c7442eae6e7f903e Mon Sep 17 00:00:00 2001 From: Florian Asche Date: Thu, 17 Apr 2014 20:36:59 +0200 Subject: [PATCH] Refs #5390: Added new Apps LM-Sensors SNMP --- apps/lmsensors/mode/fan.pm | 156 +++++-------------- apps/lmsensors/mode/misc.pm | 158 +++++-------------- apps/lmsensors/mode/temperature.pm | 161 +++++--------------- apps/lmsensors/mode/{volt.pm => voltage.pm} | 161 +++++--------------- apps/lmsensors/plugin.pm | 4 +- 5 files changed, 163 insertions(+), 477 deletions(-) rename apps/lmsensors/mode/{volt.pm => voltage.pm} (51%) diff --git a/apps/lmsensors/mode/fan.pm b/apps/lmsensors/mode/fan.pm index cfb75ea63..1aca9bbef 100644 --- a/apps/lmsensors/mode/fan.pm +++ b/apps/lmsensors/mode/fan.pm @@ -54,18 +54,15 @@ sub new { { "warning:s" => { name => 'warning' }, "critical:s" => { name => 'critical' }, - "reload-cache-time:s" => { name => 'reload_cache_time' }, "name" => { name => 'use_name' }, - "sensordesc:s" => { name => 'sensordesc' }, + "sensor:s" => { name => 'sensor' }, "regexp" => { name => 'use_regexp' }, "regexp-isensitive" => { name => 'use_regexpi' }, "display-transform-src:s" => { name => 'display_transform_src' }, "display-transform-dst:s" => { name => 'display_transform_dst' }, - "show-cache" => { name => 'show_cache' }, }); - $self->{sensordesc_id_selected} = []; - $self->{statefile_cache} = centreon::plugins::statefile->new(%options); + $self->{Sensor_id_selected} = []; return $self; } @@ -82,8 +79,7 @@ sub check_options { $self->{output}->add_option_msg(short_msg => "Wrong critical threshold '" . $self->{option_results}->{critical} . "'."); $self->{output}->option_exit(); } - - $self->{statefile_cache}->check_options(%options); + } sub run { @@ -95,33 +91,31 @@ sub run { $self->manage_selection(); - $self->{snmp}->load(oids => [$oid_SensorValue], instances => $self->{sensordesc_id_selected}); - my $result = $self->{snmp}->get_leef(nothing_quit => 1); + $self->{snmp}->load(oids => [$oid_SensorDesc, $oid_SensorValue], instances => $self->{Sensor_id_selected}); + my $SensorValueResult = $self->{snmp}->get_leef(nothing_quit => 1); - if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})) { + if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})) { $self->{output}->output_add(severity => 'OK', short_msg => 'All Fans are ok.'); } - foreach (sort @{$self->{sensordesc_id_selected}}) { - my $name_sensordesc = $self->get_display_value(id => $_); - - my $varSensorValue = $result->{$oid_SensorValue . '.' . $_}; - my $SensorValue = $varSensorValue; + foreach my $SensorId (sort @{$self->{Sensor_id_selected}}) { + my $SensorDesc = $SensorValueResult->{$oid_SensorDesc . '.' . $SensorId}; + my $SensorValue = $SensorValueResult->{$oid_SensorValue . '.' . $SensorId}; my $exit = $self->{perfdata}->threshold_check(value => $SensorValue, threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); $self->{output}->output_add(long_msg => sprintf("Sensor '%s' Fan: %s", - $name_sensordesc, $SensorValue)); - if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensordesc}) && !defined($self->{option_results}->{use_regexp}))) { + $SensorDesc, $SensorValue)); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_regexp}))) { $self->{output}->output_add(severity => $exit, short_msg => sprintf("Sensor '%s' Fan: %s", - $name_sensordesc, $SensorValue)); + $SensorDesc, $SensorValue)); } my $label = 'sensor_fan'; my $extra_label = ''; - $extra_label = '_' . $name_sensordesc if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})); + $extra_label = '_' . $SensorDesc if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})); $self->{output}->perfdata_add(label => $label . $extra_label, value => $SensorValue, warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning'), @@ -132,92 +126,36 @@ sub run { $self->{output}->exit(); } -sub reload_cache { - my ($self) = @_; - my $datas = {}; - - my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc); - $datas->{all_ids} = []; - my $last_num = 0; - foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { - next if ($key !~ /\.([0-9]+)$/); - push @{$datas->{all_ids}}, $1; - $datas->{'SensorsDesc_' . $1} = $self->{output}->to_utf8($result->{$key}); - } - - if (scalar(@{$datas->{all_ids}}) <= 0) { - $self->{output}->add_option_msg(short_msg => "Can't construct cache..."); - $self->{output}->option_exit(); - } - - $self->{statefile_cache}->write(data => $datas); -} - sub manage_selection { my ($self, %options) = @_; + my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc, nothing_quit => 1); - # init cache file - my $has_cache_file = $self->{statefile_cache}->read(statefile => 'cache_apps_lmsensors_' . $self->{hostname} . '_' . $self->{snmp_port} . '_' . $self->{mode}); - if (defined($self->{option_results}->{show_cache})) { - $self->{output}->add_option_msg(long_msg => $self->{statefile_cache}->get_string_content()); - $self->{output}->option_exit(); - } + foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { + next if ($key !~ /\.([0-9]+)$/); + my $SensorId = $1; + my $SensorDesc = $result->{$key}; - my $timestamp_cache = $self->{statefile_cache}->get(name => 'last_timestamp'); - if ($has_cache_file == 0 || - (defined($timestamp_cache) && (time() - $timestamp_cache) > (($self->{option_results}->{reload_cache_time}) * 60))) { - $self->reload_cache(); - $self->{statefile_cache}->read(); - } + next if (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorId !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/); + next if (defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc ne $self->{option_results}->{sensor}); - my $all_ids = $self->{statefile_cache}->get(name => 'all_ids'); - if (!defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{sensordesc})) { - # get by ID - push @{$self->{sensordesc_id_selected}}, $self->{option_results}->{sensordesc}; - my $name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $self->{option_results}->{sensordesc}); - if (!defined($name)) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for id '" . $self->{option_results}->{sensordesc} . "'."); - $self->{output}->option_exit(); - } - } else { - foreach my $i (@{$all_ids}) { - my $filter_name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $i); - next if (!defined($filter_name)); - if (!defined($self->{option_results}->{sensordesc})) { - push @{$self->{sensordesc_id_selected}}, $i; - next; - } - if (defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/i) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (!defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name eq $self->{option_results}->{sensordesc}) { - push @{$self->{sensordesc_id_selected}}, $i; - } - } - - if (scalar(@{$self->{sensordesc_id_selected}}) <= 0) { - if (defined($self->{option_results}->{sensordesc})) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for name '" . $self->{option_results}->{sensordesc} . "' (maybe you should reload cache file)."); - } else { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found (maybe you should reload cache file)."); - } - $self->{output}->option_exit(); - } - } + + push @{$self->{Sensor_id_selected}}, $SensorId; } -sub get_display_value { - my ($self, %options) = @_; - my $value = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $options{id}); - - if (defined($self->{option_results}->{display_transform_src})) { - $self->{option_results}->{display_transform_dst} = '' if (!defined($self->{option_results}->{display_transform_dst})); - eval "\$value =~ s{$self->{option_results}->{display_transform_src}}{$self->{option_results}->{display_transform_dst}}"; + if (scalar(@{$self->{Sensor_id_selected}}) <= 0) { + if (defined($self->{option_results}->{sensor})) { + $self->{output}->add_option_msg(short_msg => "No Sensors found for '" . $self->{option_results}->{sensor} . "'."); + } else { + $self->{output}->add_option_msg(short_msg => "No Sensors found."); + }; + $self->{output}->option_exit(); } - return $value; } 1; @@ -232,19 +170,19 @@ Check LM-Sensors: Fan Sensors =item B<--warning> -Threshold warning (Fan Speed U/min) +Threshold warning (Fan Speed, U/min) =item B<--critical> -Threshold critical (Fan Speed U/min) +Threshold critical (Fan Speed, U/min) -=item B<--sensordesc> +=item B<--sensor> Set the Sensor Desc (number expected) ex: 1, 2,... (empty means 'check all sensors'). =item B<--name> -Allows to use Sensor Desc name with option --sensordesc instead of Sensor Desc oid index. +Allows to use Sensor Desc name with option --sensor instead of Sensor Desc oid index. =item B<--regexp> @@ -254,22 +192,6 @@ Allows to use regexp to filter sensordesc (with option --name). Allows to use regexp non case-sensitive (with --regexp). -=item B<--reload-cache-time> - -Time in seconds before reloading cache file (default: 180). - -=item B<--display-transform-src> - -Regexp src to transform display value. (security risk!!!) - -=item B<--display-transform-dst> - -Regexp dst to transform display value. (security risk!!!) - -=item B<--show-cache> - -Display cache storage datas. - =back =cut diff --git a/apps/lmsensors/mode/misc.pm b/apps/lmsensors/mode/misc.pm index ae03e1c51..c295c6e50 100644 --- a/apps/lmsensors/mode/misc.pm +++ b/apps/lmsensors/mode/misc.pm @@ -41,8 +41,8 @@ use strict; use warnings; use centreon::plugins::statefile; -my $oid_SensorDesc = '.1.3.6.1.4.1.2021.13.16.5.1.2'; # misc entry description -my $oid_SensorValue = '.1.3.6.1.4.1.2021.13.16.5.1.3'; # misc entry value +my $oid_SensorDesc = '.1.3.6.1.4.1.2021.13.16.5.1.2'; # misc entry description +my $oid_SensorValue = '.1.3.6.1.4.1.2021.13.16.5.1.3'; # misc entry value sub new { my ($class, %options) = @_; @@ -54,18 +54,15 @@ sub new { { "warning:s" => { name => 'warning' }, "critical:s" => { name => 'critical' }, - "reload-cache-time:s" => { name => 'reload_cache_time' }, "name" => { name => 'use_name' }, - "sensordesc:s" => { name => 'sensordesc' }, + "sensor:s" => { name => 'sensor' }, "regexp" => { name => 'use_regexp' }, "regexp-isensitive" => { name => 'use_regexpi' }, "display-transform-src:s" => { name => 'display_transform_src' }, "display-transform-dst:s" => { name => 'display_transform_dst' }, - "show-cache" => { name => 'show_cache' }, }); - $self->{sensordesc_id_selected} = []; - $self->{statefile_cache} = centreon::plugins::statefile->new(%options); + $self->{Sensor_id_selected} = []; return $self; } @@ -82,8 +79,7 @@ sub check_options { $self->{output}->add_option_msg(short_msg => "Wrong critical threshold '" . $self->{option_results}->{critical} . "'."); $self->{output}->option_exit(); } - - $self->{statefile_cache}->check_options(%options); + } sub run { @@ -95,33 +91,31 @@ sub run { $self->manage_selection(); - $self->{snmp}->load(oids => [$oid_SensorValue], instances => $self->{sensordesc_id_selected}); - my $result = $self->{snmp}->get_leef(nothing_quit => 1); + $self->{snmp}->load(oids => [$oid_SensorDesc, $oid_SensorValue], instances => $self->{Sensor_id_selected}); + my $SensorValueResult = $self->{snmp}->get_leef(nothing_quit => 1); - if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})) { + if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})) { $self->{output}->output_add(severity => 'OK', short_msg => 'All Sensors are ok.'); } - foreach (sort @{$self->{sensordesc_id_selected}}) { - my $name_sensordesc = $self->get_display_value(id => $_); - - my $varSensorValue = $result->{$oid_SensorValue . '.' . $_}; - my $SensorValue = $varSensorValue; + foreach my $SensorId (sort @{$self->{Sensor_id_selected}}) { + my $SensorDesc = $SensorValueResult->{$oid_SensorDesc . '.' . $SensorId}; + my $SensorValue = $SensorValueResult->{$oid_SensorValue . '.' . $SensorId}; my $exit = $self->{perfdata}->threshold_check(value => $SensorValue, threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); $self->{output}->output_add(long_msg => sprintf("Sensor '%s': %s", - $name_sensordesc, $SensorValue)); - if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensordesc}) && !defined($self->{option_results}->{use_regexp}))) { + $SensorDesc, $SensorValue)); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_regexp}))) { $self->{output}->output_add(severity => $exit, short_msg => sprintf("Sensor '%s': %s", - $name_sensordesc, $SensorValue)); + $SensorDesc, $SensorValue)); } - my $label = 'sensor'; + my $label = 'sensor_misc'; my $extra_label = ''; - $extra_label = '_' . $name_sensordesc if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})); + $extra_label = '_' . $SensorDesc if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})); $self->{output}->perfdata_add(label => $label . $extra_label, value => $SensorValue, warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning'), @@ -132,92 +126,36 @@ sub run { $self->{output}->exit(); } -sub reload_cache { - my ($self) = @_; - my $datas = {}; - - my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc); - $datas->{all_ids} = []; - my $last_num = 0; - foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { - next if ($key !~ /\.([0-9]+)$/); - push @{$datas->{all_ids}}, $1; - $datas->{'SensorsDesc_' . $1} = $self->{output}->to_utf8($result->{$key}); - } - - if (scalar(@{$datas->{all_ids}}) <= 0) { - $self->{output}->add_option_msg(short_msg => "Can't construct cache..."); - $self->{output}->option_exit(); - } - - $self->{statefile_cache}->write(data => $datas); -} - sub manage_selection { my ($self, %options) = @_; + my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc, nothing_quit => 1); - # init cache file - my $has_cache_file = $self->{statefile_cache}->read(statefile => 'cache_apps_lmsensors_' . $self->{hostname} . '_' . $self->{snmp_port} . '_' . $self->{mode}); - if (defined($self->{option_results}->{show_cache})) { - $self->{output}->add_option_msg(long_msg => $self->{statefile_cache}->get_string_content()); - $self->{output}->option_exit(); - } + foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { + next if ($key !~ /\.([0-9]+)$/); + my $SensorId = $1; + my $SensorDesc = $result->{$key}; - my $timestamp_cache = $self->{statefile_cache}->get(name => 'last_timestamp'); - if ($has_cache_file == 0 || - (defined($timestamp_cache) && (time() - $timestamp_cache) > (($self->{option_results}->{reload_cache_time}) * 60))) { - $self->reload_cache(); - $self->{statefile_cache}->read(); - } + next if (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorId !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/); + next if (defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc ne $self->{option_results}->{sensor}); - my $all_ids = $self->{statefile_cache}->get(name => 'all_ids'); - if (!defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{sensordesc})) { - # get by ID - push @{$self->{sensordesc_id_selected}}, $self->{option_results}->{sensordesc}; - my $name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $self->{option_results}->{sensordesc}); - if (!defined($name)) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for id '" . $self->{option_results}->{sensordesc} . "'."); - $self->{output}->option_exit(); - } - } else { - foreach my $i (@{$all_ids}) { - my $filter_name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $i); - next if (!defined($filter_name)); - if (!defined($self->{option_results}->{sensordesc})) { - push @{$self->{sensordesc_id_selected}}, $i; - next; - } - if (defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/i) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (!defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name eq $self->{option_results}->{sensordesc}) { - push @{$self->{sensordesc_id_selected}}, $i; - } - } - - if (scalar(@{$self->{sensordesc_id_selected}}) <= 0) { - if (defined($self->{option_results}->{sensordesc})) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for name '" . $self->{option_results}->{sensordesc} . "' (maybe you should reload cache file)."); - } else { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found (maybe you should reload cache file)."); - } - $self->{output}->option_exit(); - } - } + + push @{$self->{Sensor_id_selected}}, $SensorId; } -sub get_display_value { - my ($self, %options) = @_; - my $value = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $options{id}); - - if (defined($self->{option_results}->{display_transform_src})) { - $self->{option_results}->{display_transform_dst} = '' if (!defined($self->{option_results}->{display_transform_dst})); - eval "\$value =~ s{$self->{option_results}->{display_transform_src}}{$self->{option_results}->{display_transform_dst}}"; + if (scalar(@{$self->{Sensor_id_selected}}) <= 0) { + if (defined($self->{option_results}->{sensor})) { + $self->{output}->add_option_msg(short_msg => "No Sensors found for '" . $self->{option_results}->{sensor} . "'."); + } else { + $self->{output}->add_option_msg(short_msg => "No Sensors found."); + }; + $self->{output}->option_exit(); } - return $value; } 1; @@ -238,13 +176,13 @@ Threshold warning Threshold critical -=item B<--sensordesc> +=item B<--sensor> Set the Sensor Desc (number expected) ex: 1, 2,... (empty means 'check all sensors'). =item B<--name> -Allows to use Sensor Desc name with option --sensordesc instead of Sensor Desc oid index. +Allows to use Sensor Desc name with option --sensor instead of Sensor Desc oid index. =item B<--regexp> @@ -254,22 +192,6 @@ Allows to use regexp to filter sensordesc (with option --name). Allows to use regexp non case-sensitive (with --regexp). -=item B<--reload-cache-time> - -Time in seconds before reloading cache file (default: 180). - -=item B<--display-transform-src> - -Regexp src to transform display value. (security risk!!!) - -=item B<--display-transform-dst> - -Regexp dst to transform display value. (security risk!!!) - -=item B<--show-cache> - -Display cache storage datas. - =back =cut diff --git a/apps/lmsensors/mode/temperature.pm b/apps/lmsensors/mode/temperature.pm index 68eb399b3..3999639b5 100644 --- a/apps/lmsensors/mode/temperature.pm +++ b/apps/lmsensors/mode/temperature.pm @@ -41,8 +41,8 @@ use strict; use warnings; use centreon::plugins::statefile; -my $oid_SensorDesc = '.1.3.6.1.4.1.2021.13.16.2.1.2'; -my $oid_SensorValue = '.1.3.6.1.4.1.2021.13.16.2.1.3'; +my $oid_SensorDesc = '.1.3.6.1.4.1.2021.13.16.2.1.2'; # temperature entry description +my $oid_SensorValue = '.1.3.6.1.4.1.2021.13.16.2.1.3'; # temperature entry value (RPM) sub new { my ($class, %options) = @_; @@ -54,18 +54,15 @@ sub new { { "warning:s" => { name => 'warning' }, "critical:s" => { name => 'critical' }, - "reload-cache-time:s" => { name => 'reload_cache_time' }, "name" => { name => 'use_name' }, - "sensordesc:s" => { name => 'sensordesc' }, + "sensor:s" => { name => 'sensor' }, "regexp" => { name => 'use_regexp' }, "regexp-isensitive" => { name => 'use_regexpi' }, "display-transform-src:s" => { name => 'display_transform_src' }, "display-transform-dst:s" => { name => 'display_transform_dst' }, - "show-cache" => { name => 'show_cache' }, }); - $self->{sensordesc_id_selected} = []; - $self->{statefile_cache} = centreon::plugins::statefile->new(%options); + $self->{Sensor_id_selected} = []; return $self; } @@ -82,8 +79,7 @@ sub check_options { $self->{output}->add_option_msg(short_msg => "Wrong critical threshold '" . $self->{option_results}->{critical} . "'."); $self->{output}->option_exit(); } - - $self->{statefile_cache}->check_options(%options); + } sub run { @@ -95,34 +91,31 @@ sub run { $self->manage_selection(); - $self->{snmp}->load(oids => [$oid_SensorValue], instances => $self->{sensordesc_id_selected}); - my $result = $self->{snmp}->get_leef(nothing_quit => 1); + $self->{snmp}->load(oids => [$oid_SensorDesc, $oid_SensorValue], instances => $self->{Sensor_id_selected}); + my $SensorValueResult = $self->{snmp}->get_leef(nothing_quit => 1); - if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})) { + if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})) { $self->{output}->output_add(severity => 'OK', short_msg => 'All Temperatures are ok.'); } - foreach (sort @{$self->{sensordesc_id_selected}}) { - my $name_sensordesc = $self->get_display_value(id => $_); - - my $varSensorValue = $result->{$oid_SensorValue . '.' . $_}; - # lmSensors temperature output is multplied with 1000 - my $SensorValue = $varSensorValue / 1000; + foreach my $SensorId (sort @{$self->{Sensor_id_selected}}) { + my $SensorDesc = $SensorValueResult->{$oid_SensorDesc . '.' . $SensorId}; + my $SensorValue = $SensorValueResult->{$oid_SensorValue . '.' . $SensorId} / 1000; my $exit = $self->{perfdata}->threshold_check(value => $SensorValue, threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); $self->{output}->output_add(long_msg => sprintf("Sensor '%s' Temperature: %s", - $name_sensordesc, $SensorValue)); - if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensordesc}) && !defined($self->{option_results}->{use_regexp}))) { + $SensorDesc, $SensorValue)); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_regexp}))) { $self->{output}->output_add(severity => $exit, short_msg => sprintf("Sensor '%s' Temperature: %s", - $name_sensordesc, $SensorValue)); + $SensorDesc, $SensorValue)); } my $label = 'sensor_temperature'; my $extra_label = ''; - $extra_label = '_' . $name_sensordesc if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})); + $extra_label = '_' . $SensorDesc if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})); $self->{output}->perfdata_add(label => $label . $extra_label, value => $SensorValue, warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning'), @@ -133,92 +126,36 @@ sub run { $self->{output}->exit(); } -sub reload_cache { - my ($self) = @_; - my $datas = {}; - - my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc); - $datas->{all_ids} = []; - my $last_num = 0; - foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { - next if ($key !~ /\.([0-9]+)$/); - push @{$datas->{all_ids}}, $1; - $datas->{'SensorsDesc_' . $1} = $self->{output}->to_utf8($result->{$key}); - } - - if (scalar(@{$datas->{all_ids}}) <= 0) { - $self->{output}->add_option_msg(short_msg => "Can't construct cache..."); - $self->{output}->option_exit(); - } - - $self->{statefile_cache}->write(data => $datas); -} - sub manage_selection { my ($self, %options) = @_; + my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc, nothing_quit => 1); - # init cache file - my $has_cache_file = $self->{statefile_cache}->read(statefile => 'cache_apps_lmsensors_' . $self->{hostname} . '_' . $self->{snmp_port} . '_' . $self->{mode}); - if (defined($self->{option_results}->{show_cache})) { - $self->{output}->add_option_msg(long_msg => $self->{statefile_cache}->get_string_content()); - $self->{output}->option_exit(); - } + foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { + next if ($key !~ /\.([0-9]+)$/); + my $SensorId = $1; + my $SensorDesc = $result->{$key}; - my $timestamp_cache = $self->{statefile_cache}->get(name => 'last_timestamp'); - if ($has_cache_file == 0 || - (defined($timestamp_cache) && (time() - $timestamp_cache) > (($self->{option_results}->{reload_cache_time}) * 60))) { - $self->reload_cache(); - $self->{statefile_cache}->read(); - } + next if (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorId !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/); + next if (defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc ne $self->{option_results}->{sensor}); - my $all_ids = $self->{statefile_cache}->get(name => 'all_ids'); - if (!defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{sensordesc})) { - # get by ID - push @{$self->{sensordesc_id_selected}}, $self->{option_results}->{sensordesc}; - my $name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $self->{option_results}->{sensordesc}); - if (!defined($name)) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for id '" . $self->{option_results}->{sensordesc} . "'."); - $self->{output}->option_exit(); - } - } else { - foreach my $i (@{$all_ids}) { - my $filter_name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $i); - next if (!defined($filter_name)); - if (!defined($self->{option_results}->{sensordesc})) { - push @{$self->{sensordesc_id_selected}}, $i; - next; - } - if (defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/i) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (!defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name eq $self->{option_results}->{sensordesc}) { - push @{$self->{sensordesc_id_selected}}, $i; - } - } - - if (scalar(@{$self->{sensordesc_id_selected}}) <= 0) { - if (defined($self->{option_results}->{sensordesc})) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for name '" . $self->{option_results}->{sensordesc} . "' (maybe you should reload cache file)."); - } else { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found (maybe you should reload cache file)."); - } - $self->{output}->option_exit(); - } - } + + push @{$self->{Sensor_id_selected}}, $SensorId; } -sub get_display_value { - my ($self, %options) = @_; - my $value = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $options{id}); - - if (defined($self->{option_results}->{display_transform_src})) { - $self->{option_results}->{display_transform_dst} = '' if (!defined($self->{option_results}->{display_transform_dst})); - eval "\$value =~ s{$self->{option_results}->{display_transform_src}}{$self->{option_results}->{display_transform_dst}}"; + if (scalar(@{$self->{Sensor_id_selected}}) <= 0) { + if (defined($self->{option_results}->{sensor})) { + $self->{output}->add_option_msg(short_msg => "No Sensors found for '" . $self->{option_results}->{sensor} . "'."); + } else { + $self->{output}->add_option_msg(short_msg => "No Sensors found."); + }; + $self->{output}->option_exit(); } - return $value; } 1; @@ -233,19 +170,19 @@ Check LM-Sensors: Temperature Sensors =item B<--warning> -Threshold warning (temperature) +Threshold warning =item B<--critical> -Threshold critical (temperature) +Threshold critical -=item B<--sensordesc> +=item B<--sensor> Set the Sensor Desc (number expected) ex: 1, 2,... (empty means 'check all sensors'). =item B<--name> -Allows to use Sensor Desc name with option --sensordesc instead of Sensor Desc oid index. +Allows to use Sensor Desc name with option --sensor instead of Sensor Desc oid index. =item B<--regexp> @@ -255,22 +192,6 @@ Allows to use regexp to filter sensordesc (with option --name). Allows to use regexp non case-sensitive (with --regexp). -=item B<--reload-cache-time> - -Time in seconds before reloading cache file (default: 180). - -=item B<--display-transform-src> - -Regexp src to transform display value. (security risk!!!) - -=item B<--display-transform-dst> - -Regexp dst to transform display value. (security risk!!!) - -=item B<--show-cache> - -Display cache storage datas. - =back =cut diff --git a/apps/lmsensors/mode/volt.pm b/apps/lmsensors/mode/voltage.pm similarity index 51% rename from apps/lmsensors/mode/volt.pm rename to apps/lmsensors/mode/voltage.pm index 7f950b13d..39e29577f 100644 --- a/apps/lmsensors/mode/volt.pm +++ b/apps/lmsensors/mode/voltage.pm @@ -33,7 +33,7 @@ # #################################################################################### -package apps::lmsensors::mode::volt; +package apps::lmsensors::mode::voltage; use base qw(centreon::plugins::mode); @@ -54,18 +54,15 @@ sub new { { "warning:s" => { name => 'warning' }, "critical:s" => { name => 'critical' }, - "reload-cache-time:s" => { name => 'reload_cache_time' }, "name" => { name => 'use_name' }, - "sensordesc:s" => { name => 'sensordesc' }, + "sensor:s" => { name => 'sensor' }, "regexp" => { name => 'use_regexp' }, "regexp-isensitive" => { name => 'use_regexpi' }, "display-transform-src:s" => { name => 'display_transform_src' }, "display-transform-dst:s" => { name => 'display_transform_dst' }, - "show-cache" => { name => 'show_cache' }, }); - $self->{sensordesc_id_selected} = []; - $self->{statefile_cache} = centreon::plugins::statefile->new(%options); + $self->{Sensor_id_selected} = []; return $self; } @@ -82,8 +79,7 @@ sub check_options { $self->{output}->add_option_msg(short_msg => "Wrong critical threshold '" . $self->{option_results}->{critical} . "'."); $self->{output}->option_exit(); } - - $self->{statefile_cache}->check_options(%options); + } sub run { @@ -95,34 +91,31 @@ sub run { $self->manage_selection(); - $self->{snmp}->load(oids => [$oid_SensorValue], instances => $self->{sensordesc_id_selected}); - my $result = $self->{snmp}->get_leef(nothing_quit => 1); + $self->{snmp}->load(oids => [$oid_SensorDesc, $oid_SensorValue], instances => $self->{Sensor_id_selected}); + my $SensorValueResult = $self->{snmp}->get_leef(nothing_quit => 1); - if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})) { + if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})) { $self->{output}->output_add(severity => 'OK', short_msg => 'All Voltages are ok.'); } - foreach (sort @{$self->{sensordesc_id_selected}}) { - my $name_sensordesc = $self->get_display_value(id => $_); - - my $varSensorValue = $result->{$oid_SensorValue . '.' . $_}; - #mV to V - my $SensorValue = $varSensorValue / 1000; + foreach my $SensorId (sort @{$self->{Sensor_id_selected}}) { + my $SensorDesc = $SensorValueResult->{$oid_SensorDesc . '.' . $SensorId}; + my $SensorValue = $SensorValueResult->{$oid_SensorValue . '.' . $SensorId} / 1000; my $exit = $self->{perfdata}->threshold_check(value => $SensorValue, threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); $self->{output}->output_add(long_msg => sprintf("Sensor '%s' Volt: %s", - $name_sensordesc, $SensorValue)); - if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensordesc}) && !defined($self->{option_results}->{use_regexp}))) { + $SensorDesc, $SensorValue)); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1) || (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_regexp}))) { $self->{output}->output_add(severity => $exit, short_msg => sprintf("Sensor '%s' Volt: %s", - $name_sensordesc, $SensorValue)); + $SensorDesc, $SensorValue)); } my $label = 'sensor_voltage'; my $extra_label = ''; - $extra_label = '_' . $name_sensordesc if (!defined($self->{option_results}->{sensordesc}) || defined($self->{option_results}->{use_regexp})); + $extra_label = '_' . $SensorDesc if (!defined($self->{option_results}->{sensor}) || defined($self->{option_results}->{use_regexp})); $self->{output}->perfdata_add(label => $label . $extra_label, unit => 'V', value => $SensorValue, warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning'), @@ -133,92 +126,36 @@ sub run { $self->{output}->exit(); } -sub reload_cache { - my ($self) = @_; - my $datas = {}; - - my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc); - $datas->{all_ids} = []; - my $last_num = 0; - foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { - next if ($key !~ /\.([0-9]+)$/); - push @{$datas->{all_ids}}, $1; - $datas->{'SensorsDesc_' . $1} = $self->{output}->to_utf8($result->{$key}); - } - - if (scalar(@{$datas->{all_ids}}) <= 0) { - $self->{output}->add_option_msg(short_msg => "Can't construct cache..."); - $self->{output}->option_exit(); - } - - $self->{statefile_cache}->write(data => $datas); -} - sub manage_selection { my ($self, %options) = @_; + my $result = $self->{snmp}->get_table(oid => $oid_SensorDesc, nothing_quit => 1); - # init cache file - my $has_cache_file = $self->{statefile_cache}->read(statefile => 'cache_apps_lmsensors_' . $self->{hostname} . '_' . $self->{snmp_port} . '_' . $self->{mode}); - if (defined($self->{option_results}->{show_cache})) { - $self->{output}->add_option_msg(long_msg => $self->{statefile_cache}->get_string_content()); - $self->{output}->option_exit(); - } + foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { + next if ($key !~ /\.([0-9]+)$/); + my $SensorId = $1; + my $SensorDesc = $result->{$key}; - my $timestamp_cache = $self->{statefile_cache}->get(name => 'last_timestamp'); - if ($has_cache_file == 0 || - (defined($timestamp_cache) && (time() - $timestamp_cache) > (($self->{option_results}->{reload_cache_time}) * 60))) { - $self->reload_cache(); - $self->{statefile_cache}->read(); - } + next if (defined($self->{option_results}->{sensor}) && !defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorId !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/i); + next if (defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc !~ /$self->{option_results}->{sensor}/); + next if (defined($self->{option_results}->{use_name}) && !defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) + && $SensorDesc ne $self->{option_results}->{sensor}); - my $all_ids = $self->{statefile_cache}->get(name => 'all_ids'); - if (!defined($self->{option_results}->{use_name}) && defined($self->{option_results}->{sensordesc})) { - # get by ID - push @{$self->{sensordesc_id_selected}}, $self->{option_results}->{sensordesc}; - my $name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $self->{option_results}->{sensordesc}); - if (!defined($name)) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for id '" . $self->{option_results}->{sensordesc} . "'."); - $self->{output}->option_exit(); - } - } else { - foreach my $i (@{$all_ids}) { - my $filter_name = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $i); - next if (!defined($filter_name)); - if (!defined($self->{option_results}->{sensordesc})) { - push @{$self->{sensordesc_id_selected}}, $i; - next; - } - if (defined($self->{option_results}->{use_regexp}) && defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/i) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name =~ /$self->{option_results}->{sensordesc}/) { - push @{$self->{sensordesc_id_selected}}, $i; - } - if (!defined($self->{option_results}->{use_regexp}) && !defined($self->{option_results}->{use_regexpi}) && $filter_name eq $self->{option_results}->{sensordesc}) { - push @{$self->{sensordesc_id_selected}}, $i; - } - } - - if (scalar(@{$self->{sensordesc_id_selected}}) <= 0) { - if (defined($self->{option_results}->{sensordesc})) { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found for name '" . $self->{option_results}->{sensordesc} . "' (maybe you should reload cache file)."); - } else { - $self->{output}->add_option_msg(short_msg => "No Sensor Desc found (maybe you should reload cache file)."); - } - $self->{output}->option_exit(); - } - } + + push @{$self->{Sensor_id_selected}}, $SensorId; } -sub get_display_value { - my ($self, %options) = @_; - my $value = $self->{statefile_cache}->get(name => 'SensorsDesc_' . $options{id}); - - if (defined($self->{option_results}->{display_transform_src})) { - $self->{option_results}->{display_transform_dst} = '' if (!defined($self->{option_results}->{display_transform_dst})); - eval "\$value =~ s{$self->{option_results}->{display_transform_src}}{$self->{option_results}->{display_transform_dst}}"; + if (scalar(@{$self->{Sensor_id_selected}}) <= 0) { + if (defined($self->{option_results}->{sensor})) { + $self->{output}->add_option_msg(short_msg => "No Sensors found for '" . $self->{option_results}->{sensor} . "'."); + } else { + $self->{output}->add_option_msg(short_msg => "No Sensors found."); + }; + $self->{output}->option_exit(); } - return $value; } 1; @@ -227,25 +164,25 @@ __END__ =head1 MODE -Check LM-Sensors: Volt Sensors +Check LM-Sensors: Voltage Sensors =over 8 =item B<--warning> -Threshold warning (Fan Speed U/min) +Threshold warning (Volt) =item B<--critical> -Threshold critical (Fan Speed U/min) +Threshold critical (Volt) -=item B<--sensordesc> +=item B<--sensor> Set the Sensor Desc (number expected) ex: 1, 2,... (empty means 'check all sensors'). =item B<--name> -Allows to use Sensor Desc name with option --sensordesc instead of Sensor Desc oid index. +Allows to use Sensor Desc name with option --sensor instead of Sensor Desc oid index. =item B<--regexp> @@ -255,22 +192,6 @@ Allows to use regexp to filter sensordesc (with option --name). Allows to use regexp non case-sensitive (with --regexp). -=item B<--reload-cache-time> - -Time in seconds before reloading cache file (default: 180). - -=item B<--display-transform-src> - -Regexp src to transform display value. (security risk!!!) - -=item B<--display-transform-dst> - -Regexp dst to transform display value. (security risk!!!) - -=item B<--show-cache> - -Display cache storage datas. - =back =cut diff --git a/apps/lmsensors/plugin.pm b/apps/lmsensors/plugin.pm index 22729bca4..b2379a3a0 100644 --- a/apps/lmsensors/plugin.pm +++ b/apps/lmsensors/plugin.pm @@ -49,8 +49,8 @@ sub new { %{$self->{modes}} = ( 'temperature' => 'apps::lmsensors::mode::temperature', 'fan' => 'apps::lmsensors::mode::fan', - 'volt' => 'apps::lmsensors::mode::volt', - 'misc' => 'apps::lmsensors::mode::misc', + 'voltage' => 'apps::lmsensors::mode::voltage', + 'misc' => 'apps::lmsensors::mode::misc', ); return $self;