neiam
/apollos_crib
It's Apollo's Crib
public · Issues · Pulls 1 · Labels · Forks · Compare · Actions failure · Badges · Packages
⭐
Log in to mark this repository.
handle something odd with nulls in gtfs at times
6b94fa1 · gmorell · 2023-02-23 03:44
Files changed
modified
apps/room_gtfs/lib/room_gtfs/gtfs_worker.ex
+76
−45
@@ -42,43 +42,55 @@ defmodule RoomGtfs.Worker do
| 42 | 42 | def query_stop(id, query) do |
| 43 | 43 | inst = Configuration.get_source!(id) |
| 44 | 44 | res = Storage.get_upcoming_arrivals_for_stop(id, query.stop) |
| 45 | + | |
| 45 | 46 | case inst.config.url_rt_tu do |
| 46 | − nil -> res | |
| 47 | − _val -> trips = res |> Enum.map(fn x -> x.trip_id end) | |
| 48 | − | |
| 49 | − case get_current_realtime(id, trips, query.stop) do | |
| 50 | − [] -> | |
| 51 | − res | |
| 52 | − | |
| 53 | − rtvals -> | |
| 54 | − res | |
| 55 | − |> Enum.map(fn x -> | |
| 56 | − case Enum.find(rtvals, fn v -> x.trip_id == v.trip_update.trip.trip_id end) do | |
| 57 | − nil -> | |
| 58 | − x | |
| 59 | − | |
| 60 | − val -> | |
| 61 | − case val.trip_update.stop_time_update.arrival do | |
| 62 | − nil -> | |
| 63 | − x | |
| 64 | − | |
| 65 | − _arrival -> | |
| 66 | − x | |
| 67 | − |> Map.put(:arrival_time_live_ts, val.trip_update.stop_time_update.arrival.time) | |
| 68 | − |> Map.put( | |
| 69 | − :arrival_time_live_delay, | |
| 70 | − val.trip_update.stop_time_update.arrival.delay | |
| 71 | − ) | |
| 72 | − |> Map.put( | |
| 73 | − :arrival_time_live_uncertianty, | |
| 74 | − val.trip_update.stop_time_update.arrival.uncertainty | |
| 75 | − ) | |
| 76 | − end | |
| 77 | − end | |
| 78 | − end) | |
| 47 | + nil -> | |
| 48 | + res | |
| 49 | + | |
| 50 | + _val -> | |
| 51 | + trips = res |> Enum.map(fn x -> x.trip_id end) | |
| 52 | + | |
| 53 | + case get_current_realtime(id, trips, query.stop) do | |
| 54 | + [] -> | |
| 55 | + res | |
| 56 | + | |
| 57 | + rtvals -> | |
| 58 | + res | |
| 59 | + |> Enum.map(fn x -> | |
| 60 | + case Enum.find(rtvals, fn v -> x.trip_id == v.trip_update.trip.trip_id end) do | |
| 61 | + nil -> | |
| 62 | + x | |
| 63 | + | |
| 64 | + val -> | |
| 65 | + case val.trip_update.stop_time_update do | |
| 66 | + nil -> | |
| 67 | + x | |
| 68 | + | |
| 69 | + _stop_time_update -> | |
| 70 | + case val.trip_update.stop_time_update.arrival do | |
| 71 | + nil -> | |
| 72 | + x | |
| 73 | + | |
| 74 | + _arrival -> | |
| 75 | + x | |
| 76 | + |> Map.put( | |
| 77 | + :arrival_time_live_ts, | |
| 78 | + val.trip_update.stop_time_update.arrival.time | |
| 79 | + ) | |
| 80 | + |> Map.put( | |
| 81 | + :arrival_time_live_delay, | |
| 82 | + val.trip_update.stop_time_update.arrival.delay | |
| 83 | + ) | |
| 84 | + |> Map.put( | |
| 85 | + :arrival_time_live_uncertianty, | |
| 86 | + val.trip_update.stop_time_update.arrival.uncertainty | |
| 87 | + ) | |
| 88 | + end | |
| 89 | + end | |
| 79 | 90 | end |
| 91 | + end) | |
| 92 | + end | |
| 80 | 93 | end |
| 81 | − | |
| 82 | 94 | end |
| 83 | 95 | |
| 84 | 96 | # etc |
@@ -90,7 +102,7 @@ defmodule RoomGtfs.Worker do
| 90 | 102 | ) |
| 91 | 103 | |
| 92 | 104 | {:ok, child_rt} = Parent.start_child({RoomGtfs.Worker.RT, opts}) |
| 93 | − {:ok, child_static} = Parent.start_child({RoomGtfs.Worker.Static, opts}) | |
| 105 | + {:ok, child_s(tatic)} = Parent.start_child({RoomGtfs.Worker.Static, opts}) | |
| 94 | 106 | |
| 95 | 107 | {:ok, |
| 96 | 108 | %{ |
@@ -125,11 +137,13 @@ defmodule RoomGtfs.Worker do
| 125 | 137 | try do |
| 126 | 138 | GenServer.call(state.child_rt, {:query_realtime, trips, stop}) |
| 127 | 139 | catch |
| 128 | − :exit, _ -> IO.puts "timeout? exit" | |
| 129 | − [] | |
| 140 | + :exit, _ -> | |
| 141 | + IO.puts("timeout? exit") | |
| 142 | + [] | |
| 130 | 143 | after |
| 131 | 144 | [] |
| 132 | 145 | end |
| 146 | + | |
| 133 | 147 | {:reply, r, state} |
| 134 | 148 | end |
| 135 | 149 |
@@ -211,9 +225,15 @@ defmodule RoomGtfs.Worker.RT do
| 211 | 225 | |
| 212 | 226 | val -> |
| 213 | 227 | case fetch_rt_url(val) do |
| 214 | − {:ok, data_sa} -> state |> Map.put(:rt_sa, data_sa) | |
| 215 | − {:error, error} -> Logger.info("failed to fetch gtfs-rt url[sa] for '#{state.inst.name}', reason: #{error.reason}") | |
| 216 | − state | |
| 228 | + {:ok, data_sa} -> | |
| 229 | + state |> Map.put(:rt_sa, data_sa) | |
| 230 | + | |
| 231 | + {:error, error} -> | |
| 232 | + Logger.info( | |
| 233 | + "failed to fetch gtfs-rt url[sa] for '#{state.inst.name}', reason: #{error.reason}" | |
| 234 | + ) | |
| 235 | + | |
| 236 | + state | |
| 217 | 237 | end |
| 218 | 238 | end |
| 219 | 239 |
@@ -224,9 +244,14 @@ defmodule RoomGtfs.Worker.RT do
| 224 | 244 | |
| 225 | 245 | val -> |
| 226 | 246 | case fetch_rt_url(val) do |
| 227 | − {:ok, data_tu} -> state |> Map.put(:rt_tu, data_tu) | |
| 247 | + {:ok, data_tu} -> | |
| 248 | + state |> Map.put(:rt_tu, data_tu) | |
| 249 | + | |
| 228 | 250 | {:error, error} -> |
| 229 | − Logger.info("failed to fetch gtfs-rt url[tu] for '#{state.inst.name}', reason: #{error.reason}") | |
| 251 | + Logger.info( | |
| 252 | + "failed to fetch gtfs-rt url[tu] for '#{state.inst.name}', reason: #{error.reason}" | |
| 253 | + ) | |
| 254 | + | |
| 230 | 255 | state |
| 231 | 256 | end |
| 232 | 257 | end |
@@ -238,9 +263,14 @@ defmodule RoomGtfs.Worker.RT do
| 238 | 263 | |
| 239 | 264 | val -> |
| 240 | 265 | case fetch_rt_url(val) do |
| 241 | − {:ok, data_vp} -> state |> Map.put(:rt_vp, data_vp) | |
| 266 | + {:ok, data_vp} -> | |
| 267 | + state |> Map.put(:rt_vp, data_vp) | |
| 268 | + | |
| 242 | 269 | {:error, error} -> |
| 243 | − Logger.info("failed to fetch gtfs-rt url[vp] for '#{state.inst.name}', reason: #{error.reason}") | |
| 270 | + Logger.info( | |
| 271 | + "failed to fetch gtfs-rt url[vp] for '#{state.inst.name}', reason: #{error.reason}" | |
| 272 | + ) | |
| 273 | + | |
| 244 | 274 | state |
| 245 | 275 | end |
| 246 | 276 | end |
@@ -249,7 +279,7 @@ defmodule RoomGtfs.Worker.RT do
| 249 | 279 | end |
| 250 | 280 | |
| 251 | 281 | def handle_call({:query_realtime, trips, stop}, _from, state) do |
| 252 | −# IO.inspect(trips) | |
| 282 | + # IO.inspect(trips) | |
| 253 | 283 | |
| 254 | 284 | # filter out the protobuf for all relevant trips and then the relevant stop on that trip, nice and small |
| 255 | 285 | relevant_trips = |
@@ -264,6 +294,7 @@ defmodule RoomGtfs.Worker.RT do
| 264 | 294 | |> List.first() |
| 265 | 295 | ) |
| 266 | 296 | end) |
| 297 | + | |
| 267 | 298 | {:reply, relevant_trips, state} |
| 268 | 299 | end |
| 269 | 300 | end |
Parents: 14f18ca