Skip to content

Commit ffdd2f8

Browse files
authored
chore(script): add restore logs script for self host (#18348)
1 parent 8550d94 commit ffdd2f8

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

scripts/selfhost/restore_logs.sh

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
#!/bin/bash
2+
3+
# Parse arguments
4+
while [[ $# -gt 0 ]]; do
5+
case "$1" in
6+
--dsn)
7+
DSN="$2"
8+
shift 2
9+
;;
10+
--stage)
11+
STAGE="$2"
12+
shift 2
13+
;;
14+
*)
15+
if [[ "$1" =~ ^[0-9]{8}$ ]]; then
16+
DATE_ARG="$1"
17+
shift
18+
else
19+
echo "Unknown parameter: $1"
20+
exit 1
21+
fi
22+
;;
23+
esac
24+
done
25+
26+
# Check required parameters
27+
if [[ -z "$STAGE" || -z "$DATE_ARG" ]]; then
28+
echo "Missing required parameters: --stage or yyyymmdd date"
29+
exit 1
30+
fi
31+
32+
# If DSN not provided, try to get from environment variable
33+
if [[ -z "$DSN" ]]; then
34+
DSN="$BENDSQL_DSN"
35+
if [[ -z "$DSN" ]]; then
36+
echo "--dsn parameter not provided and BENDSQL_DSN environment variable not set"
37+
exit 1
38+
fi
39+
fi
40+
41+
# Format date
42+
YEAR=${DATE_ARG:0:4}
43+
MONTH=${DATE_ARG:4:2}
44+
DAY=${DATE_ARG:6:2}
45+
FORMATTED_DATE="${YEAR}-${MONTH}-${DAY}"
46+
47+
# 1. Get download presigned URL
48+
DOWNLOAD_SQL="PRESIGN DOWNLOAD @${STAGE}/data_${FORMATTED_DATE}.tar.gz"
49+
DOWNLOAD_URL=$(bendsql --dsn "${DSN}" --query="${DOWNLOAD_SQL}" | awk '{print $3}')
50+
51+
if [[ -z "$DOWNLOAD_URL" ]]; then
52+
echo "Failed to get download URL"
53+
exit 1
54+
fi
55+
56+
# 2. Download the file
57+
TAR_FILE="data_${FORMATTED_DATE}.tar.gz"
58+
echo "Downloading file: ${TAR_FILE}"
59+
curl -o "${TAR_FILE}" "${DOWNLOAD_URL}"
60+
61+
if [[ ! -f "${TAR_FILE}" ]]; then
62+
echo "File download failed"
63+
exit 1
64+
fi
65+
66+
# 3. Extract the file
67+
echo "Extracting file: ${TAR_FILE}"
68+
TEMP_DIR="temp_extracted_${DATE_ARG}"
69+
mkdir -p "${TEMP_DIR}"
70+
tar -xzf "${TAR_FILE}" -C "${TEMP_DIR}"
71+
72+
# 4. Process and upload each file
73+
UPLOAD_STAGE="${STAGE}_${YEAR}_${MONTH}_${DAY}"
74+
75+
bendsql --dsn "${DSN}" --query="DROP STAGE IF EXISTS ${UPLOAD_STAGE}"
76+
bendsql --dsn "${DSN}" --query="CREATE STAGE ${UPLOAD_STAGE}"
77+
78+
find "${TEMP_DIR}" -type f | while read -r FILE; do
79+
RELATIVE_PATH="${FILE#${TEMP_DIR}/}"
80+
81+
# Get upload presigned URL
82+
UPLOAD_SQL="PRESIGN UPLOAD @${UPLOAD_STAGE}/${RELATIVE_PATH}"
83+
UPLOAD_URL=$(bendsql --dsn "${DSN}" --query="${UPLOAD_SQL}" | awk '{print $3}')
84+
85+
if [[ -z "$UPLOAD_URL" ]]; then
86+
echo "Failed to get upload URL for: ${RELATIVE_PATH}"
87+
continue
88+
fi
89+
90+
echo "Uploading file: ${RELATIVE_PATH}"
91+
curl -X PUT -T "${FILE}" "${UPLOAD_URL}"
92+
93+
if [[ $? -eq 0 ]]; then
94+
echo "Upload successful: ${RELATIVE_PATH}"
95+
else
96+
echo "Upload failed: ${RELATIVE_PATH}"
97+
fi
98+
done
99+
100+
# Cleanup temporary files
101+
echo "Cleaning up temporary files"
102+
rm -rf "${TEMP_DIR}"
103+
rm -f "${TAR_FILE}"
104+
echo "Temporary files cleanup is finished."
105+
106+
RESTORE_DATABASE="${STAGE}_${YEAR}_${MONTH}_${DAY}"
107+
bendsql --dsn "${DSN}" --query="DROP DATABASE IF EXISTS ${RESTORE_DATABASE}"
108+
bendsql --dsn "${DSN}" --query="CREATE DATABASE ${RESTORE_DATABASE}"
109+
110+
echo "Restoring the '${RESTORE_DATABASE}.columns' table..."
111+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="create table columns like system.columns;"
112+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="COPY INTO columns FROM @${UPLOAD_STAGE}/columns;"
113+
echo "The '${RESTORE_DATABASE}.columns' table has been successfully restored"
114+
115+
echo "Restoring the '${RESTORE_DATABASE}.user_functions' table..."
116+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="create table user_functions like system.user_functions;"
117+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="COPY INTO user_functions FROM @${UPLOAD_STAGE}/user_functions;"
118+
echo "The '${RESTORE_DATABASE}.user_functions' table has been successfully restored"
119+
120+
echo "Restoring the '${RESTORE_DATABASE}.log_history' table..."
121+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="create table log_history like system_history.log_history;"
122+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="COPY INTO log_history FROM @${UPLOAD_STAGE}/query_raw_logs;"
123+
echo "The '${RESTORE_DATABASE}.log_history' table has been successfully restored"
124+
125+
echo "Restoring the '${RESTORE_DATABASE}.query_history' table..."
126+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="create table query_history like system_history.query_history;"
127+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="COPY INTO query_history FROM @${UPLOAD_STAGE}/query_logs;"
128+
echo "The '${RESTORE_DATABASE}.query_history' table has been successfully restored"
129+
130+
echo "Restoring the '${RESTORE_DATABASE}.profile_history' table..."
131+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="create table profile_history like system_history.profile_history;"
132+
bendsql --dsn "${DSN}" --database "${RESTORE_DATABASE}" --query="COPY INTO profile_history FROM @${UPLOAD_STAGE}/query_profile_logs;"
133+
echo "The '${RESTORE_DATABASE}.profile_history' table has been successfully restored"
134+
135+
echo "Processing completed"

0 commit comments

Comments
 (0)