diff options
author | Jayanth Othayoth <ojayanth@in.ibm.com> | 2017-10-16 00:02:44 -0500 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-10-24 18:39:27 +0000 |
commit | 5ce155003939bb2fff0284ae525c1db787edbc40 (patch) | |
tree | 6a63ec2f52432a21a5f6722dc2e99e7a87ee163c | |
parent | 6f1c4d807bec544593e963f218eebd03100ffe25 (diff) | |
download | phosphor-debug-collector-5ce155003939bb2fff0284ae525c1db787edbc40.tar.gz phosphor-debug-collector-5ce155003939bb2fff0284ae525c1db787edbc40.zip |
dreport: initial commit for Plugin based infrastrcture
Refactor existing dreport to support new plugin
based reporting infrastructure.
Resolves openbmc/openbmc#2351
Change-Id: Ibf078cf0609e93a873dbcb28a9bfdc25b182500f
Signed-off-by: Jayanth Othayoth <ojayanth@in.ibm.com>
-rwxr-xr-x | tools/dreport | 682 | ||||
-rwxr-xr-x | tools/dreport.d/dreport | 328 |
2 files changed, 328 insertions, 682 deletions
diff --git a/tools/dreport b/tools/dreport deleted file mode 100755 index d37131c..0000000 --- a/tools/dreport +++ /dev/null @@ -1,682 +0,0 @@ -#! /bin/bash - -help=$" - dreport creates an archive(xz compressed) consisting of the following: - * Configuration information - * Debug information - * A summary report - The type parameter controls the content of the data. The generated - archive is stored in the user specified location. - -usage: dreport [OPTION] - -Options: - -n, —-name <name> Name to be used for the archive. - Default name format obmcdump_<id>_<epochtime> - -d, —-dir <directory> Archive directory to copy the compressed report. - Default output directory is /tmp - -i, —-id <id> Dump identifier to associate with the archive. - Identifiers include numeric characters. - Default dump identifier is 0 - -t, —-type <type> Data collection type. Valid types are - "user", "core", "elog". - Default type is "user" initiated. - -p, —-path <path> Optional contents to be included in the archive. - Valid paths are absolute file path or d-bus path - based on type parameter. - -Absolute file path for "core" type. - -elog d-bus object for "elog" type. - -s, --size <size> Maximum allowed size(in KB) of the archive. - Report will be truncated in case size exceeds - this limit. Default size is unlimited. - -v, —-verbose Increase logging verbosity. - -V, --version Output version information. - -q, —-quiet Only log fatal errors to stderr - -h, —-help Display this help and exit. -" - -#CONSTANTS -declare -r TRUE=1 -declare -r FALSE=0 -declare -r UNLIMITED="unlimited" -declare -r SUMMARY_DUMP="summary" -declare -r TYPE_USER="user" -declare -r TYPE_CORE="core" -declare -r TYPE_ELOG="elog" -declare -r SUMMARY_LOG="summary.log" -declare -r DREPORT_LOG="dreport.log" -declare -r TMP_DIR="/tmp" -declare -r EPOCHTIME=$(date +"%s") -declare -r TIME_STAMP="date -u" - -#Error Codes -declare -r SUCCESS="0" -declare -r INTERNAL_FAILURE="1" -declare -r RESOURCE_UNAVAILABLE="2" - -#VARIABLES -declare -x name="" -declare -x dump_dir="/tmp" -declare -x dump_id="00000000" -declare -x dump_type=$TYPE_USER -declare -x verbose=$FALSE -declare -x quiet=$FALSE -declare -x dump_size="unlimited" -declare -x name_dir="" -declare -x optional_path="" -declare -x dreport_log="" -declare -x summary_log="" -declare -x cur_dump_size=0 -declare -a command_list=("") -declare -x pid="0" -declare -x elog_id="" - -# @brief Initialize general command array -# Set of commands, which provide general debug information -function runlevel_general() -{ -command_list=( - get_fw_level - bmc_state - host_state - chassis_state - get_host_info - get_uname - get_uptime - get_disk_usage - get_host_info - get_cpuinfo - get_meminfo - get_top - ) -} - -# @brief Initialize user type command array -function runlevel_user() -{ -command_list=( - get_journal - get_elog_all - get_obmc_console - get_failed_services - ) -} - -# @brief Initialize core type command array -function runlevel_core() -{ -command_list=( - move_optional_file - get_proc_journal - get_failed_services - get_obmc_console - ) -} - -# @brief Initialize elog type command array -function runlevel_elog() -{ -command_list=( - get_proc_journal - get_elog - ) -} - -function get_fw_level() -{ - desc="Firmware Release" - command="cat /etc/os-release" - copy_loc="firmware_release.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_uname() -{ - desc="uname" - command="uname -a" - copy_loc="uname.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_uptime() -{ - desc="uptime" - command="uptime" - copy_loc="uptime.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_disk_usage() -{ - desc="Disk Usage" - command="df -hT" - copy_loc="disk_usage.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_journal() -{ - desc="Journal log" - command="journalctl -o json-pretty -r" - copy_loc="journal.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_proc_journal() -{ - desc="Process Journal log" - command="journalctl -o verbose _PID=$pid" - copy_loc="proc_journal.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_host_info() -{ - desc="Host information" - command="hostnamectl status" - copy_loc="hostnamectl.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_failed_services() -{ - desc="Failed Services" - command="systemctl --failed" - copy_loc="failed_services.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_obmc_console() -{ - desc="OBMC Console" - command="cat /var/log/obmc-console.log" - copy_loc="obmc_console.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_cpuinfo() -{ - desc="cpuinfo" - command="cat /proc/cpuinfo" - copy_loc="cpuinfo.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_meminfo() -{ - desc="meminfo" - command="cat /proc/meminfo" - copy_loc="meminfo.log" - run_command "$command" "$copy_loc" "$desc" -} - -function get_top() -{ - desc="top" - command="top -n 1 -b" - copy_loc="top.log" - run_command "$command" "$copy_loc" "$desc" -} - -function bmc_state() -{ - desc="BMC State" - command="busctl get-property \ - xyz.openbmc_project.State.BMC \ - /xyz/openbmc_project/state/bmc0 \ - xyz.openbmc_project.State.BMC \ - CurrentBMCState" - copy_loc="BMCState.log" - run_command "$command" "$copy_loc" "$desc" -} - -function host_state() -{ - desc="Host State" - command="busctl get-property \ - xyz.openbmc_project.State.Host \ - /xyz/openbmc_project/state/host0 \ - xyz.openbmc_project.State.Host \ - CurrentHostState" - copy_loc="HostState.log" - run_command "$command" "$copy_loc" "$desc" -} - -function chassis_state() -{ - desc="Chassis State" - command="busctl get-property \ - xyz.openbmc_project.State.Chassis \ - /xyz/openbmc_project/state/chassis0 \ - xyz.openbmc_project.State.Chassis \ - CurrentPowerState" - copy_loc="ChassisState.log" - run_command "$command" "$copy_loc" "$desc" -} - -# @brief get all available elogs in BMC. -function get_elog_all() -{ - desc="elog" - - entries=$(busctl --list --no-pager tree \ - xyz.openbmc_project.Logging | grep \ - '/xyz/openbmc_project/logging/entry/') - - #check for eSEL entries. - if [ -z "$entries" ]; then - log_info "No $desc entries" - return 0 - fi - - command="busctl --list --no-pager tree \ - xyz.openbmc_project.Logging | grep \ - '/xyz/openbmc_project/logging/entry/' \ - | xargs -I {} busctl --verbose --no-pager \ - call xyz.openbmc_project.Logging {} \ - org.freedesktop.DBus.Properties GetAll s \ - xyz.openbmc_project.Logging.Entry" - copy_loc="elog.log" - run_command "$command" "$copy_loc" "$desc" -} - -# @brief get elog specific to global elog_id -function get_elog() -{ - desc="elog id:$elog_id" - - command="busctl --verbose --no-pager \ - call xyz.openbmc_project.Logging \ - $optional_path \ - org.freedesktop.DBus.Properties GetAll s \ - xyz.openbmc_project.Logging.Entry" - copy_loc="elog_$elog_id.log" - run_command "$command" "$copy_loc" "$desc" -} - -function move_optional_file() -{ - desc="Move Optional file" - - mv $optional_path $name_dir - if [ $? -ne 0 ]; then - log_error "Failed to move file $optional_path" - return 1 - fi - if check_size "$name_dir/$(basename "$optional_path")"; then - log_info "Moving file $file_name" - else - log_warning "Skipping $file_name move" - fi -} - -# @brief Run the requested command and save the output -# into temporary location for successful size check - -function run_command() -{ - command="$1" - copy_loc="$2" - desc="$3" - - eval $command >> "$name_dir/$copy_loc" - if [ $? -ne 0 ]; then - log_error "Failed to collect $desc" - return 1 - fi - - if check_size "$name_dir/$copy_loc"; then - log_info "Collected $desc" - else - log_warning "Skipping $desc" - fi -} - -# @brief Initiate data collection based on the type. -# @return 0 on success, error code otherwise -function collect_data() -{ - runlevel_general - capture_data "${command_list[@]}" - - case $dump_type in - $TYPE_USER) - runlevel_user - capture_data "${command_list[@]}" - ;; - $TYPE_CORE) - set_core_pid - runlevel_core - capture_data "${command_list[@]}" - ;; - $TYPE_ELOG) - elog_id=$(basename "$optional_path") - set_elog_pid - runlevel_elog - capture_data "${command_list[@]}" - ;; - - $SUMMARY_DUMP) - #No data collection is required. - ;; - *) # unknown option - log_error "Skipping: Unknown dump type: $dump_type" - ;; - esac -} - -# @brief set pid by reading information from the optional path. -# dreport "core" type user provides core file as optional path parameter. -# As per coredump source code systemd-coredump uses below format -# https://github.com/systemd/systemd/blob/master/src/coredump/coredump.c -# /var/lib/systemd/coredump/core.%s.%s." SD_ID128_FORMAT_STR “. -# <process ID>.%s000000" -function set_core_pid() -{ - #Escape bash characters in file name - file=$(printf %q "$optional_path") - - #matching systemd-coredump core file format. - pid=$(echo $file | awk -F . '{ print $5}') -} - -# @brief set elog pid by reading _PID information from the elog d-bus object. -# _PID information is stored elog Additional data field -# Data format "_PID=<pid>" -function set_elog_pid() -{ - additional_data=$(busctl get-property xyz.openbmc_project.Logging \ - $optional_path \ - xyz.openbmc_project.Logging.Entry \ - AdditionalData) - - #read _PID data. - if [ ! -z "$additional_data" ]; then - pid=$(echo $additional_data | \ - awk -F _PID= '{ print ($2+0)}') - fi -} - -# @brief Capture debug data based on the input command array. -# and stores in to global temporary name specific location. -# @param $1 Source array -# @return 0 on success, error code otherwise -function capture_data() -{ - source=("$@") - - for ((i=0;i<${#source[@]};i+=1)); do - ${source[i]} - done - - return 0 -} - -# @brief Calculate file or directory compressed size based on input -# and check whether the size in the the allowed size limit. -# Remove the file or directory from the name_dir -# if the check fails. -# @param $1 Source file or directory -# @return 0 on success, error code if size exceeds the limit. -# Limitation: compress and tar will have few bytes size difference -function check_size() -{ - source=$1 - - #No size check required incase dump_size is set to unlimited - if [ $dump_size = $UNLIMITED ]; then - return 0 - fi - - #get the file or directory size - if [[ -d $source ]] && [[ -n $source ]]; then - tar -cf "$source.tar" -C \ - $(dirname "$source") $(basename "$source") - size=$(stat -c%s "$source.tar") - rm "$source.tar" - else - size=$(stat -c%s "$source") - fi - - if [ $((size + cur_dump_size)) -gt $dump_size ]; then - #Exceed the allowed limit, - #tar and compress the files and check the size - tar -Jcf "$name_dir.tar.xz" -C \ - $(dirname "$name_dir") $(basename "$name_dir") - size=$(stat -c%s "$name_dir.tar.xz") - if [ $size -gt $dump_size ]; then - #Remove the the specific data from the name_dir and contniue - rm "$source" "$name_dir.tar.xz" - return $RESOURCE_UNAVAILABLE - else - rm "$name_dir.tar.xz" - fi - fi - - #Remove the compressed file from the name directory - cur_dump_size=$((size + cur_dump_size)) - return $SUCCESS -} - -# @brief Initial version of the summary log -init_summary() -{ - log_summary "Name: $name.tar.xz" - log_summary "Epochtime: $EPOCHTIME" - log_summary "ID: $dump_id" - log_summary "Type: $dump_type" - log_summary "Optional path: $optional_path" -} - -# @brief Check the validity of user inputs and initialize global -# variables. Create directory for temporary data collection -# @return 0 on success, error code otherwise - -function initialize() -{ - #Dump file name - if [ -z $name ]; then - name=$"obmcdump_"$dump_id"_$EPOCHTIME" - fi - - #Create temporary data directory. - mkdir -p "$TMP_DIR/$name" - if [ $? -ne 0 ]; then - echo "Error: Failed to create the temporary directory." - return $RESOURCE_UNAVAILABLE; - fi - - #name directory - name_dir="$TMP_DIR/$name" - - #dreport log file - dreport_log="$name_dir/$DREPORT_LOG" - - #summary log file - summary_log="$name_dir/$SUMMARY_LOG" - - #Type - if [[ !($dump_type = $TYPE_USER || \ - $dump_type = $TYPE_CORE || \ - $dump_type = $TYPE_ELOG) ]]; then - log_error "Invalid -type, Only summary log is available" - dump_type=$SUMMARY_DUMP - fi - - #Size - #Check the input is integer. - if [ "$dump_size" -eq "$dump_size" ] 2>/dev/null; then - #Converts in to bytes. - dump_size="$((dump_size * 1024))" - else - dump_size=$UNLIMITED - fi - - return $SUCCESS -} - -# @brief Packaging the dump and transferring to dump location. -function package() -{ - mkdir -p "$dump_dir" - if [ $? -ne 0 ]; then - log_error "Could not create the destination directory $dump_dir" - dest_dir=$TMP_DIR - fi - - #tar and compress the files. - tar -Jcf "$name_dir.tar.xz" -C \ - $(dirname "$name_dir") $(basename "$name_dir") - - if [ $? -ne 0 ]; then - echo $($TIME_STAMP) "Could not create the compressed tar file" - rm -r "$name_dir" - return $INTERNAL_FAILURE - fi - - #remove the temporary name specific directory - rm -r "$name_dir" - - echo $($TIME_STAMP) "Report is available in $dump_dir" - - if [ "$TMP_DIR" == "$dump_dir" ]; then - return $SUCCESS - fi - - #copy the compressed tar file into the destination - cp "$name_dir.tar.xz" "$dump_dir" - if [ $? -ne 0 ]; then - echo "Failed to copy the $name_dir.tar.xz to $dump_dir" - rm "$name_dir.tar.xz" - return $INTERNAL_FAILURE - fi - - #Remove the temporary copy of the file - rm "$name_dir.tar.xz" -} - -# @brief log the error message -# @param error message -function log_error() -{ - echo $($TIME_STAMP) "ERROR: $@" >> $dreport_log - if ((quiet != TRUE)); then - echo $($TIME_STAMP) "ERROR: $@" >&2 - fi -} - -# @brief log warning message -# @param warning message -function log_warning() -{ - if ((verbose == TRUE)); then - echo $($TIME_STAMP) "WARNING: $@" >> $dreport_log - if ((quiet != TRUE)); then - echo $($TIME_STAMP) "WARNING: $@" >&2 - fi - fi -} - -# @brief log info message -# @param info message -function log_info() -{ - if ((verbose == TRUE)); then - echo $($TIME_STAMP) "INFO: $@" >> $dreport_log - if ((quiet != TRUE)); then - echo $($TIME_STAMP) "INFO: $@" >&1 - fi - fi -} - -# @brief log summary message -# @param message -function log_summary() -{ - echo $($TIME_STAMP) "$@" >> $summary_log - if ((quiet != TRUE)); then - echo $($TIME_STAMP) "$@" >&1 - fi -} - -# @brief Main function -function main() -{ - #initialize the global variables and - #create temporary storage locations - initialize - result=$? - if [[ ${result} -ne $SUCCESS ]]; then - echo $($TIME_STAMP) "Error: Failed to initialize, Exiting" - exit; - fi - - #Initilize the summary log - init_summary - - #collect data based on the type. - collect_data - - package #package the dump - result=$? - if [[ ${result} -ne $SUCCESS ]]; then - echo $($TIME_STAMP) "Error: Failed to package, Exiting" - else - echo $($TIME_STAMP) "Sucessfully completed" - exit; - fi -} - -TEMP=`getopt -o n:d:i:t:s:p:vVqh \ - --long name:,dir:,dumpid:,type:,size:,path:,verbose,version,quiet,help \ - -- "$@"` - -if [ $? -ne 0 ] -then - echo "Error: Invalid options" - exit 1 -fi - -eval set -- "$TEMP" - -while [[ $# -gt 1 ]]; do - key="$1" - case $key in - -n|--name) - name=$2 - shift 2;; - -d|--dir) - dump_dir=$2 - shift 2;; - -i|--dumpid) - dump_id=$2 - shift 2;; - -t|--type) - dump_type=$2 - shift 2;; - -s|--size) - dump_size=$2 - shift 2;; - -p|--path) - optional_path=$2 - shift 2;; - -v|—-verbose) - verbose=$TRUE - shift;; - -V|--version) - shift;; - -q|—-quiet) - quiet=$TRUE - shift;; - -h|--help) - echo "$help" - exit;; - *) # unknown option - log_error "Unknown argument: $1" - log_info "$help" - exit 1;; - esac -done - -main #main program -exit $? diff --git a/tools/dreport.d/dreport b/tools/dreport.d/dreport new file mode 100755 index 0000000..908d6ec --- /dev/null +++ b/tools/dreport.d/dreport @@ -0,0 +1,328 @@ +#! /bin/bash + +help=$" + dreport creates an archive(xz compressed) consisting of the following: + * Configuration information + * Debug information + * A summary report + The type parameter controls the content of the data. The generated + archive is stored in the user specified location. + +usage: dreport [OPTION] + +Options: + -n, —-name <name> Name to be used for the archive. + Default name format obmcdump_<id>_<epochtime> + -d, —-dir <directory> Archive directory to copy the compressed report. + Default output directory is /tmp + -i, —-id <id> Dump identifier to associate with the archive. + Identifiers include numeric characters. + Default dump identifier is 0 + -t, —-type <type> Data collection type. Valid types are + "user", "core", "elog". + Default type is "user" initiated. + -p, —-path <path> Optional contents to be included in the archive. + Valid paths are absolute file path or d-bus path + based on type parameter. + -Absolute file path for "core" type. + -elog d-bus object for "elog" type. + -s, --size <size> Maximum allowed size(in KB) of the archive. + Report will be truncated in case size exceeds + this limit. Default size is unlimited. + -v, —-verbose Increase logging verbosity. + -V, --version Output version information. + -q, —-quiet Only log fatal errors to stderr + -h, —-help Display this help and exit. +" + +#CONSTANTS +declare -rx TRUE=1 +declare -rx FALSE=0 +declare -rx UNLIMITED="unlimited" +declare -rx SUMMARY_DUMP="summary" +declare -rx TYPE_USER="user" +declare -rx TYPE_CORE="core" +declare -rx TYPE_ELOG="elog" +declare -rx SUMMARY_LOG="summary.log" +declare -rx DREPORT_LOG="dreport.log" +declare -rx TMP_DIR="/tmp" +declare -rx EPOCHTIME=$(date +"%s") +declare -rx TIME_STAMP="date -u" +declare -rx PLUGIN="pl_" +declare -rx DREPORT_SOURCE="/usr/share/dreport.d" +declare -rx DREPORT_INCLUDE="$DREPORT_SOURCE/include.d" + +#Error Codes +declare -rx SUCCESS="0" +declare -rx INTERNAL_FAILURE="1" +declare -rx RESOURCE_UNAVAILABLE="2" + +#VARIABLES +declare -x name="" +declare -x dump_dir="/tmp" +declare -x dump_id="00000000" +declare -x dump_type=$TYPE_USER +declare -x verbose=$FALSE +declare -x quiet=$FALSE +declare -x dump_size="unlimited" +declare -x name_dir="" +declare -x optional_path="" +declare -x dreport_log="" +declare -x summary_log="" +declare -x cur_dump_size=0 +declare -x pid="0" +declare -x elog_id="" + +#Source dreport common functions +. $DREPORT_INCLUDE/functions + +# @brief Initiate data collection based on the type. +# @return 0 on success, error code otherwise +function collect_data() +{ + case $dump_type in + $TYPE_USER) + ;; + $TYPE_CORE) + log_summary "Core: $optional_path" + set_core_pid + ;; + $TYPE_ELOG) + log_summary "ELOG: $optional_path" + elog_id=$(basename "$optional_path") + set_elog_pid + ;; + + $SUMMARY_DUMP) + #No data collection is required. + return + ;; + *) # unknown option + log_error "Skipping: Unknown dump type: $dump_type" + return + ;; + esac + + plugin_path=$DREPORT_SOURCE/$PLUGIN$dump_type.d + + # check plugin directory for this dump type? + if [ ! -d $plugin_path ]; then + log_error "$plugin_path does not exist, skipping dump collection" + return 0 + fi + + #Executes plugins based on the type. + for i in $plugin_path/* ; do + $i + done +} + +# @brief set pid by reading information from the optional path. +# dreport "core" type user provides core file as optional path parameter. +# As per coredump source code systemd-coredump uses below format +# https://github.com/systemd/systemd/blob/master/src/coredump/coredump.c +# /var/lib/systemd/coredump/core.%s.%s." SD_ID128_FORMAT_STR “. +# <process ID>.%s000000" +function set_core_pid() +{ + #Escape bash characters in file name + file=$(printf %q "$optional_path") + + #matching systemd-coredump core file format. + pid=$(echo $file | awk -F . '{ print $5}') +} + +# @brief set elog pid by reading _PID information from the elog d-bus object. +# _PID information is stored elog Additional data field +# Data format "_PID=<pid>" +function set_elog_pid() +{ + additional_data=$(busctl get-property xyz.openbmc_project.Logging \ + $optional_path \ + xyz.openbmc_project.Logging.Entry \ + AdditionalData) + + #read _PID data. + if [ ! -z "$additional_data" ]; then + pid=$(echo $additional_data | \ + awk -F _PID= '{ print ($2+0)}') + fi +} + +# @brief Initial version of the summary log +init_summary() +{ + log_summary "Name: $name.tar.xz" + log_summary "Epochtime: $EPOCHTIME" + log_summary "ID: $dump_id" + log_summary "Type: $dump_type" +} + +# @brief Check the validity of user inputs and initialize global +# variables. Create directory for temporary data collection +# @return 0 on success, error code otherwise + +function initialize() +{ + #Dump file name + if [ -z $name ]; then + name=$"obmcdump_"$dump_id"_$EPOCHTIME" + fi + + #Create temporary data directory. + mkdir -p "$TMP_DIR/$name" + if [ $? -ne 0 ]; then + echo "Error: Failed to create the temporary directory." + return $RESOURCE_UNAVAILABLE; + fi + + #name directory + name_dir="$TMP_DIR/$name" + + #dreport log file + dreport_log="$name_dir/$DREPORT_LOG" + + #summary log file + summary_log="$name_dir/$SUMMARY_LOG" + + #Type + if [[ !($dump_type = $TYPE_USER || \ + $dump_type = $TYPE_CORE || \ + $dump_type = $TYPE_ELOG) ]]; then + log_error "Invalid -type, Only summary log is available" + dump_type=$SUMMARY_DUMP + fi + + #Size + #Check the input is integer. + if [ "$dump_size" -eq "$dump_size" ] 2>/dev/null; then + #Converts in to bytes. + dump_size="$((dump_size * 1024))" + else + dump_size=$UNLIMITED + fi + + return $SUCCESS +} + +# @brief Packaging the dump and transferring to dump location. +function package() +{ + mkdir -p "$dump_dir" + if [ $? -ne 0 ]; then + log_error "Could not create the destination directory $dump_dir" + dest_dir=$TMP_DIR + fi + + #tar and compress the files. + tar -Jcf "$name_dir.tar.xz" -C \ + $(dirname "$name_dir") $(basename "$name_dir") + + if [ $? -ne 0 ]; then + echo $($TIME_STAMP) "Could not create the compressed tar file" + rm -r "$name_dir" + return $INTERNAL_FAILURE + fi + + #remove the temporary name specific directory + rm -r "$name_dir" + + echo $($TIME_STAMP) "Report is available in $dump_dir" + + if [ "$TMP_DIR" == "$dump_dir" ]; then + return $SUCCESS + fi + + #copy the compressed tar file into the destination + cp "$name_dir.tar.xz" "$dump_dir" + if [ $? -ne 0 ]; then + echo "Failed to copy the $name_dir.tar.xz to $dump_dir" + rm "$name_dir.tar.xz" + return $INTERNAL_FAILURE + fi + + #Remove the temporary copy of the file + rm "$name_dir.tar.xz" +} + +# @brief Main function +function main() +{ + #initialize the global variables and + #create temporary storage locations + initialize + result=$? + if [[ ${result} -ne $SUCCESS ]]; then + echo $($TIME_STAMP) "Error: Failed to initialize, Exiting" + exit; + fi + + #Initilize the summary log + init_summary + + #collect data based on the type. + collect_data + + package #package the dump + result=$? + if [[ ${result} -ne $SUCCESS ]]; then + echo $($TIME_STAMP) "Error: Failed to package, Exiting" + else + echo $($TIME_STAMP) "Sucessfully completed" + exit; + fi +} + +TEMP=`getopt -o n:d:i:t:s:p:vVqh \ + --long name:,dir:,dumpid:,type:,size:,path:,verbose,version,quiet,help \ + -- "$@"` + +if [ $? -ne 0 ] +then + echo "Error: Invalid options" + exit 1 +fi + +eval set -- "$TEMP" + +while [[ $# -gt 1 ]]; do + key="$1" + case $key in + -n|--name) + name=$2 + shift 2;; + -d|--dir) + dump_dir=$2 + shift 2;; + -i|--dumpid) + dump_id=$2 + shift 2;; + -t|--type) + dump_type=$2 + shift 2;; + -s|--size) + dump_size=$2 + shift 2;; + -p|--path) + optional_path=$2 + shift 2;; + -v|—-verbose) + verbose=$TRUE + shift;; + -V|--version) + shift;; + -q|—-quiet) + quiet=$TRUE + shift;; + -h|--help) + echo "$help" + exit;; + *) # unknown option + log_error "Unknown argument: $1" + log_info "$help" + exit 1;; + esac +done + +main #main program +exit $? |