mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-22 03:32:04 +00:00
Merge pull request #4877 from gurevichmark/openbmc_reventlog_python_clear
OpenBMC reventlog "clear" and "resolved" in Python
This commit is contained in:
commit
e25352bfd7
@ -26,7 +26,7 @@ class OpenBMCEventlogTask(ParallelNodesCommand):
|
||||
number_to_display = 0
|
||||
try:
|
||||
# Number of records to display from the end
|
||||
number_to_display = 0-int(num_to_display[0])
|
||||
number_to_display = 0-int(num_to_display)
|
||||
except Exception:
|
||||
# All records to display
|
||||
number_to_display = 0
|
||||
@ -56,7 +56,63 @@ class OpenBMCEventlogTask(ParallelNodesCommand):
|
||||
def clear_all_ev_records(self, **kw):
|
||||
|
||||
node = kw['node']
|
||||
obmc = openbmc.OpenBMCRest(name=node, nodeinfo=kw['nodeinfo'], messager=self.callback, debugmode=self.debugmode, verbose=self.verbose)
|
||||
try:
|
||||
obmc.login()
|
||||
obmc.clear_all_eventlog_records()
|
||||
self.callback.info('%s: %s' % (node, "Logs cleared"))
|
||||
|
||||
except (SelfServerException, SelfClientException) as e:
|
||||
self.callback.error('%s' % e.message, node)
|
||||
|
||||
|
||||
def resolve_ev_records(self, resolve_list, **kw):
|
||||
|
||||
node = kw['node']
|
||||
obmc = openbmc.OpenBMCRest(name=node, nodeinfo=kw['nodeinfo'], messager=self.callback, debugmode=self.debugmode, verbose=self.verbose)
|
||||
try:
|
||||
obmc.login()
|
||||
|
||||
# Get all eventlog records
|
||||
eventlog_info_dict = obmc.get_eventlog_info()
|
||||
|
||||
keys = eventlog_info_dict.keys()
|
||||
# Sort the keys in natural order
|
||||
keys.sort(key=lambda x : int(x[0:]))
|
||||
|
||||
resolved, ids = resolve_list.split('=')
|
||||
eventlog_ids_to_resolve = []
|
||||
if ids.upper() == "LED":
|
||||
|
||||
# loop through eventlog_info_dict and collect LED ids to be resolved into a eventlog_ids_to_resolve array
|
||||
for key in list(keys):
|
||||
if "[LED]" in eventlog_info_dict[key]:
|
||||
if "Resolved: 0" in eventlog_info_dict[key]:
|
||||
eventlog_ids_to_resolve.append(key)
|
||||
else:
|
||||
if self.verbose:
|
||||
self.callback.info('%s: Not resolving already resolved eventlog ID %s' % (node, key))
|
||||
else:
|
||||
# loop through list of ids and collect ids to resolve into a eventlog_ids_to_resolve array
|
||||
for id_to_resolve in ids.split(','):
|
||||
if id_to_resolve in eventlog_info_dict:
|
||||
if "Resolved: 0" in eventlog_info_dict[id_to_resolve]:
|
||||
eventlog_ids_to_resolve.append(id_to_resolve)
|
||||
else:
|
||||
if self.verbose:
|
||||
self.callback.info('%s: Not resolving already resolved eventlog ID %s' % (node, id_to_resolve))
|
||||
else:
|
||||
self.callback.info('%s: Invalid ID: %s' % (node, id_to_resolve))
|
||||
|
||||
if len(eventlog_ids_to_resolve) == 0:
|
||||
# At the end and there are no entries to resolve
|
||||
self.callback.info('%s: No event log entries needed to be resolved' % node)
|
||||
else:
|
||||
# Resolve entries that were collected into the eventlog_ids_to_resolve array
|
||||
obmc.resolve_event_log_entries(eventlog_ids_to_resolve)
|
||||
for entry in eventlog_ids_to_resolve:
|
||||
self.callback.info('%s: Resolved %s' % (node, entry))
|
||||
|
||||
except (SelfServerException, SelfClientException) as e:
|
||||
self.callback.error('%s' % e.message, node)
|
||||
|
||||
|
@ -236,7 +236,12 @@ RSPCONFIG_APIS = {
|
||||
},
|
||||
}
|
||||
|
||||
EVENTLOG_URL = "/logging/enumerate"
|
||||
EVENTLOG_URLS = {
|
||||
"list": "/logging/enumerate",
|
||||
"clear_all": "/logging/action/deleteAll",
|
||||
"resolve": "/logging/entry/{}/attr/Resolved",
|
||||
}
|
||||
|
||||
RAS_POLICY_TABLE = "/opt/ibm/ras/lib/policyTable.json"
|
||||
RAS_POLICY_MSG = "Install the OpenBMC RAS package to obtain more details logging messages."
|
||||
RAS_NOT_FOUND_MSG = " Not found in policy table: "
|
||||
@ -624,7 +629,7 @@ class OpenBMCRest(object):
|
||||
# Extract all eventlog info and parse it
|
||||
def get_eventlog_info(self):
|
||||
|
||||
eventlog_data = self.request('GET', EVENTLOG_URL, cmd='get_eventlog_info')
|
||||
eventlog_data = self.request('GET', EVENTLOG_URLS['list'], cmd='get_eventlog_info')
|
||||
|
||||
return self.parse_eventlog_data(eventlog_data)
|
||||
|
||||
@ -649,6 +654,11 @@ class OpenBMCRest(object):
|
||||
id, event_log_line = self.parse_eventlog_data_record(value, ras_event_mapping)
|
||||
if int(id) != 0:
|
||||
eventlog_dict[str(id)] = event_log_line
|
||||
|
||||
if not eventlog_dict:
|
||||
# Nothing was returned from BMC
|
||||
eventlog_dict['0'] ='No attributes returned from the BMC.'
|
||||
|
||||
return eventlog_dict
|
||||
except KeyError:
|
||||
error = 'Received wrong format response: %s' % eventlog_data
|
||||
@ -714,6 +724,21 @@ class OpenBMCRest(object):
|
||||
formatted_line += LED_tag
|
||||
return id_str, formatted_line
|
||||
|
||||
# Clear all eventlog records
|
||||
def clear_all_eventlog_records(self):
|
||||
|
||||
payload = { "data": [] }
|
||||
return self.request('POST', EVENTLOG_URLS['clear_all'], payload=payload, cmd='clear_all_eventlog_records')
|
||||
|
||||
# Resolve eventlog records
|
||||
def resolve_event_log_entries(self, eventlog_ids_to_resolve):
|
||||
|
||||
payload = { "data": "1" }
|
||||
for event_id in eventlog_ids_to_resolve:
|
||||
self.request('PUT', EVENTLOG_URLS['resolve'].format(event_id), payload=payload, cmd='resolve_event_log_entries')
|
||||
|
||||
return
|
||||
|
||||
def set_apis_values(self, key, value):
|
||||
attr_info = RSPCONFIG_APIS[key]
|
||||
if 'set_url' not in attr_info:
|
||||
|
@ -444,7 +444,6 @@ class OpenBMCManager(base.BaseManager):
|
||||
|
||||
# 3, run the subcommands
|
||||
runner = OpenBMCEventlogTask(nodesinfo, callback=self.messager, debugmode=self.debugmode, verbose=self.verbose)
|
||||
self.messager.info('revetlog.py processing action=%s args=%s' % (action, args))
|
||||
if action == 'clear':
|
||||
DefaultEventlogManager().clear_all_eventlog_records(runner)
|
||||
elif action == 'resolved':
|
||||
|
@ -33,3 +33,30 @@ cmd:reventlog $$CN resolved=-1
|
||||
check:rc==1
|
||||
check:output=~Error: Invalid ID=
|
||||
end
|
||||
|
||||
start:reventlog_resolved_parse_error5
|
||||
description: Pass in a string
|
||||
os:Linux
|
||||
hcp:openbmc
|
||||
cmd:reventlog $$CN resolved=abc
|
||||
check:rc==1
|
||||
check:output=~Error: Invalid ID=
|
||||
end
|
||||
|
||||
start:reventlog_resolved_list
|
||||
description: Pass in a list of ids
|
||||
os:Linux
|
||||
hcp:openbmc
|
||||
cmd:reventlog $$CN resolved=100,101
|
||||
check:rc==0
|
||||
check:output=~Attempting to resolve the following log entries: 100,101...
|
||||
end
|
||||
|
||||
start:reventlog_resolved_LED
|
||||
description: Pass in a LED keyword
|
||||
os:Linux
|
||||
hcp:openbmc
|
||||
cmd:reventlog $$CN resolved=Led
|
||||
check:rc==0
|
||||
check:output=~Attempting to resolve the following log entries: Led...
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user