#!/usr/bin/env bash # @brief Execute the command and save the output into the dreport # packaging, if it is in the user allowed dump size limit. # @param $1 Command to be executed. # @param $2 Save file name. # @param $3 Plugin description used for logging. function add_cmd_output() { command="$1" file_name="$2" desc="$3" eval $command >> "$name_dir/$file_name" if [ $? -ne 0 ]; then log_error "Failed to collect $desc" return 1 fi if check_size "$name_dir/$file_name"; then log_info "Collected $desc" else log_warning "Skipping $desc" fi } # @brief Copy the file or directory into the dreport packaging, # if it is in the user allowed dump size limit. # @param $1 Copy file or directory name. # @param $2 Plugin description used for logging. function add_copy_file() { file_name="$1" desc="$2" cp -r $file_name $name_dir if [ $? -ne 0 ]; then log_error "Failed to copy $desc $file_name" return $RESOURCE_UNAVAILABLE fi if check_size "$name_dir/$(basename "$file_name")"; then log_info "Copied $desc $file_name" return $SUCCESS else return $RESOURCE_UNAVAILABLE log_warning "Skipping copy $desc $file_name" fi } # @brief Calculate file or directory compressed size based on input # and check whether the size in 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 continue rm "$source" "$name_dir.tar.xz" return $RESOURCE_UNAVAILABLE else rm "$name_dir.tar.xz" fi fi cur_dump_size=$((size + cur_dump_size)) return $SUCCESS } # @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 }