Improved rvitals for blades . Now can differentiate between blade node and blade AMM (each has different vitals). More vitals supported (ie. leds, cooling, power etc.).
TODO: update man page (how?) git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2134 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
93c1dfcd01
commit
580ba6bea2
@ -48,6 +48,14 @@ my %macmap; #Store responses from rinv for discovery
|
||||
my $macmaptimestamp; #reflect freshness of cache
|
||||
my $mmprimoid = '1.3.6.1.4.1.2.3.51.2.22.5.1.1.4';#mmPrimary
|
||||
my $beaconoid = '1.3.6.1.4.1.2.3.51.2.2.8.2.1.1.11'; #ledBladeIdentity
|
||||
my $erroroid = '1.3.6.1.4.1.2.3.51.2.2.8.2.1.1.7'; #ledBladeError
|
||||
my $infooid = '1.3.6.1.4.1.2.3.51.2.2.8.2.1.1.8'; #ledBladeInfo
|
||||
my $kvmoid = '1.3.6.1.4.1.2.3.51.2.2.8.2.1.1.9'; #ledBladeKVM
|
||||
my $mtoid = '1.3.6.1.4.1.2.3.51.2.2.8.2.1.1.10'; #ledBladeMT
|
||||
my $chassiserroroid = '1.3.6.1.4.1.2.3.51.2.2.8.1.1.0'; #ChassisLedError
|
||||
my $chassisinfooid = '1.3.6.1.4.1.2.3.51.2.2.8.1.2.0'; #ChassisLedInfo
|
||||
my $chassistempledoid = '1.3.6.1.4.1.2.3.51.2.2.8.1.3.0'; #ChassisLedTemperature
|
||||
my $chassisbeaconoid = '1.3.6.1.4.1.2.3.51.2.2.8.1.4.0'; #ChassisLedIdentity
|
||||
my $powerstatoid = '1.3.6.1.4.1.2.3.51.2.22.1.5.1.1.4';#bladePowerState
|
||||
my $powerchangeoid = '1.3.6.1.4.1.2.3.51.2.22.1.6.1.1.7';#powerOnOffBlade
|
||||
my $powerresetoid = '1.3.6.1.4.1.2.3.51.2.22.1.6.1.1.8';#restartBlade
|
||||
@ -644,14 +652,44 @@ sub vitals {
|
||||
my @output;
|
||||
my $tmp;
|
||||
my @vitems;
|
||||
foreach (@_) {
|
||||
if ($_ eq 'all') {
|
||||
push @vitems,qw(temp wattage voltage fan summary);
|
||||
} else {
|
||||
push @vitems,split( /,/,$_);
|
||||
|
||||
if ( $#_ == 0 && $_[0] eq '' ) { pop @_; push @_,"all" } #-- default is all if no argument given
|
||||
|
||||
if ( defined $slot ) { #-- blade query
|
||||
foreach (@_) {
|
||||
if ($_ eq 'all') {
|
||||
push @vitems,qw(temp voltage wattage summary);
|
||||
push @vitems,qw(errorled beaconled infoled kvmled mtled);
|
||||
} elsif ($_ =~ '^led') {
|
||||
push @vitems,qw(errorled beaconled infoled kvmled mtled);
|
||||
} else {
|
||||
push @vitems,split( /,/,$_);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (grep /watt/,@vitems) {
|
||||
} else { #-- chassis query
|
||||
foreach (@_) {
|
||||
if ($_ eq 'all') {
|
||||
push @vitems,qw(voltage wattage power summary);
|
||||
push @vitems,qw(errorled beaconled infoled templed);
|
||||
push @vitems,qw(fan blower);
|
||||
push @vitems,qw(ammtemp ambient);
|
||||
} elsif ($_ =~ '^led') {
|
||||
push @vitems,qw(errorled beaconled infoled templed);
|
||||
} elsif ($_ =~ '^cool') {
|
||||
push @vitems,qw(fan blower);
|
||||
} elsif ($_ =~ '^temp') {
|
||||
push @vitems,qw(ammtemp ambient);
|
||||
} else {
|
||||
push @vitems,split( /,/,$_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my $tmp;
|
||||
|
||||
if ( defined $slot ) { #-- querying some blade
|
||||
|
||||
if (grep /watt/,@vitems) {
|
||||
if ($slot < 8) {
|
||||
$tmp = $session->get(["1.3.6.1.4.1.2.3.51.2.2.10.2.1.1.7.".($slot+16)]);
|
||||
} else {
|
||||
@ -662,60 +700,224 @@ sub vitals {
|
||||
$tmp = "$1 Watts (". int($tmp * 3.413+0.5)." BTUs/hr)";
|
||||
}
|
||||
$tmp =~ s/^/Power Usage:/;
|
||||
|
||||
|
||||
push @output,"$tmp";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (grep /fan/,@vitems or grep /blower/,@vitems) {
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.3.1.0']);
|
||||
push @output,"Blower 1: $tmp";
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.3.2.0']);
|
||||
push @output,"Blower 2: $tmp";
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.3.3.0']);
|
||||
if ($tmp and $tmp !~ /NOSUCHINSTANCE/) { push @output,"Blower 3: $tmp"; }
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.3.4.0']);
|
||||
if ($tmp and $tmp !~ /NOSUCHINSTANCE/) { push @output,"Blower 4: $tmp"; }
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.6.1.1.5.1']);
|
||||
push @output,"Fan Pack 1: $tmp";
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.6.1.1.5.2']);
|
||||
push @output,"Fan Pack 2: $tmp";
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.6.1.1.5.3']);
|
||||
push @output,"Fan Pack 3: $tmp";
|
||||
$tmp=$session->get(['1.3.6.1.4.1.2.3.51.2.2.6.1.1.5.4']);
|
||||
push @output,"Fan Pack 4: $tmp";
|
||||
}
|
||||
if (grep /volt/,@vitems) {
|
||||
for my $idx (15..40) {
|
||||
$tmp=$session->get([".1.3.6.1.4.1.2.3.51.2.22.1.5.5.1.$idx.$slot"]);
|
||||
unless ((not $tmp) or $tmp =~ /Not Readable/) {
|
||||
$tmp =~ s/ = /:/;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
}
|
||||
if (grep /voltage/,@vitems) {
|
||||
for my $idx (15..40) {
|
||||
$tmp=$session->get([".1.3.6.1.4.1.2.3.51.2.22.1.5.5.1.$idx.$slot"]);
|
||||
unless ((not $tmp) or $tmp =~ /Not Readable/) {
|
||||
$tmp =~ s/ = /:/;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (grep /temp/,@vitems) {
|
||||
$tmp=$session->get(["1.3.6.1.4.1.2.3.51.2.2.1.5.1.0"]);
|
||||
push (@output,"Ambient: $tmp");
|
||||
if (grep /temp/,@vitems) {
|
||||
for my $idx (6..20) {
|
||||
if ($idx eq 11) {
|
||||
next;
|
||||
}
|
||||
if ($idx eq 11) {
|
||||
next;
|
||||
}
|
||||
$tmp=$session->get([".1.3.6.1.4.1.2.3.51.2.22.1.5.3.1.$idx.$slot"]);
|
||||
unless ($tmp =~ /Not Readable/) {
|
||||
$tmp =~ s/ = /:/;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (grep /summary/,@vitems) {
|
||||
}
|
||||
|
||||
if (grep /summary/,@vitems) {
|
||||
$tmp="Status: ".$session->get(['1.3.6.1.4.1.2.3.51.2.22.1.5.2.1.3.'.$slot]);
|
||||
$tmp.=", ".$session->get(['1.3.6.1.4.1.2.3.51.2.22.1.5.2.1.4.'.$slot]);
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /errorled/,@vitems) {
|
||||
my $stat = $session->get([$erroroid.".".$slot]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
$tmp="Error led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /beaconled/,@vitems) {
|
||||
my $stat = $session->get([$beaconoid.".".$slot]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
elsif ($stat==2) { $stat = "blinking"; }
|
||||
$tmp="Beacon led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /infoled/,@vitems) {
|
||||
my $stat = $session->get([$infooid.".".$slot]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
$tmp="Info led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /kvmled/,@vitems) {
|
||||
my $stat = $session->get([$kvmoid.".".$slot]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
elsif ($stat==2) { $stat = "blinking"; }
|
||||
$tmp="KVM led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /mtled/,@vitems) {
|
||||
my $stat = $session->get([$mtoid.".".$slot]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
elsif ($stat==2) { $stat = "blinking"; }
|
||||
$tmp="MT led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
} else { #-- chassis query
|
||||
|
||||
if (grep /blower/,@vitems) {
|
||||
my $blowerbase = "1.3.6.1.4.1.2.3.51.2.2.3";
|
||||
for ( my $i=1; $i<=4; $i++) { #-- Blowers
|
||||
|
||||
my $speed = $session->get([$blowerbase.".".($i+0).".0"]);
|
||||
my $state = $session->get([$blowerbase.".".($i+9).".0"]);
|
||||
my $speedrpm = $session->get([$blowerbase.".".($i+19).".0"]);
|
||||
my $cstate = $session->get([$blowerbase.".".($i+29).".0"]);
|
||||
|
||||
next if $state eq "NOSUCHINSTANCE";
|
||||
|
||||
if ($state==0) { $state = "unknown"; }
|
||||
elsif ($state==1) { $state = "good"; }
|
||||
elsif ($state==2) { $state = "warning"; }
|
||||
elsif ($state==3) { $state = "bad"; }
|
||||
|
||||
if ($cstate==0) { $cstate = "operational"; }
|
||||
elsif ($cstate==1) { $cstate = "flashing"; }
|
||||
elsif ($cstate==2) { $cstate = "notPresent"; }
|
||||
elsif ($cstate==3) { $cstate = "communicationError"; }
|
||||
elsif ($cstate==255) { $cstate = "unknown"; }
|
||||
|
||||
push @output,sprintf("Blower %d: state %s, speed %d%%, %d RPM, controller %s",$i,$state,$speed,$speedrpm,$cstate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (grep /fan/,@vitems) {
|
||||
|
||||
#-- power module fans OIDs
|
||||
my $fanpackindex = "1.3.6.1.4.1.2.3.51.2.2.6.1.1.1";
|
||||
my $fanpackexists = "1.3.6.1.4.1.2.3.51.2.2.6.1.1.2";
|
||||
my $fanpackstate = "1.3.6.1.4.1.2.3.51.2.2.6.1.1.3";
|
||||
my $fanpackfancount = "1.3.6.1.4.1.2.3.51.2.2.6.1.1.4";
|
||||
my $fanpackavspeed = "1.3.6.1.4.1.2.3.51.2.2.6.1.1.5";
|
||||
my $fanpackavspeedrpm = "1.3.6.1.4.1.2.3.51.2.2.6.1.1.6";
|
||||
my $fanpackcstate = "1.3.6.1.4.1.2.3.51.2.2.6.1.1.7";
|
||||
|
||||
for ( my $i=1; $i<=4; $i++) { #-- Power module fan packs
|
||||
my $ind = $session->get([$fanpackindex.".$i"]);
|
||||
my $exists = $session->get([$fanpackexists.".$i"]);
|
||||
my $state = $session->get([$fanpackstate.".$i"]);
|
||||
my $fancount = $session->get([$fanpackfancount.".$i"]);
|
||||
my $avspeed = $session->get([$fanpackavspeed.".$i"]);
|
||||
my $avspeedrpm = $session->get([$fanpackavspeedrpm.".$i"]);
|
||||
my $cstate = $session->get([$fanpackcstate.".$i"]);
|
||||
|
||||
$exists = $exists == 1?"present":"not present";
|
||||
|
||||
if ($state==0) { $state = "unknown"; }
|
||||
elsif ($state==1) { $state = "good"; }
|
||||
elsif ($state==2) { $state = "warning"; }
|
||||
elsif ($state==3) { $state = "bad"; }
|
||||
|
||||
if ($cstate==0) { $cstate = "operational"; }
|
||||
elsif ($cstate==1) { $cstate = "flashing"; }
|
||||
elsif ($cstate==2) { $cstate = "notPresent"; }
|
||||
elsif ($cstate==3) { $cstate = "communicationError"; }
|
||||
elsif ($cstate==255) { $cstate = "unknown"; }
|
||||
|
||||
push @output,sprintf("Power fans %d: %s, state %s, %d fans, speed %d%%, %d RPM, controller %s",$ind,$exists,$state,$fancount,$avspeed,$avspeedrpm,$cstate);
|
||||
}
|
||||
}
|
||||
|
||||
if (grep /volt/,@vitems) {
|
||||
my $voltbase = "1.3.6.1.4.1.2.3.51.2.2.2.1";
|
||||
my %voltlabels = ( 1=>"+5V", 2=>"+3.3V", 3=>"+12V", 5=>"-5V", 6=>"+2.5V", 8=>"+1.8V" );
|
||||
foreach my $idx ( keys %voltlabels ) {
|
||||
$tmp=$session->get(["$voltbase.$idx.0"]);
|
||||
unless ((not $tmp) or $tmp =~ /Not Readable/) {
|
||||
push @output,sprintf("Voltage %s: %s",$voltlabels{$idx},$tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (grep /ammtemp/,@vitems) {
|
||||
$tmp=$session->get([".1.3.6.1.4.1.2.3.51.2.2.1.1.2.0"]);
|
||||
push @output,sprintf("AMM temp: %s",$tmp) if $tmp !~ /NOSUCHINSTANCE/;
|
||||
}
|
||||
|
||||
if (grep /ambient/,@vitems) {
|
||||
my %oids = (
|
||||
"Ambient 1",".1.3.6.1.4.1.2.3.51.2.2.1.5.1.0",
|
||||
"Ambient 2",".1.3.6.1.4.1.2.3.51.2.2.1.5.2",
|
||||
);
|
||||
foreach my $oid ( keys %oids ) {
|
||||
$tmp=$session->get([$oids{$oid}]);
|
||||
push @output,sprintf("%s: %s",$oid,$tmp) if $tmp !~ /NOSUCHINSTANCE/;
|
||||
}
|
||||
}
|
||||
|
||||
if (grep /watt/,@vitems) {
|
||||
$tmp=$session->get([".1.3.6.1.4.1.2.3.51.2.2.10.5.1.2.0"]);
|
||||
push @output,sprintf("Total power used: %s (%d BTUs/hr)",$tmp,int($tmp * 3.412+0.5)) if $tmp !~ /NOSUCHINSTANCE/;
|
||||
}
|
||||
|
||||
|
||||
if (grep /power/,@vitems) {
|
||||
my %oids = (
|
||||
"PD1",".1.3.6.1.4.1.2.3.51.2.2.10.1.1.1.3.1",
|
||||
"PD2",".1.3.6.1.4.1.2.3.51.2.2.10.1.1.1.3.2",
|
||||
);
|
||||
foreach my $oid ( keys %oids ) {
|
||||
$tmp=$session->get([$oids{$oid}]);
|
||||
push @output,sprintf("%s: %s",$oid,$tmp) if $tmp !~ /NOSUCHINSTANCE/;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (grep /errorled/,@vitems) {
|
||||
my $stat = $session->get([$chassiserroroid]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
$tmp="Error led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /infoled/,@vitems) {
|
||||
my $stat = $session->get([$chassisinfooid]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
$tmp="Info led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /templed/,@vitems) {
|
||||
my $stat = $session->get([$chassistempledoid]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
$tmp="Temp led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /beaconled/,@vitems) {
|
||||
my $stat = $session->get([$chassisbeaconoid]);
|
||||
if ($stat==0) { $stat = "off"; } elsif ($stat==1) { $stat = "on"; }
|
||||
elsif ($stat==2) { $stat = "blinking"; } elsif ($stat==3) { $stat = "not available"; }
|
||||
$tmp="Beacon led: ".$stat;
|
||||
push @output,"$tmp";
|
||||
}
|
||||
|
||||
if (grep /summary/,@vitems) {
|
||||
$tmp=$session->get([".1.3.6.1.4.1.2.3.51.2.2.7.1.0"]);
|
||||
if ($tmp==0) { $tmp = "critical"; } elsif ($tmp==2) { $tmp = "nonCritical"; }
|
||||
elsif ($tmp==4) { $tmp = "systemLevel"; } elsif ($tmp==255) { $tmp = "normal"; }
|
||||
push @output,"Status: $tmp";
|
||||
}
|
||||
}
|
||||
return(0,@output);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user