diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java index 3e2c932e26a..7b50a0feb1c 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java @@ -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); diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java index 3643e8dd54c..23f5b6fb07f 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java @@ -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 } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java index 1e0abc56295..ca93940d540 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java @@ -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(); } diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java index fc6ac98eff6..7be0153817b 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java @@ -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 false, 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); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java index 07812bf65c5..ec77561ed15 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java @@ -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() { + @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() { @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() { - @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() { + @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); + } + }); } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index d99f0d89c77..132587bbd3f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -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; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index eb485eea242..38bbd86e202 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -173,4 +173,11 @@ public interface SailingServiceAsync { void trackWithSwissTiming(SwissTimingRaceRecordDAO rr, String hostname, int port, boolean canSendRequests, boolean trackWind, boolean correctWindByDeclination, AsyncCallback asyncCallback); + + /** + * Requests the computation of the {@link LeaderboardDAO} for leaderboardName times 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 callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java index 2655a5c3230..9b09aa9af2f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java @@ -112,4 +112,5 @@ public interface StringConstants extends Constants { String raceStartTimeColumn(); String showOnlySelected(); String tailLength(); + String stressTest(); } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties index 22f8ab90ff3..7c4e7c771eb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties @@ -107,3 +107,4 @@ port=Port raceStartTimeColumn=Race Started showOnlySelected=Show only selected tailLength=Tail length (s) +stressTest=Stress Test \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties index 4a929a9b3ed..188887c9630 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties @@ -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 \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index b8fc6273247..4bef639b2e2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -137,6 +137,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS return result; } + @Override public LeaderboardDAO getLeaderboardByName(String leaderboardName, Date date, Collection 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 raceColumnNames = new ArrayList(); + for (RaceInLeaderboard column : leaderboard.getRaceColumns()) { + raceColumnNames.add(column.getName()); + } + int i=0; + for (Date date = new Date(); i(); for (Leg leg : trackedRace.getRace().getCourse().getLegs()) { TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, leg);