From 51c247ce7fab9e99a5b72ac0d3e8a0b9b03abc33 Mon Sep 17 00:00:00 2001 From: aoles Date: Fri, 12 Jan 2024 00:59:51 +0100 Subject: [PATCH] feat: log stats on traffic data matching --- CHANGELOG.md | 1 + .../storages/TrafficGraphStorage.java | 7 ++++ .../HereTrafficGraphStorageBuilder.java | 33 ++++++++++++++----- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 234145f101..644b1e1940 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ RELEASING: - spring-boot-starter-parent to v3.1.6 ([#1630](https://github.com/GIScience/openrouteservice/issues/1630)) - silence traffic map-matching internal errors ([#1635](https://github.com/GIScience/openrouteservice/pulls/1635)) - fix IN1-JAVA-ORGMOZILLA-1314295 ([#1627](https://github.com/GIScience/openrouteservice/issues/1627)) +- log summary stats of traffic mapmatching and use progress bar only in debug mode ([#1647](https://github.com/GIScience/openrouteservice/pull/1647)) ### Deprecated - JSON configuration and related classes ([#1506](https://github.com/GIScience/openrouteservice/pull/1506)) diff --git a/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/TrafficGraphStorage.java b/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/TrafficGraphStorage.java index c2cc0add9e..7940e7495b 100644 --- a/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/TrafficGraphStorage.java +++ b/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/TrafficGraphStorage.java @@ -584,6 +584,13 @@ public void setMaxTrafficSpeeds() { } } + /** + * @return number of processed traffic patterns + */ + public int getPatternCount() { + return patternCount; + } + public void setZoneId(ZoneId zoneId) { this.zoneId = zoneId; } diff --git a/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/builders/HereTrafficGraphStorageBuilder.java b/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/builders/HereTrafficGraphStorageBuilder.java index c9089efef3..7cb3da01c6 100644 --- a/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/builders/HereTrafficGraphStorageBuilder.java +++ b/ors-engine/src/main/java/org/heigit/ors/routing/graphhopper/extensions/storages/builders/HereTrafficGraphStorageBuilder.java @@ -24,9 +24,7 @@ import com.graphhopper.storage.GraphExtension; import com.graphhopper.util.EdgeIteratorState; import com.graphhopper.util.FetchMode; -import me.tongfei.progressbar.DelegatingProgressBarConsumer; import me.tongfei.progressbar.ProgressBar; -import me.tongfei.progressbar.ProgressBarBuilder; import org.apache.log4j.Logger; import org.geotools.data.DataUtilities; import org.geotools.feature.DefaultFeatureCollection; @@ -87,6 +85,7 @@ public class HereTrafficGraphStorageBuilder extends AbstractGraphStorageBuilder private TrafficEdgeFilter trafficEdgeFilter; private final IntHashSet matchedHereLinks = new IntHashSet(); private final ArrayList matchedOSMLinks = new ArrayList<>(); + private boolean showProgressBar; /** * Initialize the Here Traffic graph extension

@@ -139,6 +138,7 @@ public GraphExtension init(GraphHopper graphhopper) throws UnsupportedOperationE gh = graphhopper; mMapMatcher = new GhMapMatcher(graphhopper, parameters.get("gh_profile")); + showProgressBar = LOGGER.isDebugEnabled(); return storage; } @@ -257,6 +257,10 @@ public void addHereSegmentForLogging(Integer linkID) { matchedHereLinks.add(linkID); } + private int getMatchedHereLinksCount() { + return matchedHereLinks.size(); + } + public void addOSMGeometryForLogging(String osmGeometry) { matchedOSMLinks.add(osmGeometry); } @@ -309,25 +313,36 @@ public void postProcess(ORSGraphHopper graphHopper) throws SchemaException { } private void processTrafficPatterns(IntObjectHashMap patterns) { - try (ProgressBar pb = new ProgressBarBuilder().setTaskName("Processing traffic patterns").setInitialMax(patterns.values().size()).setConsumer(new DelegatingProgressBarConsumer(LOGGER::debug)).build()) { + try { + ProgressBar pb = null; + if (showProgressBar) + pb = new ProgressBar("Processing traffic patterns", patterns.values().size()); for (ObjectCursor pattern : patterns.values()) { storage.setTrafficPatterns(pattern.value.getPatternId(), pattern.value.getValues()); - pb.step(); + if (showProgressBar) + pb.step(); } + LOGGER.info("Processed " + storage.getPatternCount() + " traffic patterns"); } catch (Exception e) { LOGGER.error("Error processing here traffic patterns with error: " + e); } } private void processLinks(ORSGraphHopper graphHopper, IntObjectHashMap links) { - try (ProgressBar pb = new ProgressBarBuilder().setTaskName("Matching Here Links").setInitialMax(links.values().size()).setConsumer(new DelegatingProgressBarConsumer(LOGGER::debug)).build()) { + int trafficLinksCount = links.values().size(); + try { + ProgressBar pb = null; + if (showProgressBar) + pb = new ProgressBar("Matching Here Links", trafficLinksCount); int counter = 0; + int step = trafficLinksCount / 100 + ((trafficLinksCount % 100 == 0) ? 0 : 1); for (ObjectCursor trafficLink : links.values()) { + counter++; processLink(graphHopper, trafficLink.value); - counter += 1; - if (counter % 2000 == 0) - pb.stepBy(2000); + if (showProgressBar && counter % step == 0) + pb.stepBy(step); } + LOGGER.info("Matched " + 100 * getMatchedHereLinksCount()/trafficLinksCount + "% Here links (" + getMatchedHereLinksCount() + " out of " + trafficLinksCount + ")"); } catch (Exception e) { LOGGER.error("Error processing here traffic links with error: " + e); } @@ -376,10 +391,10 @@ private void processSegment(GraphHopper gh, Map t } final int priority = (int) Math.round(edge.getDistance() / gh.getGraphHopperStorage().getEdgeIteratorStateForKey(originalEdgeKey).getDistance() * 255); trafficPatternIds.forEach((weekDay, patternId) -> storage.setEdgeIdTrafficPatternLookup(originalEdgeKey, patternId, weekDay, priority)); + addHereSegmentForLogging(trafficLinkId); if (outputLog) { LineString lineString = edge.fetchWayGeometry(FetchMode.ALL).toLineString(false); addOSMGeometryForLogging(lineString.toString()); - addHereSegmentForLogging(trafficLinkId); } } }