mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 09:26:44 +00:00
removed raw message store for SwissTiming; added StressTest button for leaderboard logic
This commit is contained in:
-2
@@ -38,8 +38,6 @@ public interface SwissTimingAdapterPersistence extends RaceSpecificMessageLoader
|
||||
|
||||
void storeSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration);
|
||||
|
||||
void storeRawSailMasterMessage(SailMasterMessage message);
|
||||
|
||||
void storeSailMasterMessage(SailMasterMessage message);
|
||||
|
||||
void storeRace(Race race);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter.persistence.impl;
|
||||
|
||||
public enum CollectionNames {
|
||||
SWISSTIMING_CONFIGURATIONS, LAST_MESSAGE_COUNT, RAW_MESSAGES,
|
||||
SWISSTIMING_CONFIGURATIONS, LAST_MESSAGE_COUNT,
|
||||
RACES_MASTERDATA, RACES_MESSAGES, COMMAND_MESSAGES
|
||||
}
|
||||
|
||||
-15
@@ -40,9 +40,6 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
}
|
||||
|
||||
private void init() {
|
||||
DBCollection rawMessages = database.getCollection(CollectionNames.RAW_MESSAGES.name());
|
||||
rawMessages.ensureIndex(new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), 1));
|
||||
|
||||
// ensure the required indexes for the collection of race specific messages
|
||||
DBCollection racesMessageCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name());
|
||||
|
||||
@@ -184,13 +181,6 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
stConfigCollection.insert(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storeRawSailMasterMessage(SailMasterMessage message) {
|
||||
DBCollection rawMessageCollection = database.getCollection(CollectionNames.RAW_MESSAGES.name());
|
||||
rawMessageCollection.insert(new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), message.getSequenceNumber()).
|
||||
append(FieldNames.MESSAGE_CONTENT.name(), message.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storeSailMasterMessage(SailMasterMessage message) {
|
||||
// Attention: this method is very time critical as we will receive thousands of messages in a short time
|
||||
@@ -264,13 +254,8 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
|
||||
@Override
|
||||
public void dropAllMessageData() {
|
||||
|
||||
DBCollection rawMessageCollection = database.getCollection(CollectionNames.RAW_MESSAGES.name());
|
||||
rawMessageCollection.drop();
|
||||
|
||||
DBCollection racesMessageCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name());
|
||||
racesMessageCollection.drop();
|
||||
|
||||
DBCollection cmdMessageCollection = database.getCollection(CollectionNames.COMMAND_MESSAGES.name());
|
||||
cmdMessageCollection.drop();
|
||||
}
|
||||
|
||||
+7
-3
@@ -34,10 +34,14 @@ public interface SwissTimingFactory {
|
||||
* {@link SailMasterConnector#trackRace} and {@link SailMasterConnector#stopTrackingRace} operations.
|
||||
* {@link MessageType#isRaceSpecific() Race-specific messages} for other races are ignored and not forwarded to any
|
||||
* listener.
|
||||
* @param canSendRequests TODO
|
||||
*
|
||||
* @param canSendRequests
|
||||
* tells whether the hostname/port combination is able to receive and process SailMaster request messages;
|
||||
* if <code>false</code>, only events are sent by the host to which the connector connects.
|
||||
*/
|
||||
SailMasterConnector getOrCreateSailMasterConnector(String hostname, int port, RaceSpecificMessageLoader messageLoader, boolean canSendRequests) throws InterruptedException;
|
||||
|
||||
SailMasterConnector getOrCreateSailMasterConnector(String hostname, int port,
|
||||
RaceSpecificMessageLoader messageLoader, boolean canSendRequests) throws InterruptedException;
|
||||
|
||||
SailMasterTransceiver createSailMasterTransceiver();
|
||||
|
||||
SwissTimingConfiguration createSwissTimingConfiguration(String name, String hostname, int port, boolean canSendRequests);
|
||||
|
||||
+45
-18
@@ -151,7 +151,15 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
|
||||
removeSelectedLeaderboard();
|
||||
}
|
||||
});
|
||||
|
||||
Button stressTestButton = new Button(stringConstants.stressTest());
|
||||
verticalPanel.add(stressTestButton);
|
||||
stressTestButton.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
performStressTestForSelectedLeaderboard();
|
||||
}
|
||||
});
|
||||
|
||||
// ------------ specific to selected leaderboard ----------------
|
||||
Label lblRaceNamesIn = new Label(stringConstants.columnNamesInSelectedLeaderboard());
|
||||
grid.setWidget(2, 0, lblRaceNamesIn);
|
||||
@@ -245,6 +253,25 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
|
||||
leaderboardRaceColumnSelectionChanged();
|
||||
}
|
||||
|
||||
private void performStressTestForSelectedLeaderboard() {
|
||||
final int selectedIndex = leaderboardsListBox.getSelectedIndex();
|
||||
if (selectedIndex >= 0) {
|
||||
final String leaderboardName = leaderboardsListBox.getItemText(selectedIndex);
|
||||
sailingService.stressTestLeaderboardByName(leaderboardName, 100, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error during leaderboard stress test for " + leaderboardName + ": "
|
||||
+ caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
errorReporter.reportError("Stress test for " + leaderboardName + " finished successfully ");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void unlinkSelectedRaceColumnFromTrackedRace() {
|
||||
final String selectedRaceColumnName = getSelectedRaceColumnName();
|
||||
final String selectedLeaderboardName = getSelectedLeaderboardName();
|
||||
@@ -719,10 +746,10 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
|
||||
selectedRace.getA().name, selectedRace.getC().name, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable t) {
|
||||
errorReporter.reportError("Error trying to link tracked race "+selectedRace.getC().name+
|
||||
" of event "+selectedRace.getA().name+" to race column named "+
|
||||
getSelectedRaceColumnName()+" of leaderboard "+getSelectedLeaderboardName()+": "+
|
||||
t.getMessage());
|
||||
errorReporter.reportError("Error trying to link tracked race " + selectedRace.getC().name
|
||||
+ " of event " + selectedRace.getA().name + " to race column named "
|
||||
+ getSelectedRaceColumnName() + " of leaderboard " + getSelectedLeaderboardName()
|
||||
+ ": " + t.getMessage());
|
||||
raceTree.clearSelection();
|
||||
}
|
||||
|
||||
@@ -732,20 +759,20 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void changeIsMedalRace(final boolean isMedalRace){
|
||||
sailingService.updateIsMedalRace(getSelectedLeaderboardName(), getSelectedRaceColumnName(), isMedalRace, new AsyncCallback<Void>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error trying to change isMedalRace of "+getSelectedRaceColumnName()+": "+caught.getMessage());
|
||||
}
|
||||
private void changeIsMedalRace(final boolean isMedalRace) {
|
||||
sailingService.updateIsMedalRace(getSelectedLeaderboardName(), getSelectedRaceColumnName(), isMedalRace,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error trying to change isMedalRace of "
|
||||
+ getSelectedRaceColumnName() + ": " + caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
// TODO Punkte in spalte updaten.
|
||||
selectedLeaderboard.setIsMedalRace(getSelectedRaceColumnName(), isMedalRace);
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
selectedLeaderboard.setIsMedalRace(getSelectedRaceColumnName(), isMedalRace);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+2
@@ -114,4 +114,6 @@ public interface SailingService extends RemoteService {
|
||||
|
||||
void trackWithSwissTiming(SwissTimingRaceRecordDAO rr, String hostname, int port, boolean canSendRequests,
|
||||
boolean trackWind, boolean correctWindByDeclination) throws Exception;
|
||||
|
||||
void stressTestLeaderboardByName(String leaderboardName, int times) throws Exception;
|
||||
}
|
||||
|
||||
+7
@@ -173,4 +173,11 @@ public interface SailingServiceAsync {
|
||||
|
||||
void trackWithSwissTiming(SwissTimingRaceRecordDAO rr, String hostname, int port, boolean canSendRequests,
|
||||
boolean trackWind, boolean correctWindByDeclination, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
/**
|
||||
* Requests the computation of the {@link LeaderboardDAO} for <code>leaderboardName</code> <code>times</code> times.
|
||||
* The date used for the {@link #getLeaderboardByName(String, Date, Collection, AsyncCallback)} call is iterated
|
||||
* in 10ms time steps, going backwards from "now." For all races, all details are requested.
|
||||
*/
|
||||
void stressTestLeaderboardByName(String leaderboardName, int times, AsyncCallback<Void> callback);
|
||||
}
|
||||
|
||||
+1
@@ -112,4 +112,5 @@ public interface StringConstants extends Constants {
|
||||
String raceStartTimeColumn();
|
||||
String showOnlySelected();
|
||||
String tailLength();
|
||||
String stressTest();
|
||||
}
|
||||
+1
@@ -107,3 +107,4 @@ port=Port
|
||||
raceStartTimeColumn=Race Started
|
||||
showOnlySelected=Show only selected
|
||||
tailLength=Tail length (s)
|
||||
stressTest=Stress Test
|
||||
+2
-1
@@ -106,4 +106,5 @@ columnMoveDown=Runter
|
||||
port=Port
|
||||
raceStartTimeColumn=Rennstart
|
||||
showOnlySelected=Nur ausgewählte anzeigen
|
||||
tailLengt=Schweiflänge (s)
|
||||
tailLength=Schweiflänge (s)
|
||||
stressTest=Stresstest
|
||||
+21
-2
@@ -137,6 +137,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeaderboardDAO getLeaderboardByName(String leaderboardName, Date date,
|
||||
Collection<String> namesOfRacesForWhichToLoadLegDetails) throws Exception {
|
||||
long startOfRequestHandling = System.currentTimeMillis();
|
||||
@@ -182,6 +183,24 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stressTestLeaderboardByName(String leaderboardName, int times) throws Exception {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard != null) {
|
||||
List<String> raceColumnNames = new ArrayList<String>();
|
||||
for (RaceInLeaderboard column : leaderboard.getRaceColumns()) {
|
||||
raceColumnNames.add(column.getName());
|
||||
}
|
||||
int i=0;
|
||||
for (Date date = new Date(); i<times; date = new Date(date.getTime()-10)) {
|
||||
getLeaderboardByName(leaderboardName, date, raceColumnNames);
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
logger.warning("stressTestLeaderboardByName: couldn't find leaderboard "+leaderboardName);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeaderboardEntryDAO getLeaderboardEntry(String leaderboardName, String competitorName, String raceName, Date date) throws NoWindException {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
@@ -203,7 +222,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
throw new IllegalArgumentException("Didn't find leaderboard "+leaderboardName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private LeaderboardEntryDAO getLeaderboardEntryDAO(Entry entry, TrackedRace trackedRace, Competitor competitor,
|
||||
TimePoint timePoint, boolean addLegDetails) throws NoWindException {
|
||||
LeaderboardEntryDAO entryDAO = new LeaderboardEntryDAO();
|
||||
@@ -211,7 +230,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
entryDAO.totalPoints = entry.getTotalPoints();
|
||||
entryDAO.reasonForMaxPoints = entry.getMaxPointsReason().name();
|
||||
entryDAO.discarded = entry.isDiscarded();
|
||||
if (addLegDetails) {
|
||||
if (addLegDetails && trackedRace != null) {
|
||||
entryDAO.legDetails = new ArrayList<LegEntryDAO>();
|
||||
for (Leg leg : trackedRace.getRace().getCourse().getLegs()) {
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, leg);
|
||||
|
||||
Reference in New Issue
Block a user