fix: correct configmap yaml structure with retry logic

This commit is contained in:
2026-04-19 17:17:43 +02:00
parent ee948aefd3
commit dc42762e1d
+33 -27
View File
@@ -1,16 +1,22 @@
import os apiVersion: v1
import time kind: ConfigMap
from datetime import date, timedelta metadata:
import psycopg2 name: garmin-sync-script
from garminconnect import Garmin namespace: garmin
data:
sync.py: |
import os
import time
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"]
# Retry-Login bei 429 client = Garmin(email, password)
client = Garmin(email, password) for attempt in range(5):
for attempt in range(5):
try: try:
client.login() client.login()
print(f"Login erfolgreich (Versuch {attempt + 1})") print(f"Login erfolgreich (Versuch {attempt + 1})")
@@ -22,20 +28,20 @@ for attempt in range(5):
time.sleep(wait) time.sleep(wait)
else: else:
raise raise
else: else:
raise Exception("Login nach 5 Versuchen fehlgeschlagen") 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,
@@ -57,9 +63,9 @@ cur.execute("""
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,
@@ -72,9 +78,9 @@ cur.execute("""
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,
@@ -119,7 +125,7 @@ for a in activities:
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")