#!/bin/sh

# TODO openbmc/openbmc#1622 remove -e option related changes.

help=$'FFDC File Collection Script

Collects various FFDC files and system parameters and places them in a .tar

usage: ffdc [OPTION]

Options:
   -d, --dir <directory>  Specify destination directory. Defaults to /tmp if
                          invalid or unspecified.
   -e, --enable_dump      Enable BMC Dump specific features.
   -h, --help             Display this help text and exit.
'

declare -a arr=(
# Commands to be outputted into individual files
# Format: "File name" "Command"
      "FW_level.txt"              "cat /etc/os-release"
      "BMC_OS.txt"                "uname -a"
      "BMC_uptime.txt"            "uptime"
      "BMC_disk_usage.txt"        "df -hT"

      "systemctl_status.txt"      "systemctl status | cat"
      "failed_services.txt"       "systemctl --failed"
      "host_console.txt"          "cat /var/log/obmc-console.log"

      "BMC_proc_list.txt"         "top -n 1 -b"
      "BMC_journalctl.txt"        "journalctl --no-pager"
      "BMC_dmesg.txt"             "dmesg"
      "BMC_procinfo.txt"          "cat /proc/cpuinfo"
      "BMC_meminfo.txt"           "cat /proc/meminfo"

# Copy all content from these directories into directories in the .tar
# Format: "Directory name" "Directory to copy"
      "obmc"                      "/var/lib/obmc/"
      "core"                      "/var/lib/systemd/coredump"
)

dir=$"ffdc_$(date +"%Y-%m-%d_%H-%M-%S")"
dest="/tmp"
enable_dump=false

while [[ $# -gt 0 ]]; do
  key="$1"
  case $key in
    -d|--dir)
      mkdir -p "$2"
      if [ $? -eq 0 ]; then
        dest="$2"
      else
        echo "Failed to create the destination directory specified."
        break
      fi
      shift 2
      ;;
    -e|--enable_dump)
      enable_dump=true
      shift
      ;;
    -h|--help)
      echo "$help"
      exit
      ;;
    *)
      echo "Unknown option $1. Display available options with -h or --help"
      exit
      ;;
  esac
done

echo "Using destination directory $dest"

if [ $enable_dump = true ]; then
  id=$(basename $dest)
  printf -v f_id "%08d" $id
  dir=$"obmcdump_"$f_id"_$(date +"%s")"
fi

mkdir -p "$dest/$dir"

for ((i=0;i<${#arr[@]};i+=2)); do
  if [ -d "${arr[i+1]}" ]; then
    echo "Copying contents of ${arr[i+1]} to directory ./${arr[i]} ..."
    mkdir "$dest/$dir/${arr[i]}"
    cp -r ${arr[i+1]}/* $dest/$dir/${arr[i]}
  else
    echo "Collecting ${arr[i]}..."
    ${arr[i+1]} >> "$dest/$dir/${arr[i]}"
  fi
done

tar -cf "$dest/$dir.tar" -C $dest $dir
echo "Contents in $dest/$dir.tar"

rm -r "$dest/$dir"
