Stage alternate power meter support
It may be redundant with SDR sensors, but stage it for easier access should it come up as a needed approach. Change-Id: I765bbcbcc6c916da2573008bf53f2e88a2a35baa
This commit is contained in:
parent
bcfbd8f1c5
commit
077dbd645b
@ -31,7 +31,9 @@ class EnergyManager(object):
|
||||
try:
|
||||
rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 2, 0, 0, 0])
|
||||
if len(rsp['data']) >= 8:
|
||||
self.supportedmeters = ('DC Energy',)
|
||||
self.supportedmeters = ('DC Energy',) # 'GPU Power',
|
||||
# 'Node Power', 'Total Power')
|
||||
self._mypowermeters = ('node power', 'total power', 'gpu power', 'riser 1 power', 'riser 2 power')
|
||||
self._usefapm = True
|
||||
return
|
||||
except pygexc.IpmiException:
|
||||
@ -57,6 +59,23 @@ class EnergyManager(object):
|
||||
else:
|
||||
self.supportedmeters = ('DC Energy',)
|
||||
|
||||
def supports(self, name):
|
||||
if name.lower() in self._mypowermeters:
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_sensor(self, name, ipmicmd):
|
||||
if name.lower() not in self._mypowermeters:
|
||||
raise pygexc.UnsupportedFunctionality('Unrecogcized sensor')
|
||||
rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 8, 0, 0, 0])
|
||||
npow, gpupow, r1pow, r2pow = struct.unpack('<HHHH', rsp['data'][6:10])
|
||||
if name.lower().startswith('node'):
|
||||
return npow, 'W'
|
||||
elif name.lower().startswith('gpu'):
|
||||
return gpupow, 'W'
|
||||
elif name.lower().startswith('total'):
|
||||
return npow + gpupow, 'W'
|
||||
|
||||
def get_fapm_energy(self, ipmicmd):
|
||||
rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 2, 0, 0, 0])
|
||||
j, mj = struct.unpack('<IH', rsp['data'][2:8])
|
||||
|
@ -684,8 +684,13 @@ class IMMClient(object):
|
||||
return ()
|
||||
|
||||
def get_oem_sensor_descriptions(self, ipmicmd):
|
||||
return [{'name': x, 'type': 'Energy'
|
||||
} for x in self.get_oem_sensor_names(ipmicmd)]
|
||||
desc = []
|
||||
for x in self.get_oem_sensor_names(ipmicmd):
|
||||
desc.append({
|
||||
'name': x,
|
||||
'type': 'Power' if 'Power' in x else 'Energy'
|
||||
})
|
||||
return desc
|
||||
|
||||
def get_oem_sensor_reading(self, name, ipmicmd):
|
||||
if self._energymanager is None:
|
||||
@ -694,8 +699,15 @@ class IMMClient(object):
|
||||
kwh = self._energymanager.get_ac_energy(ipmicmd)
|
||||
elif name == 'DC Energy':
|
||||
kwh = self._energymanager.get_dc_energy(ipmicmd)
|
||||
elif self._energymanager.supports(name):
|
||||
value, units = self._energymanager.get_sensor(name, ipmicmd)
|
||||
return sdr.SensorReading({
|
||||
'name': name, 'imprecision': None,
|
||||
'value': value,
|
||||
'states': [], 'state_ids': [], 'health': pygconst.Health.Ok,
|
||||
'type': 'Power'}, units)
|
||||
else:
|
||||
raise pygexc.UnsupportedFunctionality('No sunch sensor ' + name)
|
||||
raise pygexc.UnsupportedFunctionality('No such sensor ' + name)
|
||||
return sdr.SensorReading({'name': name, 'imprecision': None,
|
||||
'value': kwh, 'states': [],
|
||||
'state_ids': [],
|
||||
@ -1626,32 +1638,6 @@ class XCCClient(IMMClient):
|
||||
# oemsensornames = oemsensornames + (name,)
|
||||
# return oemsensornames
|
||||
|
||||
def get_oem_sensor_descriptions(self, ipmicmd):
|
||||
oemdesc = [{'name': x, 'type': 'Energy'} for x in super(
|
||||
XCCClient, self).get_oem_sensor_names(ipmicmd)]
|
||||
return oemdesc
|
||||
# therminfo = self.grab_cacheable_json(
|
||||
# '/api/dataset/pwrmgmt?params=GetThermalRealTimeData', 1)
|
||||
# if therminfo:
|
||||
# for name in sorted(therminfo['items'][0]):
|
||||
# if 'DIMM' in name and 'Temp' in name:
|
||||
# oemdesc.append({'name': name, 'type': 'Temperature'})
|
||||
# return oemdesc
|
||||
|
||||
def get_oem_sensor_reading(self, name, ipmicmd):
|
||||
if 'Energy' in name:
|
||||
return super(XCCClient, self).get_oem_sensor_reading(name, ipmicmd)
|
||||
therminfo = self.grab_cacheable_json(
|
||||
'/api/dataset/pwrmgmt?params=GetThermalRealTimeData', 1)
|
||||
temp = therminfo.get('items', [{}])[0].get(name, None)
|
||||
if temp is None:
|
||||
raise pygexc.UnsupportedFunctionality('No sunch sensor ' + name)
|
||||
return sdr.SensorReading({'name': name, 'imprecision': None,
|
||||
'value': temp, 'states': [],
|
||||
'state_ids': [],
|
||||
'health': pygconst.Health.Ok,
|
||||
'type': 'Temperature'}, '°C')
|
||||
|
||||
def get_storage_configuration(self, logout=True):
|
||||
rsp = self.wc.grab_json_response(
|
||||
'/api/function/raid_alldevices?params=storage_GetAllDevices,0')
|
||||
|
Loading…
Reference in New Issue
Block a user