mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-25 21:22:05 +00:00
Merge pull request #3134 from whowutwut/rvitals_options
Add support for the rvitals option for openbmc based on the defined API
This commit is contained in:
commit
c5d40aa00b
@ -56,20 +56,27 @@ BMC specific:
|
||||
\ **rvitals**\ \ *noderange*\ {\ **temp | voltage | wattage | fanspeed | power | leds | all**\ }
|
||||
|
||||
|
||||
OpenPOWER server specific:
|
||||
OpenPOWER (IPMI) specific:
|
||||
==========================
|
||||
|
||||
|
||||
\ **rvitals**\ \ *noderange*\ [\ **temp | voltage | wattage | fanspeed | power | leds | all**\ ]
|
||||
|
||||
|
||||
OpenPOWER (OpenBMC) specific:
|
||||
=============================
|
||||
|
||||
|
||||
\ **rvitals**\ \ *noderange*\ [\ **temp | voltage | wattage | fanspeed | power | altitude | all**\ ]
|
||||
|
||||
|
||||
|
||||
*******************
|
||||
\ **Description**\
|
||||
*******************
|
||||
|
||||
|
||||
\ **rvitals**\ retrieves hardware vital information from the on-board Service
|
||||
\ **rvitals**\ Retrieves hardware vital information from the on-board Service
|
||||
Processor for a single or range of nodes and groups.
|
||||
|
||||
|
||||
@ -133,6 +140,12 @@ Processor for a single or range of nodes and groups.
|
||||
|
||||
|
||||
|
||||
\ **altitude**\
|
||||
|
||||
Retrieves altitude related attributes.
|
||||
|
||||
|
||||
|
||||
\ **power**\
|
||||
|
||||
Retrieves power status.
|
||||
|
@ -375,7 +375,6 @@ sub rackenv {
|
||||
push @result, [ $name, $td, $Rc ];
|
||||
if (!exists($request->{verbose})) {
|
||||
|
||||
#if( $td =~ /^Rack altitude in meters/ ) {
|
||||
if ($td =~ /^BPA-B total output in watts/) {
|
||||
last;
|
||||
}
|
||||
|
@ -81,8 +81,10 @@ my %usage = (
|
||||
rvitals noderange {temp|wattage|fanspeed|leds|summary|all}
|
||||
BMC specific:
|
||||
rvitals noderange {temp|voltage|wattage|fanspeed|power|leds|all}
|
||||
OpenPOWER server specific:
|
||||
OpenPOWER (IPMI) specific:
|
||||
rvitals noderange [temp|voltage|wattage|fanspeed|power|leds|all]
|
||||
OpenPOWER (OpenBMC) specific:
|
||||
rvitals noderange [temp|voltage|wattage|fanspeed|power|altitude|all]
|
||||
MIC specific:
|
||||
rvitals noderange {thermal|all}",
|
||||
"reventlog" =>
|
||||
|
@ -26,13 +26,17 @@ B<rvitals> I<noderange> {B<temp>|B<wattage>|B<fanspeed>|B<leds>|B<summary>|B<all
|
||||
|
||||
B<rvitals> I<noderange> {B<temp>|B<voltage>|B<wattage>|B<fanspeed>|B<power>|B<leds>|B<all>}
|
||||
|
||||
=head2 OpenPOWER server specific:
|
||||
=head2 OpenPOWER (IPMI) specific:
|
||||
|
||||
B<rvitals> I<noderange> [B<temp>|B<voltage>|B<wattage>|B<fanspeed>|B<power>|B<leds>|B<all>]
|
||||
|
||||
=head2 OpenPOWER (OpenBMC) specific:
|
||||
|
||||
B<rvitals> I<noderange> [B<temp>|B<voltage>|B<wattage>|B<fanspeed>|B<power>|B<altitude>|B<all>]
|
||||
|
||||
=head1 B<Description>
|
||||
|
||||
B<rvitals> retrieves hardware vital information from the on-board Service
|
||||
B<rvitals> Retrieves hardware vital information from the on-board Service
|
||||
Processor for a single or range of nodes and groups.
|
||||
|
||||
=head1 B<Options>
|
||||
@ -75,6 +79,10 @@ Retrieves rack environmentals.
|
||||
|
||||
Retrieves LEDs status.
|
||||
|
||||
=item B<altitude>
|
||||
|
||||
Retrieves altitude related attributes.
|
||||
|
||||
=item B<power>
|
||||
|
||||
Retrieves power status.
|
||||
|
@ -37,6 +37,8 @@ $::POWER_STATE_POWERING_ON="powering-on";
|
||||
$::POWER_STATE_QUIESCED="quiesced";
|
||||
$::POWER_STATE_RESET="reset";
|
||||
|
||||
$::NO_ATTRIBUTES_RETURNED="No attributes returned from the BMC.";
|
||||
|
||||
sub unsupported {
|
||||
my $callback = shift;
|
||||
if (defined($::OPENBMC_DEVEL) && ($::OPENBMC_DEVEL eq "YES")) {
|
||||
@ -458,7 +460,7 @@ sub parse_args {
|
||||
} elsif ($command eq "rvitals") {
|
||||
$check = unsupported($callback); if (ref($check) eq "ARRAY") { return $check; }
|
||||
$subcommand = "all" if (!defined($ARGV[0]));
|
||||
unless ($subcommand =~ /^temp$|^voltage$|^wattage$|^fanspeed$|^power$|^leds$|^all$/) {
|
||||
unless ($subcommand =~ /^temp$|^voltage$|^wattage$|^fanspeed$|^power$|^altitude$|^all$/) {
|
||||
return ([ 1, "Unsupported command: $command $subcommand" ]);
|
||||
}
|
||||
} else {
|
||||
@ -1209,26 +1211,61 @@ sub rvitals_response {
|
||||
my $grep_string = $status_info{RVITALS_RESPONSE}{argv};
|
||||
my $src;
|
||||
my $content_info;
|
||||
my $sensor_value;
|
||||
my @sorted_output;
|
||||
|
||||
print "$node: DEBUG Processing command: rvitals $grep_string \n";
|
||||
print Dumper(%{$response_info->{data}}) . "\n";
|
||||
print Dumper(%{$response_info->{data}});
|
||||
|
||||
foreach my $key_url (keys %{$response_info->{data}}) {
|
||||
my %content = %{ ${ $response_info->{data} }{$key_url} };
|
||||
print Dumper(%content) . "\n";
|
||||
# $key_url is "/xyz/openbmc_project/sensors/xxx/yyy
|
||||
# For now display xxx/yyy as a label
|
||||
my ($junk, $label) = split("/sensors/", $key_url);
|
||||
|
||||
#
|
||||
# Calculate the value based on the scale
|
||||
# Skip over attributes that are not asked to be printed
|
||||
#
|
||||
if ($grep_string =~ "temp") {
|
||||
unless ( $content{Unit} =~ "DegreesC") { next; }
|
||||
}
|
||||
if ($grep_string =~ "voltage") {
|
||||
unless ( $content{Unit} =~ "Volts") { next; }
|
||||
}
|
||||
if ($grep_string =~ "wattage") {
|
||||
unless ( $content{Unit} =~ "Watts") { next; }
|
||||
}
|
||||
if ($grep_string =~ "fanspeed") {
|
||||
unless ( $content{Unit} =~ "RPMS") { next; }
|
||||
}
|
||||
if ($grep_string =~ "power") {
|
||||
unless ( $content{Unit} =~ "Amperes" || $content{Unit} =~ "Joules" || $content{Unit} =~ "Watts" ) { next; }
|
||||
}
|
||||
if ($grep_string =~ "altitude") {
|
||||
unless ( $content{Unit} =~ "Meters" ) { next; }
|
||||
}
|
||||
|
||||
my $label = (split(/\//, $key_url))[ -1 ];
|
||||
|
||||
# replace underscore with space, uppercase the first letter
|
||||
$label =~ s/_/ /g;
|
||||
$label =~ s/\b(\w)/\U$1/g;
|
||||
|
||||
#
|
||||
# Calculate the adjusted value based on the scale attribute
|
||||
#
|
||||
my $calc_value = $content{Value};
|
||||
if ( $content{Scale} != 0 ) {
|
||||
$calc_value = ($content{Value} * (10 ** $content{Scale}));
|
||||
}
|
||||
$sensor_value = $label . ": " . $calc_value . " " . $sensor_units{ $content{Unit} };
|
||||
xCAT::SvrUtils::sendmsg("$sensor_value", $callback, $node);
|
||||
|
||||
$content_info = $label . ": " . $calc_value . " " . $sensor_units{ $content{Unit} };
|
||||
push (@sorted_output, $content_info); #Save output in array
|
||||
}
|
||||
# If sorted array has any contents, sort it and print it
|
||||
if (scalar @sorted_output > 0) {
|
||||
# Sort the output, alpha, then numeric
|
||||
my @sorted_output = grep {s/(^|\D)0+(\d)/$1$2/g,1} sort
|
||||
grep {s/(\d+)/sprintf"%06.6d",$1/ge,1} @sorted_output;
|
||||
xCAT::SvrUtils::sendmsg("$_", $callback, $node) foreach (@sorted_output);
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("$::NO_ATTRIBUTES_RETURNED", $callback, $node);
|
||||
}
|
||||
|
||||
if ($next_status{ $node_info{$node}{cur_status} }) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user