Skip to content

Commit b144eab

Browse files
authored
Update restore_logs.sh: show stage file size
1 parent 4fca845 commit b144eab

File tree

1 file changed

+72
-12
lines changed

1 file changed

+72
-12
lines changed

scripts/selfhost/restore_logs.sh

Lines changed: 72 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,33 +60,81 @@ EXAMPLES:
6060
EOF
6161
}
6262

63+
# Format file size
64+
format_size() {
65+
local size="$1"
66+
if [[ "$size" =~ ^[0-9]+$ ]]; then
67+
if (( size >= 1073741824 )); then
68+
echo "$(( size / 1073741824 )).$(( (size % 1073741824) / 107374182 ))GB"
69+
elif (( size >= 1048576 )); then
70+
echo "$(( size / 1048576 )).$(( (size % 1048576) / 104857 ))MB"
71+
elif (( size >= 1024 )); then
72+
echo "$(( size / 1024 )).$(( (size % 1024) / 102 ))KB"
73+
else
74+
echo "${size}B"
75+
fi
76+
else
77+
echo "$size"
78+
fi
79+
}
80+
6381
# Interactive file selector
6482
interactive_file_selector() {
6583
local stage="$1"
6684
local dsn="$2"
6785

6886
echo "Fetching file list from stage @${stage}..."
6987

70-
# Get file list
71-
local file_list
72-
file_list=$(bendsql --dsn "${dsn}" --query="list @${stage};" 2>/dev/null | awk '{print $1}' | grep -E '\.(tar\.gz|tgz)$' | sort)
88+
# Get raw output from list command
89+
local raw_output
90+
raw_output=$(bendsql --dsn "${dsn}" --query="list @${stage};" 2>/dev/null)
7391

74-
if [[ -z "$file_list" ]]; then
75-
log_error "No .tar.gz files found in stage @${stage}"
92+
if [[ -z "$raw_output" ]]; then
93+
log_error "Failed to get file list from stage @${stage}"
7694
return 1
7795
fi
7896

79-
# Convert to array
97+
# Parse files and sizes
8098
local files=()
99+
local sizes=()
100+
local file_list=""
101+
102+
# Process each line to extract filename and size
81103
while IFS= read -r line; do
82-
[[ -n "$line" ]] && files+=("$line")
83-
done <<<"$file_list"
104+
# Skip empty lines and headers
105+
[[ -z "$line" ]] && continue
106+
[[ "$line" =~ ^[[:space:]]*name ]] && continue
107+
[[ "$line" =~ ^[[:space:]]*-+ ]] && continue
108+
109+
# Extract filename (first field) and size (second field)
110+
local filename=$(echo "$line" | awk '{print $1}')
111+
local size=$(echo "$line" | awk '{print $2}')
112+
113+
# Only include tar.gz files
114+
if [[ "$filename" =~ \.(tar\.gz|tgz)$ ]]; then
115+
files+=("$filename")
116+
sizes+=("$(format_size "$size")")
117+
fi
118+
done <<< "$raw_output"
84119

85120
if [[ ${#files[@]} -eq 0 ]]; then
86121
log_error "No .tar.gz files found in stage @${stage}"
87122
return 1
88123
fi
89124

125+
# Sort files (and corresponding sizes)
126+
local sorted_files=()
127+
local sorted_sizes=()
128+
local indices=($(for i in "${!files[@]}"; do echo "$i:${files[$i]}"; done | sort -t: -k2 | cut -d: -f1))
129+
130+
for i in "${indices[@]}"; do
131+
sorted_files+=("${files[$i]}")
132+
sorted_sizes+=("${sizes[$i]}")
133+
done
134+
135+
files=("${sorted_files[@]}")
136+
sizes=("${sorted_sizes[@]}")
137+
90138
# Default to last file
91139
local selected=$((${#files[@]} - 1))
92140
local total=${#files[@]}
@@ -96,24 +144,36 @@ interactive_file_selector() {
96144
echo "Use ↑/↓ or k/j to navigate, Enter to select, q to quit"
97145
echo ""
98146

147+
# Calculate max filename length for alignment
148+
local max_name_len=0
149+
for filename in "${files[@]}"; do
150+
if [[ ${#filename} -gt $max_name_len ]]; then
151+
max_name_len=${#filename}
152+
fi
153+
done
154+
max_name_len=$((max_name_len + 2))
155+
99156
# Display function
100157
display_files() {
101158
# Clear screen and move to top
102159
echo -ne "\033[2J\033[H"
103160
echo "Stage: @${stage} ($total files)"
104161
echo "Use ↑/↓ or k/j to navigate, Enter to select, q to quit"
105162
echo ""
163+
printf "%-${max_name_len}s %s\n" "Filename" "Size"
164+
printf "%-${max_name_len}s %s\n" "$(printf '%*s' $((max_name_len-1)) '' | tr ' ' '-')" "----"
106165

107166
for i in "${!files[@]}"; do
167+
local display_line="$(printf "%-${max_name_len}s %s" "${files[$i]}" "${sizes[$i]}")"
108168
if [[ $i -eq $selected ]]; then
109-
echo -e "\033[7m> ${files[$i]}\033[0m" # Highlighted
169+
echo -e "\033[7m> $display_line\033[0m" # Highlighted
110170
else
111-
echo " ${files[$i]}"
171+
echo " $display_line"
112172
fi
113173
done
114174

115175
echo ""
116-
echo "Selected: ${files[$selected]}"
176+
echo "Selected: ${files[$selected]} (${sizes[$selected]})"
117177
}
118178

119179
# Initial display
@@ -148,7 +208,7 @@ interactive_file_selector() {
148208
;;
149209
'') # Enter
150210
echo ""
151-
echo "Selected: ${files[$selected]}"
211+
echo "Selected: ${files[$selected]} (${sizes[$selected]})"
152212
SELECTED_FILE="${files[$selected]}"
153213
return 0
154214
;;

0 commit comments

Comments
 (0)