1#!/usr/bin/env bash
2
3# @brief Execute the command and save the output into the dreport
4#        packaging, if it is in the user allowed dump size limit.
5# @param $1 Command to be executed.
6# @param $2 Save file name.
7# @param $3 Plugin description used for logging.
8function add_cmd_output()
9{
10    command="$1"
11    file_name="$2"
12    desc="$3"
13
14    eval $command >> "$name_dir/$file_name"
15    if [ $? -ne 0 ]; then
16        log_error "Failed to collect $desc"
17        return 1
18    fi
19
20    if check_size "$name_dir/$file_name"; then
21        log_info "Collected $desc"
22    else
23        log_warning "Skipping $desc"
24    fi
25}
26
27# @brief Copy the file or directory into the dreport packaging,
28#        if it is in the user allowed dump size limit.
29# @param $1 Copy file or directory name.
30# @param $2 Plugin description used for logging.
31function add_copy_file()
32{
33    file_name="$1"
34    desc="$2"
35
36    cp -r $file_name $name_dir
37    if [ $? -ne 0 ]; then
38        log_error "Failed to copy $desc $file_name"
39        return $RESOURCE_UNAVAILABLE
40    fi
41    if check_size "$name_dir/$(basename "$file_name")"; then
42        log_info "Copied $desc $file_name"
43        return $SUCCESS
44    else
45        return $RESOURCE_UNAVAILABLE
46        log_warning "Skipping copy $desc $file_name"
47    fi
48}
49
50# @brief Calculate file or directory compressed size based on input
51#        and check whether the size in the allowed size limit.
52#        Remove the file or directory from the name_dir
53#        if the check fails.
54# @param $1 Source file or directory
55# @return 0 on success, error code if size exceeds the limit.
56# Limitation: compress and tar will have few bytes size difference
57function check_size()
58{
59    source=$1
60
61    #No size check required incase dump_size is set to unlimited
62    if [ $dump_size = $UNLIMITED ]; then
63        return 0
64    fi
65
66    #get the file or directory size
67    if [[ -d $source ]] && [[ -n $source ]]; then
68        tar -cf "$source.tar" -C \
69                 $(dirname "$source") $(basename "$source")
70        size=$(stat -c%s "$source.tar")
71        rm "$source.tar"
72    else
73        size=$(stat -c%s "$source")
74    fi
75
76    if [ $((size + cur_dump_size)) -gt $dump_size ]; then
77        #Exceed the allowed limit,
78        #tar and compress the files and check the size
79        tar -Jcf "$name_dir.tar.xz" -C \
80                  $(dirname "$name_dir") $(basename "$name_dir")
81        size=$(stat -c%s "$name_dir.tar.xz")
82        if [ $size -gt $dump_size ]; then
83            #Remove the the specific data from the name_dir and continue
84            rm "$source" "$name_dir.tar.xz"
85            return $RESOURCE_UNAVAILABLE
86        else
87            rm "$name_dir.tar.xz"
88        fi
89    fi
90
91    cur_dump_size=$((size + cur_dump_size))
92    return $SUCCESS
93}
94
95# @brief log the error message
96# @param error message
97function log_error()
98{
99   echo $($TIME_STAMP) "ERROR: $@" >> $dreport_log
100   if ((quiet != TRUE)); then
101      echo $($TIME_STAMP) "ERROR: $@" >&2
102   fi
103}
104
105# @brief log warning message
106# @param warning message
107function log_warning()
108{
109    if ((verbose == TRUE)); then
110        echo $($TIME_STAMP) "WARNING: $@" >> $dreport_log
111        if ((quiet != TRUE)); then
112            echo $($TIME_STAMP) "WARNING: $@" >&2
113        fi
114    fi
115}
116
117# @brief log info message
118# @param info message
119function log_info()
120{
121    if ((verbose == TRUE)); then
122        echo $($TIME_STAMP) "INFO: $@" >> $dreport_log
123        if ((quiet != TRUE)); then
124            echo $($TIME_STAMP) "INFO: $@" >&1
125        fi
126    fi
127}
128
129# @brief log summary message
130# @param message
131function log_summary()
132{
133    echo $($TIME_STAMP) "$@" >> $summary_log
134    if ((quiet != TRUE)); then
135        echo $($TIME_STAMP) "$@" >&1
136    fi
137}
138