szczanieckiej.git

commit 622ecc0bfe08b30e317bf649048e5899025e2b45

Author: Adam <git@apiote.xyz>

fixes to new realtime

 file/file.go | 5 +++--
 traffic/brussels_stib_mivb.go | 6 +++---
 traffic/realtime.go | 35 ++++++++++++++++++++++-------------
 traffic/realtime_gtfs.go | 2 +-
 traffic/realtime_lua.go | 22 ++++++++++++++--------


diff --git a/file/file.go b/file/file.go
index e95e6cdec4e13daa9d6201da817f93f1b020ff14..e5865ba71e0e91762fbc42890a779cc8b4f4db53 100644
--- a/file/file.go
+++ b/file/file.go
@@ -65,7 +65,7 @@ 	if err != nil {
 		return err
 	}
 	for _, txtFile := range txtFiles {
-		if strings.Contains(txtFile.Name(), ".bare") {
+		if strings.Contains(txtFile.Name(), ".bare") || strings.Contains(txtFile.Name(), ".lua") {
 			err = os.Remove(filepath.Join(path, txtFile.Name()))
 			if err != nil {
 				log.Printf("while removing bare file %s: %v\n", txtFile.Name(), err)
@@ -89,10 +89,11 @@ 	defer xzWriter.Close()
 	tarWriter := tar.NewWriter(xzWriter)
 	defer tarWriter.Close()
 
-	files := []string{"calendar.bare", "ix_stop_codes.bare", "ix_stop_names.bare", "lines.bare", "stops.bare", "trips.bare", "vehicles.bare", "ix_lines.bare", "feed_info.bare", "agencies.bare", "ix_trips.bare"}
+	files := []string{"calendar.bare", "ix_stop_codes.bare", "ix_stop_names.bare", "lines.bare", "stops.bare", "trips.bare", "vehicles.bare", "ix_lines.bare", "feed_info.bare", "agencies.bare", "ix_trips.bare", "updates.lua"}
 	for _, file := range files {
 		stat, err := os.Stat(filepath.Join(path, file))
 		if err != nil {
+			// TODO if updates.lua does not exist, ignore
 			return err
 		}
 		bareFile, err := os.Open(filepath.Join(path, file))




diff --git a/traffic/brussels_stib_mivb.go b/traffic/brussels_stib_mivb.go
index 911592502210bd32d3408dd9a5192eb6270569d8..5807f0bbd93a5a4b2cf6e56b828167dc722324f9 100644
--- a/traffic/brussels_stib_mivb.go
+++ b/traffic/brussels_stib_mivb.go
@@ -74,7 +74,7 @@ 			if response == nil then
 				return "", "while getting updates: " .. error_message
 			end
 
-			if response.status_code != 200 then
+			if response.status_code ~= 200 then
 				return "", "api returned code " .. response.status_code .. "; " .. response.body
 			end
 
@@ -96,14 +96,14 @@ 					return "", "while decoding times for stop " .. entry.pointid .. ", line " .. entry.lineid .. ": " .. error_message
 				end
 
 				for i, time_entry in ipairs(times) do
-					updates[time_entry.expectedArrivalTime] = {
+					updates.updates[time_entry.expectedArrivalTime] = {
 						time=string.sub(time_entry.expectedArrivalTime, 12, 13) .. string.sub(time_entry.expectedArrivalTime, 15, 16) .. string.sub(time_entry.expectedArrivalTime, 18, 19),
 						stopID=stopID,
 						delay=0,
 						timetableRelationship=1,
 						vehicleStatus={
 							lineName=entry.lineid,
-							headsign=time_entry.destination.fr, // TODO translations
+							headsign=time_entry.destination.fr, -- TODO translations
 						}
 					}
 				end




diff --git a/traffic/realtime.go b/traffic/realtime.go
index 7ab01c3152090cf710b5c8ff2582bbe211fae4ed..8d40d8d639bfa7c016476befb297cde782aa64d7 100644
--- a/traffic/realtime.go
+++ b/traffic/realtime.go
@@ -163,8 +163,12 @@ 	var enrichMethod func(string, int, string, Context) (map[string]Update, bool, error)
 	if feedInfo.Name != "" {
 		if _, ok := feedInfo.RealtimeFeeds[TRIP_UPDATES]; ok {
 			enrichMethod = getGtfsRealtimeUpdates
+			// log.Println("GTFS")
 		} else if isLuaUpdatesScript(ctx) {
 			enrichMethod = getLuaRealtimeUpdates
+			// log.Println("Lua")
+		} else {
+			// log.Println("none")
 		}
 	}
 	midnight := time.Date(datetime.Year(), datetime.Month(),
@@ -191,26 +195,31 @@ 				)
 				if enrichMethod != nil {
 					updates, areTripsInTimetable, err = enrichMethod(trips[departure.Order.TripOffset].Id, departure.Order.Sequence, stopID, ctx)
 					if err != nil {
-						if isTimeout(err) { // TODO or any other connection problem
+						if isTimeout(err) { // TODO or any other connection problem, or BreakingError
 							log.Printf("connection error while enriching departure %s -> %s (%v): %v", departure.LineName, departure.Headsign, departure.Time, err)
 							enrichMethod = nil
+							continue
 						} else {
 							log.Printf("while enriching departure %s -> %s (%v): %v\n", departure.LineName, departure.Headsign, departure.Time, err)
+							enrichedDepartures[i] = departure
+							continue
 						}
 					}
-				}
-				if areTripsInTimetable {
-					update := updates[trips[departure.Order.TripOffset].Id]
-					update.VehicleStatus.LineName = trips[departure.Order.TripOffset].LineName
-					update.VehicleStatus.Headsign = trips[departure.Order.TripOffset].Headsign
-					enrichedDepartures[i] = departure.WithUpdate(update)
+					if areTripsInTimetable {
+						update := updates[trips[departure.Order.TripOffset].Id]
+						update.VehicleStatus.LineName = trips[departure.Order.TripOffset].LineName
+						update.VehicleStatus.Headsign = trips[departure.Order.TripOffset].Headsign
+						enrichedDepartures[i] = departure.WithUpdate(update)
+					} else {
+						var err error
+						enrichedDepartures, err = departuresFromNoTripUpdates(updates, pickups, dropoffs, timezone)
+						if err != nil {
+							return departures, fmt.Errorf("while creating departures without trip: %w", err)
+						}
+						break
+					}
 				} else {
-					var err error
-					enrichedDepartures, err = departuresFromNoTripUpdates(updates, pickups, dropoffs, timezone)
-					if err != nil {
-						return departures, fmt.Errorf("while creating departures without trip: %w", err)
-					}
-					break
+					enrichedDepartures = departures
 				}
 			}
 		}




diff --git a/traffic/realtime_gtfs.go b/traffic/realtime_gtfs.go
index 07192defcaf295b2500be0583f9fdc590a7c2719..cfe6f1144871979ddc3e81e055b87866ff662fde 100644
--- a/traffic/realtime_gtfs.go
+++ b/traffic/realtime_gtfs.go
@@ -197,7 +197,7 @@
 func getGtfsRealtimeUpdates(_ string, _ int, _ string, ctx Context) (map[string]Update, bool, error) {
 	feedInfo, err := getFeedInfo(ctx.DataHome, ctx.FeedID, ctx.Version)
 	if err != nil {
-		return map[string]Update{}, false, fmt.Errorf("while getting feedInfo: %w\n", err)
+		return map[string]Update{}, true, fmt.Errorf("while getting feedInfo: %w\n", err)
 	}
 
 	getGtfsRealtimeMessages(TRIP_UPDATES, ctx.FeedID, feedInfo.RealtimeFeeds)




diff --git a/traffic/realtime_lua.go b/traffic/realtime_lua.go
index 53b936cf1abb09735c845fb29a9910b52d30e764..ce517e63a4d7ac8a9174e5358129daee46a3cbaa 100644
--- a/traffic/realtime_lua.go
+++ b/traffic/realtime_lua.go
@@ -59,28 +59,31 @@ 	defer l.Close()
 	l.PreloadModule("json", luajson.Loader)
 	l.PreloadModule("http", gluahttp.NewHttpModule(&http.Client{}).Loader)
 	if err := l.DoFile(filePath); err != nil {
-		return map[string]Update{}, false, fmt.Errorf("while executing lua script: %w", err)
+		return map[string]Update{}, true, fmt.Errorf("while executing lua script: %w", err)
 	}
 
 	if err := l.CallByParam(lua.P{
 		Fn:      l.GetGlobal("getUpdates"),
 		NRet:    2,
 		Protect: true,
-	}, lua.LString(stopID)); err != nil {
-		return map[string]Update{}, false, fmt.Errorf("while executing updates function: %w", err)
+	}, lua.LString(""), lua.LNumber(0), lua.LString(stopID)); err != nil {
+		return map[string]Update{}, true, fmt.Errorf("while executing updates function: %w", err)
 	}
+	luaErr := l.Get(-1) // TODO make err json, and prepare for 429
+	l.Pop(1)
 	result := l.Get(-1)
 	l.Pop(1)
-	luaErr := l.Get(-1)
-	l.Pop(1)
 	if luaErr.(lua.LString) != "" {
-		return map[string]Update{}, false, fmt.Errorf("while executing updates function: %s", luaErr.(lua.LString))
+		return map[string]Update{}, true, fmt.Errorf("while executing updates function: %s", luaErr.(lua.LString))
 	}
-	json.Unmarshal([]byte(result.(lua.LString)), &luaUpdates)
+	err := json.Unmarshal([]byte(result.(lua.LString)), &luaUpdates)
+	if err != nil {
+		return luaUpdates.Updates, true, fmt.Errorf("while unmarshalling updates : %w", err)
+	}
 
 	vehicleStatuses, err := getLuaRealtimeVehiclesMap(ctx)
 	if err != nil {
-		return luaUpdates.Updates, false, fmt.Errorf("while getting vehicle statuses : %w", err)
+		return luaUpdates.Updates, true, fmt.Errorf("while getting vehicle statuses : %w", err)
 	}
 	for tripID, status := range vehicleStatuses {
 		u := luaUpdates.Updates[tripID]
@@ -88,6 +91,9 @@ 		u.VehicleStatus = status
 		luaUpdates.Updates[tripID] = u
 	}
 	for tripID, update := range luaUpdates.Updates {
+		if updates == nil {
+			updates = map[string]Update{}
+		}
 		updates[tripID] = update
 	}
 	return luaUpdates.Updates, luaUpdates.AreTripsInTimetable, nil