#!/usr/bin/env bash # OSVauco — Periodisk health check for lokal arbeidsflate # Kjør manuelt fra ~/OSVauco eller via cron/systemd set -u LOG=/tmp/osvauco-health.log TS=$(date -Iseconds) REPO=~/OSVauco ALERT=0 ALERT_MSGS=() echo "[$TS] === HEALTH CHECK START ===" >> "$LOG" # --- 1. Git working tree --- cd "$REPO" 2>/dev/null || { echo "[$TS] ❌ REPO not found: $REPO" >> "$LOG"; exit 1; } DIRTY=$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ') BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") LAST_SHA=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") AHEAD=$(git rev-list --count "@{u}..HEAD" 2>/dev/null || echo "0") echo "[$TS] git: branch=$BRANCH dirty=$DIRTY ahead=$AHEAD last=$LAST_SHA" >> "$LOG" if [ "$DIRTY" -gt 50 ]; then ALERT=1 ALERT_MSGS+=("$DIRTY uncommitted changes (>50, mulig merge gone wrong)") fi # --- 2. Disk --- FREE=$(df -h "$REPO" 2>/dev/null | awk 'NR==2 {print $4}') FREE_BYTES=$(df -B1 "$REPO" 2>/dev/null | awk 'NR==2 {print $4}') echo "[$TS] disk: free=$FREE" >> "$LOG" # Mindre enn 500MB → alert if [ -n "$FREE_BYTES" ] && [ "$FREE_BYTES" -lt 524288000 ]; then ALERT=1 ALERT_MSGS+=("Disk lav: kun $FREE ledig") fi # --- 3. ADC reachability --- TOKEN_LEN=$(gcloud auth application-default print-access-token 2>/dev/null | wc -c | tr -d ' ') echo "[$TS] adc: token_len=$TOKEN_LEN" >> "$LOG" if [ "$TOKEN_LEN" -lt 100 ]; then ALERT=1 ALERT_MSGS+=("ADC token mangler eller for kort ($TOKEN_LEN tegn)") fi # --- 4. gcloud auth account + project --- ACCOUNT=$(gcloud config get-value account 2>/dev/null || echo "") PROJECT=$(gcloud config get-value project 2>/dev/null || echo "") echo "[$TS] gcloud: account=$ACCOUNT project=$PROJECT" >> "$LOG" if [ "$ACCOUNT" != "chris.christiansen@vauco.no" ]; then ALERT=1 ALERT_MSGS+=("WRONG GCLOUD ACCOUNT: $ACCOUNT (forvent chris.christiansen@vauco.no)") fi if [ "$PROJECT" != "propane-will-491900-m5" ]; then ALERT=1 ALERT_MSGS+=("WRONG PROJECT: $PROJECT (forvent propane-will-491900-m5)") fi # --- 5. Alert summary --- if [ "$ALERT" -eq 1 ]; then echo "[$TS] ⚠️ ALERT (${#ALERT_MSGS[@]} issues):" >> "$LOG" for msg in "${ALERT_MSGS[@]}"; do echo "[$TS] - $msg" >> "$LOG" done fi echo "[$TS] === HEALTH CHECK END ===" >> "$LOG" echo "" >> "$LOG" exit "$ALERT"