Skip to content

Commit

Permalink
Don't drop partially unsupported GTFS-RT messages (#159)
Browse files Browse the repository at this point in the history
* Don't drop only partially supported GTFS-RT messages

Previously all messages containing unsupported fields like (alert or
vehicle) were ignored, even if they contained an understandable
trip_update.

Now all possible warnings are emitted, not just the first fatal one.

This commit also changes the debug output to show the names of the
relevant fields to make it easier to debug GTFS-RT feeds without looking
at the MOTIS source code.

* refactor

---------

Co-authored-by: Felix Gündling <[email protected]>
  • Loading branch information
jbruechert and felixguendling authored Dec 11, 2024
1 parent 2cf648a commit f647fb6
Showing 1 changed file with 36 additions and 27 deletions.
63 changes: 36 additions & 27 deletions src/rt/gtfsrt_update.cc
Original file line number Diff line number Diff line change
Expand Up @@ -268,43 +268,52 @@ statistics gtfsrt_update_msg(timetable const& tt,
span->SetAttribute("nigiri.gtfsrt.total_entities", msg.entity_size());

for (auto const& entity : msg.entity()) {
if (entity.has_is_deleted() && entity.is_deleted()) {
log(log_lvl::error, "rt.gtfs.unsupported",
"unsupported deleted (tag={}, id={})", tag, entity.id());
++stats.unsupported_deleted_;
continue;
} else if (entity.has_alert()) {
log(log_lvl::error, "rt.gtfs.unsupported",
"unsupported alert (tag={}, id={})", tag, entity.id());
++stats.unsupported_alert_;
continue;
} else if (entity.has_vehicle()) {
log(log_lvl::error, "rt.gtfs.unsupported",
"unsupported vehicle (tag={}, id={})", tag, entity.id());
++stats.unsupported_vehicle_;
continue;
} else if (!entity.has_trip_update()) {
auto const unsupported = [&](bool const is_set, char const* field,
int& stat) {
if (is_set) {
log(log_lvl::error, "rt.gtfs.unsupported",
R"(ignoring unsupported "{}" field (tag={}, id={}))", field, tag,
entity.id());
++stat;
}
};

unsupported(entity.has_vehicle(), "vehicle", stats.unsupported_vehicle_);
unsupported(entity.has_alert(), "alert", stats.unsupported_alert_);
unsupported(entity.has_is_deleted() && entity.is_deleted(), "deleted",
stats.unsupported_deleted_);

if (!entity.has_trip_update()) {
log(log_lvl::error, "rt.gtfs.unsupported",
"unsupported no trip update (tag={}, id={})", tag, entity.id());
R"(unsupported: no "trip_update" field (tag={}, id={}), skipping message)",
tag, entity.id());
++stats.no_trip_update_;
continue;
} else if (!entity.trip_update().has_trip()) {
}

if (!entity.trip_update().has_trip()) {
log(log_lvl::error, "rt.gtfs.unsupported",
"unsupported no trip in trip update (tag={}, id={})", tag,
entity.id());
R"(unsupported: no "trip" field in "trip_update" field (tag={}, id={}), skipping message)",
tag, entity.id());
++stats.trip_update_without_trip_;
continue;
} else if (!entity.trip_update().trip().has_trip_id()) {
}

if (!entity.trip_update().trip().has_trip_id()) {
log(log_lvl::error, "rt.gtfs.unsupported",
"unsupported trip without trip_id (tag={}, id={})", tag, entity.id());
R"(unsupported: no "trip_id" field in "trip_update.trip" (tag={}, id={}), skipping message)",
tag, entity.id());
++stats.unsupported_no_trip_id_;
continue;
} else if (entity.trip_update().trip().schedule_relationship() !=
gtfsrt::TripDescriptor_ScheduleRelationship_SCHEDULED &&
entity.trip_update().trip().schedule_relationship() !=
gtfsrt::TripDescriptor_ScheduleRelationship_CANCELED) {
}

if (entity.trip_update().trip().schedule_relationship() !=
gtfsrt::TripDescriptor_ScheduleRelationship_SCHEDULED &&
entity.trip_update().trip().schedule_relationship() !=
gtfsrt::TripDescriptor_ScheduleRelationship_CANCELED) {
log(log_lvl::error, "rt.gtfs.unsupported",
"unsupported schedule relationship {} (tag={}, id={})",
"unsupported schedule relationship {} (tag={}, id={}), skipping "
"message",
TripDescriptor_ScheduleRelationship_Name(
entity.trip_update().trip().schedule_relationship()),
tag, entity.id());
Expand Down

0 comments on commit f647fb6

Please sign in to comment.