blob: eca4c5e334d2f5f1d0cda215fcbb1c5c902ad699 [file] [log] [blame]
Michael Walsh90e14e02018-03-22 16:38:04 -05001#!/usr/bin/env python
2
3r"""
4Provide useful error log utility keywords.
5"""
6
7import gen_print as gp
8import sys
9import os
10import imp
11base_path = os.path.dirname(os.path.dirname(
12 imp.find_module("gen_robot_print")[1])) + os.sep
13sys.path.append(base_path + "data/")
14import variables as var
Michael Walsh193f33a2018-10-04 15:15:09 -050015from robot.libraries.BuiltIn import BuiltIn
16import gen_robot_utils as gru
17gru.my_import_resource("logging_utils.robot")
Michael Walsh90e14e02018-03-22 16:38:04 -050018
19
20def print_error_logs(error_logs, key_list=None):
Michael Walsh90e14e02018-03-22 16:38:04 -050021 r"""
22 Print the error logs to the console screen.
23
24 This function provides the following benefits:
25 - It will specify print_var parms for the caller (e.g. hex=1).
26 - It is much easier to call this function than to generate the desired code
27 directly from a robot script.
28
29 Description of argument(s):
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -050030 error_logs An error log dictionary such as the one
31 returned by the 'Get Error Logs' keyword.
32 key_list The list of keys to be printed. This may
33 be specified as either a python list
34 or a space-delimited string. In the
35 latter case, this function will convert
36 it to a python list. See the sprint_varx
37 function prolog for additionatl details.
Michael Walsh90e14e02018-03-22 16:38:04 -050038
39 Example use from a python script:
40
41 ${error_logs}= Get Error Logs
42 Print Error Logs ${error_logs} Message Timestamp
43
44 Sample output:
45
46 error_logs:
47 [/xyz/openbmc_project/logging/entry/3]:
48 [Timestamp]: 1521738335735
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -050049 [Message]:
50 xyz.openbmc_project.Inventory.Error.Nonfunctional
Michael Walsh90e14e02018-03-22 16:38:04 -050051 [/xyz/openbmc_project/logging/entry/2]:
52 [Timestamp]: 1521738334637
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -050053 [Message]:
54 xyz.openbmc_project.Inventory.Error.Nonfunctional
Michael Walsh90e14e02018-03-22 16:38:04 -050055 [/xyz/openbmc_project/logging/entry/1]:
56 [Timestamp]: 1521738300696
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -050057 [Message]:
58 xyz.openbmc_project.Inventory.Error.Nonfunctional
Michael Walsh90e14e02018-03-22 16:38:04 -050059 [/xyz/openbmc_project/logging/entry/4]:
60 [Timestamp]: 1521738337915
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -050061 [Message]:
62 xyz.openbmc_project.Inventory.Error.Nonfunctional
Michael Walsh90e14e02018-03-22 16:38:04 -050063
64 Another example call using a robot list:
65 ${error_logs}= Get Error Logs
66 ${key_list}= Create List Message Timestamp Severity
67 Print Error Logs ${error_logs} ${key_list}
68 """
69
70 if key_list is not None:
71 if type(key_list) in (str, unicode):
72 key_list = key_list.split(" ")
73 key_list.insert(0, var.BMC_LOGGING_ENTRY + ".*")
74
75 gp.print_var(error_logs, hex=1, key_list=key_list)
Michael Walsh193f33a2018-10-04 15:15:09 -050076
77
78def get_esels(error_logs=None):
79 r"""
80 Get all available extended Service Event Logs (eSELs) and return as a list.
81
82 Example robot code:
83 ${esels}= Get Esels
84 Rprint Vars esels
85
86 Example output (excerpt):
87 esels:
88 esels[0]: ESEL=00 00 df 00 00...
89 esels[1]: ESEL=00 00 df 00 00...
90
91 Description of argument(s):
92 error_logs The error_log data, which can be obtained
93 from 'Get Error Logs'. If this value is
94 None, then this function will call 'Get
95 Error Logs' on the caller's behalf.
96 """
97
98 if error_logs is None:
99 error_logs = BuiltIn().run_keyword('Get Error Logs')
100
101 # Look for any error log entries containing the 'AdditionalData' field
102 # which in turn has an entry starting with "ESEL=". Here is an excerpt of
103 # the error_logs that contains such an entry.
104 # error_logs:
105 # [/xyz/openbmc_project/logging/entry/1]:
106 # [AdditionalData]:
107 # [AdditionalData][0]: CALLOUT_INVENTORY_PATH=/xyz/openbmc_project/inventory/system/chassis/mot...
108 # [AdditionalData][1]: ESEL=00 00 df 00 00 00 00 20 00 04...
109 esels = []
110 for error_log in error_logs.values():
111 if 'AdditionalData' in error_log:
112 for additional_data in error_log['AdditionalData']:
113 if additional_data.startswith('ESEL='):
114 esels.append(additional_data)
115
116 return esels