98ac672695
Made-with: Cursor
100 lines
2.9 KiB
Bash
Executable File
100 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Compact status dashboard for local OpenClaude stack.
|
|
#
|
|
# Usage:
|
|
# ./status.sh
|
|
# ./status.sh --model qwen2.5:3b
|
|
# QDRANT_COLLECTION=mydocs ./status.sh
|
|
|
|
MODEL="${MODEL:-qwen2.5-coder:7b}"
|
|
QDRANT_URL="${QDRANT_URL:-http://127.0.0.1:6333}"
|
|
QDRANT_COLLECTION="${QDRANT_COLLECTION:-docs}"
|
|
WORKDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
ok() { printf "✅ %s\n" "$1"; }
|
|
bad() { printf "❌ %s\n" "$1"; }
|
|
info() { printf "• %s\n" "$1"; }
|
|
|
|
echo "=== OpenClaude Local Stack Status ==="
|
|
echo "time: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo
|
|
|
|
# OpenClaude
|
|
if command -v openclaude >/dev/null 2>&1; then
|
|
oc_path="$(command -v openclaude)"
|
|
ok "openclaude found ($oc_path)"
|
|
else
|
|
bad "openclaude not found"
|
|
fi
|
|
|
|
# Ollama process/API
|
|
if command -v ollama >/dev/null 2>&1; then
|
|
ok "ollama CLI found"
|
|
else
|
|
bad "ollama CLI not found"
|
|
fi
|
|
|
|
if curl -fsS "http://127.0.0.1:11434/api/tags" >/dev/null 2>&1; then
|
|
ok "ollama API reachable (127.0.0.1:11434)"
|
|
else
|
|
bad "ollama API unavailable"
|
|
fi
|
|
|
|
# Model check
|
|
if command -v ollama >/dev/null 2>&1 && ollama list | awk '{print $1}' | rg "^${MODEL}$" >/dev/null 2>&1; then
|
|
ok "model present: $MODEL"
|
|
else
|
|
bad "model not found locally: $MODEL"
|
|
info "pull with: ollama pull $MODEL"
|
|
fi
|
|
|
|
# Qdrant API / collection stats
|
|
if curl -fsS "${QDRANT_URL}/collections" >/dev/null 2>&1; then
|
|
ok "qdrant reachable (${QDRANT_URL})"
|
|
if stats="$(curl -fsS "${QDRANT_URL}/collections/${QDRANT_COLLECTION}")"; then
|
|
ok "collection exists: ${QDRANT_COLLECTION}"
|
|
vectors="$(printf "%s" "$stats" | rg -o '"vectors_count"\s*:\s*[0-9]+' | rg -o '[0-9]+' | head -n 1 || true)"
|
|
points="$(printf "%s" "$stats" | rg -o '"points_count"\s*:\s*[0-9]+' | rg -o '[0-9]+' | head -n 1 || true)"
|
|
[[ -n "${vectors:-}" ]] && info "vectors_count: $vectors"
|
|
[[ -n "${points:-}" ]] && info "points_count: $points"
|
|
else
|
|
bad "collection missing: ${QDRANT_COLLECTION}"
|
|
info "index docs with: python index.py"
|
|
fi
|
|
else
|
|
bad "qdrant API unavailable (${QDRANT_URL})"
|
|
fi
|
|
|
|
# Python venv/deps
|
|
if [[ -x "${WORKDIR}/.venv/bin/python" ]]; then
|
|
ok "python venv found (${WORKDIR}/.venv)"
|
|
if "${WORKDIR}/.venv/bin/python" -c "import fastmcp, qdrant_client, requests" >/dev/null 2>&1; then
|
|
ok "python deps installed"
|
|
else
|
|
bad "python deps missing in venv"
|
|
fi
|
|
else
|
|
bad "python venv not found"
|
|
fi
|
|
|
|
# Disk usage
|
|
echo
|
|
echo "=== Disk Snapshot ==="
|
|
df -h "$WORKDIR" | sed -n '1,2p'
|
|
if [[ -d /var/lib/docker ]]; then
|
|
info "docker dir: $(du -sh /var/lib/docker 2>/dev/null | awk '{print $1}' || echo n/a)"
|
|
fi
|
|
if [[ -d /usr/share/ollama || -d /var/lib/ollama ]]; then
|
|
info "ollama storage: check with sudo du -h --max-depth=2 /usr/share/ollama /var/lib/ollama 2>/dev/null | sort -h | tail -n 20"
|
|
fi
|
|
|
|
echo
|
|
echo "=== Quick Commands ==="
|
|
echo "local run:"
|
|
echo " export CLAUDE_CODE_USE_OPENAI=1"
|
|
echo " export OPENAI_BASE_URL=http://127.0.0.1:11434/v1"
|
|
echo " export OPENAI_MODEL=$MODEL"
|
|
echo " openclaude"
|