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
kind: ConfigMap
metadata:
name: garmin-sync-script
namespace: garmin
data:
sync.py: |
import os
import json
from datetime import date, timedelta
import psycopg2
from garminconnect import Garmin
import os
import time
from datetime import date, timedelta
import psycopg2
from garminconnect import Garmin
email = os.environ["GARMIN_EMAIL"]
password = os.environ["GARMIN_PASSWORD"]
db_url = os.environ["DATABASE_URL"]
email = os.environ["GARMIN_EMAIL"]
password = os.environ["GARMIN_PASSWORD"]
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()
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()
start = today - timedelta(days=365 * 3)
today = date.today()
start = today - timedelta(days=365 * 3)
activities = client.get_activities_by_date(
activities = client.get_activities_by_date(
start.isoformat(), today.isoformat()
)
)
conn = psycopg2.connect(db_url)
cur = conn.cursor()
conn = psycopg2.connect(db_url)
cur = conn.cursor()
cur.execute("""
cur.execute("""
CREATE TABLE IF NOT EXISTS activities (
id BIGINT PRIMARY KEY,
name TEXT,
@@ -50,9 +57,9 @@ data:
hr_zone_4 FLOAT,
hr_zone_5 FLOAT
)
""")
""")
cur.execute("""
cur.execute("""
ALTER TABLE activities
ADD COLUMN IF NOT EXISTS max_hr INTEGER,
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_4 FLOAT,
ADD COLUMN IF NOT EXISTS hr_zone_5 FLOAT
""")
""")
for a in activities:
for a in activities:
cur.execute("""
INSERT INTO activities
(id, name, type, start_time, duration_seconds, distance_meters,
@@ -112,7 +119,7 @@ data:
a.get("hrTimeInZone_5"),
))
conn.commit()
cur.close()
conn.close()
print(f"Synced {len(activities)} activities")
conn.commit()
cur.close()
conn.close()
print(f"Synced {len(activities)} activities")