OSVauco/scripts/osvauco-health-check.sh

74 lines
2.3 KiB
Bash

#!/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"