historical_trainmap/run.sh
2024-01-16 14:09:36 +01:00

42 lines
1.3 KiB
Bash
Executable file

#!/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