---
# This yaml formatted file contains defaults items to collect FFDC for the targeted system
# COMMANDS - List of commands to be run on the corresponding targeted system (inband)
#            to generate and/or collect data
# FILES    - List of files; with complete path; on the corresponding targeted system
#            to be copied to external destination
# PROTOCOL - Protocol used to communicate with targeted system; ssh, Rest, redfish, etc
#
# Note: Items in COMMANDS and FILES are not necessarily one-to-one correspondence.
#       For example, a file could have been created by an internal process,
#       and is listed in FILES to be collected.
#
# Note: When a new remote type is added to this configuration file,
#       it is also need to be added the list of supported OSes in ffdc_collector.py

# Commands and File to take snapshot of linux based system.
# Filename is <OS>_general.txt, where <OS> is in [OPENBMC, RHEL, UBUNTU]
GENERAL:
    COMMANDS:
        - 'rm -rf /tmp/%s_general.txt'
        - 'echo "++++++++++ cat /etc/os-release ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - 'cat /etc/os-release >> /tmp/%s_general.txt 2>&1'
        - 'echo -e "\n++++++++++ cat /etc/timestamp ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - 'cat /etc/timestamp >> /tmp/%s_general.txt 2>&1'
        - 'echo -e "\n++++++++++ uname -a ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - 'uname -a >> /tmp/%s_general.txt'
        - 'echo -e "\n++++++++++ cat /etc/timestamp ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - 'cat /etc/timestamp >> /tmp/%s_general.txt 2>&1'
        - 'echo -e "\n++++++++++ uptime;cat /proc/uptime ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - 'uptime;cat /proc/uptime >> /tmp/%s_general.txt 2>&1'
        - 'echo -e "\n++++++++++ df -hT ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - 'df -hT >> /tmp/%s_general.txt 2>&1'
        - 'echo -e "\n++++++++++ date;/sbin/hwclock --show ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - 'date;/sbin/hwclock --show;/usr/bin/timedatectl >> /tmp/%s_general.txt 2>&1'
        - 'echo -e "\n++++++++++ /usr/bin/obmcutil state ++++++++++" >> /tmp/%s_general.txt 2>&1'
        - '/usr/bin/obmcutil state >> /tmp/%s_general.txt 2>&1'
    FILES:
        - '/tmp/%s_general.txt'
    PROTOCOL:
        - 'SSH'

# Commands and Files to collect for a given OpenBMC system.
OPENBMC:
    COMMANDS:
        - 'cat /sys/class/watchdog/watchdog1/bootstatus >/tmp/BMC_flash_side.txt 2>&1'
        - 'grep -r . /sys/class/hwmon/* >/tmp/BMC_hwmon.txt 2>&1'
        - 'top -n 1 -b >/tmp/BMC_proc_list.txt 2>&1'
        - 'ls -Al /proc/*/fd/ >/tmp/BMC_proc_fd_active_list.txt 2>&1'
        - 'journalctl --no-pager >/tmp/BMC_journalctl_nopager.txt 2>&1'
        - 'journalctl -o json-pretty >/tmp/BMC_journalctl_pretty.json 2>&1'
        - 'dmesg >/tmp/BMC_dmesg.txt 2>&1'
        - 'cat /proc/cpuinfo >/tmp/BMC_procinfo.txt 2>&1'
        - 'cat /proc/meminfo >/tmp/BMC_meminfo.txt 2>&1'
        - 'systemctl status --all >/tmp/BMC_systemd.txt 2>&1'
        - 'systemctl list-units --failed >/tmp/BMC_failed_service.txt 2>&1'
        - 'systemctl list-jobs >/tmp/BMC_list_service.txt 2>&1'
        - 'cat /var/log/obmc-console.log >/tmp/BMC_obmc_console.txt 2>&1'
        - 'cat /var/log/obmc-console1.log >/tmp/BMC_obmc_console1.txt 2>&1'
        - 'peltool -l >/tmp/PEL_logs_list.json 2>&1'
        - 'peltool -a >/tmp/PEL_logs_display.json 2>&1'
    FILES:
        - '/tmp/BMC_flash_side.txt'
        - '/tmp/BMC_hwmon.txt'
        - '/tmp/BMC_proc_list.txt'
        - '/tmp/BMC_proc_fd_active_list.txt'
        - '/tmp/BMC_journalctl_nopager.txt'
        - '/tmp/BMC_journalctl_pretty.json'
        - '/tmp/BMC_dmesg.txt'
        - '/tmp/BMC_procinfo.txt'
        - '/tmp/BMC_meminfo.txt'
        - '/tmp/BMC_systemd.txt'
        - '/tmp/BMC_failed_service.txt'
        - '/tmp/BMC_list_service.txt'
        - '/tmp/BMC_obmc_console.txt'
        - '/tmp/BMC_obmc_console1.txt'
        - '/tmp/PEL_logs_list.json'
        - '/tmp/PEL_logs_display.json'
    PROTOCOL:
        - 'SSH'

