mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-09 13:50:57 +00:00
Merge branch 'plotting-test' into mark-rounding-inference
This commit is contained in:
commit
bec8df2648
2 files changed
+66
-17
No files matched your search
+64
-15
@@ -99,7 +99,9 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
* reported by the threads. The function that calculates the total progress is:
|
||||
*
|
||||
* <pre>
|
||||
* total_progress = sum(progress(thread_i)) / sum(weight(thread_i))</pre>
|
||||
* total_progress = sum(progress(thread_i)) / sum(weight(thread_i))
|
||||
* </pre>
|
||||
*
|
||||
* The weight is also the maximum individual progress that a thread can send: if a thread has a weight = 10 its
|
||||
* progress only can be between 0 and 10, e.g,:
|
||||
* <p>
|
||||
@@ -113,35 +115,81 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
* The total progress that you receive is:
|
||||
*
|
||||
* <pre>
|
||||
* total_progress = 0 + 0 / 10 + 1 = 0 / 11 = 0</pre>
|
||||
* total_progress = 0 + 0 / 10 + 1 = 0 / 11 = 0
|
||||
* </pre>
|
||||
*
|
||||
* Then, the "Course thread" retrieves the course from the server and it sends a new progress message to the system:
|
||||
*
|
||||
* <pre>
|
||||
* Course thread -> weight = 1, progress = 1 ---> total_progress = 0 + 1 / 10 + 1 = 1 / 11 = 0.090909091</pre>
|
||||
* Course thread -> weight = 1, progress = 1 ---> total_progress = 0 + 1 / 10 + 1 = 1 / 11 = 0.090909091
|
||||
* </pre>
|
||||
*
|
||||
* Then, the "Competitor positions thread" goes to the server and it checks that there is a high number of positions
|
||||
* for the competitors. It decides to change its weight:
|
||||
*
|
||||
* <pre>
|
||||
* Competitor positions thread -> weight = 50, progress = 0 --> total_progress = 0 + 1 / 50 + 1 = 1 / 51 = 0.019607843</pre>
|
||||
* Competitor positions thread -> weight = 50, progress = 0 --> total_progress = 0 + 1 / 50 + 1 = 1 / 51 = 0.019607843
|
||||
* </pre>
|
||||
*
|
||||
* Then, the "Competitor positions thread" starts to retrieve positions and it sends several messages updating the
|
||||
* progress:
|
||||
* <ul>
|
||||
* <li><pre>Competitor positions thread -> weight = 50, progress = 1 --> total_progress = 1 + 1 / 50 + 1 = 2 / 51 = 0.039215686</pre></li>
|
||||
* <li><pre>Competitor positions thread -> weight = 50, progress = 2 --> total_progress = 2 + 1 / 50 + 1 = 3 / 51 = 0.058823529</pre></li>
|
||||
* <li><pre>Competitor positions thread -> weight = 50, progress = 3 --> total_progress = 3 + 1 / 50 + 1 = 4 / 51 = 0.078431373</pre></li>
|
||||
* <li><pre>...</pre></li>
|
||||
* <li><pre>Competitor positions thread -> weight = 50, progress = 50 --> total_progress = 50 + 1 / 50 + 1 = 51 / 51 = 1.0</pre></li>
|
||||
* <li>
|
||||
*
|
||||
* <pre>
|
||||
* Competitor positions thread -> weight = 50, progress = 1 --> total_progress = 1 + 1 / 50 + 1 = 2 / 51 = 0.039215686
|
||||
* </pre>
|
||||
*
|
||||
* </li>
|
||||
* <li>
|
||||
*
|
||||
* <pre>
|
||||
* Competitor positions thread -> weight = 50, progress = 2 --> total_progress = 2 + 1 / 50 + 1 = 3 / 51 = 0.058823529
|
||||
* </pre>
|
||||
*
|
||||
* </li>
|
||||
* <li>
|
||||
*
|
||||
* <pre>
|
||||
* Competitor positions thread -> weight = 50, progress = 3 --> total_progress = 3 + 1 / 50 + 1 = 4 / 51 = 0.078431373
|
||||
* </pre>
|
||||
*
|
||||
* </li>
|
||||
* <li>
|
||||
*
|
||||
* <pre>
|
||||
* ...
|
||||
* </pre>
|
||||
*
|
||||
* </li>
|
||||
* <li>
|
||||
*
|
||||
* <pre>
|
||||
* Competitor positions thread -> weight = 50, progress = 50 --> total_progress = 50 + 1 / 50 + 1 = 51 / 51 = 1.0
|
||||
* </pre>
|
||||
*
|
||||
* </li>
|
||||
* </ul>
|
||||
*
|
||||
* This example shows that is possible to receive more that 3 values of the progress lower than one already
|
||||
* received. It happens because the weight of the threads changes."</i><p>
|
||||
* received. It happens because the weight of the threads changes."</i>
|
||||
* <p>
|
||||
*
|
||||
* We assume that there won't be more than six threads in TTCM receiving data for the same race.
|
||||
* We assume that there won't be more than eight threads in TTCM receiving data for the same race, based on Jorge's
|
||||
* statement from 2014-02-06: "One thread per subscription where the subscriptions are:
|
||||
* <ul>
|
||||
* <li>Competitor positions</li>
|
||||
* <li>Mark positions</li>
|
||||
* <li>Mark passings</li>
|
||||
* <li>Route</li>
|
||||
* <li>Start/Stop times for race</li>
|
||||
* <li>Start/Stop times for event</li>
|
||||
* <li>Messages for race</li>
|
||||
* <li>Messages for event</li>
|
||||
* </ul>
|
||||
* Potentially, you can create 8 threads per TTCM (connecting only with one single race)."
|
||||
*/
|
||||
static final Integer MAX_STORED_PACKET_HOP_ALLOWANCE = 6;
|
||||
static final Integer MAX_STORED_PACKET_HOP_ALLOWANCE = 8;
|
||||
|
||||
private final Event tractracEvent;
|
||||
private final com.sap.sailing.domain.base.Regatta regatta;
|
||||
@@ -269,7 +317,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
|
||||
// check if there is a directory configured where stored data files can be cached
|
||||
// only cache files for races in REPLAY state
|
||||
if (raceStatus.equals(TracTracConnectionConstants.REPLAY_STATUS)) {
|
||||
if (raceStatus != null && raceStatus.equals(TracTracConnectionConstants.REPLAY_STATUS)) {
|
||||
storedURI = checkForCachedStoredData(storedURI);
|
||||
}
|
||||
|
||||
@@ -315,8 +363,9 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
}
|
||||
|
||||
private URI checkForCachedStoredData(URI storedURI){
|
||||
if (System.getProperty("tractrac.mtb.cache.dir") != null) {
|
||||
final String directory = System.getProperty("tractrac.mtb.cache.dir");
|
||||
final String CACHE_DIR_PROPERTY = "tractrac.mtb.cache.dir";
|
||||
if (System.getProperty(CACHE_DIR_PROPERTY) != null) {
|
||||
final String directory = System.getProperty(CACHE_DIR_PROPERTY);
|
||||
if (new File(directory).exists()) {
|
||||
final String[] pathFragments = storedURI.getPath().split("\\/");
|
||||
final String mtbFileName = pathFragments[pathFragments.length-1];
|
||||
|
||||
@@ -22,10 +22,10 @@
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
|
||||
<stringAttribute key="pde.version" value="3.3"/>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<stringAttribute key="target_bundles" value="com.rabbitmq.client@default:default,com.sun.jersey@default:default,com.sun.mail.javax.mail@default:default,javax.servlet*3.0.0.v201112011016@default:default,javax.validation@default:default,javax.ws.rs@default:default,jcl.over.slf4j@default:default,org.apache.activemq.activeio-core@default:default,org.apache.activemq.activemq-core@default:default,org.apache.activemq.kahadb@default:default,org.apache.commons.codec@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.logging@default:default,org.apache.geronimo.specs.geronimo-annotation_1.0_spec@default:default,org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec@default:default,org.apache.geronimo.specs.geronimo-jms_1.1_spec@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.eclipse.equinox.console@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jmx@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.jdom@default:default,org.objectweb.asm@default:default,rome@default:default,routeconverter@default:default,slf4j.api@default:default,slf4j.jdk14@default:false"/>
|
||||
<stringAttribute key="target_bundles" value="com.rabbitmq.client@default:default,com.sun.jersey@default:default,com.sun.mail.javax.mail@default:default,javax.servlet*3.0.0.v201112011016@default:default,javax.validation@default:default,javax.ws.rs@default:default,jcl.over.slf4j@default:default,org.apache.activemq.activeio-core@default:default,org.apache.activemq.activemq-core@default:default,org.apache.activemq.kahadb@default:default,org.apache.commons.codec@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.geronimo.specs.geronimo-annotation_1.0_spec@default:default,org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec@default:default,org.apache.geronimo.specs.geronimo-jms_1.1_spec@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.eclipse.equinox.console@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jmx@default:default,org.eclipse.jetty.osgi.boot@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.jdom@default:default,org.objectweb.asm@default:default,rome@default:default,routeconverter@default:default,slf4j.api@default:default,slf4j.jdk14@default:false"/>
|
||||
<booleanAttribute key="tracing" value="false"/>
|
||||
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||
<booleanAttribute key="useDefaultConfigArea" value="false"/>
|
||||
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<stringAttribute key="yk-options" value=" additional-options2=onexit\=snapshot "/>
|
||||
</launchConfiguration>
|
||||
Reference in new issue
Block a user