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:
@@ -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
|
||||
|
||||
|
||||
@@ -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', '')
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user