2
0
mirror of https://opendev.org/x/pyghmi synced 2026-01-11 02:32:31 +00:00

Merge "Support alarm level definition extention"

This commit is contained in:
Zuul
2021-10-12 12:15:59 +00:00
committed by Gerrit Code Review
4 changed files with 24 additions and 15 deletions

View File

@@ -607,6 +607,10 @@ class Command(object):
self._sdr = sdr.SDR(self, self._sdrcachedir)
return self._sdr
def get_event_constants(self):
self.oem_init()
return self._oem.get_oem_event_const()
def get_event_log(self, clear=False):
"""Retrieve the log of events, optionally clearing

View File

@@ -17,7 +17,6 @@ import time
import pyghmi.constants as pygconst
import pyghmi.exceptions as pygexc
import pyghmi.ipmi.private.constants as ipmiconst
try:
range = xrange
@@ -188,7 +187,7 @@ fru_states = {
}
def decode_eventdata(sensor_type, offset, eventdata, sdr):
def decode_eventdata(sensor_type, offset, eventdata, event_consts, sdr):
"""Decode extra event data from an alert or log
Provide a textual summary of eventdata per descriptions in
@@ -198,6 +197,7 @@ def decode_eventdata(sensor_type, offset, eventdata, sdr):
:param sensor_type: The sensor type number from the event
:param offset: Sensor specific offset
:param eventdata: The three bytes from the log or alert
:param event_consts: event definition including severity.
:param sdr: The sdr locator entry to help clarify how to parse data
"""
if sensor_type == 5 and offset == 4: # link loss, indicates which port
@@ -280,7 +280,7 @@ def decode_eventdata(sensor_type, offset, eventdata, sdr):
if oldstate != offset:
try:
cause += '(change from {0})'.format(
ipmiconst.sensor_type_offsets[0x2c][oldstate]['desc'])
event_consts.sensor_type_offsets[0x2c][oldstate]['desc'])
except KeyError:
pass
@@ -404,6 +404,7 @@ class EventHandler(object):
def __init__(self, sdr, ipmicmd):
self._sdr = sdr
self._ipmicmd = ipmicmd
self.event_consts = ipmicmd.get_event_constants()
def _populate_event(self, deassertion, event, event_data, event_type,
sensor_type, sensorid):
@@ -427,9 +428,9 @@ class EventHandler(object):
event['component_type_id'] = sensor_type
event['event_id'] = '{0}.{1}'.format(event_type, evtoffset)
# use generic offset decode for event description
event['component_type'] = ipmiconst.sensor_type_codes.get(
event['component_type'] = self.event_consts.sensor_type_codes.get(
sensor_type, '')
evreading = ipmiconst.generic_type_offsets.get(
evreading = self.event_consts.generic_type_offsets.get(
event_type, {}).get(evtoffset, {})
if event['deassertion']:
event['event'] = evreading.get('deassertion_desc', '')
@@ -442,9 +443,9 @@ class EventHandler(object):
elif event_type == 0x6f:
event['component_type_id'] = sensor_type
event['event_id'] = '{0}.{1}'.format(event_type, evtoffset)
event['component_type'] = ipmiconst.sensor_type_codes.get(
event['component_type'] = self.event_consts.sensor_type_codes.get(
sensor_type, '')
evreading = ipmiconst.sensor_type_offsets.get(
evreading = self.event_consts.sensor_type_offsets.get(
sensor_type, {}).get(evtoffset, {})
if event['deassertion']:
event['event'] = evreading.get('deassertion_desc', '')

View File

@@ -13,6 +13,7 @@
# limitations under the License.
import pyghmi.exceptions as exc
import pyghmi.ipmi.private.constants as event_const
class OEMHandler(object):
@@ -432,3 +433,6 @@ class OEMHandler(object):
:return: power capping value.
"""
return None
def get_oem_event_const(self):
return event_const

View File

@@ -40,7 +40,6 @@ import six
import pyghmi.constants as const
import pyghmi.exceptions as exc
import pyghmi.ipmi.private.constants as ipmiconst
try:
import cPickle as pickle
@@ -288,10 +287,11 @@ class SDREntry(object):
external code to pay attention to this class.
"""
def __init__(self, entrybytes, reportunsupported=False,
def __init__(self, entrybytes, event_consts, reportunsupported=False,
mfg_id=0, prod_id=0):
self.mfg_id = mfg_id
self.prod_id = prod_id
self.event_consts = event_consts
# ignore record id for now, we only care about the sensor number for
# moment
self.readable = True
@@ -379,7 +379,7 @@ class SDREntry(object):
self.sensor_owner = entry[0]
self.sensor_lun = entry[1] & 0x03
self.sensor_number = entry[2]
self.entity = ipmiconst.entity_ids.get(
self.entity = self.event_consts.entity_ids.get(
entry[3], 'Unknown entity {0}'.format(entry[3]))
if self.rectype == 3:
self.sensor_type_number = entry[5]
@@ -388,7 +388,7 @@ class SDREntry(object):
self.sensor_type_number = entry[7]
self.reading_type = entry[8] # table 42-1
try:
self.sensor_type = ipmiconst.sensor_type_codes[
self.sensor_type = self.event_consts.sensor_type_codes[
self.sensor_type_number]
except KeyError:
self.sensor_type = "UNKNOWN type " + str(self.sensor_type_number)
@@ -456,13 +456,13 @@ class SDREntry(object):
self.decode_formula(entry[19:25])
def _decode_state(self, state):
mapping = ipmiconst.generic_type_offsets
mapping = self.event_consts.generic_type_offsets
try:
if self.reading_type in mapping:
desc = mapping[self.reading_type][state]['desc']
health = mapping[self.reading_type][state]['severity']
elif self.reading_type == 0x6f:
mapping = ipmiconst.sensor_type_offsets
mapping = self.event_consts.sensor_type_offsets
desc = mapping[self.sensor_type_number][state]['desc']
health = mapping[self.sensor_type_number][state]['severity']
elif self.reading_type >= 0x70 and self.reading_type <= 0x7f:
@@ -853,8 +853,8 @@ class SDR(object):
yield number
def add_sdr(self, sdrbytes):
newent = SDREntry(sdrbytes, False, self.mfg_id,
self.prod_id)
newent = SDREntry(sdrbytes, self.ipmicmd.get_event_constants(),
False, self.mfg_id, self.prod_id)
if newent.sdrtype == TYPE_SENSOR:
id = '{0}.{1}.{2}'.format(
newent.sensor_owner, newent.sensor_number, newent.sensor_lun)