fix: add retry logic for garmin 429 rate limiting

This commit is contained in:
2026-04-19 17:10:11 +02:00
parent 8bf3ed9831
commit ee948aefd3
+38 -31
View File
@@ -1,34 +1,41 @@
apiVersion: v1 import os
kind: ConfigMap import time
metadata: from datetime import date, timedelta
name: garmin-sync-script import psycopg2
namespace: garmin from garminconnect import Garmin
data:
sync.py: |
import os
import json
from datetime import date, timedelta
import psycopg2
from garminconnect import Garmin
email = os.environ["GARMIN_EMAIL"] email = os.environ["GARMIN_EMAIL"]
password = os.environ["GARMIN_PASSWORD"] password = os.environ["GARMIN_PASSWORD"]
db_url = os.environ["DATABASE_URL"] db_url = os.environ["DATABASE_URL"]
client = Garmin(email, password) # Retry-Login bei 429
client = Garmin(email, password)
for attempt in range(5):
try:
client.login() client.login()
print(f"Login erfolgreich (Versuch {attempt + 1})")
break
except Exception as e:
if "429" in str(e):
wait = 60 * (attempt + 1)
print(f"Rate limited (429), warte {wait}s...")
time.sleep(wait)
else:
raise
else:
raise Exception("Login nach 5 Versuchen fehlgeschlagen")
today = date.today() today = date.today()
start = today - timedelta(days=365 * 3) start = today - timedelta(days=365 * 3)
activities = client.get_activities_by_date( activities = client.get_activities_by_date(
start.isoformat(), today.isoformat() start.isoformat(), today.isoformat()
) )
conn = psycopg2.connect(db_url) conn = psycopg2.connect(db_url)
cur = conn.cursor() cur = conn.cursor()
cur.execute(""" cur.execute("""
CREATE TABLE IF NOT EXISTS activities ( CREATE TABLE IF NOT EXISTS activities (
id BIGINT PRIMARY KEY, id BIGINT PRIMARY KEY,
name TEXT, name TEXT,
@@ -50,9 +57,9 @@ data:
hr_zone_4 FLOAT, hr_zone_4 FLOAT,
hr_zone_5 FLOAT hr_zone_5 FLOAT
) )
""") """)
cur.execute(""" cur.execute("""
ALTER TABLE activities ALTER TABLE activities
ADD COLUMN IF NOT EXISTS max_hr INTEGER, ADD COLUMN IF NOT EXISTS max_hr INTEGER,
ADD COLUMN IF NOT EXISTS vo2max FLOAT, ADD COLUMN IF NOT EXISTS vo2max FLOAT,
@@ -65,9 +72,9 @@ data:
ADD COLUMN IF NOT EXISTS hr_zone_3 FLOAT, ADD COLUMN IF NOT EXISTS hr_zone_3 FLOAT,
ADD COLUMN IF NOT EXISTS hr_zone_4 FLOAT, ADD COLUMN IF NOT EXISTS hr_zone_4 FLOAT,
ADD COLUMN IF NOT EXISTS hr_zone_5 FLOAT ADD COLUMN IF NOT EXISTS hr_zone_5 FLOAT
""") """)
for a in activities: for a in activities:
cur.execute(""" cur.execute("""
INSERT INTO activities INSERT INTO activities
(id, name, type, start_time, duration_seconds, distance_meters, (id, name, type, start_time, duration_seconds, distance_meters,
@@ -112,7 +119,7 @@ data:
a.get("hrTimeInZone_5"), a.get("hrTimeInZone_5"),
)) ))
conn.commit() conn.commit()
cur.close() cur.close()
conn.close() conn.close()
print(f"Synced {len(activities)} activities") print(f"Synced {len(activities)} activities")