Hinzufügen einer Sleeper Function und Anpassung der README

This commit is contained in:
Simon Rieger 2025-01-19 16:48:15 +01:00
parent b8502c680e
commit 0dad75038b
2 changed files with 23 additions and 21 deletions

View file

@ -2,20 +2,21 @@
## Beschreibung ## 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 ## Funktionen
- Abrufen von Zugabfahrten für mehrere Bahnhöfe - Abrufen von Zugabfahrten für mehrere Bahnhöfe
- Berechnung der aktuellen Zugposition basierend auf Abfahrtszeit und Routeninformationen - 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 - Automatisches Löschen veralteter Einträge
- Regelmäßige Protokollierung von Datenbankstatistiken - Tägliche Übertragung und Aggregation von Verspätungsstatistiken
## Voraussetzungen ## Voraussetzungen
- Go 1.15 oder höher - Go 1.15 oder höher
- MySQL-Datenbank - MariaDB
- Zugang zur DB-Vendo-API - Zugang zur DB-Vendo-API
## Installation ## Installation
@ -39,45 +40,43 @@ Train Tracker ist ein in Go geschriebenes Programm, das Echtzeitinformationen ü
Konfigurieren Sie die Anwendung über folgende Umgebungsvariablen: Konfigurieren Sie die Anwendung über folgende Umgebungsvariablen:
- `DB_DSN`: MySQL-Datenbankverbindungsstring - `DB_DSN`: MariaDB-Datenbankverbindungsstring
- `API_BASE_URL`: Basis-URL der DB-Vendo-API - `API_BASE_URL`: Basis-URL der DB-Vendo-API
- `DURATION`: Zeitspanne in Minuten für die Abfrage von Abfahrten - `DURATION`: Zeitspanne in Minuten für die Abfrage von Abfahrten
- `DELETE_AFTER_MINUTES`: Zeit in Minuten, nach der alte Einträge gelöscht werden - `DELETE_AFTER_MINUTES`: Zeit in Minuten, nach der alte Einträge gelöscht werden
- `STATION_IDS`: Komma-getrennte Liste von Bahnhofs-IDs - `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 ## Datenbankstruktur
Stellen Sie sicher, dass Ihre MySQL-Datenbank eine `trips`-Tabelle mit folgender Struktur hat: Die Anwendung verwendet drei Haupttabellen:
```sql 1. `trips`: Speichert Informationen zu einzelnen Zugfahrten
CREATE TABLE trips ( 2. `today_delay_stats`: Speichert tägliche Verspätungsstatistiken
id VARCHAR(36) PRIMARY KEY, 3. `delay_stats`: Speichert aggregierte Verspätungsstatistiken
timestamp DATETIME,
train_name VARCHAR(255), Detaillierte Tabellenstrukturen finden Sie in der `init.sql` Datei.
fahrt_nr VARCHAR(255),
trip_id VARCHAR(255),
latitude DOUBLE,
longitude DOUBLE
);
```
## Verwendung ## 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 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 ## Entwicklung
### Code-Struktur ### Code-Struktur
- `main.go`: Hauptanwendungslogik und Einstiegspunkt des Programms - `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 ### Beitrag

View file

@ -195,6 +195,9 @@ func fetchTripDetails(apiBaseURL, tripID string) (*TripDetails, error) {
} }
func savePosition(db *sql.DB, dep Departure, apiBaseURL string) { 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) tripDetails, err := fetchTripDetails(apiBaseURL, dep.TripId)
if err != nil { if err != nil {
log.Printf("Fehler beim Abrufen der Zugdetails für TripID %s: %v\n", dep.TripId, err) log.Printf("Fehler beim Abrufen der Zugdetails für TripID %s: %v\n", dep.TripId, err)