# Commands and Files to collect OPENBMC dumps
OPENBMC_DUMPS:
    COMMANDS:
        - 'ls -AX /tmp/core_*'
        - 'ls -AX /var/lib/phosphor-debug-collector/dumps/*/*.tar.xz'
        - 'ls -AX /var/lib/phosphor-debug-collector/hostbootdump/*/*.tar.gz'
    FILES:
        - '/tmp/core_*'
        - '/var/lib/phosphor-debug-collector/dumps/*/*.tar.xz'
        - '/var/lib/phosphor-debug-collector/hostbootdump/*/*.tar.gz'
    PROTOCOL:
        - 'SSH'

# Commands and Files to collect for all Linux distributions
LINUX:
    COMMANDS:
        - 'cat /sys/firmware/opal/msglog >/tmp/OS_msglog.txt 2>&1'
        - 'ppc64_cpu --frequency >/tmp/OS_cpufrequency.txt 2>&1'
        - 'dmesg >/tmp/OS_dmesg.txt 2>&1'
        - 'cat /var/log/opal-prd* >/tmp/OS_opal_prd.txt 2>&1'
        - 'cat /var/log/boot.log >/tmp/OS_boot.txt 2>&1'
        - 'cat /proc/cpuinfo >/tmp/OS_procinfo.txt 2>&1'
        - 'cat /proc/meminfo >/tmp/OS_meminfo.txt 2>&1'
        - 'netstat -a >/tmp/OS_netstat.txt 2>&1'
        - 'lspci >/tmp/OS_lspci.txt 2>&1'
        - 'lscpu >/tmp/OS_lscpu.txt 2>&1'
        - 'lscfg >/tmp/OS_lscfg.txt 2>&1'
        - 'journalctl --no-pager -b > /tmp/OS_journalctl_nopager.txt  2>&1'
    FILES:
        - '/tmp/OS_msglog.txt'
        - '/tmp/OS_cpufrequency.txt'
        - '/tmp/OS_dmesg.txt'
        - '/tmp/OS_opal_prd.txt'
        - '/tmp/OS_boot.txt'
        - '/tmp/OS_procinfo.txt'
        - '/tmp/OS_meminfo.txt'
        - '/tmp/OS_netstat.txt'
        - '/tmp/OS_lspci.txt'
        - '/tmp/OS_lscpu.txt'
        - '/tmp/OS_lscfg.txt'
        - '/tmp/OS_journalctl_nopager.txt'
    PROTOCOL:
        - 'SSH'

# Commands and Files to collect for Ubuntu Linux only
UBUNTU:
    COMMANDS:
        - '{ lsusb -t ; lsusb -v ; } >/tmp/OS_isub.txt 2>&1'
        - 'tail -n 50000 /var/log/kern.log >/tmp/OS_kern.txt 2>&1'
        - '{ cat /var/log/auth.log; cat /var/log/auth.log.1 ; } >/tmp/OS_authlog.txt 2>&1'
        - 'tail -n 200000 /var/log/syslog >/tmp/OS_syslog.txt 2>&1'
        - '{ uname -a; dpkg -s opal-prd; dpkg -s ipmitool ; } >/tmp/OS_info.txt 2>&1'
        - 'rm -rf /tmp/sosreport*FFDC*'
        - 'sosreport --batch --tmp-dir /tmp --ticket-number FFDC >/tmp/OS_sosreport.txt 2>&1'
    FILES:
        - '/tmp/OS_isub.txt'
        - '/tmp/OS_kern.txt'
        - '/tmp/OS_authlog.txt'
        - '/tmp/OS_syslog.txt'
        - '/tmp/OS_info.txt'
        - '/tmp/OS_sosreport.txt'
    PROTOCOL:
        - 'SSH'

# Commands and Files to collect for RHE Linux only
RHEL:
    COMMANDS:
        - '/usr/bin/ctversion -bv >/tmp/OS_rsct.txt 2>&1'
        - 'cat /var/log/secure >/tmp/OS_secure.txt 2>&1'
        - 'tail -n 200000 /var/log/messages >/tmp/OS_syslog.txt 2>&1'
        - '{ lsb_release -a; cat /etc/redhat-release; uname -a; rpm -qa ; } >/tmp/OS_info.txt 2>&1'
        - 'rm -rf /tmp/sosreport*FFDC*'
        - 'sosreport --batch --tmp-dir /tmp --label FFDC >/tmp/OS_sosreport.txt 2>&1'
    FILES:
        - '/tmp/OS_rsct.txt'
        - '/tmp/OS_secure.txt'
        - '/tmp/OS_syslog.txt'
        - '/tmp/OS_info.txt'
        - '/tmp/OS_sosreport.txt'
    PROTOCOL:
        - 'SSH'

# Commands and Files to collect for AIX only
AIX:
    COMMANDS:
        - 'errpt >/tmp/OS_errpt.txt 2>&1 ; errclear 0;'
        - 'bindprocessor -q >/tmp/OS_processors.txt 2>&1'
    FILES:
        - '/tmp/OS_errpt.txt'
        - '/tmp/OS_processors.txt'
    PROTOCOL:
        - 'SSH'
