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