#!/bin/bash # ParentZone Downloaders Daily Scheduler # This script runs both the config downloader and snapshot downloader LOG_DIR="/app/data/logs" LOG_FILE="$LOG_DIR/scheduler_$(date +%Y%m%d).log" SNAPSHOT_CONFIG_FILE="/app/config/snapshot_config.json" ASSET_CONFIG_FILE="/app/config/parentzone_config.json" # Create log directory if it doesn't exist mkdir -p "$LOG_DIR" # Function to log messages with timestamp log_message() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" } # Function to run a command and log its output run_with_logging() { local command="$1" local description="$2" log_message "Starting: $description" log_message "Command: $command" # Run the command and capture both stdout and stderr if eval "$command" >> "$LOG_FILE" 2>&1; then log_message "SUCCESS: $description completed successfully" return 0 else log_message "ERROR: $description failed with exit code $?" return 1 fi } # Main execution log_message "=== ParentZone Downloaders Daily Run Started ===" # Check if config files exist if [ ! -f "$SNAPSHOT_CONFIG_FILE" ]; then log_message "ERROR: Snapshot configuration file $SNAPSHOT_CONFIG_FILE not found" exit 1 fi if [ ! -f "$ASSET_CONFIG_FILE" ]; then log_message "WARNING: Asset configuration file $ASSET_CONFIG_FILE not found, skipping asset downloader" SKIP_ASSET_DOWNLOADER=true else SKIP_ASSET_DOWNLOADER=false fi cd /app # Run config-based asset downloader if [ "$SKIP_ASSET_DOWNLOADER" = false ]; then run_with_logging "python3 src/config_downloader.py --config $ASSET_CONFIG_FILE" "Config Asset Downloader" asset_result=$? else log_message "SKIPPED: Config Asset Downloader (configuration file not found)" asset_result=0 fi # Run config-based snapshot downloader run_with_logging "python3 src/config_snapshot_downloader.py --config $SNAPSHOT_CONFIG_FILE" "Config Snapshot Downloader" config_result=$? # Run regular snapshot downloader with environment variables if [ -n "$API_KEY" ]; then run_with_logging "python3 src/snapshot_downloader.py --api-key $API_KEY --output-dir data/snapshots" "Snapshot Downloader (API Key)" snapshot_result=$? elif [ -n "$EMAIL" ] && [ -n "$PASSWORD" ]; then run_with_logging "python3 src/snapshot_downloader.py --email $EMAIL --password $PASSWORD --output-dir data/snapshots" "Snapshot Downloader (Email/Password)" snapshot_result=$? else log_message "WARNING: No authentication method provided via environment variables, skipping direct snapshot downloader" snapshot_result=0 fi # Summary log_message "=== Daily Run Summary ===" if [ "$SKIP_ASSET_DOWNLOADER" = false ]; then if [ $asset_result -eq 0 ]; then log_message "✓ Config Asset Downloader: SUCCESS" else log_message "✗ Config Asset Downloader: FAILED" fi else log_message "- Config Asset Downloader: SKIPPED" fi if [ $config_result -eq 0 ]; then log_message "✓ Config Snapshot Downloader: SUCCESS" else log_message "✗ Config Snapshot Downloader: FAILED" fi if [ $snapshot_result -eq 0 ]; then log_message "✓ Snapshot Downloader: SUCCESS" else log_message "✗ Snapshot Downloader: FAILED" fi # Cleanup old log files (keep only last 30 days) find "$LOG_DIR" -name "scheduler_*.log" -mtime +30 -delete 2>/dev/null || true log_message "=== ParentZone Downloaders Daily Run Completed ===" # Exit with error if any downloader failed if [ $asset_result -ne 0 ] || [ $config_result -ne 0 ] || [ $snapshot_result -ne 0 ]; then exit 1 fi exit 0