#!/bin/sh # Writes files to the current working directory PYTHON="$(dirname "$0")"/venv/bin/python if ! test -x "$PYTHON"; then echo "Create a virtual environment in $(dirname "$0")/venv first" exit 1 fi previous_file="" while true; do # Get one shot of data data="$("$PYTHON" "$(dirname "$0")"/trainmap_backup.py)" if test $? -ne 0; then echo "Error: failed to fetch trainmap data" >&2; continue; fi timestamp="$(printf '%s\n' "$data" | jq ".timestamp / 1000 | round")" if test "$timestamp" = "" || test "$timestamp" -lt 1705410073 || test "$timestamp" -gt 4102441200; then echo "Error: timestamp '$timestamp' invalid" >&2; continue; fi file="$(date +%Y-%m-%d --date "@$timestamp").json" # Write the data to file printf '%s\n' "$data" >> "$file" # At the start of a new day, archive the previous day's file if test "$previous_file" == ""; then previous_file="$file" elif test "$file" != "$previous_file"; then if test -e "$previous_file.gz"; then echo "Warning: $previous_file.gz already exists, not archiving" >&2 else gzip --best "$previous_file" fi previous_file="$file" fi # Sleep to start the next request at the next full minute seconds="$(date +%S)" sleep_for="$("$PYTHON" -c "print(60 - int('$seconds', 10) - 0.5)")" sleep "$sleep_for" || true done