#!/usr/bin/env bash # ============================================================================= # view-logs.sh — tail Caddy access logs from the VM. # # Usage: # ./scripts/view-logs.sh # tail -f the access log # ./scripts/view-logs.sh recent # last 50 entries as pretty JSON # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" cd "$ROOT_DIR" [ -f .env ] || { echo "ERROR: .env not found"; exit 1; } set -a; source .env; set +a : "${OCI_VM_NAME:=sk1-expense-tracker}" : "${OCI_SSH_PRIVATE_KEY_PATH:=$HOME/.ssh/id_ed25519}" OCI_SSH_PRIVATE_KEY_PATH="${OCI_SSH_PRIVATE_KEY_PATH/#\~/$HOME}" TENANCY_OCID="$(oci iam compartment list --query 'data[0]."compartment-id"' --raw-output)" COMPARTMENT_ID="${OCI_COMPARTMENT_ID:-$TENANCY_OCID}" INSTANCE_ID="$(oci compute instance list --compartment-id "$COMPARTMENT_ID" \ --display-name "$OCI_VM_NAME" --lifecycle-state RUNNING \ --query 'data[0].id' --raw-output)" VNIC_ID="$(oci compute instance list-vnics --instance-id "$INSTANCE_ID" --query 'data[0].id' --raw-output)" PUBLIC_IP="$(oci network vnic get --vnic-id "$VNIC_ID" --query 'data."public-ip"' --raw-output)" MODE="${1:-tail}" case "$MODE" in recent) ssh -i "$OCI_SSH_PRIVATE_KEY_PATH" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ ubuntu@"$PUBLIC_IP" 'tail -n 50 /opt/sk1/logs/caddy/access.log | (command -v jq >/dev/null && jq . || cat)' ;; tail|*) ssh -i "$OCI_SSH_PRIVATE_KEY_PATH" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ ubuntu@"$PUBLIC_IP" 'tail -f /opt/sk1/logs/caddy/access.log' ;; esac