Skip to content

Commit

Permalink
Merge pull request #265 from ibi-group/bus-notifications-otp2
Browse files Browse the repository at this point in the history
Use OTP2 data for bus notifications, improve logging.
  • Loading branch information
binh-dam-ibigroup authored Oct 25, 2024
2 parents 466f6b5 + 41ce4e1 commit a5fe446
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import java.io.InputStream;
import java.util.List;

import static org.opentripplanner.middleware.utils.ItineraryUtils.getAgencyIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getAgencyGtfsIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.removeAgencyPrefix;

/** Holds configured bus notification actions. */
Expand Down Expand Up @@ -49,7 +49,7 @@ public BusOperatorActions(List<AgencyAction> agencyActions) {
* Get the action that matches the given agency id.
*/
public AgencyAction getAgencyAction(TravelerPosition travelerPosition) {
String agencyId = removeAgencyPrefix(getAgencyIdFromLeg(travelerPosition.nextLeg));
String agencyId = removeAgencyPrefix(getAgencyGtfsIdFromLeg(travelerPosition.nextLeg));
if (agencyId != null) {
for (AgencyAction agencyAction : agencyActions) {
if (agencyAction.agencyId.equalsIgnoreCase(agencyId)) {
Expand All @@ -73,6 +73,8 @@ public void handleSendNotificationAction(TripStatus tripStatus, TravelerPosition
LOG.error("Could not trigger class {} for agency {}", action.trigger, action.agencyId, e);
throw new RuntimeException(e);
}
} else {
LOG.warn("No bus notification action was found for location {}.", travelerPosition.currentPosition);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
import java.util.Map;

import static org.opentripplanner.middleware.utils.DateTimeUtils.getOtpZoneId;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getAgencyIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getRouteIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getStopIdFromPlace;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getTripIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getAgencyGtfsIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getRouteGtfsIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getStopGtfsIdFromPlace;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getTripGtfsIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.removeAgencyPrefix;

/**
Expand Down Expand Up @@ -81,15 +81,15 @@ private static Map<String, Integer> createMobilityCodesLookup() {
public UsRideGwinnettBusOpNotificationMessage(Instant currentTime, TravelerPosition travelerPosition) {
var nextLeg = travelerPosition.nextLeg;
this.timestamp = BUS_OPERATOR_NOTIFIER_API_DATE_FORMAT.format(currentTime.atZone(ZoneOffset.UTC));
this.agency_id = removeAgencyPrefix(getAgencyIdFromLeg(nextLeg));
this.from_route_id = removeAgencyPrefix(getRouteIdFromLeg(nextLeg));
this.from_trip_id = removeAgencyPrefix(getTripIdFromLeg(nextLeg));
this.from_stop_id = removeAgencyPrefix(getStopIdFromPlace(nextLeg.from));
this.agency_id = removeAgencyPrefix(getAgencyGtfsIdFromLeg(nextLeg));
this.from_route_id = removeAgencyPrefix(getRouteGtfsIdFromLeg(nextLeg));
this.from_trip_id = removeAgencyPrefix(getTripGtfsIdFromLeg(nextLeg));
this.from_stop_id = removeAgencyPrefix(getStopGtfsIdFromPlace(nextLeg.from));
// For now, assume one notification request is made per transit leg.
// TODO: Determine how interlined legs should be handled.
this.to_route_id = this.from_route_id;
this.to_trip_id = this.from_trip_id;
this.to_stop_id = removeAgencyPrefix(getStopIdFromPlace(nextLeg.to));
this.to_stop_id = removeAgencyPrefix(getStopGtfsIdFromPlace(nextLeg.to));
this.from_arrival_time = BUS_OPERATOR_NOTIFIER_API_TIME_FORMAT.format(
nextLeg.getScheduledStartTime()
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import java.util.Map;

import static org.opentripplanner.middleware.utils.ConfigUtils.getConfigPropertyAsText;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getRouteIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.getRouteGtfsIdFromLeg;
import static org.opentripplanner.middleware.utils.ItineraryUtils.isBusLeg;

/**
Expand Down Expand Up @@ -80,7 +80,7 @@ private static List<String> getBusOperatorNotifierQualifyingRoutes() {
* Stage notification to bus operator by making sure all required conditions are met.
*/
public void sendNotification(TripStatus tripStatus, TravelerPosition travelerPosition) {
var routeId = getRouteIdFromLeg(travelerPosition.nextLeg);
var routeId = getRouteGtfsIdFromLeg(travelerPosition.nextLeg);
try {
if (
hasNotSentNotificationForRoute(travelerPosition.trackedJourney, routeId) &&
Expand All @@ -101,7 +101,7 @@ public void sendNotification(TripStatus tripStatus, TravelerPosition travelerPos
* Cancel a previously sent notification for the next bus leg.
*/
public void cancelNotification(TravelerPosition travelerPosition) {
var routeId = getRouteIdFromLeg(travelerPosition.nextLeg);
var routeId = getRouteGtfsIdFromLeg(travelerPosition.nextLeg);
try {
if (
isBusLeg(travelerPosition.nextLeg) && routeId != null &&
Expand All @@ -128,6 +128,8 @@ public void cancelNotification(TravelerPosition travelerPosition) {
* Makes a call to the bus driver notification API, followed by a call to the bus priority API.
*/
private static void makeApiRequests(TravelerPosition travelerPosition, String body, String routeId, String action) {
LOG.info("Sending bus operator/priority requests: {}", body);

var httpStatus = postBusDriverNotification(body);
if (httpStatus == HttpStatus.OK_200) {
travelerPosition.trackedJourney.updateNotificationMessage(routeId, body);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -327,37 +327,37 @@ public static String removeAgencyPrefix(String idParts) {
}

/**
* Get the route id from leg.
* Get the route GTFS id from leg.
*/
public static String getRouteIdFromLeg(Leg leg) {
return (leg != null) ? leg.routeId : null;
public static String getRouteGtfsIdFromLeg(Leg leg) {
return (leg != null && leg.route != null) ? leg.route.gtfsId : null;
}

/**
* Get the agency id from leg.
* Get the agency GTFS id from leg.
*/
public static String getAgencyIdFromLeg(Leg leg) {
return (leg != null) ? leg.agencyId : null;
public static String getAgencyGtfsIdFromLeg(Leg leg) {
return (leg != null && leg.agency != null) ? leg.agency.gtfsId : null;
}

/**
* Get the trip id from leg.
* Get the trip GTFS id from leg.
*/
public static String getTripIdFromLeg(Leg leg) {
return (leg != null) ? leg.tripId : null;
public static String getTripGtfsIdFromLeg(Leg leg) {
return (leg != null && leg.trip != null) ? leg.trip.gtfsId : null;
}

/**
* Get the stop id from place.
* Get the stop GTFS id from place.
*/
public static String getStopIdFromPlace(Place place) {
return (place != null) ? place.stopId : null;
public static String getStopGtfsIdFromPlace(Place place) {
return (place != null && place.stop != null) ? place.stop.gtfsId : null;
}

/**
* Get the route short name from leg.
*/
public static String getRouteShortNameFromLeg(Leg leg) {
return leg.routeShortName;
return (leg != null && leg.route != null) ? leg.route.shortName : null;
}
}
Loading

0 comments on commit a5fe446

Please sign in to comment.