Files
geoip-rest/scripts/dump_and_import.sh
2025-12-09 19:29:34 +09:00

68 lines
2.3 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
LOG_DIR="${USER_PROGRAM_IMPORT_LOG_DIR:-/app/log}"
UPDATE_DIR="${USER_PROGRAM_UPDATE_DIR:-/app/update_data}"
SCHEMA="${USER_PROGRAM_INFO_SCHEMA:-public}"
CSV_DIR="${USER_PROGRAM_INFO_CSV_DIR:-/app/initial_data}"
MYSQL_HOST="${USER_PROGRAM_INFO_HOST:?USER_PROGRAM_INFO_HOST is required}"
MYSQL_PORT="${USER_PROGRAM_INFO_PORT:-3306}"
MYSQL_USER="${USER_PROGRAM_INFO_USERNAME:?USER_PROGRAM_INFO_USERNAME is required}"
MYSQL_PASS="${USER_PROGRAM_INFO_PASSWORD:?USER_PROGRAM_INFO_PASSWORD is required}"
MYSQL_DB="${USER_PROGRAM_INFO_DB:-user_program_info}"
MYSQL_TABLE="${USER_PROGRAM_INFO_TABLE:-user_program_info}"
mkdir -p "${LOG_DIR}" "${UPDATE_DIR}"
# Target date: yesterday in KST unless USER_PROGRAM_TARGET_DATE=YYYY-MM-DD is provided.
TARGET_DATE="${USER_PROGRAM_TARGET_DATE:-$(TZ=Asia/Seoul date -d 'yesterday' +%Y-%m-%d)}"
TARGET_DATE_COMPACT="${TARGET_DATE//-/}"
OUT_FILE="${UPDATE_DIR}/user_program_info_${TARGET_DATE_COMPACT}.csv"
TMP_FILE="${OUT_FILE}.tmp"
QUERY=$(cat <<SQL
SET time_zone = '+00:00';
SELECT
id,
product_name,
login_id,
user_employee_id,
login_version,
login_public_ip,
login_local_ip,
user_company,
user_department,
user_position,
user_login_time,
created_at,
user_family_flag
FROM ${MYSQL_TABLE}
WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+09:00')) = '${TARGET_DATE}';
SQL
)
echo "[scheduler] dumping data for ${TARGET_DATE} to ${OUT_FILE}"
mysql --host="${MYSQL_HOST}" --port="${MYSQL_PORT}" --user="${MYSQL_USER}" --password="${MYSQL_PASS}" \
--database="${MYSQL_DB}" --batch --raw --silent --skip-column-names -e "${QUERY}" \
| python - <<'PY'
import csv, sys, os
out_path = os.environ["TMP_FILE"]
writer = csv.writer(open(out_path, "w", newline=""))
writer.writerow([
"id","product_name","login_id","user_employee_id","login_version",
"login_public_ip","login_local_ip","user_company","user_department",
"user_position","user_login_time","created_at","user_family_flag",
])
for line in sys.stdin:
row = line.rstrip("\n").split("\t")
writer.writerow(row)
PY
mv "${TMP_FILE}" "${OUT_FILE}"
echo "[scheduler] running import for ${OUT_FILE}"
DATABASE_URL="${DATABASE_URL:?DATABASE_URL is required}" USER_PROGRAM_UPDATE_DIR="${UPDATE_DIR}" USER_PROGRAM_IMPORT_LOG_DIR="${LOG_DIR}" \
user-program-import