diff --git a/configuration/httpd/conf.d/000-macros.conf b/configuration/httpd/conf.d/000-macros.conf old mode 100755 new mode 100644 index 2da32d47310..21e5f1a41b1 --- a/configuration/httpd/conf.d/000-macros.conf +++ b/configuration/httpd/conf.d/000-macros.conf @@ -36,7 +36,13 @@ #Define ARCHIVE_IP 172.31.21.139 #Define ARCHIVE_IP 172.31.23.47 #Define ARCHIVE_IP 172.31.20.62 -Define ARCHIVE_IP 172.31.20.131 +#Define ARCHIVE_IP 172.31.20.131 +#Define ARCHIVE_IP 172.31.47.208 +#Define ARCHIVE_IP 172.31.41.14 +#Define ARCHIVE_IP 172.31.34.59 +#Define ARCHIVE_IP 172.31.46.41 +#Define ARCHIVE_IP 172.31.44.232 +Define ARCHIVE_IP 172.31.46.28 Use Rewrite ${ARCHIVE_IP} 8888 diff --git a/configuration/httpd/conf.d/001-events.conf b/configuration/httpd/conf.d/001-events.conf index d81bf2c2433..6bbac118238 100644 --- a/configuration/httpd/conf.d/001-events.conf +++ b/configuration/httpd/conf.d/001-events.conf @@ -17,12 +17,16 @@ ## SERVER STATUS Use Status ec2-54-229-94-254.eu-west-1.compute.amazonaws.com internal-server-status -Use Status 172.31.16.242 internal-server-status +Use Status 172.31.42.171 internal-server-status Use Status 127.0.0.1 internal-server-status # Uncomment the following and update the internal IP to what your Archive server candidate is -#Use Plain archive-failover.sapsailing.com 172.31.23.135 8888 -Use Plain archive-candidate.sapsailing.com 172.31.20.131 8888 +Use Plain archive-failover.sapsailing.com 172.31.46.41 8888 +Use Plain archive-candidate.sapsailing.com 172.31.46.41 8888 + +Use Plain paris2024-candidate.sapsailing.com 172.31.15.188 8888 + +Use Plain kw2023-master.sapsailing.com 172.31.43.163 8896 Use Plain my-master.sapsailing.com 172.31.24.34 8888 @@ -47,7 +51,7 @@ Use Event-ARCHIVE birthday10.sapsailing.com c45be9c1-7324-4524-8843-4746ab5e7c2a Use Series-ARCHIVE austrianleague2021.sapsailing.com e7d48cfd-591e-45c3-afeb-7f32f0a7bbb5 # SCL 2021 -Use Event-ARCHIVE scl2021.sapasiling.com f98b7dc9-1d54-4c14-a07d-85c4cb1533ba +Use Event-ARCHIVE scl2021.sapsailing.com f98b7dc9-1d54-4c14-a07d-85c4cb1533ba # French League 2021 Use Series-ARCHIVE frenchleague2021.sapsailing.com 5164ba5f-6f3b-4190-9a88-e3de1995dc53 diff --git a/configuration/httpd/conf.d/SRV.sapsailing.com.conf b/configuration/httpd/conf.d/SRV.sapsailing.com.conf new file mode 100644 index 00000000000..348348e00fa --- /dev/null +++ b/configuration/httpd/conf.d/SRV.sapsailing.com.conf @@ -0,0 +1 @@ +Use Home-ARCHIVE SRV.sapsailing.com diff --git a/configuration/httpd/conf.d/allianzregatta2023.sapsailing.com.conf b/configuration/httpd/conf.d/allianzregatta2023.sapsailing.com.conf new file mode 100644 index 00000000000..c1ad51ad84f --- /dev/null +++ b/configuration/httpd/conf.d/allianzregatta2023.sapsailing.com.conf @@ -0,0 +1 @@ +Use Event-ARCHIVE allianzregatta2023.sapsailing.com cd2b4bf8-cca4-4653-9ef0-763c7891dccf diff --git a/configuration/httpd/conf.d/helgacup2023.sapsailing.com.conf b/configuration/httpd/conf.d/helgacup2023.sapsailing.com.conf new file mode 100644 index 00000000000..7da14a0c45a --- /dev/null +++ b/configuration/httpd/conf.d/helgacup2023.sapsailing.com.conf @@ -0,0 +1 @@ +Use Event-ARCHIVE helgacup2023.sapsailing.com c8c6c1a8-048f-49a0-b5b9-c713d80e96cb diff --git a/configuration/httpd/conf.d/kw2023.sapsailing.com.conf b/configuration/httpd/conf.d/kw2023.sapsailing.com.conf new file mode 100644 index 00000000000..2b6f40e86e5 --- /dev/null +++ b/configuration/httpd/conf.d/kw2023.sapsailing.com.conf @@ -0,0 +1 @@ +Use Event-ARCHIVE kw2023.sapsailing.com ce287433-1c18-4215-92ae-32c741229f07 diff --git a/configuration/httpd/conf.d/paris2024.sapsailing.com.conf b/configuration/httpd/conf.d/paris2024.sapsailing.com.conf new file mode 100644 index 00000000000..77863dde8c3 --- /dev/null +++ b/configuration/httpd/conf.d/paris2024.sapsailing.com.conf @@ -0,0 +1 @@ +Use Event-ARCHIVE paris2024.sapsailing.com b8220cee-9ec7-4640-b8d8-f40e079456d5 diff --git a/configuration/httpd/conf.d/pohodovaregata-23.sapsailing.com.conf b/configuration/httpd/conf.d/pohodovaregata-23.sapsailing.com.conf new file mode 100644 index 00000000000..b306384f521 --- /dev/null +++ b/configuration/httpd/conf.d/pohodovaregata-23.sapsailing.com.conf @@ -0,0 +1 @@ +Use Event-ARCHIVE pohodovaregata-23.sapsailing.com fce723aa-f356-4c2f-8f2d-c34588ef91c4 diff --git a/configuration/httpd/conf.d/rheinwoche2019.sapsailing.com.conf b/configuration/httpd/conf.d/rheinwoche2019.sapsailing.com.conf new file mode 100644 index 00000000000..7a72205d553 --- /dev/null +++ b/configuration/httpd/conf.d/rheinwoche2019.sapsailing.com.conf @@ -0,0 +1 @@ +Use Home-ARCHIVE rheinwoche2019.sapsailing.com diff --git a/configuration/httpd/conf.d/sof2023.sapsailing.com.conf b/configuration/httpd/conf.d/sof2023.sapsailing.com.conf new file mode 100644 index 00000000000..89fb0396077 --- /dev/null +++ b/configuration/httpd/conf.d/sof2023.sapsailing.com.conf @@ -0,0 +1 @@ +Use Event-ARCHIVE sof2023.sapsailing.com 67cea8b6-6f56-4d73-949e-383aeffa12f7 diff --git a/configuration/httpd/conf.d/tor2023.sapsailing.com.conf b/configuration/httpd/conf.d/tor2023.sapsailing.com.conf new file mode 100644 index 00000000000..2a39701decc --- /dev/null +++ b/configuration/httpd/conf.d/tor2023.sapsailing.com.conf @@ -0,0 +1 @@ +Use Event-ARCHIVE tor2023.sapsailing.com f8d71906-72c5-468a-a001-1aa9c756af40 diff --git a/docker/Dockerfile_windestimation b/docker/Dockerfile_windestimation index d4c1c73737f..18334f75f93 100755 --- a/docker/Dockerfile_windestimation +++ b/docker/Dockerfile_windestimation @@ -13,4 +13,4 @@ RUN wget -O /tmp/rds.pem https://s3.amazonaws.com/rds-downloads/rds-combined-ca- && /opt/sapjvm_8/bin/keytool -importcert -alias AWSRDS -file /tmp/rds.pem -keystore /opt/sapjvm_8/jre/lib/security/cacerts -noprompt -storepass changeit \ && rm /tmp/rds.pem RUN wget -O /home/sailing/WindEstimationModelsTraining.jar https://static.sapsailing.com/WindEstimationModelsTraining.jar -CMD exec java "${MEMORY}" -Dmongo.uri="${MONGODB_URI}" -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump/ -Xlog:gc*=info,gc+region*=info,gc+ergo*=info,gc+humongous*=info,gc+liveness=trace:file=logs/gc.log:time,level,tags:filecount=10,filesize=100000000 -jar WindEstimationModelsTraining.jar "${BEARER_TOKEN}" ${TRAINING_DATA_PERCENT} +CMD exec java "${MEMORY}" -Dmongo.uri="${MONGODB_URI}" -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump/ -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -jar WindEstimationModelsTraining.jar "${BEARER_TOKEN}" ${TRAINING_DATA_PERCENT} diff --git a/java/com.sap.sailing.datamining/.settings/org.eclipse.core.resources.prefs b/java/com.sap.sailing.datamining/.settings/org.eclipse.core.resources.prefs index dcc9726ad0d..ff1c3787b9e 100644 --- a/java/com.sap.sailing.datamining/.settings/org.eclipse.core.resources.prefs +++ b/java/com.sap.sailing.datamining/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 +encoding//resources/stringmessages/Sailing_StringMessages.properties=UTF-8 encoding//resources/stringmessages/Sailing_StringMessages_de.properties=UTF-8 encoding/=UTF-8 diff --git a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties index c851ed14be4..3f3710dab4f 100644 --- a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties +++ b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties @@ -133,6 +133,7 @@ RelativeDistanceToAdvantageousEndOfLineAtStartOfRace=Relative Distance to Advant windFrom=True Wind Direction (TWD) windSpeedKnots=True Wind Speed (kts) speedInKnots=Speed (kts) +speedInFullKnots=Speed in Full Knots (kts) bearing=Direction (°T) WindTrack=Wind Track timeSpentFoiling=Time spent foiling diff --git a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties index e38a60b334a..2b3d2049c45 100755 --- a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties +++ b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties @@ -131,6 +131,7 @@ WindSourceName=Name der Windmessreihe windFrom=Wind aus Richtung (TWD) windSpeedKnots=Wahre Windgeschwindigkeit (kn) speedInKnots=Fahrt (kn) +speedInFullKnots=Fahrt in ganzen Knoten (kn) bearing=Richtung (°) WindTrack=Windmessreihe timeSpentFoiling=Zeit auf Foils diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoringScheme.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoringScheme.java index c3aa3ba5733..b9ed933e9fd 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoringScheme.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoringScheme.java @@ -90,7 +90,6 @@ public interface ScoringScheme extends Serializable { * may be required in case a "penalty" such as a redress needs to inspect the scores of other race * columns as well; implementations need to take great care not to cause endless recursions by * naively asking the leaderboard for scores which would recurse into this method - * @param uncorrectedScoreProvider TODO */ Double getPenaltyScore(RaceColumn raceColumn, Competitor competitor, MaxPointsReason maxPointsReason, Integer numberOfCompetitorsInRace, NumberOfCompetitorsInLeaderboardFetcher numberOfCompetitorsInLeaderboardFetcher, diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LowPoint.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LowPoint.java index e6064873e49..ed08f5e6f78 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LowPoint.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LowPoint.java @@ -66,7 +66,7 @@ public class LowPoint extends AbstractScoringSchemeImpl { NumberOfCompetitorsInLeaderboardFetcher numberOfCompetitorsInLeaderboardFetcher, TimePoint timePoint, Leaderboard leaderboard, Supplier uncorrectedScoreProvider) { Double result; - if (maxPointsReason == MaxPointsReason.STP) { + if (maxPointsReason == MaxPointsReason.STP) { // TODO bug5873: this is where other incremental IRMs need to be considered, too, with configurable increments final Double uncorrectedScore = uncorrectedScoreProvider.get(); result = uncorrectedScore == null ? null : uncorrectedScore + 1.0; } else if (numberOfCompetitorsInRace == null || raceColumn.hasSplitFleetContiguousScoring()) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java index d7bf12019e7..a8e27cf395d 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java @@ -14,6 +14,7 @@ import java.util.logging.Logger; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.base.RaceColumnInSeries; import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.NumberOfCompetitorsInLeaderboardFetcher; @@ -470,7 +471,16 @@ public class ScoreCorrectionImpl implements SettableScoreCorrection { Integer result; final TrackedRace trackedRace = raceColumn.getTrackedRace(competitor); if (trackedRace == null) { - result = numberOfCompetitorsInLeaderboardFetcher.getNumberOfCompetitorsInLeaderboard(); + final int estimatedSizeOfLargestFleet; + final int numberOfCompetitorsInLeaderboard = numberOfCompetitorsInLeaderboardFetcher.getNumberOfCompetitorsInLeaderboard(); + if (raceColumn instanceof RaceColumnInSeries) { + final int numberOfFleets = Util.size(((RaceColumnInSeries) raceColumn).getSeries().getFleets()); + estimatedSizeOfLargestFleet = numberOfCompetitorsInLeaderboard / numberOfFleets + + (int) Math.signum(numberOfCompetitorsInLeaderboard % numberOfFleets); // round up + } else { + estimatedSizeOfLargestFleet = numberOfCompetitorsInLeaderboard; + } + result = estimatedSizeOfLargestFleet; } else { result = Util.size(trackedRace.getRace().getCompetitors()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html index c75f22fac46..c7619f808c8 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html @@ -15,6 +15,8 @@
  • Bug fix: tracked races connected to more than one leaderboard column at the same time will now send their competitor and race status updates to all those column's race logs. This in particular fixes the special iQFOil set-up with their marathon races.
  • +
  • Added speed in full knots (rounded) as a dimension to the GPS fixes in Data Mining. + This can be used, e.g., to filter for outliers such as capsized or towed boats.
  • June 2023
      diff --git a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/importer/ManeuverAndWindImporter.java b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/importer/ManeuverAndWindImporter.java index 4367fe12c8b..a17611274c1 100644 --- a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/importer/ManeuverAndWindImporter.java +++ b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/importer/ManeuverAndWindImporter.java @@ -175,8 +175,8 @@ public class ManeuverAndWindImporter { + " competitor tracks\n\t" + importStatistics.maneuversCount + " complete maneuver curves with estimation data\n\t" + importStatistics.racesWithHighQualityWindData + " races with high quality wind data\n\t" + importStatistics.ignoredRegattas - + " ignored regatta due to error\n\t" + importStatistics.ingoredRaces - + " ingored races due to error\n--------------------------------------------\nTime passed: " + + " ignored regatta due to error\n\t" + importStatistics.ignoredRaces + + " ignored races due to error\n--------------------------------------------\nTime passed: " + duration.toHours() + "h " + (duration.toMinutes() - duration.toHours() * 60) + "m " + (duration.get(ChronoUnit.SECONDS) % 60) + "s"); } @@ -216,7 +216,7 @@ public class ManeuverAndWindImporter { importRace(regattaName, trackedRaceName, importStatistics, bearerToken); } catch (Exception e) { synchronized (importStatistics) { - importStatistics.ingoredRaces += 1; + importStatistics.ignoredRaces += 1; } String extraLog = ""; if (e instanceof HttpClientException) { @@ -415,7 +415,7 @@ public class ManeuverAndWindImporter { private int competitorTracksCount = 0; private int maneuversCount = 0; private int ignoredRegattas = 0; - private int ingoredRaces = 0; + private int ignoredRaces = 0; private int racesWithHighQualityWindData = 0; } diff --git a/java/com.sap.sse.common/src/com/sap/sse/common/Speed.java b/java/com.sap.sse.common/src/com/sap/sse/common/Speed.java index 4cb7b128263..ab966fd1169 100755 --- a/java/com.sap.sse.common/src/com/sap/sse/common/Speed.java +++ b/java/com.sap.sse.common/src/com/sap/sse/common/Speed.java @@ -2,6 +2,7 @@ package com.sap.sse.common; import java.io.Serializable; +import com.sap.sse.datamining.annotations.Dimension; import com.sap.sse.datamining.annotations.Statistic; /** @@ -77,6 +78,11 @@ public interface Speed extends Comparable, Serializable { @Statistic(messageKey="speedInKnots", resultDecimals=2) double getKnots(); + + @Dimension(messageKey="speedInFullKnots") + default int getKnotsFloored() { + return (int) Math.round(getKnots()); + } double getMetersPerSecond();