feat: scripts/boot.sh v2 — full hacker dashboard with auth, agent status, cost audit
This commit is contained in:
parent
d1e26b19ec
commit
8ffd9c7dab
205
scripts/boot.sh
205
scripts/boot.sh
|
|
@ -1,76 +1,197 @@
|
|||
#!/usr/bin/env bash
|
||||
# boot.sh — OSVauco OPAX oppstartsprotokoll
|
||||
# Kjøres automatisk når Cloud Shell åpnes (via ~/.bashrc)
|
||||
# Manuelt: source ~/OSVauco/scripts/boot.sh
|
||||
# =============================================================================
|
||||
# boot.sh — OSVauco OPAX Terminal Boot Protocol v2
|
||||
# Auto-runs on Cloud Shell startup via ~/.bashrc
|
||||
# Manual: source ~/OSVauco/scripts/boot.sh
|
||||
# =============================================================================
|
||||
|
||||
OSVAUCO_DIR="${HOME}/OSVauco"
|
||||
|
||||
# Ikke kjør hvis vi ikke er i et interaktivt shell
|
||||
# Only run in interactive shells
|
||||
[[ $- != *i* ]] && return
|
||||
|
||||
# Ikke kjør hvis OSVauco-mappen ikke finnes
|
||||
[[ ! -d "$OSVAUCO_DIR" ]] && return
|
||||
|
||||
cd "$OSVAUCO_DIR" || return
|
||||
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
CYAN='\033[0;36m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
BLUE='\033[0;34m'
|
||||
MAGENTA='\033[0;35m'
|
||||
WHITE='\033[1;37m'
|
||||
DIM='\033[2m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
OK="${GREEN}✓${NC}"
|
||||
WARN="${YELLOW}⚠️ ${NC}"
|
||||
FAIL="${RED}✗${NC}"
|
||||
INFO="${CYAN}→${NC}"
|
||||
DOT="${DIM}•${NC}"
|
||||
|
||||
echo ""
|
||||
echo "┌─────────────────────────────────────────────┐"
|
||||
echo "│ OSVauco OPAX — Boot $(date '+%Y-%m-%d %H:%M %Z') │"
|
||||
echo "└─────────────────────────────────────────────┘"
|
||||
printf "${CYAN}"
|
||||
echo " ██████╗███████╗██╗ ██╗█████╗ ██████╗ ██████╗ "
|
||||
echo " ╚════██║╚══════╝██║ ██║██╔══██╗██╔════╝██╔════╝ "
|
||||
echo " █████╔╝ ███╗ ██║ ██║██║ ██║██║ ███╗██║ "
|
||||
echo " ██╔════╝ ██║ ██║ ██║██║ ██║██║ ██║██║ "
|
||||
echo " ███████╗███████║╚██████╔╝╚█████╔╝╚██████╔╝╚██████╗"
|
||||
echo " ╚══════╝╚══════╝ ╚═════╝ ╚════╝ ╚═════╝ ╚═════╝"
|
||||
printf "${NC}"
|
||||
printf "${DIM} O P A X O p e r a t o r P l a t f o r m${NC}\n"
|
||||
printf "${DIM} v2 • propane-will-491900-m5 • us-central1${NC}\n"
|
||||
echo ""
|
||||
printf "${DIM}════════════════════════════════════════════════════════════════════${NC}\n"
|
||||
|
||||
BOOT_TIME=$(date '+%Y-%m-%d %H:%M %Z')
|
||||
printf " ${DIM}BOOT${NC} ${WHITE}%s${NC}\n" "$BOOT_TIME"
|
||||
echo ""
|
||||
|
||||
# 1. Last inn .env
|
||||
# =============================================================================
|
||||
# SECTION 1: ENV + AUTH
|
||||
# =============================================================================
|
||||
printf " ${BOLD}${BLUE}► AUTH${NC}\n"
|
||||
|
||||
# Load .env
|
||||
if [[ -f "$OSVAUCO_DIR/.env" ]]; then
|
||||
source "$OSVAUCO_DIR/.env"
|
||||
echo " ✓ .env lastet — PROJECT_ID=$PROJECT_ID"
|
||||
printf " ${OK} .env loaded ${DIM}PROJECT_ID=${PROJECT_ID}${NC}\n"
|
||||
else
|
||||
echo " ⚠️ .env mangler — kjør: cp .env.example .env && nano .env"
|
||||
printf " ${FAIL} .env MISSING ${YELLOW}Run: cp .env.example .env && nano .env${NC}\n"
|
||||
return
|
||||
fi
|
||||
|
||||
# 2. Sett gcloud-prosjekt
|
||||
if [[ -n "${PROJECT_ID:-}" ]]; then
|
||||
gcloud config set project "$PROJECT_ID" --quiet 2>/dev/null
|
||||
echo " ✓ gcloud project = $PROJECT_ID"
|
||||
# gcloud project
|
||||
gcloud config set project "$PROJECT_ID" --quiet 2>/dev/null
|
||||
ACTIVE_PROJ=$(gcloud config get-value project 2>/dev/null)
|
||||
if [[ "$ACTIVE_PROJ" == "$PROJECT_ID" ]]; then
|
||||
printf " ${OK} gcloud project ${DIM}${ACTIVE_PROJ}${NC}\n"
|
||||
else
|
||||
printf " ${FAIL} gcloud project MISMATCH: got ${ACTIVE_PROJ}, expected ${PROJECT_ID}\n"
|
||||
fi
|
||||
|
||||
# Active account
|
||||
ACTIVE_ACCOUNT=$(gcloud config get-value account 2>/dev/null)
|
||||
if [[ -n "$ACTIVE_ACCOUNT" ]]; then
|
||||
printf " ${OK} gcloud account ${DIM}${ACTIVE_ACCOUNT}${NC}\n"
|
||||
else
|
||||
printf " ${FAIL} gcloud account MISSING${NC} ${YELLOW}Run: gcloud auth login${NC}\n"
|
||||
fi
|
||||
|
||||
# Application Default Credentials
|
||||
if gcloud auth application-default print-access-token >/dev/null 2>&1; then
|
||||
printf " ${OK} ADC (app-default) ${DIM}valid${NC}\n"
|
||||
else
|
||||
printf " ${WARN} ADC missing ${YELLOW}Run: gcloud auth application-default login${NC}\n"
|
||||
fi
|
||||
|
||||
# 3. Sjekk Memory Bank — ADVAR hvis aktive instanser finnes
|
||||
echo ""
|
||||
echo " [Memory Bank-sjekk]"
|
||||
|
||||
# =============================================================================
|
||||
# SECTION 2: CLOUD RUN SERVICES
|
||||
# =============================================================================
|
||||
printf " ${BOLD}${BLUE}► CLOUD RUN${NC}\n"
|
||||
CR_LIST=$(gcloud run services list \
|
||||
--project="${PROJECT_ID}" \
|
||||
--region="${REGION}" \
|
||||
--format="value(name,status.url)" 2>/dev/null || echo "")
|
||||
|
||||
if [[ -z "$CR_LIST" ]]; then
|
||||
printf " ${DOT} No services deployed ${DIM}(no cost)${NC}\n"
|
||||
else
|
||||
while IFS=$'\t' read -r NAME URL; do
|
||||
printf " ${OK} %-28s ${DIM}%s${NC}\n" "$NAME" "$URL"
|
||||
done <<< "$CR_LIST"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# SECTION 3: MEMORY BANK / REASONING ENGINES
|
||||
# =============================================================================
|
||||
printf " ${BOLD}${BLUE}► MEMORY BANK${NC} ${DIM}(\$0.0994/vCPU-hr • continuous billing)${NC}\n"
|
||||
ENGINES=$(gcloud ai reasoning-engines list \
|
||||
--project="${PROJECT_ID}" \
|
||||
--region="${REGION:-us-central1}" \
|
||||
--format="value(name)" 2>/dev/null || echo "")
|
||||
--region="${REGION}" \
|
||||
--format="value(name,displayName)" 2>/dev/null || echo "")
|
||||
|
||||
if [[ -n "$ENGINES" ]]; then
|
||||
if [[ -z "$ENGINES" ]]; then
|
||||
printf " ${OK} No active instances ${DIM}(no cost)${NC}\n"
|
||||
else
|
||||
ENGINE_COUNT=$(echo "$ENGINES" | grep -c . || true)
|
||||
echo " ⚠️ $ENGINE_COUNT Memory Bank-instans(er) kjører — KOSTER PENGER!"
|
||||
echo " Kjør: bash infrastructure/09-cost-check.sh for detaljer"
|
||||
else
|
||||
echo " ✓ Ingen aktive Memory Bank-instanser"
|
||||
printf " ${RED}${BOLD}⚠️ $ENGINE_COUNT INSTANCE(S) RUNNING — COSTS MONEY CONTINUOUSLY${NC}\n"
|
||||
while IFS=$'\t' read -r ENAME EDISPLAY; do
|
||||
SHORT=$(echo "$ENAME" | awk -F'/' '{print $NF}')
|
||||
printf " ${WARN} %-20s ${DIM}%s${NC}\n" "${EDISPLAY:-unnamed}" "id:$SHORT"
|
||||
done <<< "$ENGINES"
|
||||
printf " ${INFO} To delete: ${DIM}gcloud ai reasoning-engines delete ID --project=$PROJECT_ID --region=$REGION --quiet${NC}\n"
|
||||
fi
|
||||
|
||||
# 4. Sjekk Cloud Run
|
||||
echo ""
|
||||
echo " [Cloud Run-sjekk]"
|
||||
SERVICES=$(gcloud run services list \
|
||||
|
||||
# =============================================================================
|
||||
# SECTION 4: VERTEX AI AGENTS (ADK Agent Runtimes)
|
||||
# =============================================================================
|
||||
printf " ${BOLD}${BLUE}► AGENT RUNTIMES${NC}\n"
|
||||
AGENT_RUNTIMES=$(gcloud ai agent-engines list \
|
||||
--project="${PROJECT_ID}" \
|
||||
--region="${REGION:-us-central1}" \
|
||||
--format="value(name)" 2>/dev/null || echo "")
|
||||
--region="${REGION}" \
|
||||
--format="value(name,displayName,state)" 2>/dev/null || echo "")
|
||||
|
||||
if [[ -n "$SERVICES" ]]; then
|
||||
echo " ✓ Aktive Cloud Run-tjenester: $SERVICES"
|
||||
if [[ -z "$AGENT_RUNTIMES" ]]; then
|
||||
printf " ${DOT} No agent runtimes ${DIM}(no cost)${NC}\n"
|
||||
else
|
||||
echo " — Ingen Cloud Run-tjenester deployed"
|
||||
while IFS=$'\t' read -r ANAME ADISPLAY ASTATE; do
|
||||
SHORT=$(echo "$ANAME" | awk -F'/' '{print $NF}')
|
||||
if [[ "$ASTATE" == "ACTIVE" ]]; then
|
||||
printf " ${OK} %-24s ${GREEN}%-8s${NC} ${DIM}id:$SHORT${NC}\n" "${ADISPLAY:-unnamed}" "$ASTATE"
|
||||
else
|
||||
printf " ${WARN} %-24s ${YELLOW}%-8s${NC} ${DIM}id:$SHORT${NC}\n" "${ADISPLAY:-unnamed}" "$ASTATE"
|
||||
fi
|
||||
done <<< "$AGENT_RUNTIMES"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 5. Git pull (stille)
|
||||
echo ""
|
||||
echo " [Git sync]"
|
||||
git pull --quiet 2>/dev/null && echo " ✓ Repo oppdatert" || echo " ⚠️ git pull feilet"
|
||||
# =============================================================================
|
||||
# SECTION 5: RAG CORPORA
|
||||
# =============================================================================
|
||||
printf " ${BOLD}${BLUE}► RAG CORPORA${NC} ${DIM}(not deleted by teardown)${NC}\n"
|
||||
RAG_LIST=$(gcloud ai rag-corpora list \
|
||||
--project="${PROJECT_ID}" \
|
||||
--region="${REGION}" \
|
||||
--format="value(name,displayName)" 2>/dev/null || echo "")
|
||||
|
||||
if [[ -z "$RAG_LIST" ]]; then
|
||||
printf " ${DOT} No RAG corpora found\n"
|
||||
else
|
||||
while IFS=$'\t' read -r RNAME RDISPLAY; do
|
||||
SHORT=$(echo "$RNAME" | awk -F'/' '{print $NF}')
|
||||
printf " ${OK} %-28s ${DIM}id:$SHORT${NC}\n" "${RDISPLAY:-unnamed}"
|
||||
done <<< "$RAG_LIST"
|
||||
fi
|
||||
echo ""
|
||||
echo " Kommandoer:"
|
||||
echo " bash infrastructure/09-cost-check.sh — full kostnadssjekk"
|
||||
echo " bash infrastructure/05-cloudrun-deploy.sh — deploy agent"
|
||||
echo " bash infrastructure/03-teardown.sh — rydd ned (kväld)"
|
||||
|
||||
# =============================================================================
|
||||
# SECTION 6: GIT SYNC
|
||||
# =============================================================================
|
||||
printf " ${BOLD}${BLUE}► GIT${NC}\n"
|
||||
GIT_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
|
||||
GIT_STATUS=$(git pull --quiet 2>&1)
|
||||
LAST_COMMIT=$(git log --oneline -1 2>/dev/null || echo "unknown")
|
||||
printf " ${OK} Branch: ${WHITE}%-20s${NC} ${DIM}%s${NC}\n" "$GIT_BRANCH" "$LAST_COMMIT"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# SECTION 7: QUICK COMMANDS
|
||||
# =============================================================================
|
||||
printf "${DIM}════════════════════════════════════════════════════════════════════${NC}\n"
|
||||
printf " ${BOLD}${CYAN}QUICK COMMANDS${NC}\n"
|
||||
printf " ${DIM}setup ${NC}bash infrastructure/00-authcheck.sh\n"
|
||||
printf " ${DIM}deploy ${NC}bash infrastructure/05-cloudrun-deploy.sh\n"
|
||||
printf " ${DIM}rag ${NC}bash infrastructure/07-rag-setup.sh\n"
|
||||
printf " ${DIM}memory ${NC}bash infrastructure/08-memorybank-setup.sh\n"
|
||||
printf " ${DIM}cost ${NC}bash infrastructure/09-cost-check.sh\n"
|
||||
printf " ${DIM}teardown ${NC}bash infrastructure/03-teardown.sh\n"
|
||||
printf " ${DIM}gemini ${NC}gemini ${DIM}(OPAX-MCP TUI)${NC}\n"
|
||||
printf "${DIM}════════════════════════════════════════════════════════════════════${NC}\n"
|
||||
echo ""
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user