#!/bin/bash # Clear cached card images from the API container # Usage: ./scripts/clear-card-cache.sh [--apng-only|--all] # # With no flags: reports cache size only (dry run) # --apng-only: delete only .apng files (animated cards) # --all: delete all cached card images (.png + .apng) set -euo pipefail RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' declare -A DEPLOY_HOST=([dev]="pd-database" [prod]="akamai") declare -A CONTAINER=([dev]="dev_pd_database" [prod]="pd_api") usage() { echo "Usage: $0 [--apng-only|--all]" echo "" echo " No flag Report cache size (dry run)" echo " --apng-only Delete only .apng files (animated cards)" echo " --all Delete all cached card images" exit 1 } [[ $# -lt 1 ]] && usage ENV="$1" ACTION="${2:-report}" if [[ "$ENV" != "dev" && "$ENV" != "prod" ]]; then usage fi HOST="${DEPLOY_HOST[$ENV]}" CTR="${CONTAINER[$ENV]}" CACHE_PATH="/app/storage/cards" report() { echo -e "${CYAN}Card image cache on ${HOST} (${CTR}):${NC}" ssh "$HOST" " png_count=\$(docker exec $CTR find $CACHE_PATH -name '*.png' 2>/dev/null | wc -l) apng_count=\$(docker exec $CTR find $CACHE_PATH -name '*.apng' 2>/dev/null | wc -l) echo \" PNG: \${png_count} files\" echo \" APNG: \${apng_count} files\" echo \" Total: \$((\${png_count} + \${apng_count})) files\" " 2>/dev/null || { echo -e "${RED}Could not reach ${HOST}.${NC}" exit 1 } } report case "$ACTION" in report) echo -e "${GREEN}Dry run — no files deleted. Pass --apng-only or --all to clear.${NC}" ;; --apng-only) echo -e "${YELLOW}Deleting all .apng files from ${CTR}...${NC}" read -rp "Proceed? [y/N] " confirm [[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted." exit 0 } deleted=$(ssh "$HOST" "docker exec $CTR find $CACHE_PATH -name '*.apng' -delete -print 2>/dev/null | wc -l") echo -e "${GREEN}Deleted ${deleted} .apng files.${NC}" ;; --all) echo -e "${RED}Deleting ALL cached card images from ${CTR}...${NC}" read -rp "This will clear PNG and APNG caches. Proceed? [y/N] " confirm [[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted." exit 0 } deleted=$(ssh "$HOST" "docker exec $CTR find $CACHE_PATH -type f \( -name '*.png' -o -name '*.apng' \) -delete -print 2>/dev/null | wc -l") echo -e "${GREEN}Deleted ${deleted} cached card images.${NC}" ;; *) usage ;; esac