Add man page for P8 energy; some minor fixes in CIMUtils.pm and energy.pm
This commit is contained in:
parent
630f2c2776
commit
175ac75c8e
@ -312,6 +312,20 @@ sub set_property
|
||||
return $ret;
|
||||
}
|
||||
|
||||
# parse the http response
|
||||
my $ret_value;
|
||||
my $parser = XML::LibXML->new();
|
||||
my $resp_doc = $parser->parse_string($ret->{payload});
|
||||
|
||||
# check the error message from CIM
|
||||
my $error_node = $resp_doc->getElementsByTagName("ERROR");
|
||||
if ($error_node) {
|
||||
my $msg = $error_node->[0]->getAttribute("DESCRIPTION");
|
||||
my $errorcode = $error_node->[0]->getAttribute("CODE");
|
||||
return ({rc => 1, cim_rc => $errorcode, msg => $error_node->[0]->getAttribute("DESCRIPTION")." [cim return code: $errorcode]"});
|
||||
}
|
||||
|
||||
|
||||
# if no http and cim error, the setting was succeeded
|
||||
return ($ret);
|
||||
}
|
||||
|
@ -333,12 +333,16 @@ my %usage = (
|
||||
renergy [-v | --version]
|
||||
|
||||
Power 6 server specific :
|
||||
renergy noderange [-V] { all | { [savingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed] } }
|
||||
renergy noderange [-V] { {savingstatus}={on | off} | {cappingstatus}={on | off} | {cappingwatt}=watt | {cappingperc}=percentage }
|
||||
renergy noderange [-V] { all | { [savingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed] } }
|
||||
renergy noderange [-V] { {savingstatus}={on | off} | {cappingstatus}={on | off} | {cappingwatt}=watt | {cappingperc}=percentage }
|
||||
|
||||
Power 7 server specific :
|
||||
renergy noderange [-V] { all | { [savingstatus] [dsavingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed] [syssbpower] [sysIPLtime] [fsavingstatus] [ffoMin] [ffoVmin] [ffoTurbo] [ffoNorm] [ffovalue] } }
|
||||
renergy noderange [-V] { {savingstatus}={on | off} | {dsavingstatus}={on-norm | on-maxp | off} | {fsavingstatus}={on | off} | {ffovalue}=MHZ | {cappingstatus}={on | off} | {cappingwatt}=watt | {cappingperc}=percentage }
|
||||
renergy noderange [-V] { all | { [savingstatus] [dsavingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed] [syssbpower] [sysIPLtime] [fsavingstatus] [ffoMin] [ffoVmin] [ffoTurbo] [ffoNorm] [ffovalue] } }
|
||||
renergy noderange [-V] { {savingstatus}={on | off} | {dsavingstatus}={on-norm | on-maxp | off} | {fsavingstatus}={on | off} | {ffovalue}=MHZ | {cappingstatus}={on | off} | {cappingwatt}=watt | {cappingperc}=percentage }
|
||||
|
||||
Power 8 server specific :
|
||||
renergy noderange [-V] { all | [savingstatus] [dsavingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageAChistory] [averageDC] [averageDChistory] [ambienttemp] [ambienttemphistory] [exhausttemp] [exhausttemphistory] [fanspeed] [fanspeedhistory] [CPUspeed] [CPUspeedhistory] [syssbpower] [sysIPLtime] [fsavingstatus] [ffoMin] [ffoVmin] [ffoTurbo] [ffoNorm] [ffovalue]}
|
||||
renergy noderange [-V] { savingstatus={on | off} | dsavingstatus={on-norm | on-maxp | off} | fsavingstatus={on | off} | ffovalue=MHZ }
|
||||
|
||||
BladeCenter specific :
|
||||
For Management Modules:
|
||||
|
@ -27,17 +27,35 @@ B<Power 7 server specific :>
|
||||
|
||||
=over 2
|
||||
|
||||
B<renergy> I<noderange> [-V] { all | [savingstatus] [dsavingstatus]
|
||||
[cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin]
|
||||
[averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed]
|
||||
[syssbpower] [sysIPLtime] [fsavingstatus] [ffoMin] [ffoVmin]
|
||||
[ffoTurbo] [ffoNorm] [ffovalue]}
|
||||
|
||||
B<renergy> I<noderange> [-V] { savingstatus={on | off}
|
||||
| dsavingstatus={on-norm | on-maxp | off}
|
||||
| fsavingstatus={on | off} | ffovalue=MHZ
|
||||
| cappingstatus={on | off} | cappingwatt=watt
|
||||
| cappingperc=percentage }
|
||||
|
||||
=back
|
||||
|
||||
B<Power 8 server specific :>
|
||||
|
||||
=over 2
|
||||
|
||||
B<renergy> I<noderange> [-V] { all | [savingstatus] [dsavingstatus]
|
||||
[cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin]
|
||||
[averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed]
|
||||
[averageAC] [averageAChistory] [averageDC] [averageDChistory]
|
||||
[ambienttemp] [ambienttemphistory] [exhausttemp] [exhausttemphistory]
|
||||
[fanspeed] [fanspeedhistory] [CPUspeed] [CPUspeedhistory]
|
||||
[syssbpower] [sysIPLtime] [fsavingstatus] [ffoMin] [ffoVmin]
|
||||
[ffoTurbo] [ffoNorm] [ffovalue]}
|
||||
|
||||
B<renergy> I<noderange> [-V] { savingstatus={on | off}
|
||||
| dsavingstatus={on-norm | on-maxp | off}
|
||||
| fsavingstatus={on | off} | ffovalue=MHZ
|
||||
| cappingstatus={on | off} | cappingwatt=watt
|
||||
| cappingperc=percentage }
|
||||
| fsavingstatus={on | off} | ffovalue=MHZ }
|
||||
|
||||
=back
|
||||
|
||||
@ -127,10 +145,11 @@ user can query and set the power saving and power capping status, and also can
|
||||
query the average consumed energy, the ambient and exhaust temperature,
|
||||
the processor frequency for a server.
|
||||
|
||||
B<renergy> command supports IBM POWER6 and POWER7 rack-mounted servers,
|
||||
B<renergy> command supports IBM POWER6, POWER7 and POWER8 rack-mounted servers,
|
||||
BladeCenter management modules, blade servers, and iDataPlex servers.
|
||||
For system p rack-mounted servers, the following specific hardware types are supported:
|
||||
For I<Power6> and I<Power7> rack-mounted servers, the following specific hardware types are supported:
|
||||
I<8203-E4A>, I<8204-E8A>, I<9125-F2A>, I<8233-E8B>, I<8236-E8C>.
|
||||
For I<Power8> server, there's no hardware type restriction.
|
||||
|
||||
The parameter I<noderange> needs to be specified for the B<renergy> command to
|
||||
get the target servers. The I<noderange> should be a list of CEC node names, blade
|
||||
@ -234,11 +253,13 @@ will get response immediately.
|
||||
|
||||
=head1 B<PREREQUISITES>
|
||||
|
||||
For the system p nodes, the B<renergy> command depends
|
||||
For the I<Power6> and I<Power7> nodes, the B<renergy> command depends
|
||||
on the Energy Management Plugin B<xCAT-pEnergy> to
|
||||
communicate with server. B<xCAT-pEnergy> can be downloaded from the IBM web site:
|
||||
http://www.ibm.com/support/fixcentral/. (Other Software -> EM)
|
||||
|
||||
NOTE: I<Power8> nodes don't need this specific energy management package.
|
||||
|
||||
For iDataPlex nodes, the B<renergy> command depends
|
||||
on the Energy Management Plugin B<xCAT-xEnergy> to
|
||||
communicate with server. This plugin must be requested from IBM.
|
||||
@ -282,6 +303,10 @@ management module node.
|
||||
|
||||
Query the current ambient temperature. (Unit is centigrade)
|
||||
|
||||
=item B<ambienttemphistory>
|
||||
|
||||
Query the historical records which were generated in last one hour for B<ambienttemp>.
|
||||
|
||||
=item B<availableDC>
|
||||
|
||||
Query the total DC power available for the entire blade center chassis.
|
||||
@ -298,10 +323,18 @@ averageAC is the total AC power being consumed by all modules
|
||||
in the chassis. It also includes power consumed by the Chassis
|
||||
Cooling Devices for BCH chassis.
|
||||
|
||||
=item B<averageAChistory>
|
||||
|
||||
Query the historical records which were generated in last one hour for B<averageAC>.
|
||||
|
||||
=item B<averageDC>
|
||||
|
||||
Query the average power consumed (Output). (Unit is watt)
|
||||
|
||||
=item B<averageDChistory>
|
||||
|
||||
Query the historical records which were generated in last one hour for B<averageDC>.
|
||||
|
||||
=item B<capability>
|
||||
|
||||
Query the Power Capabilities of the blade server.
|
||||
@ -380,6 +413,10 @@ guaranteed.
|
||||
|
||||
Query the effective processor frequency. (Unit is MHz)
|
||||
|
||||
=item B<CPUspeedhistory>
|
||||
|
||||
Query the historical records which were generated in last one hour for B<CPUspeed>
|
||||
|
||||
=item B<dsavingstatus>
|
||||
|
||||
Query the dynamic power saving status. The result should
|
||||
@ -410,6 +447,21 @@ B<savingstatus> is in turn off status.
|
||||
|
||||
Query the current exhaust temperature. (Unit is centigrade)
|
||||
|
||||
=item B<exhausttemphistory>
|
||||
|
||||
Query the historical records which were generated in last one hour for B<exhausttemp>
|
||||
|
||||
=item B<fanspeed>
|
||||
|
||||
Query the fan speed for all the fans which installed in this node. (Unit is RPM - Rotations Per Minute))
|
||||
|
||||
If there are multiple fans for a node, multiple lines will be output. And a fan name in bracket will be
|
||||
appended after B<fanspped> attribute name.
|
||||
|
||||
=item B<fanspeedhistory>
|
||||
|
||||
Query the historical records which were generated in last one hour for B<fanspeed>.
|
||||
|
||||
=item B<ffoMin>
|
||||
|
||||
Query the minimum cpu frequency which can be set for FFO. (Fixed
|
||||
@ -455,7 +507,7 @@ The ffovalue setting operation needs about 1 minute to take effect.
|
||||
Query the status of FFO. The result should be 'on' or 'off'.
|
||||
'on' - enable; 'off' - disable.
|
||||
|
||||
=item B<fsavingstatus>={B<on> │ B<off>}
|
||||
=item B<fsavingstatus>={B<on> | B<off>}
|
||||
|
||||
Set the status of FFO. The value must be 'on' or 'off'.
|
||||
|
||||
@ -574,7 +626,7 @@ Query the time used from FSP standby to OS standby.
|
||||
=item B<syssbpower>
|
||||
|
||||
Query the system power consumed prior to power on.
|
||||
(Unit is MHz)
|
||||
(Unit is Watt)
|
||||
|
||||
=item B<thermaloutput>
|
||||
|
||||
@ -595,7 +647,7 @@ center chassis.
|
||||
|
||||
=item 1
|
||||
|
||||
Query all the attributes which CEC1,CEC2 supported.
|
||||
Query all attributes which CEC1,CEC2 supported.
|
||||
|
||||
B<renergy> CEC1,CEC2 all
|
||||
|
||||
@ -629,6 +681,43 @@ The output of the query operation:
|
||||
|
||||
=item 2
|
||||
|
||||
Query the B<fanspeed> attribute for Power8 CEC.
|
||||
|
||||
B<renergy> CEC1 fanspeed
|
||||
|
||||
The output of the query operation:
|
||||
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-A1 00002101): 5947 RPM
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-A2 00002103): 6081 RPM
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-A3 00002105): 6108 RPM
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-A4 00002107): 6000 RPM
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-A5 00002109): 6013 RPM
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-A6 0000210B): 6013 RPM
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-E1 0000210C): 4992 RPM
|
||||
CEC1: fanspeed (Fan U78CB.001.WZS00MA-E2 0000210D): 5016 RPM
|
||||
|
||||
=item 3
|
||||
|
||||
Query the historical records for the B<CPUspeed> attribute. (Power8 CEC)
|
||||
|
||||
B<renergy> CEC1 CPUspeedhistory
|
||||
|
||||
The output of the query operation:
|
||||
|
||||
CEC1: CPUspeedhistory: 2027 MHZ: 20141226042900
|
||||
CEC1: CPUspeedhistory: 2027 MHZ: 20141226042930
|
||||
CEC1: CPUspeedhistory: 2244 MHZ: 20141226043000
|
||||
CEC1: CPUspeedhistory: 2393 MHZ: 20141226043030
|
||||
CEC1: CPUspeedhistory: 2393 MHZ: 20141226043100
|
||||
CEC1: CPUspeedhistory: 2393 MHZ: 20141226043130
|
||||
CEC1: CPUspeedhistory: 2393 MHZ: 20141226043200
|
||||
CEC1: CPUspeedhistory: 2393 MHZ: 20141226043230
|
||||
CEC1: CPUspeedhistory: 2393 MHZ: 20141226043300
|
||||
CEC1: CPUspeedhistory: 2393 MHZ: 20141226043330
|
||||
...
|
||||
|
||||
=item 4
|
||||
|
||||
Query all the attirbutes for management module node MM1. (For chassis)
|
||||
|
||||
B<renergy> MM1 all
|
||||
@ -658,7 +747,7 @@ The output of the query operation:
|
||||
in this power domain.
|
||||
mm1: thermaloutput: 9717.376000 BTU/hour
|
||||
|
||||
=item 3
|
||||
=item 5
|
||||
|
||||
Query all the attirbutes for blade server node blade1.
|
||||
|
||||
@ -674,7 +763,7 @@ The output of the query operation:
|
||||
blade1: maxCPUspeed: 4204MHZ
|
||||
blade1: savingstatus: off
|
||||
|
||||
=item 4
|
||||
=item 6
|
||||
|
||||
Query the attributes savingstatus, cappingstatus
|
||||
and CPUspeed for server CEC1.
|
||||
@ -687,7 +776,7 @@ The output of the query operation:
|
||||
CEC1: cappingstatus: on
|
||||
CEC1: CPUspeed: 3621 MHz
|
||||
|
||||
=item 5
|
||||
=item 7
|
||||
|
||||
Turn on the power saving function of CEC1.
|
||||
|
||||
@ -698,7 +787,7 @@ The output of the setting operation:
|
||||
CEC1: Set savingstatus succeeded.
|
||||
CEC1: This setting may need some minutes to take effect.
|
||||
|
||||
=item 6
|
||||
=item 8
|
||||
|
||||
Set the power capping value base on the percentage of the
|
||||
max-min capping value. Here, set it to 50%.
|
||||
|
@ -194,6 +194,10 @@ sub parse_args {
|
||||
# replace the 'all' with all valid attribute
|
||||
if ($attr eq "all") {
|
||||
foreach my $q_attr (keys %QUERY_ATTRS) {
|
||||
# do not include 'history' related attributes for all keyword
|
||||
if ($q_attr =~ /history$/) {
|
||||
next;
|
||||
}
|
||||
if (!grep (/^$q_attr$/, @query_list)) {
|
||||
push @query_list, $q_attr;
|
||||
}
|
||||
@ -657,6 +661,7 @@ sub run_cim
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
delete $http_params->{timeout};
|
||||
# check whether the primary ip of fsp is the IP we are accessing
|
||||
if (defined ($value->[0]->{property}->{PrimaryFSP_IP}->{value}) && $value->[0]->{property}->{PrimaryFSP_IP}->{value} ne $http_params->{ip}) {
|
||||
# run against the standby fsp, do the next one
|
||||
@ -806,13 +811,13 @@ sub run_cim
|
||||
my @ffo_point_value = split (',', $query_pum_value->{FixedFrequencyPointValues});
|
||||
foreach my $index (0..$#ffo_point) {
|
||||
if ($ffo_point[$index] eq '2' && $attr eq 'ffoNorm') { # Norminal
|
||||
push @output, "$node: $attr: $ffo_point_value[$index]";
|
||||
push @output, "$node: $attr: $ffo_point_value[$index] MHZ";
|
||||
} elsif ($ffo_point[$index] eq '3' && $attr eq 'ffoTurbo') { # Turbo
|
||||
push @output, "$node: $attr: $ffo_point_value[$index]";
|
||||
push @output, "$node: $attr: $ffo_point_value[$index] MHZ";
|
||||
} elsif ($ffo_point[$index] eq '4' && $attr eq 'ffoVmin') { # Vmin
|
||||
push @output, "$node: $attr: $ffo_point_value[$index]";
|
||||
push @output, "$node: $attr: $ffo_point_value[$index] MHZ";
|
||||
} elsif ($ffo_point[$index] eq '5' && $attr eq 'ffoMin') { # Min
|
||||
push @output, "$node: $attr: $ffo_point_value[$index]";
|
||||
push @output, "$node: $attr: $ffo_point_value[$index] MHZ";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -828,9 +833,9 @@ sub run_cim
|
||||
if ($query_pum_flag) {
|
||||
if (defined ($query_pum_value->{FixedFrequencyOverrideFreq})) {
|
||||
if ($query_pum_value->{FixedFrequencyOverrideFreq} eq '4294967295') {
|
||||
push @output, "$node: $attr: 0";
|
||||
push @output, "$node: $attr: 0 MHZ";
|
||||
} else {
|
||||
push @output, "$node: $attr: $query_pum_value->{FixedFrequencyOverrideFreq}";
|
||||
push @output, "$node: $attr: $query_pum_value->{FixedFrequencyOverrideFreq} MHZ";
|
||||
}
|
||||
} else {
|
||||
push @output, "$node: $attr: na";
|
||||
@ -845,9 +850,9 @@ sub run_cim
|
||||
if ($attr =~ /^(syssbpower|sysIPLtime)$/) {
|
||||
if ($query_drawer_flag) {
|
||||
if (defined ($query_drawer_value->{AverageTimeToIPL}) && $attr eq "sysIPLtime") {
|
||||
push @output, "$node: $attr: $query_drawer_value->{AverageTimeToIPL}";
|
||||
push @output, "$node: $attr: $query_drawer_value->{AverageTimeToIPL} S";
|
||||
} elsif (defined ($query_drawer_value->{StandbyPowerUtilization}) && $attr eq "syssbpower") {
|
||||
push @output, "$node: $attr: $query_drawer_value->{StandbyPowerUtilization}";
|
||||
push @output, "$node: $attr: $query_drawer_value->{StandbyPowerUtilization} W";
|
||||
} else {
|
||||
push @output, "$node: $attr: na";
|
||||
}
|
||||
@ -863,11 +868,11 @@ sub run_cim
|
||||
my @times = sort keys %{$tmphash->{$ins}->{MetricValue}};
|
||||
if ($attr eq "ambienttemp") {
|
||||
#push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$times[-1]} C";
|
||||
} else {
|
||||
foreach my $time (@times) {
|
||||
#push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$time} C: $time";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -879,11 +884,11 @@ sub run_cim
|
||||
my @times = sort keys %{$tmphash->{$ins}->{MetricValue}};
|
||||
if ($attr eq "exhausttemp") {
|
||||
#push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$times[-1]} C";
|
||||
} else {
|
||||
foreach my $time (@times) {
|
||||
#push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$time} C: $time";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -895,11 +900,11 @@ sub run_cim
|
||||
my @times = sort keys %{$tmphash->{$ins}->{MetricValue}};
|
||||
if ($attr eq "CPUspeed") {
|
||||
#push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$times[-1]} MHZ";
|
||||
} else {
|
||||
foreach my $time (@times) {
|
||||
#push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr: $tmphash->{$ins}->{MetricValue}->{$time} MHZ: $time";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -910,10 +915,10 @@ sub run_cim
|
||||
if ($ins =~ /FansSpeed/) {
|
||||
my @times = sort keys %{$tmphash->{$ins}->{MetricValue}};
|
||||
if ($attr eq "fanspeed") {
|
||||
push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$times[-1]} RPM";
|
||||
} else {
|
||||
foreach my $time (@times) {
|
||||
push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr ($tmphash->{$ins}->{MeasuredElementName}): $tmphash->{$ins}->{MetricValue}->{$time} RPM: $time";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -925,10 +930,10 @@ sub run_cim
|
||||
my @times = sort keys %{$tmphash->{$tmpattr}->{MetricValue}};
|
||||
if ($attr =~ /history$/) {
|
||||
foreach my $time (@times) {
|
||||
push @output, "$node: $attr: $tmphash->{$tmpattr}->{MetricValue}->{$time}: $time";
|
||||
push @output, "$node: $attr: $tmphash->{$tmpattr}->{MetricValue}->{$time} W: $time";
|
||||
}
|
||||
} else {
|
||||
push @output, "$node: $attr: $tmphash->{$attr}->{MetricValue}->{$times[-1]}";
|
||||
push @output, "$node: $attr: $tmphash->{$attr}->{MetricValue}->{$times[-1]} W";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1008,7 +1013,11 @@ sub run_cim
|
||||
|
||||
# Display the output
|
||||
my $rsp;
|
||||
push @{$rsp->{data}}, @output;
|
||||
if ($query_list && $query_list !~ /history/) {
|
||||
push @{$rsp->{data}}, sort (@output);
|
||||
} else {
|
||||
push @{$rsp->{data}}, @output;
|
||||
}
|
||||
xCAT::MsgUtils->message("I", $rsp, $callback);
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user