From c02be78e01cd5d2ec35841d5baf297ecea26319c Mon Sep 17 00:00:00 2001
From: Jaakko Malkki <32361480+mjaakko@users.noreply.github.com>
Date: Thu, 20 Apr 2023 10:36:06 +0300
Subject: [PATCH 01/34] Update version to 1.1.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index ec092fe..4710c59 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
fi.hsl.transitdata
transitdata-vehicleposition-processor
- 1.1.0
+ 1.1.1
UTF-8
From ce4489df084be97c6ac8039e175c0d41a4b693bb Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 1 May 2023 22:56:32 +0000
Subject: [PATCH 02/34] Bump caffeine from 3.1.5 to 3.1.6
Bumps [caffeine](https://github.com/ben-manes/caffeine) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/ben-manes/caffeine/releases)
- [Commits](https://github.com/ben-manes/caffeine/compare/v3.1.5...v3.1.6)
---
updated-dependencies:
- dependency-name: com.github.ben-manes.caffeine:caffeine
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 4710c59..3e58a86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
com.github.ben-manes.caffeine
caffeine
- 3.1.5
+ 3.1.6
junit
From 6dfebc30aaa2bbb3daf0651f2fec0ebf10fdc9fe Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 1 May 2023 22:56:39 +0000
Subject: [PATCH 03/34] Bump mockito-core from 5.2.0 to 5.3.1
Bumps [mockito-core](https://github.com/mockito/mockito) from 5.2.0 to 5.3.1.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.2.0...v5.3.1)
---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 4710c59..bb3f21a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,7 @@
org.mockito
mockito-core
- 5.2.0
+ 5.3.1
test
From ea0d416aa7641bd7bbc73b1683697dcafd27e98b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 19 Oct 2023 19:21:15 +0300
Subject: [PATCH 04/34] fix: Add logging for debugging purposes (#61)
* fix: Add logging
* fix: Add temporary try-catch blocks for debugging purposes
---
pom.xml | 2 +-
.../application/VehiclePositionHandler.java | 180 +++++++++++-------
2 files changed, 111 insertions(+), 71 deletions(-)
diff --git a/pom.xml b/pom.xml
index 0fbfd7a..dada13a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
UTF-8
11
11
- 1.4.4
+ 1.5.4
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 59bb9ad..27a8de2 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -1,6 +1,7 @@
package fi.hsl.transitdata.vehicleposition.application;
+import com.google.protobuf.InvalidProtocolBufferException;
import com.google.transit.realtime.GtfsRealtime;
import com.typesafe.config.Config;
import fi.hsl.common.gtfsrt.FeedMessageFactory;
@@ -99,84 +100,123 @@ private static String getUniqueVehicleId(int oper, int veh) {
public void handleMessage(Message message) {
try {
if (TransitdataSchema.hasProtobufSchema(message, TransitdataProperties.ProtobufSchema.PassengerCount)) {
- PassengerCount.Data data = PassengerCount.Data.parseFrom(message.getData());
-
- final String uniqueVehicleId = getUniqueVehicleId(data.getPayload().getOper(), data.getPayload().getVeh());
-
- passengerCountCache.updatePassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir(), data.getPayload());
- } else if (TransitdataSchema.hasProtobufSchema(message, TransitdataProperties.ProtobufSchema.HfpData)) {
- Hfp.Data data = Hfp.Data.parseFrom(message.getData());
-
- //Ignore HFP messages that are not sent from vehicles on a journey
- if (data.getTopic().getJourneyType() != Hfp.Topic.JourneyType.journey) {
- return;
+ PassengerCount.Data data = null;
+ try {
+ data = PassengerCount.Data.parseFrom(message.getData());
+ } catch (InvalidProtocolBufferException e) {
+ log.error("Failed to parse passenger count data", e);
+ throw new Exception(e);
}
-
- //Ignore HFP messages that are not sent from vehicles on an ongoing journey
- if (data.getTopic().getTemporalType() != Hfp.Topic.TemporalType.ongoing) {
- return;
- }
-
- //Ignore events that are not relevant to calculating stop status
- if (data.getTopic().getEventType() != Hfp.Topic.EventType.VP &&
- data.getTopic().getEventType() != Hfp.Topic.EventType.DUE &&
- data.getTopic().getEventType() != Hfp.Topic.EventType.PAS &&
- data.getTopic().getEventType() != Hfp.Topic.EventType.ARS &&
- data.getTopic().getEventType() != Hfp.Topic.EventType.PDE) {
- log.debug("Ignoring HFP message with event type {}", data.getTopic().getEventType());
- return;
+
+ try {
+ final String uniqueVehicleId = getUniqueVehicleId(data.getPayload().getOper(), data.getPayload().getVeh());
+
+ passengerCountCache.updatePassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir(), data.getPayload());
+ } catch (Exception x) {
+ log.error("Failed to get unique vehicleId and update passenger count");
+ throw x;
}
-
- final boolean tripAlreadyTaken = !tripVehicleCache.registerVehicleForTrip(data.getTopic().getUniqueVehicleId(), data.getTopic().getRouteId(), data.getPayload().getOday(), data.getTopic().getStartTime(), data.getPayload().getDir());
-
- if (tripAlreadyTaken && !addedTripsEnabledModes.contains(data.getTopic().getTransportMode())) {
- //If some other vehicle was registered for the trip and the vehicle is not a bus, do not produce vehicle position
- log.debug("There was already a vehicle registered for trip {} / {} / {} / {} - not producing vehicle position message for {}", data.getTopic().getRouteId(), data.getPayload().getOday(), data.getTopic().getStartTime(), data.getPayload().getDir(), data.getTopic().getUniqueVehicleId());
- return;
+ } else if (TransitdataSchema.hasProtobufSchema(message, TransitdataProperties.ProtobufSchema.HfpData)) {
+ Hfp.Data data = null;
+ try {
+ data = Hfp.Data.parseFrom(message.getData());
+ } catch (InvalidProtocolBufferException e) {
+ log.error("Failed to parse HfpData", e);
+ throw new Exception(e);
}
-
- if (!vehicleTimestampValidator.validateTimestamp(data, message.getEventTime())) {
- //Vehicle had invalid timestamp..
- return;
+
+ try {
+ //Ignore HFP messages that are not sent from vehicles on a journey
+ if (data.getTopic().getJourneyType() != Hfp.Topic.JourneyType.journey) {
+ log.info("Ignore HFP messages that are not sent from vehicles on a journey");
+ return;
+ }
+
+ //Ignore HFP messages that are not sent from vehicles on an ongoing journey
+ if (data.getTopic().getTemporalType() != Hfp.Topic.TemporalType.ongoing) {
+ log.info("Ignored message since vehicle wasn't on a journey");
+ return;
+ }
+
+ //Ignore events that are not relevant to calculating stop status
+ if (data.getTopic().getEventType() != Hfp.Topic.EventType.VP &&
+ data.getTopic().getEventType() != Hfp.Topic.EventType.DUE &&
+ data.getTopic().getEventType() != Hfp.Topic.EventType.PAS &&
+ data.getTopic().getEventType() != Hfp.Topic.EventType.ARS &&
+ data.getTopic().getEventType() != Hfp.Topic.EventType.PDE) {
+ log.debug("Ignoring HFP message with event type {}", data.getTopic().getEventType());
+ return;
+ }
+ } catch (Exception x) {
+ log.error("Topic related checks failed");
+ throw x;
}
- if (!vehicleDelayValidator.validateDelay(data)) {
- // Vehicle was delayed too much
- return;
+ final boolean tripAlreadyTaken = !tripVehicleCache.registerVehicleForTrip(data.getTopic().getUniqueVehicleId(), data.getTopic().getRouteId(), data.getPayload().getOday(), data.getTopic().getStartTime(), data.getPayload().getDir());
+
+ try {
+ if (tripAlreadyTaken && !addedTripsEnabledModes.contains(data.getTopic().getTransportMode())) {
+ //If some other vehicle was registered for the trip and the vehicle is not a bus, do not produce vehicle position
+ log.debug("There was already a vehicle registered for trip {} / {} / {} / {} - not producing vehicle position message for {}", data.getTopic().getRouteId(), data.getPayload().getOday(), data.getTopic().getStartTime(), data.getPayload().getDir(), data.getTopic().getUniqueVehicleId());
+ return;
+ }
+ } catch (Exception x) {
+ log.error("tripAlreadyTaken check failed");
+ throw x;
}
-
- StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
-
- String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
- PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
- if (!isValidPassengerCountData(passengerCount)) {
- if (passengerCount != null) {
- log.debug("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
- uniqueVehicleId,
- passengerCount.getVehicleCounts().getVehicleLoad(),
- passengerCount.getVehicleCounts().getVehicleLoadRatio());
+
+ try {
+ if (!vehicleTimestampValidator.validateTimestamp(data, message.getEventTime())) {
+ //Vehicle had invalid timestamp..
+ return;
}
-
- //Don't use invalid data
- passengerCount = null;
+
+ if (!vehicleDelayValidator.validateDelay(data)) {
+ // Vehicle was delayed too much
+ return;
+ }
+ } catch (Exception x) {
+ log.error("Validations failed");
+ throw x;
}
-
- Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
-
- Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
-
- if (optionalVehiclePosition.isPresent()) {
- final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
-
- final String topicSuffix = getTopicSuffix(vehiclePosition);
-
- final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
-
- if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
- messagesDelayed++;
+
+ try {
+ StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
+
+ String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
+ PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
+ if (!isValidPassengerCountData(passengerCount)) {
+ if (passengerCount != null) {
+ log.warn("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
+ uniqueVehicleId,
+ passengerCount.getVehicleCounts().getVehicleLoad(),
+ passengerCount.getVehicleCounts().getVehicleLoadRatio());
+ }
+
+ //Don't use invalid data
+ passengerCount = null;
}
-
- sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
+
+ Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
+
+ Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
+
+ if (optionalVehiclePosition.isPresent()) {
+ final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
+
+ final String topicSuffix = getTopicSuffix(vehiclePosition);
+
+ final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
+
+ if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
+ messagesDelayed++;
+ }
+
+ sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
+ }
+ } catch (Exception x) {
+ log.error("Preparing or sending pulsar message failed");
+ throw x;
}
} else {
log.warn("Invalid protobuf schema, expecting HfpData");
@@ -256,7 +296,7 @@ private void sendPulsarMessage(final String vehicleId, final String topicSuffix,
}
if (messageId != null) {
- log.debug("Produced a new position for vehicle {} with timestamp {}", vehicleId, timestampMs);
+ log.info("Produced a new position for vehicle {} with timestamp {}", vehicleId, timestampMs);
}
});
}
From f8ea20d6b73cc782678807be9dae202a9058e8df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 19 Oct 2023 20:32:55 +0300
Subject: [PATCH 05/34] fix: Divide try-catch block into smaller ones
---
.../application/VehiclePositionHandler.java | 46 +++++++++++++------
1 file changed, 33 insertions(+), 13 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 27a8de2..10cc9de 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -128,13 +128,15 @@ public void handleMessage(Message message) {
try {
//Ignore HFP messages that are not sent from vehicles on a journey
if (data.getTopic().getJourneyType() != Hfp.Topic.JourneyType.journey) {
- log.info("Ignore HFP messages that are not sent from vehicles on a journey");
+ // This log statement is commented out because it produces a big amount of log items
+ //log.info("Ignore HFP messages that are not sent from vehicles on a journey");
return;
}
//Ignore HFP messages that are not sent from vehicles on an ongoing journey
if (data.getTopic().getTemporalType() != Hfp.Topic.TemporalType.ongoing) {
- log.info("Ignored message since vehicle wasn't on a journey");
+ // This log statement is commented out because it produces a big amount of log items
+ //log.info("Ignored message since vehicle wasn't on a journey");
return;
}
@@ -179,12 +181,22 @@ public void handleMessage(Message message) {
log.error("Validations failed");
throw x;
}
+
+ StopStatusProcessor.StopStatus stopStatus;
+ String uniqueVehicleId = null;
+ PassengerCount.Payload passengerCount = null;
try {
- StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
+ stopStatus = stopStatusProcessor.getStopStatus(data);
- String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
- PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
+ uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
+ passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
+ } catch (Exception x) {
+ log.error("Failed to initialize variables stopStatus, uniqueVehicleId, passengerCount");
+ throw x;
+ }
+
+ try {
if (!isValidPassengerCountData(passengerCount)) {
if (passengerCount != null) {
log.warn("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
@@ -196,26 +208,34 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
-
+ } catch (Exception x) {
+ log.error("Failed to check passenger count");
+ throw x;
+ }
+
+ String detailMessage = "";
+
+ try {
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
-
+ detailMessage = "Variable maybeOccupancyStatus initialized";
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
-
+ detailMessage = "Variable optionalVehiclePosition initialized";
if (optionalVehiclePosition.isPresent()) {
+ detailMessage = "optionalVehiclePosition.isPresent() called";
final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
-
+ detailMessage = "optionalVehiclePosition.get() called";
final String topicSuffix = getTopicSuffix(vehiclePosition);
-
+ detailMessage = "getTopicSuffix(vehiclePosition) called";
final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
-
+ detailMessage = "FeedMessageFactory.createDifferentialFeedMessage called";
if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
messagesDelayed++;
}
-
+ detailMessage = "If block done";
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed");
+ log.error("Preparing or sending pulsar message failed. {}", detailMessage);
throw x;
}
} else {
From ea975cfc3abebf4fe988c6925e5132a0497e99ba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 19 Oct 2023 22:11:09 +0300
Subject: [PATCH 06/34] fix: Merge two try-catch blocks
---
.../application/VehiclePositionHandler.java | 29 +++++--------------
1 file changed, 8 insertions(+), 21 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 10cc9de..851d4bf 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -181,22 +181,16 @@ public void handleMessage(Message message) {
log.error("Validations failed");
throw x;
}
-
- StopStatusProcessor.StopStatus stopStatus;
- String uniqueVehicleId = null;
- PassengerCount.Payload passengerCount = null;
- try {
- stopStatus = stopStatusProcessor.getStopStatus(data);
-
- uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
- passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
- } catch (Exception x) {
- log.error("Failed to initialize variables stopStatus, uniqueVehicleId, passengerCount");
- throw x;
- }
+ String detailMessage = "";
try {
+ StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
+ detailMessage = "stopStatusProcessor.getStopStatus called";
+ String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
+ detailMessage = "getUniqueVehicleId called";
+ PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
+ detailMessage = "passengerCountCache.getPassengerCount";
if (!isValidPassengerCountData(passengerCount)) {
if (passengerCount != null) {
log.warn("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
@@ -208,14 +202,7 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
- } catch (Exception x) {
- log.error("Failed to check passenger count");
- throw x;
- }
-
- String detailMessage = "";
-
- try {
+ detailMessage = "isValidPassengerCountData called";
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
detailMessage = "Variable maybeOccupancyStatus initialized";
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
From 68d50acfc2b195f4f9ab5e7ef5453a2848b74545 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 19 Oct 2023 22:36:09 +0300
Subject: [PATCH 07/34] fix: Remove temporary logging
---
.../application/VehiclePositionHandler.java | 23 ++++++++-----------
1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 851d4bf..0fe8137 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -182,15 +182,11 @@ public void handleMessage(Message message) {
throw x;
}
- String detailMessage = "";
-
try {
StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
- detailMessage = "stopStatusProcessor.getStopStatus called";
+
String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
- detailMessage = "getUniqueVehicleId called";
PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
- detailMessage = "passengerCountCache.getPassengerCount";
if (!isValidPassengerCountData(passengerCount)) {
if (passengerCount != null) {
log.warn("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
@@ -202,27 +198,26 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
- detailMessage = "isValidPassengerCountData called";
+
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
- detailMessage = "Variable maybeOccupancyStatus initialized";
+
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
- detailMessage = "Variable optionalVehiclePosition initialized";
+
if (optionalVehiclePosition.isPresent()) {
- detailMessage = "optionalVehiclePosition.isPresent() called";
final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
- detailMessage = "optionalVehiclePosition.get() called";
+
final String topicSuffix = getTopicSuffix(vehiclePosition);
- detailMessage = "getTopicSuffix(vehiclePosition) called";
+
final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
- detailMessage = "FeedMessageFactory.createDifferentialFeedMessage called";
+
if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
messagesDelayed++;
}
- detailMessage = "If block done";
+
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed. {}", detailMessage);
+ log.error("Preparing or sending pulsar message failed");
throw x;
}
} else {
From 6834f307bc4c339a17a8867d6b466abe61bce05b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 20 Oct 2023 08:33:05 +0300
Subject: [PATCH 08/34] fix: Add temporarily more info to log.error message
---
.../application/VehiclePositionHandler.java | 25 ++++++++++++-------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 0fe8137..f081915 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -182,11 +182,15 @@ public void handleMessage(Message message) {
throw x;
}
+ String detailMessage = "";
+
try {
StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
-
+ detailMessage = "stopStatusProcessor.getStopStatus(data) called";
String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
+ detailMessage = "getUniqueVehicleId called";
PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
+ detailMessage = "passengerCountCache.getPassengerCount called";
if (!isValidPassengerCountData(passengerCount)) {
if (passengerCount != null) {
log.warn("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
@@ -198,26 +202,29 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
+ detailMessage = "isValidPassengerCountData(passengerCount) called";
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
-
+ detailMessage = "gtfsRtOccupancyStatusHelper.getOccupancyStatus called";
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
-
+ detailMessage = "GtfsRtGenerator.generateVehiclePosition called";
if (optionalVehiclePosition.isPresent()) {
+ detailMessage = "optionalVehiclePosition.isPresent() called";
final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
-
+ detailMessage = "optionalVehiclePosition.get() called";
final String topicSuffix = getTopicSuffix(vehiclePosition);
-
+ detailMessage = "getTopicSuffix(vehiclePosition) called";
final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
-
+ detailMessage = "ssageFactory.createDifferentialFeedMessage called";
if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
messagesDelayed++;
}
-
+ detailMessage = "Duration.ofMillis called";
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
+ detailMessage = "If there is an error, you should not see this";
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed");
+ log.error("Preparing or sending pulsar message failed. {}", detailMessage);
throw x;
}
} else {
@@ -298,7 +305,7 @@ private void sendPulsarMessage(final String vehicleId, final String topicSuffix,
}
if (messageId != null) {
- log.info("Produced a new position for vehicle {} with timestamp {}", vehicleId, timestampMs);
+ log.debug("Produced a new position for vehicle {} with timestamp {}", vehicleId, timestampMs);
}
});
}
From 4f3fd3050188c4f2d968c2236fb306881e337d03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 20 Oct 2023 09:09:51 +0300
Subject: [PATCH 09/34] fix: Add temporarily even more info to log.error
message
---
.../vehicleposition/application/VehiclePositionHandler.java | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index f081915..28cd234 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -202,7 +202,10 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
- detailMessage = "isValidPassengerCountData(passengerCount) called";
+ String gtfsRtOccupancyStatusHelperMessage = gtfsRtOccupancyStatusHelper == null ? " gtfsRtOccupancyStatusHelper is null." : " gtfsRtOccupancyStatusHelper not null.";
+ String dataMessage = data == null ? " data is null." : " data not null.";
+ String passengerCountMessage = passengerCount == null ? " passengerCount is null." : " passengerCount not null.";
+ detailMessage = "isValidPassengerCountData(passengerCount) called." + gtfsRtOccupancyStatusHelperMessage + dataMessage + passengerCountMessage;
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
detailMessage = "gtfsRtOccupancyStatusHelper.getOccupancyStatus called";
From 9b9bc6a17a6a002aa2181f461b8361abb27505d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 20 Oct 2023 10:58:03 +0300
Subject: [PATCH 10/34] fix: Add temporary info about passenger count payload
to log.error message
---
.../application/VehiclePositionHandler.java | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 28cd234..39f2b67 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -205,8 +205,21 @@ public void handleMessage(Message message) {
String gtfsRtOccupancyStatusHelperMessage = gtfsRtOccupancyStatusHelper == null ? " gtfsRtOccupancyStatusHelper is null." : " gtfsRtOccupancyStatusHelper not null.";
String dataMessage = data == null ? " data is null." : " data not null.";
String passengerCountMessage = passengerCount == null ? " passengerCount is null." : " passengerCount not null.";
- detailMessage = "isValidPassengerCountData(passengerCount) called." + gtfsRtOccupancyStatusHelperMessage + dataMessage + passengerCountMessage;
-
+
+ String passengerCountPayloadMessage = "";
+
+ if (passengerCount != null) {
+ if (passengerCount.getVehicleCounts() == null) {
+ passengerCountPayloadMessage = " passengerCount.getVehicleCounts() is null.";
+ } else {
+ passengerCountPayloadMessage = " passengerCount.getVehicleCounts().getVehicleLoadRatio() = "
+ + passengerCount.getVehicleCounts().getVehicleLoadRatio();
+ }
+ }
+
+ detailMessage = "isValidPassengerCountData(passengerCount) called." + gtfsRtOccupancyStatusHelperMessage
+ + dataMessage + passengerCountMessage + passengerCountPayloadMessage;
+
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
detailMessage = "gtfsRtOccupancyStatusHelper.getOccupancyStatus called";
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
From 090f7234392a4adf53059448e724678ce5f5b987 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 13:43:04 +0200
Subject: [PATCH 11/34] fix: HFP occupancy status is set EMPTY when occu is
equal to or below zero (#68)
* fix: HFP occupancy status is set EMPTY when occu is zero
* fix: HFP occupancy status is set EMPTY when occu is equal to or below zero
---
.../application/VehiclePositionHandler.java | 37 ++---------
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 4 +-
.../GtfsRtOccupancyStatusHelperTest.java | 66 ++++++++++++++++++-
3 files changed, 72 insertions(+), 35 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 39f2b67..a7364f4 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -182,18 +182,14 @@ public void handleMessage(Message message) {
throw x;
}
- String detailMessage = "";
-
try {
StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
- detailMessage = "stopStatusProcessor.getStopStatus(data) called";
String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
- detailMessage = "getUniqueVehicleId called";
PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
- detailMessage = "passengerCountCache.getPassengerCount called";
+
if (!isValidPassengerCountData(passengerCount)) {
if (passengerCount != null) {
- log.warn("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
+ log.debug("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
uniqueVehicleId,
passengerCount.getVehicleCounts().getVehicleLoad(),
passengerCount.getVehicleCounts().getVehicleLoadRatio());
@@ -202,45 +198,22 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
- String gtfsRtOccupancyStatusHelperMessage = gtfsRtOccupancyStatusHelper == null ? " gtfsRtOccupancyStatusHelper is null." : " gtfsRtOccupancyStatusHelper not null.";
- String dataMessage = data == null ? " data is null." : " data not null.";
- String passengerCountMessage = passengerCount == null ? " passengerCount is null." : " passengerCount not null.";
-
- String passengerCountPayloadMessage = "";
-
- if (passengerCount != null) {
- if (passengerCount.getVehicleCounts() == null) {
- passengerCountPayloadMessage = " passengerCount.getVehicleCounts() is null.";
- } else {
- passengerCountPayloadMessage = " passengerCount.getVehicleCounts().getVehicleLoadRatio() = "
- + passengerCount.getVehicleCounts().getVehicleLoadRatio();
- }
- }
-
- detailMessage = "isValidPassengerCountData(passengerCount) called." + gtfsRtOccupancyStatusHelperMessage
- + dataMessage + passengerCountMessage + passengerCountPayloadMessage;
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
- detailMessage = "gtfsRtOccupancyStatusHelper.getOccupancyStatus called";
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
- detailMessage = "GtfsRtGenerator.generateVehiclePosition called";
+
if (optionalVehiclePosition.isPresent()) {
- detailMessage = "optionalVehiclePosition.isPresent() called";
final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
- detailMessage = "optionalVehiclePosition.get() called";
final String topicSuffix = getTopicSuffix(vehiclePosition);
- detailMessage = "getTopicSuffix(vehiclePosition) called";
final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
- detailMessage = "ssageFactory.createDifferentialFeedMessage called";
+
if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
messagesDelayed++;
}
- detailMessage = "Duration.ofMillis called";
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
- detailMessage = "If there is an error, you should not see this";
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed. {}", detailMessage);
+ log.error("Preparing or sending pulsar message failed.", x);
throw x;
}
} else {
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index c90eb8e..910650a 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -58,8 +58,10 @@ public Optional getOccupancyStatus
//If passenger count from APC message is not available, but occu contains value other than 0, use that
//Currently occu is only available for Suomenlinna ferries
- if (hfpPayload.getOccu() != 0) {
+ if (hfpPayload.getOccu() > 0) {
return Optional.of(occuToOccupancyStatus.lowerEntry(hfpPayload.getOccu()).getValue());
+ } else {
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
}
}
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
index 31be5de..b4487c2 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
@@ -2,6 +2,7 @@
import com.google.transit.realtime.GtfsRealtime;
import fi.hsl.common.hfp.proto.Hfp;
+import fi.hsl.common.passengercount.proto.PassengerCount;
import org.junit.Before;
import org.junit.Test;
@@ -36,10 +37,71 @@ public void setup() {
}
@Test
- public void testOccupancyStatus() {
- Optional occuStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().setSchemaVersion(1).setTsi(0).setTst("").setOccu(55).build(), null);
+ public void testHfpOccupancyStatus() {
+ Optional occuStatus =
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
+ setSchemaVersion(1).setTsi(0).setTst("").setOccu(55).build(), null);
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.STANDING_ROOM_ONLY, occuStatus.get());
}
+
+ @Test
+ public void testHfpOccupancyStatusEmpty() {
+ Optional occuStatus =
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
+ setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(), null);
+
+ assertTrue(occuStatus.isPresent());
+ assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
+ }
+
+ @Test
+ public void testHfpOccupancyStatusNegative() {
+ Optional occuStatus =
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
+ setSchemaVersion(1).setTsi(0).setTst("").setOccu(-1).build(), null);
+
+ assertTrue(occuStatus.isPresent());
+ assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
+ }
+
+ @Test
+ public void testPassengerCountOccupancyStatus() {
+ Optional occuStatus =
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(
+ Hfp.Payload.newBuilder().
+ setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(),
+ PassengerCount.Payload.newBuilder().setVehicleCounts(PassengerCount.VehicleCounts.newBuilder()
+ .setCountQuality("").setVehicleLoad(10).setVehicleLoadRatio(0.55).build()).build());
+
+ assertTrue(occuStatus.isPresent());
+ assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.STANDING_ROOM_ONLY, occuStatus.get());
+ }
+
+ @Test
+ public void testPassengerCountOccupancyStatusEmpty() {
+ Optional occuStatus =
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(
+ Hfp.Payload.newBuilder().
+ setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(),
+ PassengerCount.Payload.newBuilder().setVehicleCounts(PassengerCount.VehicleCounts.newBuilder()
+ .setCountQuality("").setVehicleLoad(0).setVehicleLoadRatio(0.0).build()).build());
+
+ assertTrue(occuStatus.isPresent());
+ assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
+ }
+
+ @Test
+ public void testPassengerCountOccupancyStatusNegative() {
+ Optional occuStatus =
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(
+ Hfp.Payload.newBuilder().
+ setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(),
+ PassengerCount.Payload.newBuilder().setVehicleCounts(PassengerCount.VehicleCounts.newBuilder()
+ .setCountQuality("").setVehicleLoad(0).setVehicleLoadRatio(-1.0).build()).build());
+
+ assertTrue(occuStatus.isPresent());
+ assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
+ }
}
From 4f76aff7b929ef47e4a5b4f76d5baf365a18d258 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 14:14:08 +0200
Subject: [PATCH 12/34] fix: Add temporarily more info to log.error message
---
.../application/VehiclePositionHandler.java | 35 ++++++++++++++++---
1 file changed, 31 insertions(+), 4 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index a7364f4..2632b1f 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -182,11 +182,15 @@ public void handleMessage(Message message) {
throw x;
}
+ String detailMessage = "";
+
try {
StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
+ detailMessage = "stopStatusProcessor.getStopStatus(data) called";
String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
+ detailMessage = "getUniqueVehicleId called";
PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
-
+ detailMessage = "passengerCountCache.getPassengerCount called";
if (!isValidPassengerCountData(passengerCount)) {
if (passengerCount != null) {
log.debug("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
@@ -198,22 +202,45 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
+ String gtfsRtOccupancyStatusHelperMessage = gtfsRtOccupancyStatusHelper == null ? " gtfsRtOccupancyStatusHelper is null." : " gtfsRtOccupancyStatusHelper not null.";
+ String dataMessage = data == null ? " data is null." : " data not null.";
+ String passengerCountMessage = passengerCount == null ? " passengerCount is null." : " passengerCount not null.";
+
+ String passengerCountPayloadMessage = "";
+
+ if (passengerCount != null) {
+ if (passengerCount.getVehicleCounts() == null) {
+ passengerCountPayloadMessage = " passengerCount.getVehicleCounts() is null.";
+ } else {
+ passengerCountPayloadMessage = " passengerCount.getVehicleCounts().getVehicleLoadRatio() = "
+ + passengerCount.getVehicleCounts().getVehicleLoadRatio();
+ }
+ }
+
+ detailMessage = "isValidPassengerCountData(passengerCount) called." + gtfsRtOccupancyStatusHelperMessage
+ + dataMessage + passengerCountMessage + passengerCountPayloadMessage;
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
+ detailMessage = "gtfsRtOccupancyStatusHelper.getOccupancyStatus called";
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
-
+ detailMessage = "GtfsRtGenerator.generateVehiclePosition called";
if (optionalVehiclePosition.isPresent()) {
+ detailMessage = "optionalVehiclePosition.isPresent() called";
final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
+ detailMessage = "optionalVehiclePosition.get() called";
final String topicSuffix = getTopicSuffix(vehiclePosition);
+ detailMessage = "getTopicSuffix(vehiclePosition) called";
final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
-
+ detailMessage = "ssageFactory.createDifferentialFeedMessage called";
if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
messagesDelayed++;
}
+ detailMessage = "Duration.ofMillis called";
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
+ detailMessage = "If there is an error, you should not see this";
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed.", x);
+ log.error("Preparing or sending pulsar message failed. {}", detailMessage);
throw x;
}
} else {
From d1c588f84e21bc8c99bd05d77ed196c29ac717e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 14:38:55 +0200
Subject: [PATCH 13/34] fix: Removed temporary info from log.error message
---
.../application/VehiclePositionHandler.java | 35 +++----------------
1 file changed, 4 insertions(+), 31 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 2632b1f..a7364f4 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -182,15 +182,11 @@ public void handleMessage(Message message) {
throw x;
}
- String detailMessage = "";
-
try {
StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
- detailMessage = "stopStatusProcessor.getStopStatus(data) called";
String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
- detailMessage = "getUniqueVehicleId called";
PassengerCount.Payload passengerCount = passengerCountCache.getPassengerCount(uniqueVehicleId, data.getPayload().getRoute(), data.getPayload().getOday(), data.getPayload().getStart(), data.getPayload().getDir());
- detailMessage = "passengerCountCache.getPassengerCount called";
+
if (!isValidPassengerCountData(passengerCount)) {
if (passengerCount != null) {
log.debug("Passenger count for vehicle {} was invalid (vehicle load: {}, vehicle load ratio: {})",
@@ -202,45 +198,22 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
- String gtfsRtOccupancyStatusHelperMessage = gtfsRtOccupancyStatusHelper == null ? " gtfsRtOccupancyStatusHelper is null." : " gtfsRtOccupancyStatusHelper not null.";
- String dataMessage = data == null ? " data is null." : " data not null.";
- String passengerCountMessage = passengerCount == null ? " passengerCount is null." : " passengerCount not null.";
-
- String passengerCountPayloadMessage = "";
-
- if (passengerCount != null) {
- if (passengerCount.getVehicleCounts() == null) {
- passengerCountPayloadMessage = " passengerCount.getVehicleCounts() is null.";
- } else {
- passengerCountPayloadMessage = " passengerCount.getVehicleCounts().getVehicleLoadRatio() = "
- + passengerCount.getVehicleCounts().getVehicleLoadRatio();
- }
- }
-
- detailMessage = "isValidPassengerCountData(passengerCount) called." + gtfsRtOccupancyStatusHelperMessage
- + dataMessage + passengerCountMessage + passengerCountPayloadMessage;
Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
- detailMessage = "gtfsRtOccupancyStatusHelper.getOccupancyStatus called";
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
- detailMessage = "GtfsRtGenerator.generateVehiclePosition called";
+
if (optionalVehiclePosition.isPresent()) {
- detailMessage = "optionalVehiclePosition.isPresent() called";
final GtfsRealtime.VehiclePosition vehiclePosition = optionalVehiclePosition.get();
- detailMessage = "optionalVehiclePosition.get() called";
final String topicSuffix = getTopicSuffix(vehiclePosition);
- detailMessage = "getTopicSuffix(vehiclePosition) called";
final GtfsRealtime.FeedMessage feedMessage = FeedMessageFactory.createDifferentialFeedMessage(generateEntityId(data), vehiclePosition, data.getPayload().getTsi());
- detailMessage = "ssageFactory.createDifferentialFeedMessage called";
+
if (Duration.ofMillis(System.currentTimeMillis() - (data.getPayload().getTsi() * 1000)).compareTo(DELAYED_MESSAGE_THRESHOLD) >= 0) {
messagesDelayed++;
}
- detailMessage = "Duration.ofMillis called";
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
- detailMessage = "If there is an error, you should not see this";
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed. {}", detailMessage);
+ log.error("Preparing or sending pulsar message failed.", x);
throw x;
}
} else {
From 07dbfdec5f18f940e0c2f6be9abca3a4ef153bc5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 15:49:44 +0200
Subject: [PATCH 14/34] fix: Add logging around method
gtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../application/VehiclePositionHandler.java | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index a7364f4..5bb06bc 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -182,6 +182,8 @@ public void handleMessage(Message message) {
throw x;
}
+ String detailMessage = "";
+
try {
StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
@@ -198,8 +200,15 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
-
- Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
+ detailMessage = "Calling method gtfsRtOccupancyStatusHelper.getOccupancyStatus";
+ Optional maybeOccupancyStatus = Optional.empty();
+ try {
+ maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
+ } catch (Exception x) {
+ detailMessage = "Method gtfsRtOccupancyStatusHelper.getOccupancyStatus failed: " + x.toString();
+ throw x;
+ }
+ detailMessage = "Method gtfsRtOccupancyStatusHelper.getOccupancyStatus returned: " + (maybeOccupancyStatus.isPresent() ? maybeOccupancyStatus.get() : "null");
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
if (optionalVehiclePosition.isPresent()) {
@@ -213,7 +222,7 @@ public void handleMessage(Message message) {
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed.", x);
+ log.error("Preparing or sending pulsar message failed. {}", detailMessage);
throw x;
}
} else {
From a29cbb8be2bfc3fcde540bb85f3aafe0075651d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 17:04:05 +0200
Subject: [PATCH 15/34] fix: Add logging inside method
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 49 ++++++++++++++-----
.../VehiclePositionHandlerTest.java | 2 +
.../GtfsRtOccupancyStatusHelperTest.java | 7 +++
3 files changed, 46 insertions(+), 12 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 910650a..7aa7b9d 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -1,5 +1,6 @@
package fi.hsl.transitdata.vehicleposition.application.gtfsrt;
+import com.dslplatform.json.runtime.MapAnalyzer;
import com.google.transit.realtime.GtfsRealtime;
import fi.hsl.common.hfp.proto.Hfp;
import fi.hsl.common.passengercount.proto.PassengerCount;
@@ -41,27 +42,51 @@ public GtfsRtOccupancyStatusHelper(NavigableMap getOccupancyStatus(Hfp.Payload hfpPayload, PassengerCount.Payload passengerCountPayload) {
- if (passengerCountEnabledVehicles == null || passengerCountEnabledVehicles.contains(hfpPayload.getOper() + "/" + hfpPayload.getVeh())) {
+ boolean containsId = false;
+
+ try {
+ containsId = passengerCountEnabledVehicles.contains(hfpPayload.getOper() + "/" + hfpPayload.getVeh());
+ } catch (Exception x) {
+ throw new RuntimeException("Contains failed", x);
+ }
+
+ if (passengerCountEnabledVehicles == null || containsId) {
//If occu field is 100, the driver has marked the vehicle as full
- if (hfpPayload.getOccu() == 100) {
- return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.FULL);
+ try {
+ if (hfpPayload.getOccu() == 100) {
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.FULL);
+ }
+ } catch (Exception x) {
+ throw new RuntimeException("GetOccu 1 failed", x);
}
if (passengerCountPayload != null) {
- if (passengerCountPayload.getVehicleCounts().hasVehicleLoad() && passengerCountPayload.getVehicleCounts().getVehicleLoad() == 0) {
- //If vehicle load is zero, vehicle load ratio is unavailable and the vehicle is empty
- return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
+ try {
+ if (passengerCountPayload.getVehicleCounts().hasVehicleLoad() && passengerCountPayload.getVehicleCounts().getVehicleLoad() == 0) {
+ //If vehicle load is zero, vehicle load ratio is unavailable and the vehicle is empty
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
+ }
+ } catch (Exception x) {
+ throw new RuntimeException("passengerCountPayload 1 failed", x);
+ }
+
+ try {
+ return Optional.of(loadRatioToOccupancyStatus.lowerEntry(passengerCountPayload.getVehicleCounts().getVehicleLoadRatio()).getValue());
+ } catch (Exception x) {
+ throw new RuntimeException("passengerCountPayload 2 failed", x);
}
-
- return Optional.of(loadRatioToOccupancyStatus.lowerEntry(passengerCountPayload.getVehicleCounts().getVehicleLoadRatio()).getValue());
}
//If passenger count from APC message is not available, but occu contains value other than 0, use that
//Currently occu is only available for Suomenlinna ferries
- if (hfpPayload.getOccu() > 0) {
- return Optional.of(occuToOccupancyStatus.lowerEntry(hfpPayload.getOccu()).getValue());
- } else {
- return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
+ try {
+ if (hfpPayload.getOccu() > 0) {
+ return Optional.of(occuToOccupancyStatus.lowerEntry(hfpPayload.getOccu()).getValue());
+ } else {
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
+ }
+ } catch (Exception x) {
+ throw new RuntimeException("GetOccu 2 failed", x);
}
}
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java
index bea06a9..04fff63 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java
@@ -10,6 +10,7 @@
import org.apache.pulsar.client.api.Message;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Producer;
+import org.junit.Ignore;
import org.junit.Test;
import java.io.IOException;
@@ -48,6 +49,7 @@ public void testGetTopicSuffix() {
}
@Test
+ @Ignore
public void testAddedTrips() throws HfpParser.InvalidHfpTopicException, HfpParser.InvalidHfpPayloadException, IOException {
final DateTimeFormatter hfpDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
index b4487c2..c91fe78 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
@@ -4,6 +4,7 @@
import fi.hsl.common.hfp.proto.Hfp;
import fi.hsl.common.passengercount.proto.PassengerCount;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import java.util.Optional;
@@ -37,6 +38,7 @@ public void setup() {
}
@Test
+ @Ignore
public void testHfpOccupancyStatus() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
@@ -47,6 +49,7 @@ public void testHfpOccupancyStatus() {
}
@Test
+ @Ignore
public void testHfpOccupancyStatusEmpty() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
@@ -57,6 +60,7 @@ public void testHfpOccupancyStatusEmpty() {
}
@Test
+ @Ignore
public void testHfpOccupancyStatusNegative() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
@@ -67,6 +71,7 @@ public void testHfpOccupancyStatusNegative() {
}
@Test
+ @Ignore
public void testPassengerCountOccupancyStatus() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
@@ -80,6 +85,7 @@ public void testPassengerCountOccupancyStatus() {
}
@Test
+ @Ignore
public void testPassengerCountOccupancyStatusEmpty() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
@@ -93,6 +99,7 @@ public void testPassengerCountOccupancyStatusEmpty() {
}
@Test
+ @Ignore
public void testPassengerCountOccupancyStatusNegative() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
From 1235d5e1ba484caf00c3fbf061405e00f64d50a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 17:24:18 +0200
Subject: [PATCH 16/34] fix: Add more logging inside
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../application/gtfsrt/GtfsRtOccupancyStatusHelper.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 7aa7b9d..39411fa 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -42,6 +42,14 @@ public GtfsRtOccupancyStatusHelper(NavigableMap getOccupancyStatus(Hfp.Payload hfpPayload, PassengerCount.Payload passengerCountPayload) {
+ if (passengerCountEnabledVehicles == null) {
+ throw new RuntimeException("passengerCountEnabledVehicles is null");
+ }
+
+ if (hfpPayload == null) {
+ throw new RuntimeException("hfpPayload is null");
+ }
+
boolean containsId = false;
try {
From 6835f5b8ae5b2de4abb3adeb92454fc8f62a06e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 17:56:30 +0200
Subject: [PATCH 17/34] fix: Add more logging inside
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../application/gtfsrt/GtfsRtOccupancyStatusHelper.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 39411fa..4f90d6b 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -51,11 +51,13 @@ public Optional getOccupancyStatus
}
boolean containsId = false;
+ int oper = hfpPayload.getOper();
+ int veh = hfpPayload.getVeh();
try {
- containsId = passengerCountEnabledVehicles.contains(hfpPayload.getOper() + "/" + hfpPayload.getVeh());
+ containsId = passengerCountEnabledVehicles.contains(oper + "/" + veh);
} catch (Exception x) {
- throw new RuntimeException("Contains failed", x);
+ throw new RuntimeException("Contains failed (oper=" + oper + ", veh=" + veh + ")", x);
}
if (passengerCountEnabledVehicles == null || containsId) {
From 37847299b2476a93de1b6cc0b70d3c8bc0e3190e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 2 Nov 2023 18:41:16 +0200
Subject: [PATCH 18/34] fix: Add more logging inside
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 4f90d6b..68648ad 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -54,10 +54,12 @@ public Optional getOccupancyStatus
int oper = hfpPayload.getOper();
int veh = hfpPayload.getVeh();
- try {
- containsId = passengerCountEnabledVehicles.contains(oper + "/" + veh);
- } catch (Exception x) {
- throw new RuntimeException("Contains failed (oper=" + oper + ", veh=" + veh + ")", x);
+ if (passengerCountEnabledVehicles != null) {
+ try {
+ containsId = passengerCountEnabledVehicles.contains(oper + "/" + veh);
+ } catch (Exception x) {
+ throw new RuntimeException("Contains failed (oper=" + oper + ", veh=" + veh + ")", x);
+ }
}
if (passengerCountEnabledVehicles == null || containsId) {
From 7df9170d7f1cd2c34687bba11d93fcb887340451 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 3 Nov 2023 15:14:38 +0200
Subject: [PATCH 19/34] fix: Add more logging inside
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 68648ad..2af8e0e 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -42,19 +42,17 @@ public GtfsRtOccupancyStatusHelper(NavigableMap getOccupancyStatus(Hfp.Payload hfpPayload, PassengerCount.Payload passengerCountPayload) {
- if (passengerCountEnabledVehicles == null) {
- throw new RuntimeException("passengerCountEnabledVehicles is null");
- }
-
- if (hfpPayload == null) {
- throw new RuntimeException("hfpPayload is null");
- }
boolean containsId = false;
- int oper = hfpPayload.getOper();
- int veh = hfpPayload.getVeh();
if (passengerCountEnabledVehicles != null) {
+ if (hfpPayload == null) {
+ throw new RuntimeException("hfpPayload is null");
+ }
+
+ int oper = hfpPayload.getOper();
+ int veh = hfpPayload.getVeh();
+
try {
containsId = passengerCountEnabledVehicles.contains(oper + "/" + veh);
} catch (Exception x) {
From 145562a83b3d94c55e0cc8de21ff491e665d9493 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Mon, 6 Nov 2023 10:52:31 +0200
Subject: [PATCH 20/34] fix: Add more logging inside
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 28 +++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 2af8e0e..dbe65fe 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -79,11 +79,35 @@ public Optional getOccupancyStatus
} catch (Exception x) {
throw new RuntimeException("passengerCountPayload 1 failed", x);
}
+
+ double vehicleLoadRatio;
+
+ try {
+ vehicleLoadRatio = passengerCountPayload.getVehicleCounts().getVehicleLoadRatio();
+ } catch (Exception x) {
+ throw new RuntimeException("getVehicleLoadRatio() failed", x);
+ }
+
+ Map.Entry doubleOccupancyStatusEntry = null;
+
+ try {
+ doubleOccupancyStatusEntry = loadRatioToOccupancyStatus.lowerEntry(vehicleLoadRatio);
+ } catch (Exception x) {
+ throw new RuntimeException("lowerEntry(vehicleLoadRatio) failed (vehicleLoadRatio=" + vehicleLoadRatio + ")", x);
+ }
+
+ GtfsRealtime.VehiclePosition.OccupancyStatus occupancyStatus = null;
+
+ try {
+ occupancyStatus = doubleOccupancyStatusEntry.getValue();
+ } catch (Exception x) {
+ throw new RuntimeException("getValue() failed (Key=" + doubleOccupancyStatusEntry.getKey() + ", Value=" + doubleOccupancyStatusEntry.getValue() + ")", x);
+ }
try {
- return Optional.of(loadRatioToOccupancyStatus.lowerEntry(passengerCountPayload.getVehicleCounts().getVehicleLoadRatio()).getValue());
+ return Optional.of(occupancyStatus);
} catch (Exception x) {
- throw new RuntimeException("passengerCountPayload 2 failed", x);
+ throw new RuntimeException("passengerCountPayload 2 failed (occupancyStatus=" + occupancyStatus + ")", x);
}
}
From b688079e2f5898b83ddc2eb70580a7a7ec9d505d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Mon, 6 Nov 2023 14:10:28 +0200
Subject: [PATCH 21/34] fix: Add more logging to
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../application/gtfsrt/GtfsRtOccupancyStatusHelper.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index dbe65fe..cb84955 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -95,6 +95,10 @@ public Optional getOccupancyStatus
} catch (Exception x) {
throw new RuntimeException("lowerEntry(vehicleLoadRatio) failed (vehicleLoadRatio=" + vehicleLoadRatio + ")", x);
}
+
+ if (doubleOccupancyStatusEntry == null) {
+ throw new RuntimeException("doubleOccupancyStatusEntry is null. vehicleLoadRatio=" + vehicleLoadRatio);
+ }
GtfsRealtime.VehiclePosition.OccupancyStatus occupancyStatus = null;
@@ -103,6 +107,10 @@ public Optional getOccupancyStatus
} catch (Exception x) {
throw new RuntimeException("getValue() failed (Key=" + doubleOccupancyStatusEntry.getKey() + ", Value=" + doubleOccupancyStatusEntry.getValue() + ")", x);
}
+
+ if (occupancyStatus == null) {
+ throw new RuntimeException("occupancyStatus is null");
+ }
try {
return Optional.of(occupancyStatus);
From 8f901c82af45ba25fa158d28eff59bc2ccadef8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Mon, 6 Nov 2023 14:51:50 +0200
Subject: [PATCH 22/34] fix: Add more logging to
GtfsRtOccupancyStatusHelper.getOccupancyStatus
---
.../application/gtfsrt/GtfsRtOccupancyStatusHelper.java | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index cb84955..b2c0a88 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -56,6 +56,7 @@ public Optional getOccupancyStatus
try {
containsId = passengerCountEnabledVehicles.contains(oper + "/" + veh);
} catch (Exception x) {
+ log.error("Contains failed (oper=" + oper + ", veh=" + veh + ")");
throw new RuntimeException("Contains failed (oper=" + oper + ", veh=" + veh + ")", x);
}
}
@@ -67,6 +68,7 @@ public Optional getOccupancyStatus
return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.FULL);
}
} catch (Exception x) {
+ log.error("GetOccu 1 failed");
throw new RuntimeException("GetOccu 1 failed", x);
}
@@ -77,6 +79,7 @@ public Optional getOccupancyStatus
return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
}
} catch (Exception x) {
+ log.error("passengerCountPayload 1 failed");
throw new RuntimeException("passengerCountPayload 1 failed", x);
}
@@ -85,6 +88,7 @@ public Optional getOccupancyStatus
try {
vehicleLoadRatio = passengerCountPayload.getVehicleCounts().getVehicleLoadRatio();
} catch (Exception x) {
+ log.error("getVehicleLoadRatio() failed");
throw new RuntimeException("getVehicleLoadRatio() failed", x);
}
@@ -93,10 +97,12 @@ public Optional getOccupancyStatus
try {
doubleOccupancyStatusEntry = loadRatioToOccupancyStatus.lowerEntry(vehicleLoadRatio);
} catch (Exception x) {
+ log.error("lowerEntry(vehicleLoadRatio) failed (vehicleLoadRatio=" + vehicleLoadRatio + ")");
throw new RuntimeException("lowerEntry(vehicleLoadRatio) failed (vehicleLoadRatio=" + vehicleLoadRatio + ")", x);
}
if (doubleOccupancyStatusEntry == null) {
+ log.error("doubleOccupancyStatusEntry is null. vehicleLoadRatio=" + vehicleLoadRatio);
throw new RuntimeException("doubleOccupancyStatusEntry is null. vehicleLoadRatio=" + vehicleLoadRatio);
}
@@ -105,16 +111,19 @@ public Optional getOccupancyStatus
try {
occupancyStatus = doubleOccupancyStatusEntry.getValue();
} catch (Exception x) {
+ log.error("getValue() failed");
throw new RuntimeException("getValue() failed (Key=" + doubleOccupancyStatusEntry.getKey() + ", Value=" + doubleOccupancyStatusEntry.getValue() + ")", x);
}
if (occupancyStatus == null) {
+ log.error("occupancyStatus is null");
throw new RuntimeException("occupancyStatus is null");
}
try {
return Optional.of(occupancyStatus);
} catch (Exception x) {
+ log.error("passengerCountPayload 2 failed (occupancyStatus=" + occupancyStatus + ")");
throw new RuntimeException("passengerCountPayload 2 failed (occupancyStatus=" + occupancyStatus + ")", x);
}
}
From 332f79e43a1a2252136c8efe9708b151328a82ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Mon, 6 Nov 2023 15:24:59 +0200
Subject: [PATCH 23/34] fix: Remove debug logging
---
.../application/VehiclePositionHandler.java | 15 +--
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 100 +++---------------
.../VehiclePositionHandlerTest.java | 2 -
.../GtfsRtOccupancyStatusHelperTest.java | 7 --
4 files changed, 15 insertions(+), 109 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
index 5bb06bc..a7364f4 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandler.java
@@ -182,8 +182,6 @@ public void handleMessage(Message message) {
throw x;
}
- String detailMessage = "";
-
try {
StopStatusProcessor.StopStatus stopStatus = stopStatusProcessor.getStopStatus(data);
String uniqueVehicleId = getUniqueVehicleId(data.getTopic().getOperatorId(), data.getTopic().getVehicleNumber());
@@ -200,15 +198,8 @@ public void handleMessage(Message message) {
//Don't use invalid data
passengerCount = null;
}
- detailMessage = "Calling method gtfsRtOccupancyStatusHelper.getOccupancyStatus";
- Optional maybeOccupancyStatus = Optional.empty();
- try {
- maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
- } catch (Exception x) {
- detailMessage = "Method gtfsRtOccupancyStatusHelper.getOccupancyStatus failed: " + x.toString();
- throw x;
- }
- detailMessage = "Method gtfsRtOccupancyStatusHelper.getOccupancyStatus returned: " + (maybeOccupancyStatus.isPresent() ? maybeOccupancyStatus.get() : "null");
+
+ Optional maybeOccupancyStatus = gtfsRtOccupancyStatusHelper.getOccupancyStatus(data.getPayload(), passengerCount);
Optional optionalVehiclePosition = GtfsRtGenerator.generateVehiclePosition(data, tripAlreadyTaken ? GtfsRealtime.TripDescriptor.ScheduleRelationship.ADDED : GtfsRealtime.TripDescriptor.ScheduleRelationship.SCHEDULED, stopStatus, maybeOccupancyStatus);
if (optionalVehiclePosition.isPresent()) {
@@ -222,7 +213,7 @@ public void handleMessage(Message message) {
sendPulsarMessage(data.getTopic().getUniqueVehicleId(), topicSuffix, feedMessage, data.getPayload().getTsi());
}
} catch (Exception x) {
- log.error("Preparing or sending pulsar message failed. {}", detailMessage);
+ log.error("Preparing or sending pulsar message failed.", x);
throw x;
}
} else {
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index b2c0a88..910650a 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -1,6 +1,5 @@
package fi.hsl.transitdata.vehicleposition.application.gtfsrt;
-import com.dslplatform.json.runtime.MapAnalyzer;
import com.google.transit.realtime.GtfsRealtime;
import fi.hsl.common.hfp.proto.Hfp;
import fi.hsl.common.passengercount.proto.PassengerCount;
@@ -42,102 +41,27 @@ public GtfsRtOccupancyStatusHelper(NavigableMap getOccupancyStatus(Hfp.Payload hfpPayload, PassengerCount.Payload passengerCountPayload) {
-
- boolean containsId = false;
-
- if (passengerCountEnabledVehicles != null) {
- if (hfpPayload == null) {
- throw new RuntimeException("hfpPayload is null");
- }
-
- int oper = hfpPayload.getOper();
- int veh = hfpPayload.getVeh();
-
- try {
- containsId = passengerCountEnabledVehicles.contains(oper + "/" + veh);
- } catch (Exception x) {
- log.error("Contains failed (oper=" + oper + ", veh=" + veh + ")");
- throw new RuntimeException("Contains failed (oper=" + oper + ", veh=" + veh + ")", x);
- }
- }
-
- if (passengerCountEnabledVehicles == null || containsId) {
+ if (passengerCountEnabledVehicles == null || passengerCountEnabledVehicles.contains(hfpPayload.getOper() + "/" + hfpPayload.getVeh())) {
//If occu field is 100, the driver has marked the vehicle as full
- try {
- if (hfpPayload.getOccu() == 100) {
- return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.FULL);
- }
- } catch (Exception x) {
- log.error("GetOccu 1 failed");
- throw new RuntimeException("GetOccu 1 failed", x);
+ if (hfpPayload.getOccu() == 100) {
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.FULL);
}
if (passengerCountPayload != null) {
- try {
- if (passengerCountPayload.getVehicleCounts().hasVehicleLoad() && passengerCountPayload.getVehicleCounts().getVehicleLoad() == 0) {
- //If vehicle load is zero, vehicle load ratio is unavailable and the vehicle is empty
- return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
- }
- } catch (Exception x) {
- log.error("passengerCountPayload 1 failed");
- throw new RuntimeException("passengerCountPayload 1 failed", x);
- }
-
- double vehicleLoadRatio;
-
- try {
- vehicleLoadRatio = passengerCountPayload.getVehicleCounts().getVehicleLoadRatio();
- } catch (Exception x) {
- log.error("getVehicleLoadRatio() failed");
- throw new RuntimeException("getVehicleLoadRatio() failed", x);
- }
-
- Map.Entry doubleOccupancyStatusEntry = null;
-
- try {
- doubleOccupancyStatusEntry = loadRatioToOccupancyStatus.lowerEntry(vehicleLoadRatio);
- } catch (Exception x) {
- log.error("lowerEntry(vehicleLoadRatio) failed (vehicleLoadRatio=" + vehicleLoadRatio + ")");
- throw new RuntimeException("lowerEntry(vehicleLoadRatio) failed (vehicleLoadRatio=" + vehicleLoadRatio + ")", x);
- }
-
- if (doubleOccupancyStatusEntry == null) {
- log.error("doubleOccupancyStatusEntry is null. vehicleLoadRatio=" + vehicleLoadRatio);
- throw new RuntimeException("doubleOccupancyStatusEntry is null. vehicleLoadRatio=" + vehicleLoadRatio);
- }
-
- GtfsRealtime.VehiclePosition.OccupancyStatus occupancyStatus = null;
-
- try {
- occupancyStatus = doubleOccupancyStatusEntry.getValue();
- } catch (Exception x) {
- log.error("getValue() failed");
- throw new RuntimeException("getValue() failed (Key=" + doubleOccupancyStatusEntry.getKey() + ", Value=" + doubleOccupancyStatusEntry.getValue() + ")", x);
- }
-
- if (occupancyStatus == null) {
- log.error("occupancyStatus is null");
- throw new RuntimeException("occupancyStatus is null");
- }
-
- try {
- return Optional.of(occupancyStatus);
- } catch (Exception x) {
- log.error("passengerCountPayload 2 failed (occupancyStatus=" + occupancyStatus + ")");
- throw new RuntimeException("passengerCountPayload 2 failed (occupancyStatus=" + occupancyStatus + ")", x);
+ if (passengerCountPayload.getVehicleCounts().hasVehicleLoad() && passengerCountPayload.getVehicleCounts().getVehicleLoad() == 0) {
+ //If vehicle load is zero, vehicle load ratio is unavailable and the vehicle is empty
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
}
+
+ return Optional.of(loadRatioToOccupancyStatus.lowerEntry(passengerCountPayload.getVehicleCounts().getVehicleLoadRatio()).getValue());
}
//If passenger count from APC message is not available, but occu contains value other than 0, use that
//Currently occu is only available for Suomenlinna ferries
- try {
- if (hfpPayload.getOccu() > 0) {
- return Optional.of(occuToOccupancyStatus.lowerEntry(hfpPayload.getOccu()).getValue());
- } else {
- return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
- }
- } catch (Exception x) {
- throw new RuntimeException("GetOccu 2 failed", x);
+ if (hfpPayload.getOccu() > 0) {
+ return Optional.of(occuToOccupancyStatus.lowerEntry(hfpPayload.getOccu()).getValue());
+ } else {
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
}
}
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java
index 04fff63..bea06a9 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/VehiclePositionHandlerTest.java
@@ -10,7 +10,6 @@
import org.apache.pulsar.client.api.Message;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Producer;
-import org.junit.Ignore;
import org.junit.Test;
import java.io.IOException;
@@ -49,7 +48,6 @@ public void testGetTopicSuffix() {
}
@Test
- @Ignore
public void testAddedTrips() throws HfpParser.InvalidHfpTopicException, HfpParser.InvalidHfpPayloadException, IOException {
final DateTimeFormatter hfpDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
index c91fe78..b4487c2 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
@@ -4,7 +4,6 @@
import fi.hsl.common.hfp.proto.Hfp;
import fi.hsl.common.passengercount.proto.PassengerCount;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import java.util.Optional;
@@ -38,7 +37,6 @@ public void setup() {
}
@Test
- @Ignore
public void testHfpOccupancyStatus() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
@@ -49,7 +47,6 @@ public void testHfpOccupancyStatus() {
}
@Test
- @Ignore
public void testHfpOccupancyStatusEmpty() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
@@ -60,7 +57,6 @@ public void testHfpOccupancyStatusEmpty() {
}
@Test
- @Ignore
public void testHfpOccupancyStatusNegative() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
@@ -71,7 +67,6 @@ public void testHfpOccupancyStatusNegative() {
}
@Test
- @Ignore
public void testPassengerCountOccupancyStatus() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
@@ -85,7 +80,6 @@ public void testPassengerCountOccupancyStatus() {
}
@Test
- @Ignore
public void testPassengerCountOccupancyStatusEmpty() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
@@ -99,7 +93,6 @@ public void testPassengerCountOccupancyStatusEmpty() {
}
@Test
- @Ignore
public void testPassengerCountOccupancyStatusNegative() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
From 3f941878834bf5897ec0bf2178c556e4b6693b6a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Mon, 6 Nov 2023 16:49:13 +0200
Subject: [PATCH 24/34] fix: Refactor tests
---
.../GtfsRtOccupancyStatusHelperTest.java | 46 +++++++++++--------
1 file changed, 28 insertions(+), 18 deletions(-)
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
index b4487c2..1d53630 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
@@ -3,6 +3,7 @@
import com.google.transit.realtime.GtfsRealtime;
import fi.hsl.common.hfp.proto.Hfp;
import fi.hsl.common.passengercount.proto.PassengerCount;
+import org.jetbrains.annotations.NotNull;
import org.junit.Before;
import org.junit.Test;
@@ -35,12 +36,25 @@ public void setup() {
gtfsRtOccupancyStatusHelper = new GtfsRtOccupancyStatusHelper(occuToOccupancyStatus, loadRatioToOccypancyStatus);
}
+
+ @NotNull
+ private static Hfp.Payload getHfpPayload(int occu) {
+ return Hfp.Payload.newBuilder().
+ setSchemaVersion(1).setTsi(0).setTst("").setOccu(occu).build();
+ }
+
+ @NotNull
+ private static PassengerCount.Payload getPassengerCountPayload(int vehicleLoad, double vehicleLoadRatio) {
+ return PassengerCount.Payload.newBuilder().setVehicleCounts(PassengerCount.VehicleCounts.newBuilder()
+ .setCountQuality("").setVehicleLoad(vehicleLoad).setVehicleLoadRatio(vehicleLoadRatio).build()).build();
+ }
@Test
public void testHfpOccupancyStatus() {
Optional occuStatus =
- gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
- setSchemaVersion(1).setTsi(0).setTst("").setOccu(55).build(), null);
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(
+ getHfpPayload(55),
+ null);
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.STANDING_ROOM_ONLY, occuStatus.get());
@@ -49,8 +63,9 @@ public void testHfpOccupancyStatus() {
@Test
public void testHfpOccupancyStatusEmpty() {
Optional occuStatus =
- gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
- setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(), null);
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(
+ getHfpPayload(0),
+ null);
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
@@ -59,8 +74,9 @@ public void testHfpOccupancyStatusEmpty() {
@Test
public void testHfpOccupancyStatusNegative() {
Optional occuStatus =
- gtfsRtOccupancyStatusHelper.getOccupancyStatus(Hfp.Payload.newBuilder().
- setSchemaVersion(1).setTsi(0).setTst("").setOccu(-1).build(), null);
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(
+ getHfpPayload(-1),
+ null);
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
@@ -70,10 +86,8 @@ public void testHfpOccupancyStatusNegative() {
public void testPassengerCountOccupancyStatus() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
- Hfp.Payload.newBuilder().
- setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(),
- PassengerCount.Payload.newBuilder().setVehicleCounts(PassengerCount.VehicleCounts.newBuilder()
- .setCountQuality("").setVehicleLoad(10).setVehicleLoadRatio(0.55).build()).build());
+ getHfpPayload(0),
+ getPassengerCountPayload(10, 0.55));
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.STANDING_ROOM_ONLY, occuStatus.get());
@@ -83,10 +97,8 @@ public void testPassengerCountOccupancyStatus() {
public void testPassengerCountOccupancyStatusEmpty() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
- Hfp.Payload.newBuilder().
- setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(),
- PassengerCount.Payload.newBuilder().setVehicleCounts(PassengerCount.VehicleCounts.newBuilder()
- .setCountQuality("").setVehicleLoad(0).setVehicleLoadRatio(0.0).build()).build());
+ getHfpPayload(0),
+ getPassengerCountPayload(0, 0.0));
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
@@ -96,10 +108,8 @@ public void testPassengerCountOccupancyStatusEmpty() {
public void testPassengerCountOccupancyStatusNegative() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
- Hfp.Payload.newBuilder().
- setSchemaVersion(1).setTsi(0).setTst("").setOccu(0).build(),
- PassengerCount.Payload.newBuilder().setVehicleCounts(PassengerCount.VehicleCounts.newBuilder()
- .setCountQuality("").setVehicleLoad(0).setVehicleLoadRatio(-1.0).build()).build());
+ getHfpPayload(0),
+ getPassengerCountPayload(0, -1.0));
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
From 378f6feed90ca7f0f6b6fd8736c80adc61749fcd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Mon, 6 Nov 2023 17:53:29 +0200
Subject: [PATCH 25/34] fix: Occupancy status is set EMPTY when vehicle load
ratio is equal to or below zero
---
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 6 +++++-
.../gtfsrt/GtfsRtOccupancyStatusHelperTest.java | 13 ++++++++++++-
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 910650a..e57a6ce 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -52,7 +52,11 @@ public Optional getOccupancyStatus
//If vehicle load is zero, vehicle load ratio is unavailable and the vehicle is empty
return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
}
-
+
+ if (passengerCountPayload.getVehicleCounts().getVehicleLoadRatio() <= 0.0) {
+ return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
+ }
+
return Optional.of(loadRatioToOccupancyStatus.lowerEntry(passengerCountPayload.getVehicleCounts().getVehicleLoadRatio()).getValue());
}
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
index 1d53630..b21818e 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
@@ -105,7 +105,7 @@ public void testPassengerCountOccupancyStatusEmpty() {
}
@Test
- public void testPassengerCountOccupancyStatusNegative() {
+ public void testPassengerCountOccupancyStatusWithVehicleLoadZeroWithVehicleLoadRatioNegative() {
Optional occuStatus =
gtfsRtOccupancyStatusHelper.getOccupancyStatus(
getHfpPayload(0),
@@ -114,4 +114,15 @@ public void testPassengerCountOccupancyStatusNegative() {
assertTrue(occuStatus.isPresent());
assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
}
+
+ @Test
+ public void testPassengerCountOccupancyStatusWithVehicleLoadPositiveWithVehicleLoadRatioNegative() {
+ Optional occuStatus =
+ gtfsRtOccupancyStatusHelper.getOccupancyStatus(
+ getHfpPayload(0),
+ getPassengerCountPayload(1, -1.0));
+
+ assertTrue(occuStatus.isPresent());
+ assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
+ }
}
From 7483ab0ad1b84f6c0f86f6f54ff95c6e4624e3e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Tue, 7 Nov 2023 13:16:33 +0200
Subject: [PATCH 26/34] fix: '==' updated to '>=' and '<='
---
.../application/gtfsrt/GtfsRtOccupancyStatusHelper.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index e57a6ce..7eceab7 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -43,12 +43,12 @@ public GtfsRtOccupancyStatusHelper(NavigableMap getOccupancyStatus(Hfp.Payload hfpPayload, PassengerCount.Payload passengerCountPayload) {
if (passengerCountEnabledVehicles == null || passengerCountEnabledVehicles.contains(hfpPayload.getOper() + "/" + hfpPayload.getVeh())) {
//If occu field is 100, the driver has marked the vehicle as full
- if (hfpPayload.getOccu() == 100) {
+ if (hfpPayload.getOccu() >= 100) {
return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.FULL);
}
if (passengerCountPayload != null) {
- if (passengerCountPayload.getVehicleCounts().hasVehicleLoad() && passengerCountPayload.getVehicleCounts().getVehicleLoad() == 0) {
+ if (passengerCountPayload.getVehicleCounts().hasVehicleLoad() && passengerCountPayload.getVehicleCounts().getVehicleLoad() <= 0) {
//If vehicle load is zero, vehicle load ratio is unavailable and the vehicle is empty
return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
}
From f40f5b877b82fb066d8feccd542264a7e96397b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Thu, 16 Nov 2023 13:52:01 +0200
Subject: [PATCH 27/34] fix: Occu value zero is not used
---
.../gtfsrt/GtfsRtOccupancyStatusHelper.java | 17 ++++++++++++-----
.../gtfsrt/GtfsRtOccupancyStatusHelperTest.java | 6 ++----
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
index 7eceab7..646df08 100644
--- a/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
+++ b/src/main/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelper.java
@@ -59,13 +59,20 @@ public Optional getOccupancyStatus
return Optional.of(loadRatioToOccupancyStatus.lowerEntry(passengerCountPayload.getVehicleCounts().getVehicleLoadRatio()).getValue());
}
-
- //If passenger count from APC message is not available, but occu contains value other than 0, use that
- //Currently occu is only available for Suomenlinna ferries
+
+ //If passenger count from APC message is not available, but occu
+ //contains value other than 0, use that.
+ //
+ //Currently occu values larger than 0 but smaller than 100 are only
+ //available for Suomenlinna ferries.
+ //
+ //Many vehicles send '"occu":0' as part of the HFP MQTT payload,
+ //probably to mean "not full". Do not use occu == 0 even for
+ //ferries as it might be just a broken device or a default value. We
+ //would rather not publish information than publish false
+ //information in case of broken devices or implementation.
if (hfpPayload.getOccu() > 0) {
return Optional.of(occuToOccupancyStatus.lowerEntry(hfpPayload.getOccu()).getValue());
- } else {
- return Optional.of(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY);
}
}
diff --git a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
index b21818e..efe5607 100644
--- a/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
+++ b/src/test/java/fi/hsl/transitdata/vehicleposition/application/gtfsrt/GtfsRtOccupancyStatusHelperTest.java
@@ -67,8 +67,7 @@ public void testHfpOccupancyStatusEmpty() {
getHfpPayload(0),
null);
- assertTrue(occuStatus.isPresent());
- assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
+ assertTrue(occuStatus.isEmpty());
}
@Test
@@ -78,8 +77,7 @@ public void testHfpOccupancyStatusNegative() {
getHfpPayload(-1),
null);
- assertTrue(occuStatus.isPresent());
- assertEquals(GtfsRealtime.VehiclePosition.OccupancyStatus.EMPTY, occuStatus.get());
+ assertTrue(occuStatus.isEmpty());
}
@Test
From bd7d8893e35f24177e0c413bf2acd86df8dcc191 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 18 Oct 2024 11:17:42 +0300
Subject: [PATCH 28/34] Add environment variable pulsar.consumer.topics
---
src/main/resources/environment.conf | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/main/resources/environment.conf b/src/main/resources/environment.conf
index bcc3631..33d17ce 100644
--- a/src/main/resources/environment.conf
+++ b/src/main/resources/environment.conf
@@ -4,6 +4,8 @@ pulsar {
consumer {
multipleTopics=true
multipleTopics=${?PULSAR_CONSUMER_ENABLE_MULTIPLE_TOPICS}
+ topics=["hfp-data, passenger-count"]
+ topics=${?PULSAR_CONSUMER_TOPICS}
topicsPattern="persistent://public/default/(hfp-data|passenger-count)"
topicsPattern=${?PULSAR_CONSUMER_MULTIPLE_TOPICS_PATTERN}
subscription="transitdata-vehicleposition-processor-subscription"
From e52a5307e131a304c9a815ccdee3286f1cd988f8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 18 Oct 2024 11:29:30 +0300
Subject: [PATCH 29/34] Update dependency common to version 1.6.3
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index dada13a..b2091cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
UTF-8
11
11
- 1.5.4
+ 1.6.3
From 60a6fa2aef370bb3ccd01564cb959bb79c3cb50e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 18 Oct 2024 12:10:48 +0300
Subject: [PATCH 30/34] Update dependency common to version 1.6.4
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index b2091cd..0ffe22c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
UTF-8
11
11
- 1.6.3
+ 1.6.4
From 951c3b5924e0b1d4d300fcb985800d6f1cd961c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 18 Oct 2024 15:38:42 +0300
Subject: [PATCH 31/34] Update dependency common to version 1.6.5-RC
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 0ffe22c..3a3a2b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
UTF-8
11
11
- 1.6.4
+ 1.6.5-RC
From 777554f7c045151e9b46897db8b915e424f73b7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Mon, 21 Oct 2024 14:15:57 +0300
Subject: [PATCH 32/34] Update dependency common to version 1.6.6-RC
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 3a3a2b7..8fdba41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
UTF-8
11
11
- 1.6.5-RC
+ 1.6.6-RC
From 5370033f2cd91a9952c8112f02a1ffe8d2c1ef34 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 22 Nov 2024 13:54:27 +0200
Subject: [PATCH 33/34] Update transitdata-common to 2.0.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 8fdba41..e8f5962 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
UTF-8
11
11
- 1.6.6-RC
+ 2.0.1
From c96182b7b073c31647ba017efc39bf8726117fe7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20J=C3=A4rvinen?=
Date: Fri, 22 Nov 2024 13:55:24 +0200
Subject: [PATCH 34/34] Update version to 2.0.0
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index e8f5962..6394185 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
fi.hsl.transitdata
transitdata-vehicleposition-processor
- 1.1.1
+ 2.0.0
UTF-8