mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
bug6321: improved logging for MasterDataResource and MasterDataImporter
This commit is contained in:
1 parent
23b901d4ad
commit
3912f1309e
2 files changed
+26
-2
No files matched your search
+18
-2
@@ -14,6 +14,7 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
@@ -246,6 +247,9 @@ public class MasterDataResource extends AbstractSailingServerResource {
|
||||
masterData.setMasterDataExportFlagOnRaceColumns(true);
|
||||
// Actual start of streaming
|
||||
writeObjects(competitorIds, masterData, objectOutputStream);
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.SEVERE, "Exception while writing master data to output stream", e);
|
||||
throw e;
|
||||
} finally {
|
||||
objectOutputStream.close();
|
||||
masterData.setMasterDataExportFlagOnRaceColumns(false);
|
||||
@@ -308,16 +312,22 @@ public class MasterDataResource extends AbstractSailingServerResource {
|
||||
*/
|
||||
private void writeObjects(final List<Serializable> competitorIds, final TopLevelMasterData masterData,
|
||||
ObjectOutputStream objectOutputStream) throws IOException {
|
||||
logger.info("writing competitor IDs...");
|
||||
// Reader counterpart: MasterDataImporter.importFromStream reads these three objects back in this exact order.
|
||||
objectOutputStream.writeObject(competitorIds);
|
||||
logger.info("writing regattas...");
|
||||
objectOutputStream.writeObject(masterData.getAllRegattas());
|
||||
logger.info("writing master data...");
|
||||
objectOutputStream.writeObject(masterData);
|
||||
// Reader counterpart: MasterDataImporter.importWindTracks reads the Integer count, the WindTrackMasterData
|
||||
// objects, and the terminating null sentinel written by writeWindTracks below.
|
||||
logger.info("writing wind tracks...");
|
||||
writeWindTracks(masterData, objectOutputStream);
|
||||
// Reader counterpart: MasterDataImporter.importRaceLogTrackingGPSFixes reads the per-device sections and the
|
||||
// terminating null sentinels written by writeRaceLogTrackingFixes below.
|
||||
logger.info("writing sensor/GPS fixes...");
|
||||
writeRaceLogTrackingFixes(masterData, objectOutputStream);
|
||||
logger.info("Done writing master data and tracks");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -342,9 +352,11 @@ public class MasterDataResource extends AbstractSailingServerResource {
|
||||
throws IOException {
|
||||
final Set<WindTrackMasterData> windTrackMasterDataForStreaming = masterData.getWindTrackMasterDataForStreaming();
|
||||
objectOutputStream.writeInt(windTrackMasterDataForStreaming.size());
|
||||
int i=0;
|
||||
for (final WindTrackMasterData windTrackMasterData : windTrackMasterDataForStreaming) {
|
||||
objectOutputStream.writeObject(windTrackMasterData);
|
||||
objectOutputStream.reset();
|
||||
logger.info("Wrote "+(++i)+" wind tracks of "+windTrackMasterDataForStreaming.size());
|
||||
}
|
||||
objectOutputStream.writeObject(null);
|
||||
}
|
||||
@@ -380,8 +392,9 @@ public class MasterDataResource extends AbstractSailingServerResource {
|
||||
final ObjectOutputStream objectOutputStream) throws IOException {
|
||||
final SensorFixStore sensorFixStore = masterData.getSensorFixStore();
|
||||
try {
|
||||
for (final Entry<DeviceIdentifier, MultiTimeRange> deviceRange : masterData.getRaceLogTrackingDeviceRanges()
|
||||
.entrySet()) {
|
||||
final Map<DeviceIdentifier, MultiTimeRange> raceLogTrackingDeviceRanges = masterData.getRaceLogTrackingDeviceRanges();
|
||||
final int[] i= new int[1];
|
||||
for (final Entry<DeviceIdentifier, MultiTimeRange> deviceRange : raceLogTrackingDeviceRanges.entrySet()) {
|
||||
final DeviceIdentifier device = deviceRange.getKey();
|
||||
objectOutputStream.writeObject(device);
|
||||
final int[] fixesSinceLastReset = new int[] { 0 };
|
||||
@@ -395,12 +408,15 @@ public class MasterDataResource extends AbstractSailingServerResource {
|
||||
fixesSinceLastReset[0] = 0;
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
logger.log(Level.SEVERE, "Exception while trying to write fixes; had written " + i[0] + " of "
|
||||
+ raceLogTrackingDeviceRanges.size() + " collections so far");
|
||||
throw new WriteFixException(e);
|
||||
}
|
||||
}, device, range.from(), range.to(), false);
|
||||
}
|
||||
objectOutputStream.writeObject(null);
|
||||
objectOutputStream.reset();
|
||||
logger.info("Wrote "+(++i[0])+" fix collections of "+raceLogTrackingDeviceRanges.size());
|
||||
}
|
||||
objectOutputStream.writeObject(null);
|
||||
} catch (final WriteFixException e) {
|
||||
|
||||
+8
@@ -101,6 +101,7 @@ public class MasterDataImporter {
|
||||
*/
|
||||
public Map<LeaderboardGroup, ? extends Iterable<Event>> importFromStream(InputStream inputStream, UUID importOperationId, boolean override)
|
||||
throws IOException, ClassNotFoundException {
|
||||
logger.info("Preparing master data import stream for import "+importOperationId);
|
||||
ObjectInputStreamResolvingAgainstCache<DomainFactory> objectInputStream = racingEventService
|
||||
.getBaseDomainFactory()
|
||||
.createObjectInputStreamResolvingAgainstThisFactory(inputStream, new ResolveListener() {
|
||||
@@ -130,13 +131,16 @@ public class MasterDataImporter {
|
||||
// Writer counterpart: MasterDataResource.writeObjects writes these three objects (competitorIds, all
|
||||
// regattas, then the fix-free and wind-free TopLevelMasterData graph) in exactly this order; the wind and
|
||||
// sensor-fix sections that follow the graph are read below by importWindTracks / importRaceLogTrackingGPSFixes.
|
||||
logger.info("Reading competitor IDs for import "+importOperationId);
|
||||
@SuppressWarnings("unchecked")
|
||||
final List<Serializable> competitorIds = (List<Serializable>) objectInputStream.readObject();
|
||||
if (override) {
|
||||
setAllowCompetitorsDataToBeReset(competitorIds);
|
||||
}
|
||||
logger.info("Reading regattas for import "+importOperationId);
|
||||
// Deserialize Regattas to make sure that Regattas are deserialized before Series
|
||||
objectInputStream.readObject();
|
||||
logger.info("Reading master data for import "+importOperationId);
|
||||
topLevelMasterData = (TopLevelMasterData) objectInputStream.readObject();
|
||||
} finally {
|
||||
RegattaImpl.setOngoingMasterDataImport(null);
|
||||
@@ -173,9 +177,11 @@ public class MasterDataImporter {
|
||||
try {
|
||||
racingEventService.createOrUpdateDataImportProgressWithReplication(importOperationId, PROGRESS_GRAPH_APPLIED,
|
||||
DataImportSubProgress.IMPORT_WIND_TRACKS, 0);
|
||||
logger.info("Reading wind tracks for import "+importOperationId);
|
||||
importWindTracks(objectInputStream, importOperationId);
|
||||
racingEventService.createOrUpdateDataImportProgressWithReplication(importOperationId, PROGRESS_WIND_TRACKS_DONE,
|
||||
DataImportSubProgress.IMPORT_SENSOR_FIXES, 0);
|
||||
logger.info("Reading GPS/senros fixes for import "+importOperationId);
|
||||
importRaceLogTrackingGPSFixes(objectInputStream, importOperationId,
|
||||
topLevelMasterData.getRaceLogTrackingDeviceRanges().size());
|
||||
} finally {
|
||||
@@ -255,6 +261,7 @@ public class MasterDataImporter {
|
||||
}
|
||||
windTrackToWriteTo.add(fixesToAdd);
|
||||
windTracksDone++;
|
||||
logger.info("Done with wind track #"+windTracksDone+" of "+expectedWindTrackCount);
|
||||
if (expectedWindTrackCount > 0) {
|
||||
final double fractionDone = (double) windTracksDone / expectedWindTrackCount;
|
||||
racingEventService.createOrUpdateDataImportProgressWithReplication(importOperationId,
|
||||
@@ -303,6 +310,7 @@ public class MasterDataImporter {
|
||||
Object device = objectInputStream.readObject();
|
||||
while (device != null) {
|
||||
final DeviceIdentifier deviceIdentifier = (DeviceIdentifier) device;
|
||||
logger.info("Importing fixes for device "+deviceIdentifier+" for import "+importOperationId+" ("+devicesDone+"/"+numberOfDeviceSections+")");
|
||||
final Collection<Timed> fixesToAddAsBatch = new ArrayList<>(BATCH_SIZE_FOR_IMPORTING_FIXES);
|
||||
Object fix = objectInputStream.readObject();
|
||||
while (fix != null) {
|
||||
|
||||
Reference in new issue
Block a user