#!/usr/bin/env bash # # เรียก Keycloak/OpenID Connect token endpoint เพื่อขอ access token # ผ่าน client_credentials grant type (form-urlencoded) # set -euo pipefail # ฟังก์ชันเขียน log พร้อม timestamp (YYYY-MM-DD HH:MM:SS) log() { printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" } # log ส่งออกไป stderr (เหมาะกับ error/เตือน) log_err() { printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" >&2 } # --- เขียน log ลงไฟล์ (แยกรายวัน) เก็บไว้แค่ 2 วัน --- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" LOG_DIR="${SCRIPT_DIR}/logs" mkdir -p "${LOG_DIR}" # ลบ log เก่ากว่า 2 วัน find "${LOG_DIR}" -name 'reprocess_*.log' -type f -mtime +2 -delete LOG_FILE="${LOG_DIR}/reprocess_$(date '+%Y-%m-%d').log" if [[ -t 1 ]]; then # รันมือ (มี tty): แสดงบนหน้าจอ + เก็บลงไฟล์ exec > >(tee -a "${LOG_FILE}") 2>&1 else # รันผ่าน cron (ไม่มี tty): เก็บลงไฟล์อย่างเดียว เพื่อไม่ให้ซ้อนกับ redirect ของ cron exec >>"${LOG_FILE}" 2>&1 fi # --- ตรวจเวลาทำการ: ทำงานเฉพาะช่วง 07:00-09:59 และ 15:00-17:59 ของทุกวัน --- # (10#$H บังคับตีความเลขฐาน 10 ป้องกันปัญหา 08/09 ถูกอ่านเป็นเลขฐาน 8) CURRENT_HOUR=$(date '+%H') if (( 10#$CURRENT_HOUR >= 7 && 10#$CURRENT_HOUR < 10 )) || \ (( 10#$CURRENT_HOUR >= 15 && 10#$CURRENT_HOUR < 18 )); then log "อยู่ในช่วงเวลาทำการ (hour=${CURRENT_HOUR}) — เริ่มทำงาน" else log "นอกช่วงเวลาทำการ (hour=${CURRENT_HOUR}) — ข้ามการทำงาน" exit 0 fi TOKEN_URL="https://hrms-id.bangkok.go.th/realms/hrms/protocol/openid-connect/token" CLIENT_ID="gettoken" CLIENT_SECRET="obeDw3t3dsDkIkhqzszul6VybAaoRCjf" response=$(curl -sS -X POST "${TOKEN_URL}" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "client_id=${CLIENT_ID}" \ --data-urlencode "client_secret=${CLIENT_SECRET}" \ --data-urlencode "grant_type=client_credentials") # ดึงเฉพาะ access_token ออกมาจาก JSON response access_token=$(printf '%s' "${response}" | python3 -c "import sys, json; print(json.load(sys.stdin).get('access_token', ''))") if [[ -z "${access_token}" ]]; then log_err "ไม่สามารถดึง access_token ได้ — response:" printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "${response}" >&2 exit 1 fi log "ได้ access token แล้ว" # --- เรียก API reprocess-stale-checkin-jobs โดยแนบ Bearer token ---------- API_URL="https://hrms.bangkok.go.th/api/v1/leave/reprocess-stale-checkin-jobs?timeoutMinutes=15" log "กำลังเรียก ${API_URL}" http_code=$(curl -sS -o /tmp/reprocess_response.txt -w "%{http_code}" \ --max-time 600 \ -X POST "${API_URL}" \ -H "Authorization: Bearer ${access_token}" \ -H "Content-Type: application/json") log "HTTP status: ${http_code}" log "Response:" printf '[%s] ' "$(date '+%Y-%m-%d %H:%M:%S')" cat /tmp/reprocess_response.txt echo if [[ "${http_code}" -ge 200 && "${http_code}" -lt 300 ]]; then log "สำเร็จ" exit 0 else log_err "ล้มเหลว (HTTP ${http_code})" exit 1 fi