From 2daccb1c694995314258dd6c2fb35b8087be16d7 Mon Sep 17 00:00:00 2001 From: Tomas Kracmar Date: Thu, 11 Sep 2025 16:49:30 +0200 Subject: [PATCH] Added queue management tools to podx-tools.sh --- scripts/podx-tools.sh | 89 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/scripts/podx-tools.sh b/scripts/podx-tools.sh index 4a297c3..a81b490 100755 --- a/scripts/podx-tools.sh +++ b/scripts/podx-tools.sh @@ -177,8 +177,41 @@ _redis_cli() { return 1 fi } + +# --- Redis key utilities -------------------------------------------------- +_redis_keys() { # usage: _redis_keys + local pat="$1"; _redis_cli KEYS "$pat" 2>/dev/null | sed '/^(empty array)/d' +} + +_redis_del_pattern() { # usage: _redis_del_pattern + local pat="$1"; local any=0 + # shellcheck disable=SC2046 + mapfile -t __k < <(_redis_keys "$pat") + if [ ${#__k[@]} -gt 0 ]; then + any=1 + # DEL supports multiple keys; chunk to avoid arg limits + local chunk=0 buf=() + for k in "${__k[@]}"; do + buf+=("$k"); chunk=$((chunk+1)) + if [ $chunk -ge 100 ]; then _redis_cli DEL "${buf[@]}" >/dev/null; buf=(); chunk=0; fi + done + [ ${#buf[@]} -gt 0 ] && _redis_cli DEL "${buf[@]}" >/dev/null + fi + return $any +} + +_redis_llen() { # usage: _redis_llen + _redis_cli LLEN "$1" 2>/dev/null | tr -d '\r' || echo 0 +} + _transcribe_key="podx:transcribe:paused" +# Queue namespace & patterns (override in .env if your deployment differs) +: "${PODX_QUEUE_NS:=podx:q}" # base namespace for our worker queues +: "${PODX_WORKER_QUEUES:=transcribe index meili enrich owui_kb}" # space-separated logical queues +: "${PODX_QUEUE_SUFFIXES:= :inflight :retry :dlq }" # related keys per queue +: "${OPENWEBUI_QUEUE_PATTERNS:=owui:kb:* owui:tasks:* open-webui:*queue* openwebui:*queue*}" # OWUI queue-ish keys + # ------------------------------ Help ------------------------------ _help() { cat </dev/null || true + for suf in ${PODX_QUEUE_SUFFIXES}; do + _redis_del_pattern "${base}${suf}" >/dev/null || true + done + done + # Also remove common locks for this namespace + _redis_del_pattern "${PODX_QUEUE_NS}:lock:*" >/dev/null || true + echo "[workers] done" + ;; + + queues-owui-list) + # List OpenWebUI queue-like keys and lengths + 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")" + done + done + ;; + + queues-owui-clear) + # Clear OpenWebUI queue-like keys + echo "[owui] clearing keys matching: ${OPENWEBUI_QUEUE_PATTERNS}" + for pat in ${OPENWEBUI_QUEUE_PATTERNS}; do + _redis_del_pattern "$pat" >/dev/null || true + done + echo "[owui] done" + ;; + # ---------- Meili ---------- meili-health) _require "MEILI_URL" "$MEILI_URL"