#!/usr/bin/env python3
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.
"""
import os

from robot.libraries.BuiltIn import BuiltIn

# -------------------
# FFDC default list
# -------------------
# -----------------------------------------------------------------
# Dict Name {  Index string : { Key String :  Command 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;cat /proc/uptime",
        "BMC File System Disk Space Usage": "df -hT",
        "BMC Date Time": "date;/sbin/hwclock --show;/usr/bin/timedatectl",
    },
    "APPLICATION DATA": {
        "BMC state": "/usr/bin/obmcutil state",
    },
}
# Add file name and corresponding command needed for BMC
FFDC_BMC_FILE = {
    "BMC FILES": {
        # File Name         Command
        "BMC_flash_side.txt": (
            "cat /sys/class/watchdog/watchdog1/bootstatus"
            " >/tmp/BMC_flash_side.txt 2>&1"
        ),
        "BMC_hwmon.txt": (
            "grep -r . /sys/class/hwmon/* >/tmp/BMC_hwmon.txt 2>&1"
        ),
        "BMC_proc_list.txt": "top -n 1 -b >/tmp/BMC_proc_list.txt 2>&1",
        "BMC_proc_fd_active_list.txt": (
            "ls -Al /proc/*/fd/ >/tmp/BMC_proc_fd_active_list.txt 2>&1"
        ),
        "BMC_journalctl_nopager.txt": (
            "journalctl --no-pager >/tmp/BMC_journalctl_nopager.txt 2>&1"
        ),
        "BMC_journalctl_pretty.json": (
            "journalctl -o json-pretty >/tmp/BMC_journalctl_pretty.json 2>&1"
        ),
        "BMC_dmesg.txt": "dmesg >/tmp/BMC_dmesg.txt 2>&1",
        "BMC_procinfo.txt": "cat /proc/cpuinfo >/tmp/BMC_procinfo.txt 2>&1",
        "BMC_meminfo.txt": "cat /proc/meminfo >/tmp/BMC_meminfo.txt 2>&1",
        "BMC_systemd.txt": "systemctl status --all >/tmp/BMC_systemd.txt 2>&1",
        "BMC_failed_service.txt": (
            "systemctl list-units --failed >/tmp/BMC_failed_service.txt 2>&1"
        ),
        "BMC_list_service.txt": (
            "systemctl list-jobs >/tmp/BMC_list_service.txt 2>&1"
        ),
        "BMC_obmc_console.txt": (
            "cat /var/log/obmc-console.log >/tmp/BMC_obmc_console.txt 2>&1"
        ),
        "BMC_obmc_console1.txt": (
            "cat /var/log/obmc-console1.log >/tmp/BMC_obmc_console1.txt 2>&1"
        ),
        "PEL_logs_list.json": "peltool -l >/tmp/PEL_logs_list.json 2>&1",
        "PEL_logs_complete_list.json": (
            "peltool -l -a -f >/tmp/PEL_logs_complete_list.json 2>&1"
        ),
        "PEL_logs_display.json": "peltool -a >/tmp/PEL_logs_display.json 2>&1",
        "PEL_logs_complete_display.json": (
            "peltool -a -f -h>/tmp/PEL_logs_complete_display.json 2>&1"
        ),
        "PEL_logs_badPEL.txt": "hexdump -C"
        + " /var/lib/phosphor-logging/extensions/pels/badPEL>/tmp/PEL_logs_badPEL.txt"
        " 2>&1",
        "PLDM_fru_record.txt": (
            "pldmtool fru getfrurecordtable>/tmp/PLDM_fru_record.txt 2>&1"
        ),
        "BMC_pldm_flight_recorder.txt": (
            "rm -rf /tmp/pldm_flight_recorder; killall -s SIGUSR1 pldmd;"
        )
        + " sleep 5; cat /tmp/pldm_flight_recorder >"
        " /tmp/BMC_pldm_flight_recorder.txt 2>&1;",
        "OCC_state.txt": 'echo "OCC state check";for i in {0..3};'
        + " do (echo /org/open_power/control/occ$i;"
        + " busctl get-property org.open_power.OCC.Control"
        " /org/open_power/control/occ$i"
        + " org.open_power.OCC.Status OccActive) done > /tmp/OCC_state.txt"
        " 2>&1",
        "bmcweb_persistent_data.json": (
            "cat /home/root/bmcweb_persistent_data.json"
        )
        + " > /tmp/bmcweb_persistent_data.json",
        "GUARD_list.txt": "guard -l > /tmp/GUARD_list.txt 2>&1",
        "fan_control_dump.json": "fanctl dump; sleep 5",
        "DEVTREE": (
            "cat /var/lib/phosphor-software-manager/pnor/rw/DEVTREE >"
            " /tmp/DEVTREE 2>&1"
        ),
    },
}
# Add file name and corresponding command needed for all Linux distributions
FFDC_OS_ALL_DISTROS_FILE = {
    "OS FILES": {
        # File Name         Command
        "OS_msglog.txt": (
            "cat /sys/firmware/opal/msglog >/tmp/OS_msglog.txt 2>&1"
        ),
        "OS_cpufrequency.txt": "ppc64_cpu --frequency "
        + ">/tmp/OS_cpufrequency.txt 2>&1",
        "OS_dmesg.txt": "dmesg >/tmp/OS_dmesg.txt 2>&1",
        "OS_opal_prd.txt": "cat /var/log/opal-prd* >/tmp/OS_opal_prd.txt 2>&1",
        "OS_boot.txt": "cat /var/log/boot.log >/tmp/OS_boot.txt 2>&1",
        "OS_procinfo.txt": "cat /proc/cpuinfo >/tmp/OS_procinfo.txt 2>&1",
        "OS_meminfo.txt": "cat /proc/meminfo >/tmp/OS_meminfo.txt 2>&1",
        "OS_netstat.txt": "netstat -a >/tmp/OS_netstat.txt 2>&1",
        "OS_lspci.txt": "lspci >/tmp/OS_lspci.txt 2>&1",
        "OS_lscpu.txt": "lscpu >/tmp/OS_lscpu.txt 2>&1",
        "OS_lscfg.txt": "lscfg >/tmp/OS_lscfg.txt 2>&1",
        "OS_journalctl_nopager.txt": "journalctl --no-pager -b "
        + "> /tmp/OS_journalctl_nopager.txt  2>&1",
    },
}
# Add file name and corresponding command needed for Ubuntu Linux
FFDC_OS_UBUNTU_FILE = {
    "OS FILES": {
        # File Name         Command
        "OS_isusb.txt": "{ lsusb -t ; lsusb -v ; } >/tmp/OS_isusb.txt 2>&1",
        "OS_kern.txt": (
            "tail -n 50000 /var/log/kern.log >/tmp/OS_kern.txt 2>&1"
        ),
        "OS_authlog.txt": (
            "{ cat /var/log/auth.log; cat /var/log/auth.log.1 ; } "
        )
        + ">/tmp/OS_authlog.txt 2>&1",
        "OS_syslog.txt": (
            "tail -n 200000 /var/log/syslog >/tmp/OS_syslog.txt 2>&1"
        ),
        "OS_info.txt": "{ uname -a; dpkg -s opal-prd; dpkg -s ipmitool ; } "
        + ">/tmp/OS_info.txt 2>&1",
        "OS_sosreport.txt": (
            "{ rm -rf /tmp/sosreport*FFDC* ; sosreport --batch --tmp-dir "
        )
        + "/tmp --ticket-number FFDC ; } >/tmp/OS_sosreport.txt 2>&1",
    },
}
# Add file name and corresponding command needed for RHEL Linux
FFDC_OS_RHEL_FILE = {
    "OS FILES": {
        # File Name         Command
        "OS_rsct.txt": "/usr/bin/ctversion -bv >/tmp/OS_rsct.txt 2>&1",
        "OS_secure.txt": "cat /var/log/secure >/tmp/OS_secure.txt 2>&1",
        "OS_syslog.txt": "tail -n 200000 /var/log/messages "
        + ">/tmp/OS_syslog.txt 2>&1",
        "OS_info.txt": "{ lsb_release -a; cat /etc/redhat-release; "
        + "uname -a; rpm -qa ; } >/tmp/OS_info.txt 2>&1",
        "OS_sosreport.txt": (
            "{ rm -rf /tmp/sosreport*FFDC* ; sosreport --batch --tmp-dir "
        )
        + "/tmp --label FFDC ; } >/tmp/OS_sosreport.txt 2>&1",
    },
}
# Add file name and corresponding command needed for AIX.
FFDC_OS_AIX_FILE = {
    "OS FILES": {
        # File Name         Command
        "OS_errpt.txt": "errpt >/tmp/OS_errpt.txt 2>&1 ; errclear 0;",
        "OS_processors.txt": "bindprocessor -q >/tmp/OS_processors.txt 2>&1",
    },
}

try:
    redfish_support_trans_state = os.environ.get(
        "REDFISH_SUPPORT_TRANS_STATE", 0
    ) or int(
        BuiltIn().get_variable_value(
            "${REDFISH_SUPPORT_TRANS_STATE}", default=0
        )
    )
except RobotNotRunningError:
    pass

OPENBMC_BASE = "/xyz/openbmc_project/"
OPENPOWER_BASE = "/org/open_power/"
ENUMERATE_SENSORS = OPENBMC_BASE + "sensors/enumerate"
ENUMERATE_INVENTORY = OPENBMC_BASE + "inventory/enumerate"
ENUMERATE_ELOG = OPENBMC_BASE + "logging/entry/enumerate"
ENUMERATE_LED = OPENBMC_BASE + "led/enumerate"
ENUMERATE_SW = OPENBMC_BASE + "software/enumerate"
ENUMERATE_CONTROL = OPENBMC_BASE + "control/enumerate"
ENUMERATE_STATE = OPENBMC_BASE + "state/enumerate"
ENUMERATE_OCC = OPENPOWER_BASE + "/enumerate"
ENUMERATE_DUMPS = OPENBMC_BASE + "dumps/enumerate"
ENUMERATE_USER = OPENBMC_BASE + "user/enumerate"

# Add file name and corresponding Get Request
FFDC_GET_REQUEST = {
    "GET REQUESTS": {
        # File Name         Command
        "FIRMWARE_list.txt": ENUMERATE_SW,
        "BMC_sensor_list.txt": ENUMERATE_SENSORS,
        "BMC_control_list.txt": ENUMERATE_CONTROL,
        "BMC_inventory.txt": ENUMERATE_INVENTORY,
        "BMC_elog.txt": ENUMERATE_ELOG,
        "BMC_led.txt": ENUMERATE_LED,
        "BMC_state.txt": ENUMERATE_STATE,
        "OCC_state.txt": ENUMERATE_OCC,
        "BMC_dumps.txt": ENUMERATE_DUMPS,
        "BMC_USER.txt": ENUMERATE_USER,
    },
}

# Remove the REST dictionary elements.
if redfish_support_trans_state == 1:
    for key in list(FFDC_GET_REQUEST):
        del FFDC_GET_REQUEST[key]

REDFISH_BASE = "/redfish/v1/"
REDFISH_ELOG = REDFISH_BASE + "Systems/system/LogServices/EventLog/Entries"
REDFISH_FIRMWARE = REDFISH_BASE + "UpdateService/FirmwareInventory"

# Add file name and corresponding Get Request
FFDC_GET_REDFISH_REQUEST = {
    "GET REQUESTS": {
        # File Name         Command
        "BMC_redfish_elog.txt": REDFISH_ELOG,
    },
}

# Define your keywords in method/utils and call here
FFDC_METHOD_CALL = {
    "BMC LOGS": {
        # Description               Keyword name
        "Start ffdc cleanup": "BMC FFDC Cleanup",
        "FFDC Generic Report": "BMC FFDC Manifest",
        "BMC Specific Files": "BMC FFDC Files",
        "Get Request FFDC": "BMC FFDC Get Requests",
        "Get Redfish Request FFDC": "BMC FFDC Get Redfish Requests",
        "OS FFDC": "OS FFDC Files",
        "Core Files": "SCP Coredump Files",
        "SEL Log": "Collect eSEL Log",
        "Sys Inventory Files": "System Inventory Files",
        "Dump Files": "SCP Dump Files",
        "PEL Files": "Collect PEL Log",
        "Redfish Log": "Enumerate Redfish Resources",
        "Firmware Log": "Enumerate Redfish Resources  "
        + " enum_uri=/redfish/v1/UpdateService/FirmwareInventory  "
        + " file_enum_name=redfish_FIRMWARE_list.txt",
        "Redfish OEM Log": "Enumerate Redfish OEM Resources",
        "End ffdc cleanup": "BMC FFDC Cleanup",
    },
}

try:
    platform_arch_type = os.environ.get(
        "PLATFORM_ARCH_TYPE", ""
    ) or BuiltIn().get_variable_value("${PLATFORM_ARCH_TYPE}", default="power")
except RobotNotRunningError:
    pass

# Filter the logs based on platform type.
if platform_arch_type == "x86":
    del FFDC_BMC_FILE["BMC FILES"]["PEL_logs_list.json"]
    del FFDC_BMC_FILE["BMC FILES"]["PEL_logs_display.json"]
    del FFDC_METHOD_CALL["BMC LOGS"]["PEL 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_get_redfish_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_REDFISH_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_get_redfish_request_index(self):
        r"""
        #######################################################################
        #   @brief    This method returns the list index from dictionary
        #   @return   List of index to the dictionary
        #######################################################################
        """
        return FFDC_GET_REDFISH_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]

    def get_dump_index(self, dump_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(dump_list) if "DUMP=" in str]
        return index[0]
