blob: a26af40bf1eb63db45d8e04b42493cf14821365a [file] [log] [blame]
#!/usr/bin/python
r"""
#############################################################
# @file openbmc_ffdc_list.py
#
# @brief List for FFDC ( First failure data capture )
# commands and files to be collected as a part
# of the test case failure.
#############################################################
"""
# -------------------
# FFDC default list
# -------------------
# -----------------------------------------------------------------
# Dict Name { Index string : { Key String : Comand string} }
# -----------------------------------------------------------------
# Add cmd's needed to be part of the ffdc report manifest file
FFDC_BMC_CMD = {
'DRIVER INFO':
{
# String Name Command
'FW Level': 'cat /etc/os-release',
'FW Timestamp': 'cat /etc/timestamp',
},
'BMC DATA':
{
'BMC OS': 'uname -a',
'BMC Uptime': 'uptime',
'BMC File System Disk Space Usage': 'df -hT',
},
'APPLICATION DATA':
{
'BMC state': '/usr/sbin/obmcutil state',
},
}
# Add file name and correcponding command needed for BMC
FFDC_BMC_FILE = {
'BMC FILES':
{
# File Name Command
'BMC_proc_list': 'top -n 1 -b',
'BMC_proc_fd_active_list': 'ls -Al /proc/*/fd/',
'BMC_journalctl': 'journalctl --no-pager',
'BMC_dmesg': 'dmesg',
'BMC_procinfo': 'cat /proc/cpuinfo',
'BMC_meminfo': 'cat /proc/meminfo',
},
}
# Add file name and correcponding command needed for all Linux distributions
FFDC_OS_ALL_DISTROS_FILE = {
'OS FILES':
{
# File Name Command
'OS_msglog': 'cat /sys/firmware/opal/msglog',
'OS_cpufrequency': 'ppc64_cpu --frequency',
'OS_dmesg': 'dmesg',
'OS_boot': 'cat /var/log/boot.log',
'OS_procinfo': 'cat /proc/cpuinfo',
'OS_meminfo': 'cat /proc/meminfo',
'OS_netstat': 'netstat -a',
'OS_lspci': 'lspci',
'OS_lscpu': 'lscpu',
'OS_lscfg': 'lscfg',
},
}
# Add file name and correcponding command needed for Ubuntu Linux
FFDC_OS_UBUNTU_FILE = {
'OS FILES':
{
# File Name Command
'OS_isusb': 'lsusb -t ; lsusb -v',
'OS_kern': 'tail -n 50000 /var/log/kern.log',
'OS_authlog': 'cat /var/log/auth.log; cat /var/log/auth.log.1',
'OS_syslog': 'tail -n 200000 /var/log/syslog',
'OS_info': 'uname -a; dpkg -s opal-prd; dpkg -s ipmitool',
},
}
# Add file name and correcponding command needed for RHEL Linux
FFDC_OS_RHEL_FILE = {
'OS FILES':
{
# File Name Command
'OS_rsct': '/usr/bin/ctversion -bv',
'OS_secure': 'cat /var/log/secure',
'OS_syslog': 'tail -n 200000 /var/log/messages',
'OS_info': 'lsb_release -a; cat /etc/redhat-release; uname -a; rpm -qa',
},
}
# Add file name and correcponding command needed for RHEL Linux
FFDC_OS_IBM_POWERKVM_FILE = {
'OS FILES':
{
# File Name Command
'OS_secure': 'cat /var/log/secure',
'OS_syslog': 'tail -n 200000 /var/log/messages',
'OS_info': 'lsb_release -a; uname -a; rpm -qa',
},
}
# Enable when ready with openbmc/openbmc-test-automation#203
# replace with new path /xyz/openbmc_project
OPENBMC_BASE = '/org/openbmc/'
ENUMERATE_SENSORS = OPENBMC_BASE + 'sensors/enumerate'
# TODO: Use the xyz enums once moved to xyz completely
# ENUMERATE_SYSTEMS = OPENBMC_BASE + 'inventory/enumerate'
ENUMERATE_SYSTEMS = '/xyz/openbmc_project/inventory/enumerate'
ENUMERATE_ELOG = '/xyz/openbmc_project/logging/entry/enumerate'
ENUMERATE_EVENTS = OPENBMC_BASE + 'records/events/enumerate'
ENUMERATE_LED = OPENBMC_BASE + 'control/led/enumerate'
# Sensors/control data.
ENUMERATE_SENSOR = '/xyz/openbmc_project/sensors/enumerate'
ENUMERATE_CONTROL = '/xyz/openbmc_project/control/enumerate'
# Add file name and correcponding Get Request
FFDC_GET_REQUEST = {
'GET REQUESTS':
{
# File Name Command
'BMC_sensor_list': ENUMERATE_SENSORS,
'BMC_sensor_xyz_list': ENUMERATE_SENSOR,
'BMC_control_list': ENUMERATE_CONTROL,
'BMC_inventory': ENUMERATE_SYSTEMS,
'BMC_elog': ENUMERATE_ELOG,
'BMC_led': ENUMERATE_EVENTS,
'BMC_record_log': ENUMERATE_LED,
},
}
# Define your keywords in method/utils and call here
FFDC_METHOD_CALL = {
'BMC LOGS':
{
# Description Keyword name
'FFDC Generic Report': 'BMC FFDC Manifest',
'BMC Specific Files': 'BMC FFDC Files',
'Get Request FFDC': 'BMC FFDC Get Requests',
'OS FFDC': 'OS FFDC Files',
'Core Files': 'SCP Coredump Files',
'SEL Log': 'Collect eSEL Log',
'Sys Inventory Files': 'System Inventory Files',
},
}
# -----------------------------------------------------------------
# base class for FFDC default list
class openbmc_ffdc_list():
def get_ffdc_bmc_cmd(self, i_type):
r"""
########################################################################
# @brief This method returns the list from the dictionary for cmds
# @param i_type: @type string: string index lookup
# @return List of key pair from the dictionary
########################################################################
"""
return FFDC_BMC_CMD[i_type].items()
def get_ffdc_bmc_file(self, i_type):
r"""
########################################################################
# @brief This method returns the list from the dictionary for scp
# @param i_type: @type string: string index lookup
# @return List of key pair from the dictionary
########################################################################
"""
return FFDC_BMC_FILE[i_type].items()
def get_ffdc_get_request(self, i_type):
r"""
########################################################################
# @brief This method returns the list from the dictionary for scp
# @param i_type: @type string: string index lookup
# @return List of key pair from the dictionary
########################################################################
"""
return FFDC_GET_REQUEST[i_type].items()
def get_ffdc_cmd_index(self):
r"""
########################################################################
# @brief This method returns the list index from dictionary
# @return List of index to the dictionary
########################################################################
"""
return FFDC_BMC_CMD.keys()
def get_ffdc_get_request_index(self):
r"""
########################################################################
# @brief This method returns the list index from dictionary
# @return List of index to the dictionary
########################################################################
"""
return FFDC_GET_REQUEST.keys()
def get_ffdc_file_index(self):
r"""
########################################################################
# @brief This method returns the list index from dictionary
# @return List of index to the dictionary
########################################################################
"""
return FFDC_BMC_FILE.keys()
def get_ffdc_method_index(self):
r"""
########################################################################
# @brief This method returns the key pair from the dictionary
# @return Index of the method dictionary
########################################################################
"""
return FFDC_METHOD_CALL.keys()
def get_ffdc_method_desc(self,
index):
r"""
########################################################################
# @brief This method returns the just the keys from the dictionary.
# @return List of ffdc descriptions.
########################################################################
"""
return FFDC_METHOD_CALL[index].keys()
def get_ffdc_method_call(self, i_type):
r"""
########################################################################
# @brief This method returns the key pair from the dictionary
# @return List of key pair keywords
########################################################################
"""
return FFDC_METHOD_CALL[i_type].items()
def get_ffdc_os_all_distros_index(self):
r"""
########################################################################
# @brief This method returns the key pair from the dictionary
# @return Index of the method dictionary
########################################################################
"""
return FFDC_OS_ALL_DISTROS_FILE.keys()
def get_ffdc_os_all_distros_call(self, i_type):
r"""
########################################################################
# @brief This method returns the key pair from the dictionary
# @return List of key pair keywords
########################################################################
"""
return FFDC_OS_ALL_DISTROS_FILE[i_type].items()
def get_ffdc_os_distro_index(self, distro):
r"""
########################################################################
# @brief This method returns the key pair from the dictionary
# @return Index of the method dictionary
########################################################################
"""
distro_file = "FFDC_OS_" + str(distro).upper() + "_FILE"
return eval(distro_file).keys()
def get_ffdc_os_distro_call(self, i_type, distro):
r"""
########################################################################
# @brief This method returns the key pair from the dictionary
# @return List of key pair keywords
########################################################################
"""
distro_file = "FFDC_OS_" + str(distro).upper() + "_FILE"
return eval(distro_file)[i_type].items()
def get_strip_string(self, i_str):
r"""
########################################################################
# @brief Returns the stripped strings
# @param i_str: @type string: string name
# @return Remove all special chars and return the string
########################################################################
"""
return ''.join(e for e in i_str if e.isalnum())
def get_esel_index(self, esel_list):
r"""
#######################################################################
# @brief Returns the eSEL binary index.
# @param esel_ist: @type list: eSEL list.
# @return Index of "ESEL=" in the list.
#######################################################################
"""
index = [i for i, str in enumerate(esel_list) if 'ESEL=' in str]
return index[0]