diff --git a/docs/quickstart-30min.md b/docs/quickstart-30min.md index 138eded..b76179c 100644 --- a/docs/quickstart-30min.md +++ b/docs/quickstart-30min.md @@ -117,3 +117,11 @@ cd ~/openclaude-LLM-local/docs/rag-mcp-starter chmod +x healthcheck.sh ./healthcheck.sh --mode full ``` + +## 12) Быстрый статус в одном экране + +```bash +cd ~/openclaude-LLM-local/docs/rag-mcp-starter +chmod +x status.sh +./status.sh +``` diff --git a/docs/rag-mcp-starter/README.md b/docs/rag-mcp-starter/README.md index 61c0f5b..eac7684 100644 --- a/docs/rag-mcp-starter/README.md +++ b/docs/rag-mcp-starter/README.md @@ -67,6 +67,21 @@ chmod +x healthcheck.sh ./healthcheck.sh --mode full ``` +## Status dashboard + +Компактный статус одним запуском: + +```bash +chmod +x status.sh +./status.sh +``` + +С кастомной моделью: + +```bash +./status.sh --model qwen2.5:3b +``` + ## Переменные окружения - `QDRANT_URL` (default `http://127.0.0.1:6333`) diff --git a/docs/rag-mcp-starter/status.sh b/docs/rag-mcp-starter/status.sh new file mode 100755 index 0000000..3e422d9 --- /dev/null +++ b/docs/rag-mcp-starter/status.sh @@ -0,0 +1,99 @@ +#!/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"