68 lines
2.3 KiB
Bash
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
|