add new huawei ibmc and hmm plugins (#1098)

This commit is contained in:
serverplugin 2018-08-23 17:59:44 +08:00 committed by Colin Gagnaire
parent e38ee7f06a
commit e95a010777
23 changed files with 1506 additions and 0 deletions

View File

@ -0,0 +1,51 @@
package hardware::server::huawei::hmm::snmp::mode::components::blade;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("0"=>"ok","1"=>"warning","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"critical","6"=>"critical","7"=>"critical");
my %eachStatus = ("0"=>"ok","1"=>"minor","2"=>"major","3"=>"major","4"=>"critical","5"=>"critical","6"=>"critical","7"=>"critical");
my $componentPresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.6.0", $self->{option_results}->{bladeNum};
my $componentStatusOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.8.0", $self->{option_results}->{bladeNum};
my $componentTemperatureOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2012.1.2.1", $self->{option_results}->{bladeNum};
my $tmpShortMessage = "";
my $tmpSeverity = "unknown";
my $result= $self->{snmp}->get_leef(oids =>[$componentPresentOid]);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get blade info error.";
}else
{
if ($result->{$componentPresentOid} eq "0")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s not presence.", $self->{option_results}->{bladeNum};
}elsif ($result->{$componentPresentOid} eq "2")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status indeterminate.", $self->{option_results}->{bladeNum};
}elsif ($result->{$componentPresentOid} eq "1")
{
$result= $self->{snmp}->get_leef(oids =>[$componentStatusOid]);
$tmpSeverity = $statusHash{$result->{$componentStatusOid}};
$tmpShortMessage = $tmpShortMessage. "Blade".$self->{option_results}->{bladeNum}.":".$eachStatus{$result->{$componentStatusOid}};
$result = $self->{snmp}->get_leef(oids =>[$componentTemperatureOid] );
$tmpShortMessage = $tmpShortMessage." Temperature:".$result->{$componentTemperatureOid}."℃";
}else
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status unknown.", $self->{option_results}->{bladeNum};
}
}
$self->{output}->output_add(severity => $tmpSeverity,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,101 @@
package hardware::server::huawei::hmm::snmp::mode::components::cpu;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"unknown");
my $bladePresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.6.0", $self->{option_results}->{bladeNum};
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $result= $self->{snmp}->get_leef(oids =>[$bladePresentOid]);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get blade info error.";
}else
{
if ($result->{$bladePresentOid} eq "0")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s not presence.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "2")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status indeterminate.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "1")
{
my $componentPresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2006.1.4", $self->{option_results}->{bladeNum};
my $componentStatusOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2006.1.5", $self->{option_results}->{bladeNum};
my $componentMarkOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2006.1.2", $self->{option_results}->{bladeNum};
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $componentPresentOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No cpu presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $totalPresent = 0;
my $totalComponent = 0;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "1") # presence status: 0-not presence,1-presence
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$temnameOid = $componentMarkOid.".".$endKey;
$statusOid = $componentStatusOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($statusHash{$tmpresult->{$statusOid}} eq "critical")
{
$componentStatus = "critical";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "warning" && ($componentStatus ne "critical"))
{
$componentStatus = "warning";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
}
$tmpShortMessage = "cpuPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
}
}else
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status unknown.", $self->{option_results}->{bladeNum};
}
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage );
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,100 @@
package hardware::server::huawei::hmm::snmp::mode::components::disk;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"unknown");
my $bladePresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.6.0", $self->{option_results}->{bladeNum};
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $result= $self->{snmp}->get_leef(oids =>[$bladePresentOid]);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get blade info error.";
}else
{
if ($result->{$bladePresentOid} eq "0")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s not presence.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "2")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status indeterminate.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "1")
{
my $componentPresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2009.1.4", $self->{option_results}->{bladeNum};
my $componentStatusOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2009.1.5", $self->{option_results}->{bladeNum};
my $componentMarkOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2009.1.2", $self->{option_results}->{bladeNum};
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $componentPresentOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No disk presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $totalPresent = 0;
my $totalComponent = 0;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "1") # presence status: 0-not presence,1-presence
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$temnameOid = $componentMarkOid.".".$endKey;
$statusOid = $componentStatusOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($statusHash{$tmpresult->{$statusOid}} eq "critical")
{
$componentStatus = "critical";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "warning" && ($componentStatus ne "critical"))
{
$componentStatus = "warning";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
}
$tmpShortMessage = "diskPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
}
}else
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status unknown.", $self->{option_results}->{bladeNum};
}
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,70 @@
package hardware::server::huawei::hmm::snmp::mode::components::fan;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical");
my $fanStatusOid = ".1.3.6.1.4.1.2011.2.82.1.82.100.3.2001.1.3";
my $fanPresenceOid = ".1.3.6.1.4.1.2011.2.82.1.82.100.3.2001.1.1";
my $tmpShortMessage;
my $componentStatus ="unknown";
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $fanPresenceOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No fan presence.";
}else
{
my $endKey;
my $statusOid;
my $tmpMsg;
my $tmpResult;
my $totalPresence = 0;
my $totalComponent = 14;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$statusOid = "";
$tmpMsg = "";
$totalPresence++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$tmpMsg = "Fan".$endKey.":";
$statusOid = $fanStatusOid.".".$endKey;
$tmpResult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpResult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($statusHash{$tmpResult->{$statusOid}} eq "critical")
{
$componentStatus = "critical";
}elsif (($statusHash{$tmpResult->{$statusOid}}) eq "warning" && ($componentStatus ne "critical"))
{
$componentStatus = "warning";
}elsif (($statusHash{$tmpResult->{$statusOid}}) eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
$tmpShortMessage = "fanPresence:".$totalPresence."\/".$totalComponent." ".$tmpShortMessage;
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,100 @@
package hardware::server::huawei::hmm::snmp::mode::components::memory;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"unknown");
my $bladePresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.6.0", $self->{option_results}->{bladeNum};
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $result= $self->{snmp}->get_leef(oids =>[$bladePresentOid]);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get blade info error.";
}else
{
if ($result->{$bladePresentOid} eq "0")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s not presence.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "2")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status indeterminate.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "1")
{
my $componentPresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2007.1.4", $self->{option_results}->{bladeNum};
my $componentStatusOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2007.1.5", $self->{option_results}->{bladeNum};
my $componentMarkOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2007.1.2", $self->{option_results}->{bladeNum};
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $componentPresentOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No memory presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $totalPresent = 0;
my $totalComponent = 0;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "1") # presence status: 0-not presence,1-presence
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$temnameOid = $componentMarkOid.".".$endKey;
$statusOid = $componentStatusOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($statusHash{$tmpresult->{$statusOid}} eq "critical")
{
$componentStatus = "critical";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "warning" && ($componentStatus ne "critical"))
{
$componentStatus = "warning";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
}
$tmpShortMessage = "memoryPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
}
}else
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status unknown.", $self->{option_results}->{bladeNum};
}
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,100 @@
package hardware::server::huawei::hmm::snmp::mode::components::mezz;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"unknown");
my $bladePresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.6.0", $self->{option_results}->{bladeNum};
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $result= $self->{snmp}->get_leef(oids =>[$bladePresentOid]);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get blade info error.";
}else
{
if ($result->{$bladePresentOid} eq "0")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s not presence.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "2")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status indeterminate.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "1")
{
my $componentPresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2008.1.4", $self->{option_results}->{bladeNum};
my $componentStatusOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2008.1.5", $self->{option_results}->{bladeNum};
my $componentMarkOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2008.1.2", $self->{option_results}->{bladeNum};
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $componentPresentOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No mezz presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $totalPresent = 0;
my $totalComponent = 0;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "1") # presence status: 0-not presence,1-presence
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$temnameOid = $componentMarkOid.".".$endKey;
$statusOid = $componentStatusOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg. $eachStatus{ $tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($statusHash{$tmpresult->{$statusOid}} eq "critical")
{
$componentStatus = "critical";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "warning" && ($componentStatus ne "critical"))
{
$componentStatus = "warning";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
}
$tmpShortMessage = "mezzPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
}
}else
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status unknown.", $self->{option_results}->{bladeNum};
}
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,70 @@
package hardware::server::huawei::hmm::snmp::mode::components::psu;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical");
my $psuPresenceOid = ".1.3.6.1.4.1.2011.2.82.1.82.100.4.2001.1.1";
my $psuStatusOid = ".1.3.6.1.4.1.2011.2.82.1.82.100.4.2001.1.3";
my $tmpShortMessage = "";
my $componentStatus = "unknown";
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $psuPresenceOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No psu presence.";
}else
{
my $endKey;
my $statusOid;
my $tmpMsg;
my $tmpResult;
my $totalPresence = 0;
my $totalComponent = 6;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$statusOid = "";
$tmpMsg = "";
$totalPresence++;
$k =~ /\.([0-9]+)$/;
$endKey = $1 ;
$tmpMsg = "Psu".$endKey.":";
$statusOid = $psuStatusOid.".".$endKey;
$tmpResult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpResult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($statusHash{$tmpResult->{$statusOid}} eq "critical")
{
$componentStatus = "critical";
}elsif (($statusHash{$tmpResult->{$statusOid}}) eq "warning" && ($componentStatus ne "critical"))
{
$componentStatus = "warning";
}elsif (($statusHash{$tmpResult->{$statusOid}}) eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
$tmpShortMessage = "psuPresence:".$totalPresence."\/".$totalComponent." ".$tmpShortMessage;
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,105 @@
package hardware::server::huawei::hmm::snmp::mode::components::raid;
use strict;
use warnings;
sub check {
my ($self) = @_;
my $bladePresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.6.0", $self->{option_results}->{bladeNum};
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $result= $self->{snmp}->get_leef(oids =>[$bladePresentOid]);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get blade info error.";
}else
{
if ($result->{$bladePresentOid} eq "0")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s not presence.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "2")
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status indeterminate.", $self->{option_results}->{bladeNum};
}elsif ($result->{$bladePresentOid} eq "1")
{
my $componentPresentOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2011.1.2", $self->{option_results}->{bladeNum};
my $componentStatusOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2011.1.7", $self->{option_results}->{bladeNum};
my $componentMarkOid = sprintf ".1.3.6.1.4.1.2011.2.82.1.82.4.%s.2011.1.3", $self->{option_results}->{bladeNum};
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $componentPresentOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No raid presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpResult;
my $totalPresent = 0;
my $totalComponent = 0;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "2") # presence status: 1-not presence,2-presence
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1 ;
$temnameOid = $componentMarkOid.".".$endKey;
$statusOid = $componentStatusOid.".".$endKey;
$tmpResult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpResult->{$temnameOid}.":";
$tmpResult = $self->{snmp}->get_leef(oids =>[$statusOid]);
my $tmpStatus;
if ($tmpResult->{$statusOid} eq "-1"){
$tmpStatus = "unknown";
}elsif($tmpResult->{$statusOid} eq "1")
{
$tmpStatus = "ok";
}else
{
$tmpStatus = "warning";
}
$tmpMsg = $tmpMsg.$tmpStatus." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($tmpStatus eq "warning")
{
$componentStatus = "warning";
}elsif ($tmpStatus eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
}
$tmpShortMessage = "raidPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
}
}else
{
$tmpShortMessage = sprintf $tmpShortMessage."Blade%s status unknown.", $self->{option_results}->{bladeNum};
}
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,27 @@
package hardware::server::huawei::hmm::snmp::mode::components::shelf;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("0"=>"ok","1"=>"warning","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"critical","6"=>"critical","7"=>"critical");
my $componentStatusOid = ".1.3.6.1.4.1.2011.2.82.1.82.2.5.0";
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $tmpResult;
$tmpResult = $self->{snmp}->get_leef(oids =>[$componentStatusOid]);
$componentStatus = $statusHash{$tmpResult->{$componentStatusOid}};
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,27 @@
package hardware::server::huawei::hmm::snmp::mode::components::smm;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("0"=>"ok","1"=>"warning","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"critical","6"=>"critical","7"=>"critical");
my $componentStatusOid = ".1.3.6.1.4.1.2011.2.82.1.82.3.9.0";
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $tmpResult;
$tmpResult = $self->{snmp}->get_leef(oids =>[$componentStatusOid]);
$componentStatus = $statusHash{$tmpResult->{$componentStatusOid}};
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,71 @@
package hardware::server::huawei::hmm::snmp::mode::components::switch;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical");
my $switchPresenceOid = ".1.3.6.1.4.1.2011.2.82.1.82.100.2.2001.1.1";
my $switchStatusOid = ".1.3.6.1.4.1.2011.2.82.1.82.100.2.2001.1.3";
my $tmpShortMessage = "";
my $componentStatus = "unknown";
$self->{snmp}->{snmp_force_getnext} = 1;
my $result = $self->{snmp}->get_table(oid => $switchPresenceOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No switch presence.";
}else
{
my $endKey;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $totalPresence = 0;
my $totalComponent = 4;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$statusOid = "";
$tmpMsg = "";
$totalPresence++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$tmpMsg = "Switch".$endKey.":";
$statusOid = $switchStatusOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
if($statusHash{$tmpresult->{$statusOid}} eq "critical")
{
$componentStatus = "critical";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "warning" && ($componentStatus ne "critical"))
{
$componentStatus = "warning";
}elsif (($statusHash{$tmpresult->{$statusOid}}) eq "ok")
{
if ($componentStatus eq "unknown")
{
$componentStatus = "ok";
}
}
}
$tmpShortMessage = "switchPresence:".$totalPresence."\/".$totalComponent." ".$tmpShortMessage;
}
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,27 @@
package hardware::server::huawei::hmm::snmp::mode::components::system;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("0"=>"ok","1"=>"warning","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"critical","6"=>"critical","7"=>"critical");
my $componentStatusOid = ".1.3.6.1.4.1.2011.2.82.1.82.1.1.0";
my $tmpShortMessage = "";
my $componentStatus = "unknown";
my $tmpResult;
$tmpResult = $self->{snmp}->get_leef(oids =>[$componentStatusOid]);
$componentStatus = $statusHash{$tmpResult->{$componentStatusOid}};
$self->{output}->output_add(severity => $componentStatus,
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,81 @@
package hardware::server::huawei::hmm::snmp::mode::hardwares;
use base qw(centreon::plugins::mode);
use strict;
use warnings;
use hardware::server::huawei::hmm::snmp::mode::components::blade;
use hardware::server::huawei::hmm::snmp::mode::components::switch;
use hardware::server::huawei::hmm::snmp::mode::components::shelf;
use hardware::server::huawei::hmm::snmp::mode::components::smm;
use hardware::server::huawei::hmm::snmp::mode::components::system;
use hardware::server::huawei::hmm::snmp::mode::components::cpu;
use hardware::server::huawei::hmm::snmp::mode::components::fan;
use hardware::server::huawei::hmm::snmp::mode::components::raid;
use hardware::server::huawei::hmm::snmp::mode::components::memory;
use hardware::server::huawei::hmm::snmp::mode::components::psu;
use hardware::server::huawei::hmm::snmp::mode::components::disk;
use hardware::server::huawei::hmm::snmp::mode::components::mezz;
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class;
$self->{version} = '1.0';
$options{options}->add_options(arguments =>
{
"component:s" => { name => 'component', default => 'system' },
"bladeNum:s" => { name => 'bladeNum', default => '0' },
});
$self->{components} = {};
$self->{no_components} = undef;
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::init(%options);
}
sub run {
my ($self, %options) = @_;
$self->{snmp} = $options{snmp};
if ($self->{option_results}->{component} eq 'system') {
hardware::server::huawei::hmm::snmp::mode::components::system::check($self);
} elsif ($self->{option_results}->{component} eq 'cpu') {
hardware::server::huawei::hmm::snmp::mode::components::cpu::check($self);
} elsif ($self->{option_results}->{component} eq 'fan') {
hardware::server::huawei::hmm::snmp::mode::components::fan::check($self);
} elsif ($self->{option_results}->{component} eq 'raid') {
hardware::server::huawei::hmm::snmp::mode::components::raid::check($self);
} elsif ($self->{option_results}->{component} eq 'memory') {
hardware::server::huawei::hmm::snmp::mode::components::memory::check($self);
} elsif ($self->{option_results}->{component} eq 'psu') {
hardware::server::huawei::hmm::snmp::mode::components::psu::check($self);
} elsif ($self->{option_results}->{component} eq 'disk') {
hardware::server::huawei::hmm::snmp::mode::components::disk::check($self);
} elsif ($self->{option_results}->{component} eq 'blade') {
hardware::server::huawei::hmm::snmp::mode::components::blade::check($self);
} elsif ($self->{option_results}->{component} eq 'shelf') {
hardware::server::huawei::hmm::snmp::mode::components::shelf::check($self);
} elsif ($self->{option_results}->{component} eq 'smm') {
hardware::server::huawei::hmm::snmp::mode::components::smm::check($self);
} elsif ($self->{option_results}->{component} eq 'switch') {
hardware::server::huawei::hmm::snmp::mode::components::switch::check($self);
} elsif ($self->{option_results}->{component} eq 'mezz') {
hardware::server::huawei::hmm::snmp::mode::components::mezz::check($self);
} else {
$self->{output}->add_option_msg(short_msg => "Wrong option. Cannot find component '" . $self->{option_results}->{component} . "'.");
$self->{output}->option_exit();
}
$self->{output}->display();
$self->{output}->exit();
}
1;
__END__

View File

@ -0,0 +1,28 @@
package hardware::server::huawei::hmm::snmp::plugin;
use strict;
use warnings;
use base qw(centreon::plugins::script_snmp);
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class;
$self->{version} = '1.0';
%{$self->{modes}} = (
'hardwares' => 'hardware::server::huawei::hmm::snmp::mode::hardwares',
);
return $self;
}
1;
__END__
=head1 PLUGIN DESCRIPTION
Check HUAWEI servers in SNMP.
=cut

View File

@ -0,0 +1,63 @@
package hardware::server::huawei::ibmc::snmp::mode::components::cpu;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown","6"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"absence","6"=>"unknown");
my $cpuStatusOid = ".1.3.6.1.4.1.2011.2.235.1.1.15.1.0";
my $statusTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.15.50.1.6";
my $deviceTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.15.50.1.10";
my $tmpShortMessage = "";
my $totalPresent = 0;
my $totalComponent = 0;
my $result = $self->{snmp}->get_table(oid => $statusTableOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No cpu presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v ne "5") # cpu present
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$temnameOid = $deviceTableOid.".".$endKey;
$statusOid = $statusTableOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
}
}
}
$result = $self->{snmp}->get_leef(oids =>[$cpuStatusOid]);
$tmpShortMessage = "cpuPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
$self->{output}->output_add(severity => $statusHash{$result-> {$cpuStatusOid}},
short_msg => $tmpShortMessage );
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,64 @@
package hardware::server::huawei::ibmc::snmp::mode::components::disk;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown","6"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"absence","6"=>"unknown");
my $diskStatusOid = ".1.3.6.1.4.1.2011.2.235.1.1.18.1.0";
my $presentTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.18.50.1.2";
my $statusTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.18.50.1.3";
my $deviceTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.18.50.1.6";
my $tmpShortMessage = "";
my $totalPresent = 0;
my $totalComponent = 0;
my $result = $self->{snmp}->get_table(oid => $presentTableOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No Disk presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "2") # disk present
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$temnameOid = $deviceTableOid.".".$endKey;
$statusOid = $statusTableOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
}
}
}
$result = $self->{snmp}->get_leef(oids =>[$diskStatusOid]);
$tmpShortMessage = "diskPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
$self->{output}->output_add(severity => $statusHash{$result-> {$diskStatusOid}},
short_msg => $tmpShortMessage );
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,64 @@
package hardware::server::huawei::ibmc::snmp::mode::components::fan;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown","6"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"absence","6"=>"unknown");
my $fanStatusOid = ".1.3.6.1.4.1.2011.2.235.1.1.8.3.0";
my $presentTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.8.50.1.3";
my $statusTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.8.50.1.4";
my $deviceTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.8.50.1.7";
my $tmpShortMessage = "";
my $totalPresent = 0;
my $totalComponent = 0;
my $result = $self->{snmp}->get_table(oid => $presentTableOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No fan presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "2") # fan present
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1 ;
$temnameOid = $deviceTableOid.".".$endKey;
$statusOid = $statusTableOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
}
}
}
$result = $self->{snmp}->get_leef(oids =>[$fanStatusOid]);
$tmpShortMessage = "fanPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
$self->{output}->output_add(severity => $statusHash{$result-> {$fanStatusOid}},
short_msg => $tmpShortMessage );
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,63 @@
package hardware::server::huawei::ibmc::snmp::mode::components::memory;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown","6"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"absence","6"=>"unknown");
my $memoryStatusOid = ".1.3.6.1.4.1.2011.2.235.1.1.16.1.0";
my $statusTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.16.50.1.6";
my $deviceTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.16.50.1.10";
my $tmpShortMessage = "";
my $totalPresent = 0;
my $totalComponent = 0;
my $result = $self->{snmp}->get_table(oid => $statusTableOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No memory presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v ne "5") # memory present
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1 ;
$temnameOid = $deviceTableOid.".".$endKey;
$statusOid = $statusTableOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage = $tmpShortMessage.$tmpMsg;
}
}
}
$result = $self->{snmp}->get_leef(oids =>[$memoryStatusOid]);
$tmpShortMessage = "memoryPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
$self->{output}->output_add(severity => $statusHash{$result-> {$memoryStatusOid}},
short_msg => $tmpShortMessage );
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,64 @@
package hardware::server::huawei::ibmc::snmp::mode::components::psu;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical","5"=>"unknown","6"=>"unknown");
my %eachStatus = ("1"=>"ok","2"=>"minor","3"=>"major","4"=>"critical","5"=>"absence","6"=>"unknown");
my $psuStatueOid = ".1.3.6.1.4.1.2011.2.235.1.1.6.1.0";
my $presentTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.6.50.1.9";
my $statueTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.6.50.1.7";
my $deviceTableOid = ".1.3.6.1.4.1.2011.2.235.1.1.6.50.1.13";
my $tmpShortMessage = "";
my $totalPresent = 0;
my $totalComponent = 0;
my $result = $self->{snmp}->get_table(oid => $presentTableOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."No psu presence.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$totalComponent++;
if ($v eq "2") # psu present
{
$totalPresent++;
$k =~ /\.([0-9]+)$/;
$endKey = $1;
$temnameOid = $deviceTableOid.".".$endKey;
$statusOid = $statueTableOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$temnameOid]);
$tmpMsg = $tmpresult->{$temnameOid}.":";
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
$tmpMsg = $tmpMsg.$eachStatus{$tmpresult->{$statusOid}}." ";
$tmpShortMessage=$tmpShortMessage.$tmpMsg;
}
}
}
$result = $self->{snmp}->get_leef(oids =>[$psuStatueOid]);
$tmpShortMessage = "psuPresence:".$totalPresent."\/".$totalComponent." ".$tmpShortMessage;
$self->{output}->output_add(severity => $statusHash{$result-> {$psuStatueOid}},
short_msg => $tmpShortMessage );
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,102 @@
package hardware::server::huawei::ibmc::snmp::mode::components::raid;
use strict;
use warnings;
sub check {
my ($self) = @_;
my $raidStatusOid = ".1.3.6.1.4.1.2011.2.235.1.1.36.50.1.7";
my $bbuPresentOid = ".1.3.6.1.4.1.2011.2.235.1.1.36.50.1.16";
my $bbuStatusOid = ".1.3.6.1.4.1.2011.2.235.1.1.36.50.1.18";
my $tmpShortMessage = "";
my $result = $self->{snmp}->get_table(oid => $bbuPresentOid);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get BBU info failed.";
}else
{
my $endKey;
my $temnameOid;
my $statusOid;
my $tmpMsg;
my $tmpresult;
my $v;
foreach my $k ($self->{snmp}->oid_lex_sort(keys %$result))
{
$v = $result->{$k};
$endKey = "0";
$temnameOid = "";
$statusOid = "";
$tmpMsg = "";
$k =~ /\.([0-9]+)$/;
$endKey = $1;
if ($v eq "2") # BBU present
{
$statusOid = $bbuStatusOid.".".$endKey;
$tmpresult = $self->{snmp}->get_leef(oids =>[$statusOid]);
my $tmpEachstate;
if ($tmpresult->{$statusOid} eq "0")
{
$tmpEachstate="ok";
}
else
{
$tmpEachstate="warning";
}
$tmpMsg =$tmpMsg. "BBU ".$endKey.":".$tmpEachstate." ";
$tmpShortMessage=$tmpShortMessage.$tmpMsg;
}elsif ($v eq "1")
{
$tmpShortMessage= $tmpShortMessage."BBU".$1.":absent ";
}else
{
$tmpShortMessage= $tmpShortMessage."BBU".$1.":unknown ";
}
}
}
$result = $self->{snmp}->get_table(oid =>$raidStatusOid);
my $raidseverity = "undefine";
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get raid Status failed."
}else
{
while (my($k,$v)= each %$result){
$k =~ /\.([0-9]+)$/;
if ($v eq "65535")
{
if( $raidseverity ne "warning")
{
$raidseverity = "unknown";
}
$tmpShortMessage = "RAID".$1.":unknown ".$tmpShortMessage;
}elsif ($v eq "0")
{
if (($raidseverity ne "warning")&&($raidseverity ne "unknown"))
{
$raidseverity = "ok";
}
$tmpShortMessage = "RAID".$1.":ok ".$tmpShortMessage;
}else
{
$raidseverity = "warning";
$tmpShortMessage = "RAID".$1.":warning ".$tmpShortMessage;
}
}
}
if ($raidseverity eq "undefine")
{
$raidseverity = "unknown";
}
$self->{output}->output_add(severity => $raidseverity ,
short_msg => $tmpShortMessage );
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,35 @@
package hardware::server::huawei::ibmc::snmp::mode::components::system;
use strict;
use warnings;
sub check {
my ($self) = @_;
my %statusHash = ("1"=>"ok","2"=>"warning","3"=>"warning","4"=>"critical");
my %powerHash = ("1"=>"normalPowerOff","2"=>"powerOn","3"=>"forcedSystemReset","4"=>"forcedPowerCycle","5"=>"forcedPowerOff");
my $systemStatusOid = ".1.3.6.1.4.1.2011.2.235.1.1.1.1.0";
my $deviceNameOid = ".1.3.6.1.4.1.2011.2.235.1.1.1.6.0";
my $deviceSerialNo = ".1.3.6.1.4.1.2011.2.235.1.1.1.7.0";
my $systemPowerState = ".1.3.6.1.4.1.2011.2.235.1.1.1.12.0";
my $tmpShortMessage = "";
my $result = $self->{snmp}->get_leef(oids =>[$systemStatusOid,$deviceNameOid,$deviceSerialNo,$systemPowerState]);
if (scalar(keys %$result) <= 0)
{
$tmpShortMessage = $tmpShortMessage."Get system info failed.";
}else
{
$tmpShortMessage = "deviceName:".$result->{$deviceNameOid}." deviceSerialNo:".$result->{$deviceSerialNo}." systemPowerStatus:".$powerHash{$result->{$systemPowerState}};
}
$self->{output}->output_add(severity => $statusHash{$result->{$systemStatusOid}},
short_msg => $tmpShortMessage);
$self->{output}->display();
$self->{output}->exit();
}
1;

