@Override protected void runPolling() { try { InputStream data = HttpUtils.getData(url); if (data == null) { throw new RuntimeException("Failed to get data from url " + url); } final FeedMessage feed = FeedMessage.PARSER.parseFrom(data); long feedTimestamp = feed.getHeader().getTimestamp(); if (feedTimestamp <= lastTimestamp) { LOG.info("Ignoring feed with an old timestamp."); return; } // Handle update in graph writer runnable updaterManager.execute(new GraphWriterRunnable() { @Override public void run(Graph graph) { updateHandler.update(feed); } }); lastTimestamp = feedTimestamp; } catch (Exception e) { LOG.error("Error reading gtfs-realtime feed from " + url, e); } }
public Builder mergeFrom(com.google.transit.realtime.GtfsRealtime.FeedMessage other) { if (other == com.google.transit.realtime.GtfsRealtime.FeedMessage.getDefaultInstance()) return this; if (other.hasHeader()) { mergeHeader(other.getHeader());
long headerTimestamp = feedMessage.getHeader().getTimestamp(); if (headerTimestamp == 0) { boolean isV2orHigher = true; try { isV2orHigher = GtfsUtils.isV2orHigher(feedMessage.getHeader()); } catch (Exception e) { _log.error("Error checking header version for E048/W001, logging as E048: " + e); if (previousFeedMessage != null && previousFeedMessage.getHeader().getTimestamp() != 0) { long previousTimestamp = previousFeedMessage.getHeader().getTimestamp(); long interval = headerTimestamp - previousTimestamp; if (headerTimestamp == previousTimestamp) { } else if (headerTimestamp < previousTimestamp) { String prefix = "header.timestamp of " + headerTimestamp + " is less than the header.timestamp of " + previousFeedMessage.getHeader().getTimestamp(); RuleUtils.addOccurrence(E018, prefix, e018List, _log); } else if (interval > MINIMUM_REFRESH_INTERVAL_SECONDS) {
update.getVehicle().getId(), new Date(stopTime.getArrival().getTime()*1000) , new Date(feed.getHeader().getTimestamp()*1000), true, new Boolean(false), update.getVehicle().getId(), new Date(stopTime.getDeparture().getTime()*1000) , new Date(feed.getHeader().getTimestamp()*1000), false, new Boolean(false),
List<OccurrenceModel> errorListE049 = new ArrayList<>(); if (!GtfsUtils.isValidVersion(feedMessage.getHeader())) { RuleUtils.addOccurrence(E038, "header.gtfs_realtime_version of " + feedMessage.getHeader().getGtfsRealtimeVersion(), errorListE038, _log); if (GtfsUtils.isV2orHigher(feedMessage.getHeader()) && !feedMessage.getHeader().hasIncrementality()) { if (feedMessage.getHeader().getIncrementality().equals(GtfsRealtime.FeedHeader.Incrementality.FULL_DATASET)) { for (GtfsRealtime.FeedEntity entity : feedMessage.getEntityList()) { if (entity.hasIsDeleted()) {
public Builder mergeFrom(com.google.transit.realtime.GtfsRealtime.FeedMessage other) { if (other == com.google.transit.realtime.GtfsRealtime.FeedMessage.getDefaultInstance()) return this; if (other.hasHeader()) { mergeHeader(other.getHeader());
public final boolean isInitialized() { byte isInitialized = memoizedIsInitialized; if (isInitialized != -1) return isInitialized == 1; if (!hasHeader()) { memoizedIsInitialized = 0; return false; } if (!getHeader().isInitialized()) { memoizedIsInitialized = 0; return false; } for (int i = 0; i < getEntityCount(); i++) { if (!getEntity(i).isInitialized()) { memoizedIsInitialized = 0; return false; } } if (!extensionsAreInitialized()) { memoizedIsInitialized = 0; return false; } memoizedIsInitialized = 1; return true; }
@Override public void onMessage(byte[] buf, int offset, int length) { if (offset != 0 || buf.length != length) { byte trimmed[] = new byte[length]; System.arraycopy(buf, offset, trimmed, 0, length); buf = trimmed; } FeedMessage message = parseMessage(buf); FeedHeader header = message.getHeader(); switch (header.getIncrementality()) { case FULL_DATASET: processDataset(message); break; case DIFFERENTIAL: processDataset(message); break; default: _log.warn("unknown incrementality: " + header.getIncrementality()); } }
/** * * @param tripUpdates * @param vehiclePositions * @param alerts */ private synchronized void handeUpdates(MonitoredResult result, FeedMessage tripUpdates, FeedMessage vehiclePositions, FeedMessage alerts) { long time = tripUpdates.getHeader().getTimestamp() * 1000; _tripsLibrary.setCurrentTime(time); List<CombinedTripUpdatesAndVehiclePosition> combinedUpdates = _tripsLibrary.groupTripUpdatesAndVehiclePositions(result, tripUpdates, vehiclePositions); result.setRecordsTotal(combinedUpdates.size()); handleCombinedUpdates(result, combinedUpdates); cacheVehicleLocations(vehiclePositions); handleAlerts(alerts); }
public List<T> readAll(FeedMessage feedMessage) { List<T> updates = new ArrayList<T>(); if (feedMessage == null) { return updates; } List<FeedEntity> entityList = feedMessage.getEntityList(); long timestamp = feedMessage.getHeader().getTimestamp() * 1000; for (FeedEntity entity : entityList) { T model = readFeedEntity(entity, timestamp); if (model != null) { updates.add(model); } } return updates; }
Instant timestamp = Instant.ofEpochSecond(feedMessage.getHeader().getTimestamp());
public final boolean isInitialized() { byte isInitialized = memoizedIsInitialized; if (isInitialized != -1) return isInitialized == 1; if (!hasHeader()) { memoizedIsInitialized = 0; return false; } if (!getHeader().isInitialized()) { memoizedIsInitialized = 0; return false; } for (int i = 0; i < getEntityCount(); i++) { if (!getEntity(i).isInitialized()) { memoizedIsInitialized = 0; return false; } } if (!extensionsAreInitialized()) { memoizedIsInitialized = 0; return false; } memoizedIsInitialized = 1; return true; }