Fixing redis queries

This commit is contained in:
2025-09-11 17:13:17 +02:00
parent 2daccb1c69
commit 47d13cde83

View File

@@ -168,14 +168,40 @@ EOF
# ------------------------------ Redis toggles ------------------------------
_redis_cli() {
if command -v docker >/dev/null 2>&1 && docker compose ps redis >/dev/null 2>&1; then
docker compose exec -T redis redis-cli "$@"
elif command -v redis-cli >/dev/null 2>&1; then
redis-cli -h "${REDIS_HOST:-127.0.0.1}" -p "${REDIS_PORT:-6379}" "$@"
else
echo "redis-cli not found and no docker compose redis service available." >&2
return 1
# Allow explicit override with PODX_REDIS_CLI, e.g.:
# PODX_REDIS_CLI="docker exec -i myredis redis-cli"
if [ -n "${PODX_REDIS_CLI:-}" ]; then
# shellcheck disable=SC2086
${PODX_REDIS_CLI} "$@"
return $?
fi
# Defaults (overridable via .env)
: "${PODX_REDIS_SERVICE:=redis}"
: "${PODX_REDIS_HOST:=${REDIS_HOST:-127.0.0.1}}"
: "${PODX_REDIS_PORT:=${REDIS_PORT:-6379}}"
if command -v docker >/dev/null 2>&1 && command -v docker compose >/dev/null 2>&1; then
# If the configured service exists, use it
if docker compose ps --services 2>/dev/null | grep -qx "$PODX_REDIS_SERVICE"; then
docker compose exec -T "$PODX_REDIS_SERVICE" redis-cli "$@"
return $?
fi
# Auto-detect a redis-like service name (redis, redis-*, *-redis, *_redis)
auto_srv="$(docker compose ps --services 2>/dev/null | grep -Ei '(^redis$)|(^redis[-_])|([-_]redis$)' | head -n1)"
if [ -n "$auto_srv" ]; then
docker compose exec -T "$auto_srv" redis-cli "$@"
return $?
fi
fi
if command -v redis-cli >/dev/null 2>&1; then
redis-cli -h "$PODX_REDIS_HOST" -p "$PODX_REDIS_PORT" "$@"
return $?
fi
echo "Could not find a way to run redis-cli.\n- Set PODX_REDIS_CLI to a full command (e.g. 'docker exec -i <container> redis-cli')\n- Or set PODX_REDIS_SERVICE to your compose service name\n- Or install redis-cli / set PODX_REDIS_HOST & PODX_REDIS_PORT" >&2
return 1
}
# --- Redis key utilities --------------------------------------------------
@@ -204,6 +230,28 @@ _redis_llen() { # usage: _redis_llen <key>
_redis_cli LLEN "$1" 2>/dev/null | tr -d '\r' || echo 0
}
_redis_type() { # usage: _redis_type <key>
_redis_cli TYPE "$1" 2>/dev/null | tr -d '\r' || echo none
}
_redis_size() { # usage: _redis_size <key>
local k="$1"
local t; t="$(_redis_type "$k")"
case "$t" in
list) _redis_cli LLEN "$k" 2>/dev/null | tr -d '\r' || echo 0 ;;
set) _redis_cli SCARD "$k" 2>/dev/null | tr -d '\r' || echo 0 ;;
zset) _redis_cli ZCARD "$k" 2>/dev/null | tr -d '\r' || echo 0 ;;
hash) _redis_cli HLEN "$k" 2>/dev/null | tr -d '\r' || echo 0 ;;
string) _redis_cli STRLEN "$k" 2>/dev/null | tr -d '\r' || echo 0 ;;
stream) _redis_cli XLEN "$k" 2>/dev/null | tr -d '\r' || echo 0 ;;
none) echo 0 ;;
*) # unknown or module-specific; try LLEN, then ZCARD, then HLEN
_redis_cli LLEN "$k" 2>/dev/null | tr -d '\r' || \
_redis_cli ZCARD "$k" 2>/dev/null | tr -d '\r' || \
_redis_cli HLEN "$k" 2>/dev/null | tr -d '\r' || echo 0 ;;
esac
}
_transcribe_key="podx:transcribe:paused"
# Queue namespace & patterns (override in .env if your deployment differs)
@@ -272,11 +320,11 @@ case "$cmd" in
echo "[workers] namespace: ${PODX_QUEUE_NS}"
for q in ${PODX_WORKER_QUEUES}; do
base="${PODX_QUEUE_NS}:${q}"
printf "%-28s %6s\n" "$base" "$(_redis_llen "$base")"
printf "%-28s %6s\n" "$base" "$(_redis_size "$base")"
for suf in ${PODX_QUEUE_SUFFIXES}; do
k="${base}${suf}"
if [ -n "$(_redis_keys "$k")" ]; then
printf "%-28s %6s\n" "$k" "$(_redis_llen "$k")"
printf "%-28s %6s\n" "$k" "$(_redis_size "$k")"
fi
done
done
@@ -302,7 +350,7 @@ case "$cmd" in
for pat in ${OPENWEBUI_QUEUE_PATTERNS}; do
mapfile -t keys < <(_redis_keys "$pat")
for k in "${keys[@]}"; do
printf "%-40s %6s\n" "$k" "$(_redis_llen "$k")"
printf "%-40s %6s\n" "$k" "$(_redis_size "$k")"
done
done
;;