#!/usr/bin/env bash
# onx-db-slow-queries-clear — Slow query log dosyasini truncate et.
# slow_query_log_file path MySQL'den okunup safely truncate edilir
# (FLUSH SLOW LOGS yerine dosyayi 0 byte yapariz; MySQL yeni log entry'leri
#  beklerken append yapar — restart gerekmez).
#
# Input:  {}  (parametresiz)
# Output: {"log_path":"...","bytes_before":N,"bytes_after":0,"cleared":true}

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/_lib/common.sh"

require_root
require_cmd mysql

# Log dosyasi path'ini MySQL'den oku
LOG_PATH="$(mysql_exec_root "" "SHOW GLOBAL VARIABLES LIKE 'slow_query_log_file'" 2>/dev/null | tail -1 | awk '{print $2}')"
[[ -z "$LOG_PATH" ]] && LOG_PATH="/var/lib/mysql/slow.log"

# Relative path -> datadir + filename (MariaDB default davranis)
if [[ "$LOG_PATH" != /* ]]; then
    DATADIR="$(mysql_exec_root "" "SHOW GLOBAL VARIABLES LIKE 'datadir'" 2>/dev/null | tail -1 | awk '{print $2}')"
    [[ -z "$DATADIR" ]] && DATADIR="/var/lib/mysql"
    DATADIR="${DATADIR%/}"
    LOG_PATH="${DATADIR}/${LOG_PATH}"
fi

# Path traversal koruma — sadece /var/lib/mysql veya /var/log/mariadb altinda
case "$LOG_PATH" in
    /var/lib/mysql/*|/var/log/mariadb/*|/var/log/mysql/*) : ;;
    *) onx_die 2 "Slow log path izin verilen dizinler disinda: ${LOG_PATH}" ;;
esac

onx_log "db-slow-queries-clear: log_path=${LOG_PATH}"

BYTES_BEFORE=0
if [[ -f "$LOG_PATH" ]]; then
    BYTES_BEFORE="$(stat -c '%s' "$LOG_PATH" 2>/dev/null || echo 0)"
fi

# FLUSH SLOW LOGS dene (MariaDB) — dosya handle'ini reset edip yeni log dosyasi olustur
# Fallback: dogrudan truncate (mysql servisinin dosya handle'i acik kalir ama bos)
if mysql_exec_root "" "FLUSH SLOW LOGS" 2>/dev/null; then
    # FLUSH SLOW LOGS sonrasi dosya yeniden olusturulmus olabilir
    : > "$LOG_PATH" 2>/dev/null || true
else
    # FLUSH desteklenmiyorsa direkt truncate
    : > "$LOG_PATH" 2>/dev/null || onx_die 3 "Slow log truncate basarisiz: ${LOG_PATH}"
fi

# Sahiplik korunsun (mysql:mysql)
chown mysql:mysql "$LOG_PATH" 2>/dev/null || true
chmod 0640 "$LOG_PATH" 2>/dev/null || true

BYTES_AFTER="$(stat -c '%s' "$LOG_PATH" 2>/dev/null || echo 0)"

json_ok "{\"log_path\":\"${LOG_PATH}\",\"bytes_before\":${BYTES_BEFORE},\"bytes_after\":${BYTES_AFTER},\"cleared\":true}"
