Die Häufigkeiten von Zugverspätungen werden nun in der DB gespeichert
This commit is contained in:
parent
05c39558ea
commit
137b53d186
3 changed files with 51 additions and 11 deletions
|
@ -15,7 +15,7 @@ services:
|
|||
- MAX_RESULTS=200
|
||||
- DURATION=240
|
||||
- DELETE_AFTER_MINUTES=30
|
||||
- UPDATE_INTERVAL_MINUTES=3
|
||||
- UPDATE_INTERVAL_MINUTES=1
|
||||
# Hildesheim HBF, Braunschweig HBF, Hannover HBF
|
||||
- STATION_IDS=8000169,8000049,8000152
|
||||
restart: always
|
||||
|
|
13
init.sql
13
init.sql
|
@ -5,5 +5,16 @@ CREATE TABLE IF NOT EXISTS trips (
|
|||
timestamp DATETIME,
|
||||
train_name VARCHAR(50),
|
||||
fahrt_nr VARCHAR(20),
|
||||
trip_id VARCHAR(255)
|
||||
trip_id VARCHAR(255),
|
||||
planned_timestamp DATETIME,
|
||||
delay INT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS delay_stats (
|
||||
id VARCHAR(36) PRIMARY KEY,
|
||||
fahrt_nr VARCHAR(255),
|
||||
total_trips INT,
|
||||
delayed_trips INT,
|
||||
avg_delay FLOAT,
|
||||
last_updated DATETIME
|
||||
);
|
||||
|
|
47
main.go
47
main.go
|
@ -19,9 +19,11 @@ import (
|
|||
)
|
||||
|
||||
type Departure struct {
|
||||
TripId string `json:"tripId"`
|
||||
When string `json:"when"`
|
||||
Line struct {
|
||||
TripId string `json:"tripId"`
|
||||
When string `json:"when"`
|
||||
PlannedWhen string `json:"plannedWhen"`
|
||||
Delay int `json:"delay"`
|
||||
Line struct {
|
||||
Name string `json:"name"`
|
||||
FahrtNr string `json:"fahrtNr"`
|
||||
} `json:"line"`
|
||||
|
@ -191,6 +193,12 @@ func savePosition(db *sql.DB, dep Departure, apiBaseURL string) {
|
|||
return
|
||||
}
|
||||
|
||||
plannedWhenTime, err := time.Parse(time.RFC3339, dep.PlannedWhen)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Parsen der geplanten Zeit für TripID %s: %v\n", dep.TripId, err)
|
||||
return
|
||||
}
|
||||
|
||||
today := whenTime.Format("2006-01-02")
|
||||
|
||||
var existingID string
|
||||
|
@ -198,24 +206,44 @@ func savePosition(db *sql.DB, dep Departure, apiBaseURL string) {
|
|||
|
||||
if err == sql.ErrNoRows {
|
||||
id := uuid.New().String()
|
||||
_, err = db.Exec("INSERT INTO trips (id, timestamp, train_name, fahrt_nr, trip_id, latitude, longitude) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
||||
id, whenTime, dep.Line.Name, dep.Line.FahrtNr, dep.TripId, latitude, longitude)
|
||||
_, err = db.Exec("INSERT INTO trips (id, timestamp, planned_timestamp, delay, train_name, fahrt_nr, trip_id, latitude, longitude) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
id, whenTime, plannedWhenTime, dep.Delay, dep.Line.Name, dep.Line.FahrtNr, dep.TripId, latitude, longitude)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Speichern der neuen Position für TripID %s: %v\n", dep.TripId, err)
|
||||
} else {
|
||||
log.Printf("Neue Position gespeichert (ID: %s, Zug: %s, FahrtNr: %s, Lat: %f, Lon: %f)\n", id, dep.Line.Name, dep.Line.FahrtNr, latitude, longitude)
|
||||
log.Printf("Neue Position gespeichert (ID: %s, Zug: %s, FahrtNr: %s, Lat: %f, Lon: %f, Verspätung: %d)\n", id, dep.Line.Name, dep.Line.FahrtNr, latitude, longitude, dep.Delay)
|
||||
}
|
||||
} else if err == nil {
|
||||
_, err = db.Exec("UPDATE trips SET timestamp = ?, train_name = ?, trip_id = ?, latitude = ?, longitude = ? WHERE id = ?",
|
||||
whenTime, dep.Line.Name, dep.TripId, latitude, longitude, existingID)
|
||||
_, err = db.Exec("UPDATE trips SET timestamp = ?, planned_timestamp = ?, delay = ?, train_name = ?, trip_id = ?, latitude = ?, longitude = ? WHERE id = ?",
|
||||
whenTime, plannedWhenTime, dep.Delay, dep.Line.Name, dep.TripId, latitude, longitude, existingID)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Aktualisieren der Position für TripID %s: %v\n", dep.TripId, err)
|
||||
} else {
|
||||
log.Printf("Position aktualisiert (ID: %s, Zug: %s, FahrtNr: %s, Lat: %f, Lon: %f)\n", existingID, dep.Line.Name, dep.Line.FahrtNr, latitude, longitude)
|
||||
log.Printf("Position aktualisiert (ID: %s, Zug: %s, FahrtNr: %s, Lat: %f, Lon: %f, Verspätung: %d)\n", existingID, dep.Line.Name, dep.Line.FahrtNr, latitude, longitude, dep.Delay)
|
||||
}
|
||||
} else {
|
||||
log.Printf("Fehler bei der Überprüfung des existierenden Eintrags für TripID %s: %v\n", dep.TripId, err)
|
||||
}
|
||||
|
||||
updateDelayStats(db, dep.Line.FahrtNr, dep.Delay)
|
||||
}
|
||||
|
||||
func updateDelayStats(db *sql.DB, fahrtNr string, delay int) {
|
||||
var id string
|
||||
err := db.QueryRow("SELECT id FROM delay_stats WHERE fahrt_nr = ?", fahrtNr).Scan(&id)
|
||||
|
||||
if err == sql.ErrNoRows {
|
||||
id = uuid.New().String()
|
||||
_, err = db.Exec("INSERT INTO delay_stats (id, fahrt_nr, total_trips, delayed_trips, avg_delay, last_updated) VALUES (?, ?, 1, ?, ?, NOW())",
|
||||
id, fahrtNr, delay > 300, delay)
|
||||
} else if err == nil {
|
||||
_, err = db.Exec("UPDATE delay_stats SET total_trips = total_trips + 1, delayed_trips = delayed_trips + ?, avg_delay = ((avg_delay * total_trips) + ?) / (total_trips + 1), last_updated = NOW() WHERE id = ?",
|
||||
delay > 300, delay, id)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Aktualisieren der Verspätungsstatistiken für FahrtNr %s: %v\n", fahrtNr, err)
|
||||
}
|
||||
}
|
||||
|
||||
func calculateCurrentPosition(trip *TripDetails, currentTime time.Time) (float64, float64) {
|
||||
|
@ -298,3 +326,4 @@ func logDatabaseStats(db *sql.DB) {
|
|||
}
|
||||
log.Printf("Aktuelle Anzahl der Einträge in der Datenbank: %d\n", count)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue