diff --git a/centreon-plugins/hardware/server/cisco/ucs/mode/components/blade.pm b/centreon-plugins/hardware/server/cisco/ucs/mode/components/blade.pm new file mode 100644 index 000000000..37466b844 --- /dev/null +++ b/centreon-plugins/hardware/server/cisco/ucs/mode/components/blade.pm @@ -0,0 +1,97 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation ; either version 2 of the License. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, see . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package hardware::server::cisco::ucs::mode::components::blade; + +use strict; +use warnings; +use hardware::server::cisco::ucs::mode::components::resources qw(%presence %operability); + +sub check { + my ($self) = @_; + + # In MIB 'CISCO-UNIFIED-COMPUTING-EQUIPMENT-MIB' + $self->{output}->output_add(long_msg => "Checking blades"); + $self->{components}->{blade} = {name => 'blades', total => 0, skip => 0}; + return if ($self->check_exclude(section => 'blade')); + + my $oid_cucsComputeBladePresence = '.1.3.6.1.4.1.9.9.719.1.9.2.1.45'; + my $oid_cucsComputeBladeOperState = '.1.3.6.1.4.1.9.9.719.1.9.2.1.42'; + my $oid_cucsComputeBladeDn = '.1.3.6.1.4.1.9.9.719.1.9.2.1.2'; + + my $result = $self->{snmp}->get_multiple_table(oids => [ + { oid => $oid_cucsComputeBladePresence }, + { oid => $oid_cucsComputeBladeOperState }, + { oid => $oid_cucsComputeBladeDn }, + ] + ); + foreach my $key ($self->{snmp}->oid_lex_sort(keys %{$result->{$oid_cucsComputeBladePresence}})) { + # index + $key =~ /\.(\d+)$/; + my $blade_index = $1; + my $blade_dn = $result->{$oid_cucsComputeBladeDn}->{$oid_cucsComputeBladeDn . '.' . $blade_index}; + my $blade_operstate = defined($result->{$oid_cucsComputeBladeOperState}->{$oid_cucsComputeBladeOperState . '.' . $blade_index}) ? + $result->{$oid_cucsComputeBladeOperState}->{$oid_cucsComputeBladeOperState . '.' . $blade_index} : 0; # unknown + my $blade_presence = defined($result->{$oid_cucsComputeBladePresence}->{$oid_cucsComputeBladePresence . '.' . $blade_index}) ? + $result->{$oid_cucsComputeBladePresence}->{$oid_cucsComputeBladePresence . '.' . $blade_index} : 0; + + next if ($self->absent_problem(section => 'blade', instance => $blade_dn)); + next if ($self->check_exclude(section => 'blade', instance => $blade_dn)); + + if (${$presence{$blade_presence}}[1] ne 'OK') { + $self->{output}->output_add(severity => ${$presence{$blade_presence}}[1], + short_msg => sprintf("blade '%s' presence is: '%s'", + $blade_dn, ${$presence{$blade_presence}}[0]) + ); + next; + } + + $self->{components}->{blade}->{total}++; + + $self->{output}->output_add(long_msg => sprintf("blade '%s' state is '%s' [presence: %s].", + $blade_dn, ${$operability{$blade_operstate}}[0], + ${$presence{$blade_presence}}[0] + )); + if (${$operability{$blade_operstate}}[1] ne 'OK') { + $self->{output}->output_add(severity => ${$operability{$blade_operstate}}[1], + short_msg => sprintf("blade '%s' state is '%s'.", + $blade_dn, ${$operability{$blade_operstate}}[0] + ) + ); + } + } +} + +1; \ No newline at end of file diff --git a/centreon-plugins/hardware/server/cisco/ucs/mode/components/chassis.pm b/centreon-plugins/hardware/server/cisco/ucs/mode/components/chassis.pm new file mode 100644 index 000000000..9077efcfd --- /dev/null +++ b/centreon-plugins/hardware/server/cisco/ucs/mode/components/chassis.pm @@ -0,0 +1,85 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation ; either version 2 of the License. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, see . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package hardware::server::cisco::ucs::mode::components::chassis; + +use strict; +use warnings; +use hardware::server::cisco::ucs::mode::components::resources qw(%presence %operability); + +sub check { + my ($self) = @_; + + # In MIB 'CISCO-UNIFIED-COMPUTING-EQUIPMENT-MIB' + $self->{output}->output_add(long_msg => "Checking chassis"); + $self->{components}->{chassis} = {name => 'chassis', total => 0, skip => 0}; + return if ($self->check_exclude(section => 'chassis')); + + # Don't do the 'presence'. Is 'unknown' ??!!! + my $oid_cucsEquipmentChassisOperState = '.1.3.6.1.4.1.9.9.719.1.15.7.1.27'; + my $oid_cucsEquipmentChassisDn = '.1.3.6.1.4.1.9.9.719.1.15.7.1.2'; + + my $result = $self->{snmp}->get_multiple_table(oids => [ + { oid => $oid_cucsEquipmentChassisOperState }, + { oid => $oid_cucsEquipmentChassisDn }, + ] + ); + foreach my $key ($self->{snmp}->oid_lex_sort(keys %{$result->{$oid_cucsEquipmentChassisOperState}})) { + # index + $key =~ /\.(\d+)$/; + my $chassis_index = $1; + my $chassis_dn = $result->{$oid_cucsEquipmentChassisDn}->{$oid_cucsEquipmentChassisDn . '.' . $chassis_index}; + my $chassis_operstate = defined($result->{$oid_cucsEquipmentChassisOperState}->{$oid_cucsEquipmentChassisOperState . '.' . $chassis_index}) ? + $result->{$oid_cucsEquipmentChassisOperState}->{$oid_cucsEquipmentChassisOperState . '.' . $chassis_index} : 0; # unknown + + next if ($self->absent_problem(section => 'chassis', instance => $chassis_dn)); + next if ($self->check_exclude(section => 'chassis', instance => $chassis_dn)); + + $self->{components}->{chassis}->{total}++; + + $self->{output}->output_add(long_msg => sprintf("chassis '%s' state is '%s'.", + $chassis_dn, ${$operability{$chassis_operstate}}[0], + )); + if (${$operability{$chassis_operstate}}[1] ne 'OK') { + $self->{output}->output_add(severity => ${$operability{$chassis_operstate}}[1], + short_msg => sprintf("chassis '%s' state is '%s'.", + $chassis_dn, ${$operability{$chassis_operstate}}[0] + ) + ); + } + } +} + +1; \ No newline at end of file diff --git a/centreon-plugins/hardware/server/cisco/ucs/mode/equipment.pm b/centreon-plugins/hardware/server/cisco/ucs/mode/equipment.pm index 0f3d2ef18..086039498 100644 --- a/centreon-plugins/hardware/server/cisco/ucs/mode/equipment.pm +++ b/centreon-plugins/hardware/server/cisco/ucs/mode/equipment.pm @@ -42,6 +42,8 @@ use warnings; use hardware::server::cisco::ucs::mode::components::fan; use hardware::server::cisco::ucs::mode::components::psu; use hardware::server::cisco::ucs::mode::components::iocard; +use hardware::server::cisco::ucs::mode::components::chassis; +use hardware::server::cisco::ucs::mode::components::blade; sub new { my ($class, %options) = @_; @@ -80,6 +82,8 @@ sub global { hardware::server::cisco::ucs::mode::components::fan::check($self); hardware::server::cisco::ucs::mode::components::psu::check($self); hardware::server::cisco::ucs::mode::components::iocard::check($self); + hardware::server::cisco::ucs::mode::components::chassis::check($self); + hardware::server::cisco::ucs::mode::components::blade::check($self); } sub component { @@ -91,6 +95,10 @@ sub component { hardware::server::cisco::ucs::mode::components::psu::check($self); } elsif ($self->{option_results}->{component} eq 'iocard') { hardware::server::cisco::ucs::mode::components::iocard::check($self); + } elsif ($self->{option_results}->{component} eq 'chassis') { + hardware::server::cisco::ucs::mode::components::chassis::check($self); + } elsif ($self->{option_results}->{component} eq 'blade') { + hardware::server::cisco::ucs::mode::components::blade::check($self); } else { $self->{output}->add_option_msg(short_msg => "Wrong option. Cannot find component '" . $self->{option_results}->{component} . "'."); $self->{output}->option_exit(); @@ -170,14 +178,14 @@ __END__ =head1 MODE -Check Hardware (Fans). +Check Hardware (Fans, Power supplies, chassis, io cards, blades). =over 8 =item B<--component> Which component to check (Default: 'all'). -Can be: 'fan'. +Can be: 'fan', 'psu', 'chassis', 'iocard', 'blade' =item B<--exclude>