16
16
import java .sql .Timestamp ;
17
17
import java .time .LocalTime ;
18
18
import java .time .OffsetDateTime ;
19
+ import java .util .HashSet ;
19
20
import java .util .Optional ;
21
+ import java .util .Set ;
20
22
import java .util .regex .Pattern ;
21
23
import java .io .ByteArrayOutputStream ;
22
24
23
25
public class HfpParser {
24
26
private static final Logger log = LoggerFactory .getLogger (HfpParser .class );
25
27
26
28
static final Pattern topicVersionRegex = Pattern .compile ("(^v\\ d+|dev)" );
29
+
30
+ private static Set <String > vehiclesWithEmptyTransportMode = new HashSet <>();
27
31
28
32
// Let's use dsl-json (https://github.com/ngs-doo/dsl-json) for performance.
29
33
// Based on this benchmark: https://github.com/fabienrenaud/java-json-benchmark
@@ -32,6 +36,15 @@ public class HfpParser {
32
36
33
37
//Note! Apparently not thread safe, for per thread reuse use ThreadLocal pattern or create separate instances
34
38
final DslJson <Object > dslJson = new DslJson <>(Settings .withRuntime ().allowArrayFormat (true ).includeServiceLoader ());
39
+
40
+ private static void foundVehicleWithEmptyTransportMode (String uniqueVehicleId ) {
41
+ vehiclesWithEmptyTransportMode .add (uniqueVehicleId );
42
+
43
+ if (vehiclesWithEmptyTransportMode .size () > 100 ) {
44
+ log .warn ("Vehicles with empty transport mode: " + vehiclesWithEmptyTransportMode );
45
+ vehiclesWithEmptyTransportMode .clear ();
46
+ }
47
+ }
35
48
36
49
@ NotNull
37
50
public static HfpParser newInstance () {
@@ -223,11 +236,12 @@ public static Hfp.Topic parseTopic(@NotNull String topic, long receivedAtMs) thr
223
236
}
224
237
225
238
final String strTransportMode = parts [index ++];
239
+ boolean transportModeIsEmpty = false ;
226
240
if (strTransportMode != null && !strTransportMode .isEmpty ()) {
227
241
final Hfp .Topic .TransportMode transportMode = safeValueOf (Hfp .Topic .TransportMode .class , strTransportMode ).orElseThrow (() -> new InvalidHfpTopicException ("Unknown transport mode: " + topic ));
228
242
builder .setTransportMode (transportMode );
229
243
} else {
230
- log . info ( "Transport mode is empty for topic: " + topic ) ;
244
+ transportModeIsEmpty = true ;
231
245
}
232
246
233
247
final String operatorIdStr = parts [index ++];
@@ -245,6 +259,9 @@ public static Hfp.Topic parseTopic(@NotNull String topic, long receivedAtMs) thr
245
259
}
246
260
247
261
builder .setUniqueVehicleId (createUniqueVehicleId (builder .getOperatorId (), builder .getVehicleNumber ()));
262
+ if (transportModeIsEmpty ) {
263
+ foundVehicleWithEmptyTransportMode (builder .getUniqueVehicleId ());
264
+ }
248
265
if (index + 6 <= parts .length ) {
249
266
HfpValidator .validateString (parts [index ++]).ifPresent (builder ::setRouteId );
250
267
safeParseInt (parts [index ++]).ifPresent (builder ::setDirectionId );
0 commit comments