#!/usr/bin/env bash
# cache/redis -- status board, with an explicit flush option
set -o pipefail
SELF=$(readlink -f "${BASH_SOURCE[0]}")
NV_BASE=$(cd "$(dirname "$SELF")/../../.." && pwd)
export NV_BASE
# shellcheck source=/dev/null
. "$NV_BASE/lib/core/bootstrap.sh"

nv_require_root || exit 1
ui_header "$(t mod_cache_redis)"

if ! nv_have redis-cli; then
    ui_err "$(t redis_cli_missing)"
    exit 1
fi

if [ "$(redis-cli ping 2>/dev/null)" != "PONG" ]; then
    ui_err "$(t redis_down)"
    svc_is_active redis-server || ui_info "$(t redis_hint_start)"
    exit 1
fi

info=$(redis-cli info 2>/dev/null)
val() { printf '%s' "$info" | tr -d '\r' | sed -n "s/^$1://p" | head -n 1; }

ui_kv "$(t col_status)"   "$(val redis_version)"
ui_kv "memory used"       "$(printf '%s' "$(val used_memory_human)") / $(val maxmemory_human)"
ui_kv "keys"              "$(redis-cli dbsize 2>/dev/null)"
ui_kv "hits/misses"       "$(val keyspace_hits) / $(val keyspace_misses)"
ui_kv "uptime (days)"     "$(( $(val uptime_in_seconds) / 86400 ))"
ui_blank

ui_confirm "$(t redis_ask_flush)" n || exit 0
out=$(redis-cli flushall 2>&1)
nv_trace redis-flush "flushall"
ui_ok "$(t redis_flushed)"
ui_info "$out"
exit 0
