From fa429fcd298a1e78ca35de126325cd9f145d0ac4 Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Sat, 23 May 2026 07:27:47 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20add=20scripts/shell-init.sh=20=E2=80=94?= =?UTF-8?q?=20auto=20cost=20alert=20on=20terminal=20startup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/shell-init.sh | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 scripts/shell-init.sh diff --git a/scripts/shell-init.sh b/scripts/shell-init.sh new file mode 100644 index 0000000..e54e337 --- /dev/null +++ b/scripts/shell-init.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# ============================================================================= +# shell-init.sh — OSVauco terminal startup hook +# Legg til i ~/.bashrc: +# source ~/OSVauco/scripts/shell-init.sh +# ============================================================================= + +OSVAUCO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/.." && pwd)" +ENV_FILE="${OSVAUCO_DIR}/.env" + +# Last inn .env hvis den finnes +if [[ -f "$ENV_FILE" ]]; then + set -o allexport + source "$ENV_FILE" + set +o allexport +fi + +# Bare kjør hvis PROJECT_ID er satt +if [[ -z "${PROJECT_ID:-}" ]]; then + return 0 +fi + +# --- Kostnadsvisning --- +YELLOW='\033[1;33m' +GREEN='\033[0;32m' +RED='\033[0;31m' +CYAN='\033[0;36m' +DIM='\033[2m' +BOLD='\033[1m' +NC='\033[0m' + +# Kalkuler akkumulert kost siden prosjektstart +START_EPOCH=1747144800 # 2026-05-13T14:00:00Z +NOW_EPOCH=$(date +%s) +ELAPSED_SEC=$(( NOW_EPOCH - START_EPOCH )) +ELAPSED_DAYS_INT=$(( ELAPSED_SEC / 86400 )) +ELAPSED_HRS=$(( (ELAPSED_SEC % 86400) / 3600 )) +ELAPSED_MIN=$(( (ELAPSED_SEC % 3600) / 60 )) + +# Kost-estimat (bash bruker integer, skalert x100000) +# USD_PER_DAY = 0.03 -> 3000 (x100000) +USD_SCALED=$(( ELAPSED_SEC * 3000 / 86400 )) # i enheter av 0.00001 USD +NOK_SCALED=$(( USD_SCALED * 1062 / 100 )) # * 10.62 -> i enheter av 0.00001 NOK + +# Formater til lesbar tekst +USD_INT=$(( USD_SCALED / 100000 )) +USD_DEC=$(( USD_SCALED % 100000 )) +NOK_INT=$(( NOK_SCALED / 100000 )) +NOK_DEC=$(( NOK_SCALED % 100000 )) + +printf "\n" +printf "${CYAN}${BOLD} ╔══════════════════════════════════════╗${NC}\n" +printf "${CYAN}${BOLD} ║ OSVauco · GCP Kostnadsmåler ║${NC}\n" +printf "${CYAN}${BOLD} ╠══════════════════════════════════════╣${NC}\n" +printf " ║ ${DIM}Fra: 2026-05-13 | Prosjekt: ${PROJECT_ID:0:16}${NC}${CYAN}${BOLD} ║${NC}\n" +printf "${CYAN}${BOLD} ╠══════════════════════════════════════╣${NC}\n" +printf " ║ ${YELLOW}${BOLD}NOK: kr %d.%05d${NC}%*s${CYAN}${BOLD} ║${NC}\n" \ + "$NOK_INT" "$NOK_DEC" "$(( 12 - ${#NOK_INT} - 6 ))" "" +printf " ║ ${GREEN}USD: \$%d.%05d${NC}%*s${CYAN}${BOLD} ║${NC}\n" \ + "$USD_INT" "$USD_DEC" "$(( 13 - ${#USD_INT} - 6 ))" "" +printf " ║ ${DIM}Tid: %dd %02dh %02dm${NC}%*s${CYAN}${BOLD} ║${NC}\n" \ + "$ELAPSED_DAYS_INT" "$ELAPSED_HRS" "$ELAPSED_MIN" "$(( 10 ))" "" +printf "${CYAN}${BOLD} ╠══════════════════════════════════════╣${NC}\n" + +# Hurtigsjekk: VMs og SQL (stille, bare vis hvis noe finnes) +VM_COUNT=$(gcloud compute instances list --project="${PROJECT_ID}" \ + --format='value(name)' --filter='status=RUNNING' 2>/dev/null | wc -l | tr -d ' ') +SQL_COUNT=$(gcloud sql instances list --project="${PROJECT_ID}" \ + --format='value(name)' --filter='state=RUNNABLE' 2>/dev/null | wc -l | tr -d ' ') + +if [[ "$VM_COUNT" -gt 0 || "$SQL_COUNT" -gt 0 ]]; then + printf " ║ ${RED}${BOLD}⚠ VM: %s SQL: %s — kjører!${NC}%*s${CYAN}${BOLD} ║${NC}\n" \ + "$VM_COUNT" "$SQL_COUNT" "0" "" +else + printf " ║ ${GREEN}✓ Ingen VM/SQL idle-kost${NC}%*s${CYAN}${BOLD} ║${NC}\n" "10" "" +fi + +printf "${CYAN}${BOLD} ╚══════════════════════════════════════╝${NC}\n" +printf " ${DIM}Full audit: bash scripts/cost-audit.sh${NC}\n\n"