fix: correct configmap yaml structure with retry logic
This commit is contained in:
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user