theelvace's picture
Deployable Gradio build
6eff894
#!/usr/bin/env bash
set -euo pipefail
# --- Resolve repo root ---
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$REPO_ROOT"
# --- Lock to avoid overlapping runs (portable; no flock needed) ---
mkdir -p logs
LOCKDIR="logs/.predict.lock"
if ! mkdir "$LOCKDIR" 2>/dev/null; then
echo "[$(date '+%F %T')] Another run is in progress. Skipping."
exit 0
fi
trap 'rmdir "$LOCKDIR" 2>/dev/null || true' EXIT
# --- Args & defaults ---
MODE="${1:-default}"
CITY="${2:-Lagos}"
LAT="${3:-6.5244}"
LON="${4:-3.3792}"
PAST_DAYS="${5:-90}"
# --- Activate venv if present ---
if [[ -f ".venv/bin/activate" ]]; then
# shellcheck disable=SC1091
source .venv/bin/activate
fi
# --- Environment for fetch scripts ---
export LAT="$LAT" LON="$LON" PAST_DAYS="$PAST_DAYS"
# --- Run one logged prediction ---
echo "[$(date '+%F %T')] cron_predict: city=$CITY lat=$LAT lon=$LON mode=$MODE days=$PAST_DAYS"
python3 scripts/log_predict.py --city "$CITY" --lat "$LAT" --lon "$LON" --mode "$MODE" || {
echo "[$(date '+%F %T')] ERROR: log_predict failed"
exit 1
}
# --- (Optional) basic log rotation (keep log under ~1MB) ---
LOGFILE="logs/cron.log"
if [[ -f "$LOGFILE" ]] && [[ $(stat -f%z "$LOGFILE") -gt 1048576 ]]; then
mv "$LOGFILE" "logs/cron_$(date +%Y%m%d_%H%M%S).log" || true
fi
echo "[$(date '+%F %T')] cron_predict: done."