Commit eff5d429 authored by Julian Zobel's avatar Julian Zobel 🦄
Browse files

Merge branch 'master' into 'cherry-pick-7698d9d7'

# Conflicts:
#   src/de/tud/kom/p2psim/impl/analyzer/metric/output/MetricOutputDAO.java
#   src/de/tud/kom/p2psim/impl/util/db/dao/DAO.java
parents 1c7f20ec 37020b44
...@@ -32,6 +32,7 @@ import de.tudarmstadt.maki.simonstrator.api.Monitor; ...@@ -32,6 +32,7 @@ import de.tudarmstadt.maki.simonstrator.api.Monitor;
import de.tudarmstadt.maki.simonstrator.api.Monitor.Level; import de.tudarmstadt.maki.simonstrator.api.Monitor.Level;
import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.Time;
import de.tudarmstadt.maki.simonstrator.api.component.core.SchedulerComponent; import de.tudarmstadt.maki.simonstrator.api.component.core.SchedulerComponent;
import de.tudarmstadt.maki.simonstrator.api.component.core.SimulationRuntimeAnalyzer;
import de.tudarmstadt.maki.simonstrator.api.component.core.TimeComponent; import de.tudarmstadt.maki.simonstrator.api.component.core.TimeComponent;
/** /**
...@@ -57,7 +58,7 @@ SchedulerComponent, TimeComponent { ...@@ -57,7 +58,7 @@ SchedulerComponent, TimeComponent {
private long statusInterval = SCHEDULER_WAKEUP_INTERVAL_IN_VIRTUALTIME; private long statusInterval = SCHEDULER_WAKEUP_INTERVAL_IN_VIRTUALTIME;
private static final int INITIAL_QUEUE_CAPACITY = 5000; private static final int INITIAL_QUEUE_CAPACITY = 50000;
private long processedEventCounter; private long processedEventCounter;
...@@ -93,6 +94,9 @@ SchedulerComponent, TimeComponent { ...@@ -93,6 +94,9 @@ SchedulerComponent, TimeComponent {
protected static final int TYPE_END = 3; protected static final int TYPE_END = 3;
private SimulationRuntimeAnalyzer _simulationRuntimeAnalyzer;
private boolean _simulationRuntimeAnalyzerInit;
/** /**
* Constructs a new scheduler instance using a calendar queue. If desired, * Constructs a new scheduler instance using a calendar queue. If desired,
* status events about the progress of the simulation will be plotted. * status events about the progress of the simulation will be plotted.
...@@ -267,8 +271,14 @@ SchedulerComponent, TimeComponent { ...@@ -267,8 +271,14 @@ SchedulerComponent, TimeComponent {
processedEventCounter++; processedEventCounter++;
currentTime = realEvent.getSimulationTime(); currentTime = realEvent.getSimulationTime();
if (hasSimulationRuntimeAnalyzer()) {
getSimulationRuntimeAnalyzer().startEventExecution(realEvent.handler, realEvent.type);
}
EventHandler handler = realEvent.handler; EventHandler handler = realEvent.handler;
handler.eventOccurred(realEvent.data, realEvent.type); handler.eventOccurred(realEvent.data, realEvent.type);
if (hasSimulationRuntimeAnalyzer()) {
getSimulationRuntimeAnalyzer().endEventExecution(realEvent.handler, realEvent.type);
}
notifyListeners(realEvent, realEvent.handler); notifyListeners(realEvent, realEvent.handler);
if (realEvent.schedulerType == TYPE_END) if (realEvent.schedulerType == TYPE_END)
...@@ -298,8 +308,15 @@ SchedulerComponent, TimeComponent { ...@@ -298,8 +308,15 @@ SchedulerComponent, TimeComponent {
assert (realEvent.simTime == Long.MIN_VALUE); assert (realEvent.simTime == Long.MIN_VALUE);
realEvent.simTime = currentTime; realEvent.simTime = currentTime;
if (hasSimulationRuntimeAnalyzer()) {
getSimulationRuntimeAnalyzer().startEventExecution(realEvent.handler, realEvent.type);
}
EventHandler handler = realEvent.handler; EventHandler handler = realEvent.handler;
handler.eventOccurred(realEvent.data, realEvent.type); handler.eventOccurred(realEvent.data, realEvent.type);
if (hasSimulationRuntimeAnalyzer()) {
getSimulationRuntimeAnalyzer().endEventExecution(realEvent.handler, realEvent.type);
}
notifyListeners(realEvent, realEvent.handler); notifyListeners(realEvent, realEvent.handler);
} }
...@@ -403,8 +420,14 @@ SchedulerComponent, TimeComponent { ...@@ -403,8 +420,14 @@ SchedulerComponent, TimeComponent {
} }
currentTime = realEvent.getSimulationTime(); currentTime = realEvent.getSimulationTime();
if (hasSimulationRuntimeAnalyzer()) {
getSimulationRuntimeAnalyzer().startEventExecution(realEvent.handler, realEvent.type);
}
EventHandler handler = realEvent.handler; EventHandler handler = realEvent.handler;
handler.eventOccurred(realEvent.data, realEvent.type); handler.eventOccurred(realEvent.data, realEvent.type);
if (hasSimulationRuntimeAnalyzer()) {
getSimulationRuntimeAnalyzer().endEventExecution(realEvent.handler, realEvent.type);
}
notifyListeners(realEvent, realEvent.handler); notifyListeners(realEvent, realEvent.handler);
if (realEvent.schedulerType == TYPE_END) { if (realEvent.schedulerType == TYPE_END) {
...@@ -612,4 +635,16 @@ SchedulerComponent, TimeComponent { ...@@ -612,4 +635,16 @@ SchedulerComponent, TimeComponent {
} }
} }
private SimulationRuntimeAnalyzer getSimulationRuntimeAnalyzer() {
return _simulationRuntimeAnalyzer;
}
private boolean hasSimulationRuntimeAnalyzer() {
if (!_simulationRuntimeAnalyzerInit) {
_simulationRuntimeAnalyzer = Monitor.getOrNull(SimulationRuntimeAnalyzer.class);
_simulationRuntimeAnalyzerInit = true;
}
return _simulationRuntimeAnalyzer != null;
}
} }
...@@ -208,7 +208,7 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent { ...@@ -208,7 +208,7 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent {
/* Real World Starting Time: /* Real World Starting Time:
* Block till we're allowed to start. * Block till we're allowed to start.
*/ */
if( realWorldStartTime != null ) { if(realWorldStartTime != null ) {
try { try {
...@@ -234,9 +234,13 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent { ...@@ -234,9 +234,13 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent {
finishedWithoutError = true; finishedWithoutError = true;
} catch (RuntimeException e) { } catch (RuntimeException e) {
finishedWithoutError = false;
finishedWithoutError = false;
reason = e;
throw e; throw e;
} finally { } finally {
this.running = false; this.running = false;
// After a simulation start the mechanisms, which // After a simulation start the mechanisms, which
// finalize a simulation // finalize a simulation
...@@ -248,10 +252,18 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent { ...@@ -248,10 +252,18 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent {
this.running = false; this.running = false;
if (finishedWithoutError) { if (finishedWithoutError) {
Monitor.log(Simulator.class, Level.INFO, Monitor.log(Simulator.class, Level.INFO,
"Simulation successfully finished..."); "Simulation successfully finished :)");
} else { } else {
if(reason == null) {
Monitor.log(Simulator.class, Level.ERROR,
"Simulation finished with unresolved errors ???");
}
else {
Monitor.log(Simulator.class, Level.ERROR, Monitor.log(Simulator.class, Level.ERROR,
"Simulation finished with errors...\n" + reason); "Simulation finished with errors :( \n " +
reason.toString() + " : " + reason.getStackTrace());
}
} }
long runTime = System.currentTimeMillis() - startTime; long runTime = System.currentTimeMillis() - startTime;
long minutes = (long) Math.floor((runTime) / 60000); long minutes = (long) Math.floor((runTime) / 60000);
...@@ -389,8 +401,7 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent { ...@@ -389,8 +401,7 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent {
if (randomGenerators.containsKey(source)) { if (randomGenerators.containsKey(source)) {
return randomGenerators.get(source); return randomGenerators.get(source);
} else { } else {
long thisSeed = source.toString().hashCode() + 31 long thisSeed = source.toString().hashCode() * seed + seed;
* seed;
Monitor.log(Simulator.class, Level.INFO, Monitor.log(Simulator.class, Level.INFO,
"Created a new Random Source for %s with seed %d", source, "Created a new Random Source for %s with seed %d", source,
thisSeed); thisSeed);
...@@ -475,7 +486,7 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent { ...@@ -475,7 +486,7 @@ public class Simulator implements RandomGeneratorComponent, GlobalComponent {
*/ */
@Deprecated @Deprecated
public void setDatabase(String database) { public void setDatabase(String database) {
DAO.database = database; DAO.setDatabase(database);
} }
/** /**
......
...@@ -32,9 +32,8 @@ import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModel; ...@@ -32,9 +32,8 @@ import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModel;
import de.tud.kom.p2psim.api.topology.social.SocialView; import de.tud.kom.p2psim.api.topology.social.SocialView;
import de.tud.kom.p2psim.api.topology.views.TopologyView; import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tud.kom.p2psim.api.topology.waypoints.WaypointModel; import de.tud.kom.p2psim.api.topology.waypoints.WaypointModel;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.GPSCalculation; import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
import de.tud.kom.p2psim.impl.topology.views.visualization.world.SocialViewComponentVis;
/** /**
* Very basic Topology * Very basic Topology
...@@ -58,7 +57,7 @@ public class DefaultTopology implements Topology { ...@@ -58,7 +57,7 @@ public class DefaultTopology implements Topology {
private List<SocialView> socialViews; private List<SocialView> socialViews;
private PositionVector worldDimensions; private static PositionVector worldDimensions;
private boolean initializedSocial = false; private boolean initializedSocial = false;
...@@ -94,6 +93,11 @@ public class DefaultTopology implements Topology { ...@@ -94,6 +93,11 @@ public class DefaultTopology implements Topology {
listener.changedWaypointModel(model); listener.changedWaypointModel(model);
} }
} }
@Override
public WaypointModel getWaypointModel() {
return waypointModel;
}
@Override @Override
public void setObstacleModel(ObstacleModel model) { public void setObstacleModel(ObstacleModel model) {
...@@ -102,6 +106,11 @@ public class DefaultTopology implements Topology { ...@@ -102,6 +106,11 @@ public class DefaultTopology implements Topology {
listener.changedObstacleModel(model); listener.changedObstacleModel(model);
} }
} }
@Override
public ObstacleModel getObstacleModel() {
return obstacleModel;
}
@Override @Override
public void addTopologyListener(TopologyListener listener) { public void addTopologyListener(TopologyListener listener) {
...@@ -175,13 +184,20 @@ public class DefaultTopology implements Topology { ...@@ -175,13 +184,20 @@ public class DefaultTopology implements Topology {
} }
} }
@Override public static boolean isWithinWorldBoundaries(double x, double y) {
public WaypointModel getWaypointModel() { if(x >= 0 && y >= 0
return waypointModel; && x <= worldDimensions.getX() && y <= worldDimensions.getY()) {
return true;
}
else {
return false;
}
} }
@Override public static boolean isWithinWorldBoundaries(Location location) {
public ObstacleModel getObstacleModel() { return isWithinWorldBoundaries(location.getLongitudeOrX(), location.getLatitudeOrY());
return obstacleModel;
} }
} }
/*
* Copyright (c) 2005-2010 KOM – Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package de.tud.kom.p2psim.impl.topology.component;
import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.TopologyComponent;
import de.tud.kom.p2psim.api.topology.movement.MovementModel;
import de.tud.kom.p2psim.api.topology.placement.PlacementModel;
public interface TopologyComponentFactory {
public TopologyComponent createTopologyComponent(SimHost host, Topology topology, MovementModel movementModel, PlacementModel placementModel, boolean registerAsInformationProviderInSiS);
}
...@@ -35,8 +35,8 @@ import java.util.zip.GZIPInputStream; ...@@ -35,8 +35,8 @@ import java.util.zip.GZIPInputStream;
import de.tud.kom.p2psim.api.topology.movement.MovementSupported; import de.tud.kom.p2psim.api.topology.movement.MovementSupported;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator; import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tud.kom.p2psim.impl.simengine.Simulator; import de.tud.kom.p2psim.impl.simengine.Simulator;
import de.tud.kom.p2psim.impl.topology.DefaultTopologyComponent; import de.tud.kom.p2psim.impl.topology.component.DefaultTopologyComponent;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.Event; import de.tudarmstadt.maki.simonstrator.api.Event;
import de.tudarmstadt.maki.simonstrator.api.EventHandler; import de.tudarmstadt.maki.simonstrator.api.EventHandler;
import de.tudarmstadt.maki.simonstrator.api.Monitor; import de.tudarmstadt.maki.simonstrator.api.Monitor;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment