#!/bin/sh

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.
   -D, --disable_dreport  Disable dreport based dump collection
   -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"
disable_dreport=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
      ;;
    -D|--disable_dreport)
      disable_dreport=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 [ $disable_dreport = false ]; then
  dreport -d $dest -v
  exit
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"
