diff --git a/README.md b/README.md index dba6ed4..bc5e49b 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,21 @@ ## Beschreibung -Train Tracker ist ein in Go geschriebenes Programm, das Echtzeitinformationen über Zugbewegungen verfolgt und speichert. Es nutzt die DB-Vendo-API, um Abfahrtsinformationen von spezifizierten Bahnhöfen abzurufen, berechnet die aktuelle Position der Züge basierend auf ihrer Route und speichert diese Informationen in einer MySQL-Datenbank. +Train Tracker ist eine in Go geschriebene Anwendung, die Echtzeitinformationen über Zugbewegungen verfolgt und speichert. Sie nutzt die DB-Vendo-API, um Abfahrtsinformationen von spezifizierten Bahnhöfen abzurufen, berechnet die aktuelle Position der Züge basierend auf ihrer Route und speichert diese Informationen in einer MariaDB-Datenbank. ## Funktionen - Abrufen von Zugabfahrten für mehrere Bahnhöfe - Berechnung der aktuellen Zugposition basierend auf Abfahrtszeit und Routeninformationen -- Speichern und Aktualisieren von Zuginformationen in einer MySQL-Datenbank +- Speichern und Aktualisieren von Zuginformationen in einer MariaDB-Datenbank +- Erfassung und Analyse von Verspätungsdaten - Automatisches Löschen veralteter Einträge -- Regelmäßige Protokollierung von Datenbankstatistiken +- Tägliche Übertragung und Aggregation von Verspätungsstatistiken ## Voraussetzungen - Go 1.15 oder höher -- MySQL-Datenbank +- MariaDB - Zugang zur DB-Vendo-API ## Installation @@ -39,45 +40,43 @@ Train Tracker ist ein in Go geschriebenes Programm, das Echtzeitinformationen ü Konfigurieren Sie die Anwendung über folgende Umgebungsvariablen: -- `DB_DSN`: MySQL-Datenbankverbindungsstring +- `DB_DSN`: MariaDB-Datenbankverbindungsstring - `API_BASE_URL`: Basis-URL der DB-Vendo-API - `DURATION`: Zeitspanne in Minuten für die Abfrage von Abfahrten - `DELETE_AFTER_MINUTES`: Zeit in Minuten, nach der alte Einträge gelöscht werden - `STATION_IDS`: Komma-getrennte Liste von Bahnhofs-IDs +- `UPDATE_INTERVAL_MINUTES`: Intervall in Minuten, in dem der Algorithmus erneut ausgeführt wird (Standard: 1) +- `TRANSFER_TIME`: Uhrzeit für die tägliche Übertragung der Verspätungsstatistiken im Format "HH:MM" (Standard: "23:59") ## Datenbankstruktur -Stellen Sie sicher, dass Ihre MySQL-Datenbank eine `trips`-Tabelle mit folgender Struktur hat: +Die Anwendung verwendet drei Haupttabellen: -```sql -CREATE TABLE trips ( - id VARCHAR(36) PRIMARY KEY, - timestamp DATETIME, - train_name VARCHAR(255), - fahrt_nr VARCHAR(255), - trip_id VARCHAR(255), - latitude DOUBLE, - longitude DOUBLE -); -``` +1. `trips`: Speichert Informationen zu einzelnen Zugfahrten +2. `today_delay_stats`: Speichert tägliche Verspätungsstatistiken +3. `delay_stats`: Speichert aggregierte Verspätungsstatistiken + +Detaillierte Tabellenstrukturen finden Sie in der `init.sql` Datei. ## Verwendung -1. Setzen Sie die erforderlichen Umgebungsvariablen. +1. Stellen Sie sicher, dass die MariaDB-Datenbank läuft und die Tabellen erstellt wurden. -2. Starten Sie die Anwendung: +2. Setzen Sie die erforderlichen Umgebungsvariablen. + +3. Starten Sie die Anwendung: ``` go run main.go ``` -Die Anwendung wird nun kontinuierlich Abfahrtsinformationen abrufen, die Zugpositionen berechnen und in der Datenbank speichern. +Die Anwendung wird nun kontinuierlich Abfahrtsinformationen abrufen, Zugpositionen berechnen und in der Datenbank speichern. ## Entwicklung ### Code-Struktur - `main.go`: Hauptanwendungslogik und Einstiegspunkt des Programms -- Funktionen wie `fetchDepartures()`, `fetchTripDetails()`, `savePosition()`, `calculateCurrentPosition()` und `deleteOldEntries()` implementieren die Kernfunktionalität +- Funktionen wie `fetchDepartures()`, `fetchTripDetails()`, `savePosition()`, `calculateCurrentPosition()`, `updateTodayDelayStats()`, `transferDailyDelayStats()` und `deleteOldEntries()` implementieren die Kernfunktionalität ### Beitrag diff --git a/main.go b/main.go index 4b673b5..bf48e34 100644 --- a/main.go +++ b/main.go @@ -195,6 +195,9 @@ func fetchTripDetails(apiBaseURL, tripID string) (*TripDetails, error) { } func savePosition(db *sql.DB, dep Departure, apiBaseURL string) { + // Füge einen 3-Sekunden-Sleeper hinzu + time.Sleep(3 * time.Second) + tripDetails, err := fetchTripDetails(apiBaseURL, dep.TripId) if err != nil { log.Printf("Fehler beim Abrufen der Zugdetails für TripID %s: %v\n", dep.TripId, err)