2
0
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:
xuweibj 2018-03-26 09:43:37 +08:00 committed by GitHub
commit e25352bfd7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 111 additions and 4 deletions

View File

@ -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)

View File

@ -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:

View File

@ -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':

View File

@ -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