View File

@ -0,0 +1,65 @@
package hardware::server::huawei::ibmc::snmp::mode::hardwares;
use base qw(centreon::plugins::mode);
use strict;
use warnings;
use hardware::server::huawei::ibmc::snmp::mode::components::system;
use hardware::server::huawei::ibmc::snmp::mode::components::cpu;
use hardware::server::huawei::ibmc::snmp::mode::components::fan;
use hardware::server::huawei::ibmc::snmp::mode::components::raid;
use hardware::server::huawei::ibmc::snmp::mode::components::memory;
use hardware::server::huawei::ibmc::snmp::mode::components::psu;
use hardware::server::huawei::ibmc::snmp::mode::components::disk;
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class;
$self->{version} = '1.0';
$options{options}->add_options(arguments =>
{
"component:s" => { name => 'component', default => 'system' },
});
$self->{components} = {};
$self->{no_components} = undef;
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::init(%options);
}
sub run {
my ($self, %options) = @_;
$self->{snmp} = $options{snmp};
if ($self->{option_results}->{component} eq 'system') {
hardware::server::huawei::ibmc::snmp::mode::components::system::check($self);
} elsif ($self->{option_results}->{component} eq 'cpu') {
hardware::server::huawei::ibmc::snmp::mode::components::cpu::check($self);
} elsif ($self->{option_results}->{component} eq 'fan') {
hardware::server::huawei::ibmc::snmp::mode::components::fan::check($self);
} elsif ($self->{option_results}->{component} eq 'raid') {
hardware::server::huawei::ibmc::snmp::mode::components::raid::check($self);
} elsif ($self->{option_results}->{component} eq 'memory') {
hardware::server::huawei::ibmc::snmp::mode::components::memory::check($self);
} elsif ($self->{option_results}->{component} eq 'psu') {
hardware::server::huawei::ibmc::snmp::mode::components::psu::check($self);
} elsif ($self->{option_results}->{component} eq 'disk') {
hardware::server::huawei::ibmc::snmp::mode::components::disk::check($self);
} else {
$self->{output}->add_option_msg(short_msg => "Wrong option. Cannot find component '" . $self->{option_results}->{component} . "'.");
$self->{output}->option_exit();
}
$self->{output}->display();
$self->{output}->exit();
}
1;
__END__

View File

@ -0,0 +1,28 @@
package hardware::server::huawei::ibmc::snmp::plugin;
use strict;
use warnings;
use base qw(centreon::plugins::script_snmp);
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class;
$self->{version} = '1.0';
%{$self->{modes}} = (
'hardwares' => 'hardware::server::huawei::ibmc::snmp::mode::hardwares',
);
return $self;
}
1;
__END__
=head1 PLUGIN DESCRIPTION
Check HUAWEI servers in SNMP.
=cut