#!/usr/bin/env bash
set -euo pipefail

OUT_DIR=${1:-/var/lib/prometheus/node-exporter}
OUT_FILE="$OUT_DIR/lisglosips_s20.prom"
TMP_FILE="$OUT_FILE.$$"
BASE_DIR=/dev/shm/voip_rec

mkdir -p "$OUT_DIR"

tmp_total=0
tmp_used=0
tmp_avail=0
if df_out=$(df -B1 "$BASE_DIR" 2>/dev/null | awk 'NR==2 {print $2" "$3" "$4}'); then
  read -r tmp_total tmp_used tmp_avail <<<"$df_out"
fi

ready_count=$(find "$BASE_DIR/ready" -type f -name '*.ready' 2>/dev/null | wc -l)
part_count=$(find "$BASE_DIR/ready" -type f -name '*.part' 2>/dev/null | wc -l)
oldest_age=0
oldest_epoch=$(find "$BASE_DIR/ready" -type f -name '*.ready' -printf '%T@\n' 2>/dev/null | sort -n | head -n 1 || true)
if [ -n "$oldest_epoch" ]; then
  now_epoch=$(date +%s)
  oldest_sec=${oldest_epoch%.*}
  oldest_age=$(( now_epoch - oldest_sec ))
  if [ "$oldest_age" -lt 0 ]; then
    oldest_age=0
  fi
fi

redis_reachable=0
if timeout 2 bash -c '</dev/tcp/127.0.0.1/6380' 2>/dev/null; then
  redis_reachable=1
fi

rtpengine_sessions=0
if command -v rtpengine-ctl >/dev/null 2>&1; then
  rtpengine_sessions=$(rtpengine-ctl -ip 127.0.0.1 -port 2224 list numsessions 2>/dev/null | awk -F: '/Current sessions total/ {gsub(/ /, "", $2); print $2; found=1} END {if (!found) print 0}')
fi

cat > "$TMP_FILE" <<EOF
# HELP lisglosips_voip_rec_tmpfs_bytes Server A recording tmpfs bytes.
# TYPE lisglosips_voip_rec_tmpfs_bytes gauge
lisglosips_voip_rec_tmpfs_bytes{state="total"} $tmp_total
lisglosips_voip_rec_tmpfs_bytes{state="used"} $tmp_used
lisglosips_voip_rec_tmpfs_bytes{state="available"} $tmp_avail
# HELP lisglosips_recording_files Server A recording staging files.
# TYPE lisglosips_recording_files gauge
lisglosips_recording_files{state="ready"} $ready_count
lisglosips_recording_files{state="part"} $part_count
# HELP lisglosips_recording_oldest_ready_age_seconds Oldest ready recording age in seconds.
# TYPE lisglosips_recording_oldest_ready_age_seconds gauge
lisglosips_recording_oldest_ready_age_seconds $oldest_age
# HELP lisglosips_redis_proxy_up Local Redis auth proxy TCP reachability.
# TYPE lisglosips_redis_proxy_up gauge
lisglosips_redis_proxy_up $redis_reachable
# HELP lisglosips_rtpengine_sessions Current RTPEngine sessions reported by CLI.
# TYPE lisglosips_rtpengine_sessions gauge
lisglosips_rtpengine_sessions $rtpengine_sessions
EOF

chown prometheus:prometheus "$TMP_FILE" 2>/dev/null || true
chmod 0644 "$TMP_FILE"
mv "$TMP_FILE" "$OUT_FILE"
