diff --git a/src/main/java/cambio/simulator/entities/NamedEntity.java b/src/main/java/cambio/simulator/entities/NamedEntity.java index 2715dfd6..c7993ead 100644 --- a/src/main/java/cambio/simulator/entities/NamedEntity.java +++ b/src/main/java/cambio/simulator/entities/NamedEntity.java @@ -1,7 +1,7 @@ package cambio.simulator.entities; +import cambio.simulator.models.MiSimModel; import desmoj.core.simulator.Entity; -import desmoj.core.simulator.Model; /** * Class that adds further options for the retrieving of names of {@link Entity}s. Specifically, it provides a plain @@ -21,11 +21,11 @@ */ public abstract class NamedEntity extends Entity { + private final MiSimModel model; private String plainName; private String quotedName; private String quotedPlainName; - /** * Constructor for a named entity. * @@ -33,11 +33,13 @@ public abstract class NamedEntity extends Entity { * @param name The name of the entity. * @param showInTrace Flag indicating whether the entity should be shown in the trace. */ - public NamedEntity(Model model, String name, boolean showInTrace) { + public NamedEntity(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); this.plainName = name; this.quotedPlainName = "'" + name + "'"; this.quotedName = super.getQuotedName(); + + this.model = model; } public String getPlainName() { @@ -73,4 +75,9 @@ public String getQuotedPlainName() { public String getQuotedName() { return this.quotedName; } + + @Override + public MiSimModel getModel() { + return this.model; + } } diff --git a/src/main/java/cambio/simulator/entities/NamedExternalEvent.java b/src/main/java/cambio/simulator/entities/NamedExternalEvent.java index e0dab0e0..7573b7cb 100644 --- a/src/main/java/cambio/simulator/entities/NamedExternalEvent.java +++ b/src/main/java/cambio/simulator/entities/NamedExternalEvent.java @@ -1,7 +1,7 @@ package cambio.simulator.entities; +import cambio.simulator.models.MiSimModel; import desmoj.core.simulator.ExternalEvent; -import desmoj.core.simulator.Model; /** * Class that adds further options for the retrieving of names of {@link ExternalEvent}s. Specifically, it provides a @@ -21,6 +21,7 @@ */ public abstract class NamedExternalEvent extends ExternalEvent { + private final MiSimModel model; private String plainName; private String quotedName; private String quotedPlainName; @@ -32,11 +33,13 @@ public abstract class NamedExternalEvent extends ExternalEvent { * @param name The name of this event. * @param showInTrace Flag indicating whether the entity should be shown in the trace. */ - public NamedExternalEvent(Model model, String name, boolean showInTrace) { + public NamedExternalEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); this.plainName = name; this.quotedPlainName = "'" + name + "'"; this.quotedName = super.getQuotedName(); + + this.model = model; } public String getPlainName() { @@ -72,4 +75,9 @@ public String getQuotedPlainName() { public String getQuotedName() { return this.quotedName; } + + @Override + public MiSimModel getModel() { + return this.model; + } } diff --git a/src/main/java/cambio/simulator/entities/NamedSimProcess.java b/src/main/java/cambio/simulator/entities/NamedSimProcess.java index 93f3a25b..72431380 100644 --- a/src/main/java/cambio/simulator/entities/NamedSimProcess.java +++ b/src/main/java/cambio/simulator/entities/NamedSimProcess.java @@ -1,6 +1,6 @@ package cambio.simulator.entities; -import desmoj.core.simulator.Model; +import cambio.simulator.models.MiSimModel; import desmoj.core.simulator.SimProcess; /** @@ -21,6 +21,7 @@ */ public abstract class NamedSimProcess extends SimProcess { + private final MiSimModel model; private String plainName; private String quotedName; private String quotedPlainName; @@ -32,7 +33,7 @@ public abstract class NamedSimProcess extends SimProcess { * @param name The name of this process. * @param showInTrace Flag indicating whether the entity should be shown in the trace. */ - public NamedSimProcess(Model model, String name, boolean showInTrace) { + public NamedSimProcess(MiSimModel model, String name, boolean showInTrace) { this(model, name, false, showInTrace); } @@ -44,11 +45,13 @@ public NamedSimProcess(Model model, String name, boolean showInTrace) { * @param repeating If this process is automatically restart its lifecycle. * @param showInTrace Flag indicating whether the entity should be shown in the trace. */ - public NamedSimProcess(Model model, String name, boolean repeating, boolean showInTrace) { + public NamedSimProcess(MiSimModel model, String name, boolean repeating, boolean showInTrace) { super(model, name, repeating, showInTrace); this.plainName = name; this.quotedPlainName = "'" + name + "'"; this.quotedName = super.getQuotedName(); + + this.model = model; } public String getPlainName() { @@ -84,4 +87,9 @@ public String getQuotedPlainName() { public String getQuotedName() { return this.quotedName; } + + @Override + public MiSimModel getModel() { + return this.model; + } } diff --git a/src/main/java/cambio/simulator/entities/generator/LoadGeneratorDescriptionExecutor.java b/src/main/java/cambio/simulator/entities/generator/LoadGeneratorDescriptionExecutor.java index 7350c0d8..cd53214b 100644 --- a/src/main/java/cambio/simulator/entities/generator/LoadGeneratorDescriptionExecutor.java +++ b/src/main/java/cambio/simulator/entities/generator/LoadGeneratorDescriptionExecutor.java @@ -9,8 +9,8 @@ import cambio.simulator.entities.patterns.IPatternLifeCycleHooks; import cambio.simulator.events.ISelfScheduled; import cambio.simulator.export.AccumulativeDataPointReporter; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeInstant; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ */ public final class LoadGeneratorDescriptionExecutor extends RequestSender implements IRequestUpdateListener, ISelfScheduled, IPatternLifeCycleHooks { - private final Model model; + private final MiSimModel model; /** * Target Operation. @@ -48,7 +48,7 @@ public final class LoadGeneratorDescriptionExecutor extends RequestSender implem * @param model the underlying model * @param loadGeneratorDescription behavioral description of this load generator. */ - public LoadGeneratorDescriptionExecutor(Model model, @NotNull LoadGeneratorDescription loadGeneratorDescription) { + public LoadGeneratorDescriptionExecutor(MiSimModel model, @NotNull LoadGeneratorDescription loadGeneratorDescription) { super(model, loadGeneratorDescription.getName() != null ? loadGeneratorDescription.getName() : "Generator", true); diff --git a/src/main/java/cambio/simulator/entities/microservice/InstanceKillEvent.java b/src/main/java/cambio/simulator/entities/microservice/InstanceKillEvent.java index dbadfe44..2e09168f 100644 --- a/src/main/java/cambio/simulator/entities/microservice/InstanceKillEvent.java +++ b/src/main/java/cambio/simulator/entities/microservice/InstanceKillEvent.java @@ -1,9 +1,9 @@ package cambio.simulator.entities.microservice; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; import desmoj.core.simulator.Event; -import desmoj.core.simulator.Model; /** * For now this is an unused event that represents the killing of an instance. @@ -11,7 +11,7 @@ * @author Lion Wagner */ public class InstanceKillEvent extends Event { - public InstanceKillEvent(Model model, String name, boolean showInTrace) { + public InstanceKillEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); this.setSchedulingPriority(Priority.VERY_HIGH); } diff --git a/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownEndEvent.java b/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownEndEvent.java index 30214cfe..43bb8c62 100644 --- a/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownEndEvent.java +++ b/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownEndEvent.java @@ -1,8 +1,8 @@ package cambio.simulator.entities.microservice; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; import desmoj.core.simulator.Event; -import desmoj.core.simulator.Model; /** * Represents the end of the shutdown process of an instance. @@ -11,7 +11,7 @@ */ public class InstanceShutdownEndEvent extends Event { - public InstanceShutdownEndEvent(Model model, String name, boolean showInTrace) { + public InstanceShutdownEndEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } diff --git a/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownStartEvent.java b/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownStartEvent.java index 217b1cee..300ca4b6 100644 --- a/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownStartEvent.java +++ b/src/main/java/cambio/simulator/entities/microservice/InstanceShutdownStartEvent.java @@ -1,9 +1,9 @@ package cambio.simulator.entities.microservice; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; import desmoj.core.simulator.Event; -import desmoj.core.simulator.Model; /** * Triggers the instance to stats its shutdown process. @@ -17,7 +17,7 @@ public class InstanceShutdownStartEvent extends Event { - public InstanceShutdownStartEvent(Model model, String name, boolean showInTrace) { + public InstanceShutdownStartEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); this.setSchedulingPriority(Priority.HIGH); } diff --git a/src/main/java/cambio/simulator/entities/microservice/InstanceStartupEvent.java b/src/main/java/cambio/simulator/entities/microservice/InstanceStartupEvent.java index 449f2aa7..df8e997a 100644 --- a/src/main/java/cambio/simulator/entities/microservice/InstanceStartupEvent.java +++ b/src/main/java/cambio/simulator/entities/microservice/InstanceStartupEvent.java @@ -1,9 +1,9 @@ package cambio.simulator.entities.microservice; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; import desmoj.core.simulator.Event; -import desmoj.core.simulator.Model; /** * Triggers the startup procedure for a {@code MicroserviceInstance}. @@ -12,7 +12,7 @@ */ public class InstanceStartupEvent extends Event { - public InstanceStartupEvent(Model model, String name, boolean showInTrace) { + public InstanceStartupEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); this.setSchedulingPriority(Priority.HIGH); } diff --git a/src/main/java/cambio/simulator/entities/microservice/Microservice.java b/src/main/java/cambio/simulator/entities/microservice/Microservice.java index 8bf77556..47a1b52a 100644 --- a/src/main/java/cambio/simulator/entities/microservice/Microservice.java +++ b/src/main/java/cambio/simulator/entities/microservice/Microservice.java @@ -9,11 +9,11 @@ import cambio.simulator.entities.patterns.*; import cambio.simulator.export.AccumulativeDataPointReporter; import cambio.simulator.export.MultiDataPointReporter; +import cambio.simulator.models.MiSimModel; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import desmoj.core.dist.NumericalDist; import desmoj.core.simulator.Event; -import desmoj.core.simulator.Model; /** * A Microservice is one of the core Entities of the simulation. It represents the meta layer of a microservice that is @@ -76,7 +76,7 @@ public class Microservice extends NamedEntity { /** * Creates a new instance of a {@link Microservice}. */ - public Microservice(Model model, String name, boolean showInTrace) { + public Microservice(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); //default load balancer loadBalancer = new LoadBalancer(model, "Loadbalancer", traceIsOn(), null); diff --git a/src/main/java/cambio/simulator/entities/microservice/MicroserviceInstance.java b/src/main/java/cambio/simulator/entities/microservice/MicroserviceInstance.java index a4fdc1eb..ed8697a6 100644 --- a/src/main/java/cambio/simulator/entities/microservice/MicroserviceInstance.java +++ b/src/main/java/cambio/simulator/entities/microservice/MicroserviceInstance.java @@ -7,6 +7,7 @@ import cambio.simulator.entities.networking.*; import cambio.simulator.entities.patterns.*; import cambio.simulator.export.MultiDataPointReporter; +import cambio.simulator.models.MiSimModel; import cambio.simulator.resources.cpu.CPU; import cambio.simulator.resources.cpu.CPUProcess; import cambio.simulator.resources.cpu.scheduling.FIFOScheduler; @@ -56,7 +57,7 @@ public class MicroserviceInstance extends RequestSender implements IRequestUpdat private long waiting = 0; - MicroserviceInstance(Model model, String name, boolean showInTrace, Microservice microservice, + MicroserviceInstance(MiSimModel model, String name, boolean showInTrace, Microservice microservice, int instanceID) { super(model, name, showInTrace); this.owner = microservice; diff --git a/src/main/java/cambio/simulator/entities/microservice/MicroserviceScaleEvent.java b/src/main/java/cambio/simulator/entities/microservice/MicroserviceScaleEvent.java index 7fa34d29..5e5831fd 100644 --- a/src/main/java/cambio/simulator/entities/microservice/MicroserviceScaleEvent.java +++ b/src/main/java/cambio/simulator/entities/microservice/MicroserviceScaleEvent.java @@ -1,8 +1,8 @@ package cambio.simulator.entities.microservice; import cambio.simulator.entities.NamedExternalEvent; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; /** * For now this is an unused event to represent the scaling of a microservice. @@ -17,7 +17,7 @@ public class MicroserviceScaleEvent extends NamedExternalEvent { /** * Creates a new scaling event. */ - public MicroserviceScaleEvent(Model model, String name, boolean showInTrace, Microservice microservice, + public MicroserviceScaleEvent(MiSimModel model, String name, boolean showInTrace, Microservice microservice, int targetInstanceCount) { super(model, name, showInTrace); this.microservice = microservice; diff --git a/src/main/java/cambio/simulator/entities/microservice/Operation.java b/src/main/java/cambio/simulator/entities/microservice/Operation.java index eeb399fe..677c09f9 100644 --- a/src/main/java/cambio/simulator/entities/microservice/Operation.java +++ b/src/main/java/cambio/simulator/entities/microservice/Operation.java @@ -5,9 +5,9 @@ import cambio.simulator.entities.NamedEntity; import cambio.simulator.entities.networking.DependencyDescription; import cambio.simulator.entities.networking.ServiceDependencyInstance; +import cambio.simulator.models.MiSimModel; import com.google.gson.annotations.Expose; import desmoj.core.dist.NumericalDist; -import desmoj.core.simulator.Model; /** * An {@code Operation} represents an endpoint of a service. It has a specific computational demand and may have @@ -29,7 +29,7 @@ public class Operation extends NamedEntity { * @param ownerMS {@link Microservice} that owns this operation. * @param demand CPU demand of this operation. */ - public Operation(Model model, String name, boolean showInTrace, Microservice ownerMS, int demand) { + public Operation(MiSimModel model, String name, boolean showInTrace, Microservice ownerMS, int demand) { super(model, (ownerMS == null ? "" : ownerMS.getPlainName() + ".") + name, showInTrace); this.demand = demand; this.ownerMS = ownerMS; diff --git a/src/main/java/cambio/simulator/entities/networking/InternalRequest.java b/src/main/java/cambio/simulator/entities/networking/InternalRequest.java index 09ff5ec5..b4ed1b1d 100644 --- a/src/main/java/cambio/simulator/entities/networking/InternalRequest.java +++ b/src/main/java/cambio/simulator/entities/networking/InternalRequest.java @@ -1,7 +1,7 @@ package cambio.simulator.entities.networking; import cambio.simulator.entities.microservice.MicroserviceInstance; -import desmoj.core.simulator.Model; +import cambio.simulator.models.MiSimModel; /** * Represents a {@code Request} between two {@code MicroserviceInstance}s. Hold information about the {@code @@ -19,7 +19,7 @@ public class InternalRequest extends Request { * @param dependency {@link ServiceDependencyInstance} that should be competed by this request. * @param requester {@link MicroserviceInstance} that requests the answer to this request. */ - public InternalRequest(Model model, boolean showInTrace, ServiceDependencyInstance dependency, + public InternalRequest(MiSimModel model, boolean showInTrace, ServiceDependencyInstance dependency, MicroserviceInstance requester) { super(model, String diff --git a/src/main/java/cambio/simulator/entities/networking/NetworkRequestCanceledEvent.java b/src/main/java/cambio/simulator/entities/networking/NetworkRequestCanceledEvent.java index 69f821d8..ec00d81f 100644 --- a/src/main/java/cambio/simulator/entities/networking/NetworkRequestCanceledEvent.java +++ b/src/main/java/cambio/simulator/entities/networking/NetworkRequestCanceledEvent.java @@ -1,8 +1,8 @@ package cambio.simulator.entities.networking; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; /** * Event that should be scheduled when a request gets canceled. @@ -14,7 +14,7 @@ public class NetworkRequestCanceledEvent extends NetworkRequestEvent { private final RequestFailedReason reason; private final String details; - public NetworkRequestCanceledEvent(Model model, String name, boolean showInTrace, Request request, + public NetworkRequestCanceledEvent(MiSimModel model, String name, boolean showInTrace, Request request, RequestFailedReason reason) { this(model, name, showInTrace, request, reason, null); } @@ -26,7 +26,7 @@ public NetworkRequestCanceledEvent(Model model, String name, boolean showInTrace * @param reason why the request canceled/failed * @param details optional reasoning string that is used in the trace */ - public NetworkRequestCanceledEvent(Model model, String name, boolean showInTrace, Request request, + public NetworkRequestCanceledEvent(MiSimModel model, String name, boolean showInTrace, Request request, RequestFailedReason reason, String details) { super(model, name, showInTrace, request); this.reason = reason; diff --git a/src/main/java/cambio/simulator/entities/networking/NetworkRequestEvent.java b/src/main/java/cambio/simulator/entities/networking/NetworkRequestEvent.java index 1c28199b..3191af81 100644 --- a/src/main/java/cambio/simulator/entities/networking/NetworkRequestEvent.java +++ b/src/main/java/cambio/simulator/entities/networking/NetworkRequestEvent.java @@ -3,8 +3,8 @@ import java.util.Collection; import cambio.simulator.entities.NamedExternalEvent; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeInstant; /** @@ -27,7 +27,7 @@ public abstract class NetworkRequestEvent extends NamedExternalEvent { * * @param travelingRequest the request that is associated with this request. */ - public NetworkRequestEvent(Model model, String name, boolean showInTrace, Request travelingRequest) { + public NetworkRequestEvent(MiSimModel model, String name, boolean showInTrace, Request travelingRequest) { super(model, name, showInTrace); this.travelingRequest = travelingRequest; updateListeners = travelingRequest.getUpdateListeners(); diff --git a/src/main/java/cambio/simulator/entities/networking/NetworkRequestReceiveEvent.java b/src/main/java/cambio/simulator/entities/networking/NetworkRequestReceiveEvent.java index 08d350ee..a0e4cea5 100644 --- a/src/main/java/cambio/simulator/entities/networking/NetworkRequestReceiveEvent.java +++ b/src/main/java/cambio/simulator/entities/networking/NetworkRequestReceiveEvent.java @@ -1,8 +1,8 @@ package cambio.simulator.entities.networking; import cambio.simulator.entities.microservice.MicroserviceInstance; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; /** * Event that represents the successful arrival of a request at its target instance. @@ -16,7 +16,7 @@ public class NetworkRequestReceiveEvent extends NetworkRequestEvent { private final MicroserviceInstance receivingInstance; - public NetworkRequestReceiveEvent(Model model, String name, boolean showInTrace, + public NetworkRequestReceiveEvent(MiSimModel model, String name, boolean showInTrace, Request travelingRequest, MicroserviceInstance receiver) { super(model, name, showInTrace, travelingRequest); diff --git a/src/main/java/cambio/simulator/entities/networking/NetworkRequestSendEvent.java b/src/main/java/cambio/simulator/entities/networking/NetworkRequestSendEvent.java index 793b2d08..34908a6c 100644 --- a/src/main/java/cambio/simulator/entities/networking/NetworkRequestSendEvent.java +++ b/src/main/java/cambio/simulator/entities/networking/NetworkRequestSendEvent.java @@ -5,10 +5,10 @@ import cambio.simulator.entities.microservice.*; import cambio.simulator.export.ReportCollector; import cambio.simulator.misc.RNGStorage; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; import desmoj.core.dist.ContDistNormal; import desmoj.core.dist.NumericalDist; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeSpan; /** @@ -27,17 +27,17 @@ public class NetworkRequestSendEvent extends NetworkRequestEvent { private transient NetworkRequestTimeoutEvent timeoutEvent; private boolean isCanceled = false; - public NetworkRequestSendEvent(Model model, String name, boolean showInTrace, Request request, + public NetworkRequestSendEvent(MiSimModel model, String name, boolean showInTrace, Request request, MicroserviceInstance target) { this(model, name, showInTrace, request, null, target); } - public NetworkRequestSendEvent(Model model, String name, boolean showInTrace, Request request, + public NetworkRequestSendEvent(MiSimModel model, String name, boolean showInTrace, Request request, Microservice target) { this(model, name, showInTrace, request, target, null); } - private NetworkRequestSendEvent(Model model, String name, boolean showInTrace, Request request, + private NetworkRequestSendEvent(MiSimModel model, String name, boolean showInTrace, Request request, Microservice targetService, MicroserviceInstance targetInstance) { super(model, name, showInTrace, request); this.targetService = targetService; diff --git a/src/main/java/cambio/simulator/entities/networking/NetworkRequestTimeoutEvent.java b/src/main/java/cambio/simulator/entities/networking/NetworkRequestTimeoutEvent.java index d187c000..c0d503d9 100644 --- a/src/main/java/cambio/simulator/entities/networking/NetworkRequestTimeoutEvent.java +++ b/src/main/java/cambio/simulator/entities/networking/NetworkRequestTimeoutEvent.java @@ -3,8 +3,10 @@ import java.util.concurrent.TimeUnit; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.*; +import desmoj.core.simulator.TimeInstant; +import desmoj.core.simulator.TimeSpan; /** * Event that represents the timeout of a {@link Request}. Is automatically scheduled with each send and canceled @@ -23,7 +25,7 @@ public class NetworkRequestTimeoutEvent extends NetworkRequestEvent implements I * * @param request the request that should be able to time out. */ - public NetworkRequestTimeoutEvent(Model model, String name, boolean showInTrace, Request request) { + public NetworkRequestTimeoutEvent(MiSimModel model, String name, boolean showInTrace, Request request) { super(model, name, showInTrace, request); this.setSchedulingPriority(Priority.LOW); this.schedule(new TimeSpan(8, TimeUnit.SECONDS)); diff --git a/src/main/java/cambio/simulator/entities/networking/Request.java b/src/main/java/cambio/simulator/entities/networking/Request.java index 6673ff2c..15084632 100644 --- a/src/main/java/cambio/simulator/entities/networking/Request.java +++ b/src/main/java/cambio/simulator/entities/networking/Request.java @@ -7,7 +7,6 @@ import cambio.simulator.entities.microservice.Operation; import cambio.simulator.misc.RNGStorage; import cambio.simulator.models.MiSimModel; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeInstant; import org.apache.commons.math3.util.Precision; @@ -36,14 +35,14 @@ public abstract class Request extends NamedEntity { private TimeInstant timestampComputationCompleted; private TimeInstant timestampDependenciesCompleted; - protected Request(Model model, String name, boolean showInTrace, Request parent, Operation operation, + protected Request(MiSimModel model, String name, boolean showInTrace, Request parent, Operation operation, MicroserviceInstance requester) { super(model, name, showInTrace); this.operation = operation; this.requester = requester; this.parent = parent; this.prob = RNGStorage.get(this.getClass().getName(), - () -> new Random(((MiSimModel) getModel()).getExperimentMetaData().getSeed())); + () -> new Random(getModel().getExperimentMetaData().getSeed())); createDependencies(); if (dependencies.isEmpty()) { //TODO: clean up this mess (this call is made to neatly trigger onDependenciesComplete) diff --git a/src/main/java/cambio/simulator/entities/networking/RequestSender.java b/src/main/java/cambio/simulator/entities/networking/RequestSender.java index 420001cd..e59246cb 100644 --- a/src/main/java/cambio/simulator/entities/networking/RequestSender.java +++ b/src/main/java/cambio/simulator/entities/networking/RequestSender.java @@ -6,7 +6,9 @@ import cambio.simulator.entities.NamedEntity; import cambio.simulator.entities.microservice.Microservice; import cambio.simulator.entities.microservice.MicroserviceInstance; -import desmoj.core.simulator.*; +import cambio.simulator.models.MiSimModel; +import desmoj.core.simulator.TimeInstant; +import desmoj.core.simulator.TimeSpan; /** * Class that provides the ability to send requests and register listeners to this requests. @@ -43,7 +45,7 @@ public boolean onRequestResultArrivedAtRequester(Request request, TimeInstant wh } }; - public RequestSender(Model model, String name, boolean showInTrace) { + public RequestSender(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } diff --git a/src/main/java/cambio/simulator/entities/networking/ServiceDependencyInstance.java b/src/main/java/cambio/simulator/entities/networking/ServiceDependencyInstance.java index 19d9385d..75ee14f4 100644 --- a/src/main/java/cambio/simulator/entities/networking/ServiceDependencyInstance.java +++ b/src/main/java/cambio/simulator/entities/networking/ServiceDependencyInstance.java @@ -2,7 +2,7 @@ import cambio.simulator.entities.NamedEntity; import cambio.simulator.entities.microservice.*; -import desmoj.core.simulator.Model; +import cambio.simulator.models.MiSimModel; /** * This is an instance of a {@link DependencyDescription}. It describes an actual existing dependency of a {@code @@ -30,7 +30,7 @@ public class ServiceDependencyInstance extends NamedEntity { * @param targetOp {@link Operation} that is targeted by this dependency. * @param dependencyDescription generic data that describes this dependency. */ - public ServiceDependencyInstance(Model model, Request parentRequest, Operation targetOp, + public ServiceDependencyInstance(MiSimModel model, Request parentRequest, Operation targetOp, DependencyDescription dependencyDescription) { super(model, String.format( diff --git a/src/main/java/cambio/simulator/entities/networking/UserRequest.java b/src/main/java/cambio/simulator/entities/networking/UserRequest.java index dad36ee8..b192e3c7 100644 --- a/src/main/java/cambio/simulator/entities/networking/UserRequest.java +++ b/src/main/java/cambio/simulator/entities/networking/UserRequest.java @@ -3,7 +3,7 @@ import cambio.simulator.entities.generator.LoadGeneratorDescriptionExecutor; import cambio.simulator.entities.microservice.Operation; import cambio.simulator.export.ReportCollector; -import desmoj.core.simulator.Model; +import cambio.simulator.models.MiSimModel; /** * A {@code Request} that represents a request that is created by a user from outside the simulated system. @@ -17,7 +17,7 @@ */ public class UserRequest extends Request { - public UserRequest(Model model, String name, boolean showInTrace, Operation operation) { + public UserRequest(MiSimModel model, String name, boolean showInTrace, Operation operation) { super(model, name, showInTrace, null, operation, null); } diff --git a/src/main/java/cambio/simulator/entities/patterns/BasicPeriodicAutoscalingStrategyProxy.java b/src/main/java/cambio/simulator/entities/patterns/BasicPeriodicAutoscalingStrategyProxy.java index 51043731..2ba295d0 100644 --- a/src/main/java/cambio/simulator/entities/patterns/BasicPeriodicAutoscalingStrategyProxy.java +++ b/src/main/java/cambio/simulator/entities/patterns/BasicPeriodicAutoscalingStrategyProxy.java @@ -1,7 +1,7 @@ package cambio.simulator.entities.patterns; +import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; -import desmoj.core.simulator.Model; /** * An examplary implementation of a {@link StrategicPeriodicServiceOwnedPattern} with a potentially varying {@link @@ -12,7 +12,7 @@ @JsonTypeName(value = "autoscaling", alternativeNames = "autoscale") public class BasicPeriodicAutoscalingStrategyProxy extends StrategicPeriodicServiceOwnedPattern { - public BasicPeriodicAutoscalingStrategyProxy(Model model, String name, boolean showInTrace) { + public BasicPeriodicAutoscalingStrategyProxy(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); strategy = new ReactiveAutoscalingPolicy(); //default strategy } diff --git a/src/main/java/cambio/simulator/entities/patterns/CircuitBreaker.java b/src/main/java/cambio/simulator/entities/patterns/CircuitBreaker.java index 66e17ead..0edf80bc 100644 --- a/src/main/java/cambio/simulator/entities/patterns/CircuitBreaker.java +++ b/src/main/java/cambio/simulator/entities/patterns/CircuitBreaker.java @@ -7,10 +7,10 @@ import cambio.simulator.entities.networking.*; import cambio.simulator.export.MultiDataPointReporter; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeInstant; /** @@ -47,7 +47,7 @@ public final class CircuitBreaker extends InstanceOwnedPattern implements IReque @Expose private int rollingWindow = 20; //window over which error rates are collected - public CircuitBreaker(Model model, String name, boolean showInTrace) { + public CircuitBreaker(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); reporter = new MultiDataPointReporter(String.format("CB[%s]_", name)); } @@ -156,7 +156,7 @@ private void collectData(TimeInstant when) { } @Override - public void onInitializedCompleted(Model model) { + public void onInitializedCompleted(MiSimModel model) { super.onInitializedCompleted(model); if (errorThresholdPercentage != Double.POSITIVE_INFINITY && errorThresholdPercentage > 1) { diff --git a/src/main/java/cambio/simulator/entities/patterns/HalfOpenBreakerEvent.java b/src/main/java/cambio/simulator/entities/patterns/HalfOpenBreakerEvent.java index c82c3bfd..d9fcf153 100644 --- a/src/main/java/cambio/simulator/entities/patterns/HalfOpenBreakerEvent.java +++ b/src/main/java/cambio/simulator/entities/patterns/HalfOpenBreakerEvent.java @@ -2,8 +2,8 @@ import cambio.simulator.entities.NamedExternalEvent; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; /** * Event that represents the half-closing of a circuit breaker. @@ -19,7 +19,7 @@ public class HalfOpenBreakerEvent extends NamedExternalEvent { * * @param stateToChange circuit breaker that should change its state to half-open */ - public HalfOpenBreakerEvent(Model model, String name, boolean showInTrace, + public HalfOpenBreakerEvent(MiSimModel model, String name, boolean showInTrace, ICircuitBreakerState stateToChange) { super(model, name, showInTrace); this.stateToChange = stateToChange; diff --git a/src/main/java/cambio/simulator/entities/patterns/IPatternLifeCycleHooks.java b/src/main/java/cambio/simulator/entities/patterns/IPatternLifeCycleHooks.java index 1463da26..a79ab62b 100644 --- a/src/main/java/cambio/simulator/entities/patterns/IPatternLifeCycleHooks.java +++ b/src/main/java/cambio/simulator/entities/patterns/IPatternLifeCycleHooks.java @@ -1,6 +1,6 @@ package cambio.simulator.entities.patterns; -import desmoj.core.simulator.Model; +import cambio.simulator.models.MiSimModel; /** * Represents all pattern lifecycle hooks. @@ -12,7 +12,7 @@ public interface IPatternLifeCycleHooks { /** * Will be called after completion of the initialization right after the config was injected. */ - default void onInitializedCompleted(Model model) { + default void onInitializedCompleted(MiSimModel model) { } /** diff --git a/src/main/java/cambio/simulator/entities/patterns/InstanceOwnedPattern.java b/src/main/java/cambio/simulator/entities/patterns/InstanceOwnedPattern.java index 50146945..46b8f59b 100644 --- a/src/main/java/cambio/simulator/entities/patterns/InstanceOwnedPattern.java +++ b/src/main/java/cambio/simulator/entities/patterns/InstanceOwnedPattern.java @@ -3,8 +3,8 @@ import cambio.simulator.entities.NamedEntity; import cambio.simulator.entities.microservice.Microservice; import cambio.simulator.entities.microservice.MicroserviceInstance; +import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; -import desmoj.core.simulator.Model; /** * Represents a resilience pattern that is owned by a {@link MicroserviceInstance}. @@ -14,7 +14,7 @@ * instance if their type name is set via the {@link JsonTypeName} annotation. For a successful parsing the subtype * need to have a constructor with the following signature:
*
- * constructor({@link Model}, {@link String}, {@link Boolean}, {@link MicroserviceInstance})
+ * constructor({@link MiSimModel}, {@link String}, {@link Boolean}, {@link MicroserviceInstance})
  * 
* *

@@ -47,7 +47,7 @@ public abstract class InstanceOwnedPattern extends NamedEntity implements IPatte protected final MicroserviceInstance owner = null; - public InstanceOwnedPattern(Model model, String name, boolean showInTrace) { + public InstanceOwnedPattern(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } diff --git a/src/main/java/cambio/simulator/entities/patterns/JitteringExponentialBackoffRetryStrategy.java b/src/main/java/cambio/simulator/entities/patterns/JitteringExponentialBackoffRetryStrategy.java index ed516f6e..0fc99808 100644 --- a/src/main/java/cambio/simulator/entities/patterns/JitteringExponentialBackoffRetryStrategy.java +++ b/src/main/java/cambio/simulator/entities/patterns/JitteringExponentialBackoffRetryStrategy.java @@ -4,7 +4,6 @@ import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; -import desmoj.core.simulator.Model; /** * Represents a jittering exponential retry backoff strategy. Generates doubles based on the formula {@code @@ -26,8 +25,8 @@ public double getNextDelay(int tries) { } @Override - public void onInitializedCompleted(Model model) { + public void onInitializedCompleted(MiSimModel model) { super.onInitializedCompleted(model); - rng = new Random(((MiSimModel) model).getExperimentMetaData().getSeed()); + rng = new Random(model.getExperimentMetaData().getSeed()); } } diff --git a/src/main/java/cambio/simulator/entities/patterns/JitteringLinearBackoffRetryStrategy.java b/src/main/java/cambio/simulator/entities/patterns/JitteringLinearBackoffRetryStrategy.java index 6db5a8f7..e4e471db 100644 --- a/src/main/java/cambio/simulator/entities/patterns/JitteringLinearBackoffRetryStrategy.java +++ b/src/main/java/cambio/simulator/entities/patterns/JitteringLinearBackoffRetryStrategy.java @@ -4,7 +4,6 @@ import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; -import desmoj.core.simulator.Model; /** * Represents a jittering linear retry backoff strategy. Generates doubles based on the formula {@code random(0, @@ -26,8 +25,8 @@ public double getNextDelay(int tries) { @Override - public void onInitializedCompleted(Model model) { + public void onInitializedCompleted(MiSimModel model) { super.onInitializedCompleted(model); - rng = new Random(((MiSimModel) model).getExperimentMetaData().getSeed()); + rng = new Random(model.getExperimentMetaData().getSeed()); } } diff --git a/src/main/java/cambio/simulator/entities/patterns/LoadBalancer.java b/src/main/java/cambio/simulator/entities/patterns/LoadBalancer.java index 2416b48f..3a9a7147 100644 --- a/src/main/java/cambio/simulator/entities/patterns/LoadBalancer.java +++ b/src/main/java/cambio/simulator/entities/patterns/LoadBalancer.java @@ -4,8 +4,8 @@ import java.util.stream.Collectors; import cambio.simulator.entities.microservice.*; +import cambio.simulator.models.MiSimModel; import desmoj.core.simulator.Entity; -import desmoj.core.simulator.Model; /** * Wrapper Class for {@link ILoadBalancingStrategy} to encapsulate common behavior around it. E.g. capture last chosen @@ -21,7 +21,7 @@ public final class LoadBalancer extends Entity { /** * Creates a new instance of a loadbalancer that will use the given strategy. */ - public LoadBalancer(Model model, String name, boolean showInTrace, ILoadBalancingStrategy loadBalancingStrategy) { + public LoadBalancer(MiSimModel model, String name, boolean showInTrace, ILoadBalancingStrategy loadBalancingStrategy) { super(model, name, showInTrace); if (loadBalancingStrategy != null) { this.loadBalancingStrategy = loadBalancingStrategy; diff --git a/src/main/java/cambio/simulator/entities/patterns/PeriodicPatternScheduler.java b/src/main/java/cambio/simulator/entities/patterns/PeriodicPatternScheduler.java index b9022e9e..eb319d4a 100644 --- a/src/main/java/cambio/simulator/entities/patterns/PeriodicPatternScheduler.java +++ b/src/main/java/cambio/simulator/entities/patterns/PeriodicPatternScheduler.java @@ -2,8 +2,8 @@ import cambio.simulator.entities.NamedSimProcess; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeSpan; /** @@ -28,7 +28,7 @@ public class PeriodicPatternScheduler extends NamedSimProcess { * @param stop simulation time after which no more triggers should happen. * @param interval interval/period between triggers */ - public PeriodicPatternScheduler(Model model, IPeriodicPattern pattern, double start, double stop, + public PeriodicPatternScheduler(MiSimModel model, IPeriodicPattern pattern, double start, double stop, double interval) { super(model, null, true, false); this.owner = pattern; diff --git a/src/main/java/cambio/simulator/entities/patterns/PeriodicServiceOwnedPattern.java b/src/main/java/cambio/simulator/entities/patterns/PeriodicServiceOwnedPattern.java index 8b7799ff..ab449994 100644 --- a/src/main/java/cambio/simulator/entities/patterns/PeriodicServiceOwnedPattern.java +++ b/src/main/java/cambio/simulator/entities/patterns/PeriodicServiceOwnedPattern.java @@ -1,8 +1,8 @@ package cambio.simulator.entities.patterns; +import cambio.simulator.models.MiSimModel; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeInstant; /** @@ -22,12 +22,12 @@ public abstract class PeriodicServiceOwnedPattern extends ServiceOwnedPattern im private transient PeriodicPatternScheduler scheduler; - public PeriodicServiceOwnedPattern(Model model, String name, boolean showInTrace) { + public PeriodicServiceOwnedPattern(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } @Override - public void onInitializedCompleted(Model model) { + public void onInitializedCompleted(MiSimModel model) { scheduler = new PeriodicPatternScheduler(getModel(), this, start, stop, period); scheduler.activate(new TimeInstant(start)); } diff --git a/src/main/java/cambio/simulator/entities/patterns/RandomLoadBalanceStrategy.java b/src/main/java/cambio/simulator/entities/patterns/RandomLoadBalanceStrategy.java index 1b6a07e5..f23e9d8e 100644 --- a/src/main/java/cambio/simulator/entities/patterns/RandomLoadBalanceStrategy.java +++ b/src/main/java/cambio/simulator/entities/patterns/RandomLoadBalanceStrategy.java @@ -6,7 +6,6 @@ import cambio.simulator.entities.microservice.NoInstanceAvailableException; import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; -import desmoj.core.simulator.Model; @JsonTypeName("random") final class RandomLoadBalanceStrategy implements ILoadBalancingStrategy { @@ -45,9 +44,9 @@ public MicroserviceInstance getNextInstance(Collection run } @Override - public void onInitializedCompleted(Model model) { + public void onInitializedCompleted(MiSimModel model) { try { - rng = new Random(((MiSimModel) model).getExperimentMetaData().getSeed()); + rng = new Random(model.getExperimentMetaData().getSeed()); } catch (ClassCastException e) { rng = new Random(); } diff --git a/src/main/java/cambio/simulator/entities/patterns/Retry.java b/src/main/java/cambio/simulator/entities/patterns/Retry.java index 0ac277b9..090ac96b 100644 --- a/src/main/java/cambio/simulator/entities/patterns/Retry.java +++ b/src/main/java/cambio/simulator/entities/patterns/Retry.java @@ -7,9 +7,11 @@ import cambio.simulator.entities.microservice.MicroserviceInstance; import cambio.simulator.entities.networking.*; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; import com.google.gson.annotations.Expose; -import desmoj.core.simulator.*; +import desmoj.core.simulator.TimeInstant; +import desmoj.core.simulator.TimeSpan; /** * Retry implementation that employs a full jitter based exponential backoff. Jittering can be turned off. @@ -29,7 +31,7 @@ public class Retry extends StrategicInstanceOwnedPattern impleme private int maxTries = 5; - public Retry(final Model model, final String name, final boolean showInTrace) { + public Retry(final MiSimModel model, final String name, final boolean showInTrace) { super(model, name, showInTrace); this.setStrategy(new JitteringExponentialBackoffRetryStrategy()); // set default value } diff --git a/src/main/java/cambio/simulator/entities/patterns/ServiceOwnedPattern.java b/src/main/java/cambio/simulator/entities/patterns/ServiceOwnedPattern.java index be25ea15..6e478e58 100644 --- a/src/main/java/cambio/simulator/entities/patterns/ServiceOwnedPattern.java +++ b/src/main/java/cambio/simulator/entities/patterns/ServiceOwnedPattern.java @@ -2,7 +2,7 @@ import cambio.simulator.entities.NamedEntity; import cambio.simulator.entities.microservice.Microservice; -import desmoj.core.simulator.Model; +import cambio.simulator.models.MiSimModel; /** * Resilience Pattern that is owned by a {@link Microservice}. These patterns should represent mechanics that live on a @@ -12,7 +12,7 @@ public abstract class ServiceOwnedPattern extends NamedEntity implements IPatter protected Microservice owner = null; - public ServiceOwnedPattern(Model model, String name, boolean showInTrace) { + public ServiceOwnedPattern(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } diff --git a/src/main/java/cambio/simulator/entities/patterns/StrategicInstanceOwnedPattern.java b/src/main/java/cambio/simulator/entities/patterns/StrategicInstanceOwnedPattern.java index 7220aa42..e716d896 100644 --- a/src/main/java/cambio/simulator/entities/patterns/StrategicInstanceOwnedPattern.java +++ b/src/main/java/cambio/simulator/entities/patterns/StrategicInstanceOwnedPattern.java @@ -1,7 +1,7 @@ package cambio.simulator.entities.patterns; +import cambio.simulator.models.MiSimModel; import com.google.gson.annotations.Expose; -import desmoj.core.simulator.Model; /** * Represents a {@link ServiceOwnedPattern} that wants to be injected with an {@link IStrategy} object. @@ -15,7 +15,7 @@ public abstract class StrategicInstanceOwnedPattern extends @Expose protected S strategy; - public StrategicInstanceOwnedPattern(Model model, String name, boolean showInTrace) { + public StrategicInstanceOwnedPattern(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } diff --git a/src/main/java/cambio/simulator/entities/patterns/StrategicPeriodicServiceOwnedPattern.java b/src/main/java/cambio/simulator/entities/patterns/StrategicPeriodicServiceOwnedPattern.java index 9b2c457f..c0a77fe3 100644 --- a/src/main/java/cambio/simulator/entities/patterns/StrategicPeriodicServiceOwnedPattern.java +++ b/src/main/java/cambio/simulator/entities/patterns/StrategicPeriodicServiceOwnedPattern.java @@ -1,8 +1,8 @@ package cambio.simulator.entities.patterns; +import cambio.simulator.models.MiSimModel; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeInstant; /** @@ -25,12 +25,12 @@ public abstract class StrategicPeriodicServiceOwnedPattern private transient PeriodicPatternScheduler scheduler; - public StrategicPeriodicServiceOwnedPattern(Model model, String name, boolean showInTrace) { + public StrategicPeriodicServiceOwnedPattern(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } @Override - public void onInitializedCompleted(Model model) { + public void onInitializedCompleted(MiSimModel model) { scheduler = new PeriodicPatternScheduler(getModel(), this, start, stop, period); scheduler.activate(new TimeInstant(start)); } diff --git a/src/main/java/cambio/simulator/entities/patterns/StrategicServiceOwnedPattern.java b/src/main/java/cambio/simulator/entities/patterns/StrategicServiceOwnedPattern.java index ebbbd549..d7cbdc2e 100644 --- a/src/main/java/cambio/simulator/entities/patterns/StrategicServiceOwnedPattern.java +++ b/src/main/java/cambio/simulator/entities/patterns/StrategicServiceOwnedPattern.java @@ -1,7 +1,7 @@ package cambio.simulator.entities.patterns; +import cambio.simulator.models.MiSimModel; import com.google.gson.annotations.Expose; -import desmoj.core.simulator.Model; /** * Represents a pattern owned by a {@link cambio.simulator.entities.microservice.Microservice} that employs a {@link @@ -14,7 +14,7 @@ public abstract class StrategicServiceOwnedPattern extends @Expose protected S strategy; - public StrategicServiceOwnedPattern(Model model, String name, boolean showInTrace) { + public StrategicServiceOwnedPattern(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } diff --git a/src/main/java/cambio/simulator/entities/patterns/UtilizationBalanceStrategy.java b/src/main/java/cambio/simulator/entities/patterns/UtilizationBalanceStrategy.java index cf57ff71..5457909a 100644 --- a/src/main/java/cambio/simulator/entities/patterns/UtilizationBalanceStrategy.java +++ b/src/main/java/cambio/simulator/entities/patterns/UtilizationBalanceStrategy.java @@ -7,7 +7,6 @@ import cambio.simulator.entities.microservice.NoInstanceAvailableException; import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; -import desmoj.core.simulator.Model; /** * Strategy that chooses the least utilized Microservice Instance by current relative Queue demand. @@ -40,7 +39,7 @@ public MicroserviceInstance getNextInstance(Collection run } @Override - public void onInitializedCompleted(Model model) { - rng = new Random(((MiSimModel) model).getExperimentMetaData().getSeed()); + public void onInitializedCompleted(MiSimModel model) { + rng = new Random(model.getExperimentMetaData().getSeed()); } } diff --git a/src/main/java/cambio/simulator/events/ChaosMonkeyEvent.java b/src/main/java/cambio/simulator/events/ChaosMonkeyEvent.java index cac99292..087f7746 100644 --- a/src/main/java/cambio/simulator/events/ChaosMonkeyEvent.java +++ b/src/main/java/cambio/simulator/events/ChaosMonkeyEvent.java @@ -2,11 +2,11 @@ import cambio.simulator.entities.microservice.Microservice; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; import co.paralleluniverse.fibers.SuspendExecution; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -import desmoj.core.simulator.Model; /** * A ChaosMonkeyEvent is an ExternalEvent that gets scheduled at the beginning of the @@ -23,7 +23,7 @@ public class ChaosMonkeyEvent extends SelfScheduledExperimentAction { @Expose private Microservice microservice; - public ChaosMonkeyEvent(Model model, String name, boolean showInTrace) { + public ChaosMonkeyEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } @@ -37,7 +37,7 @@ public ChaosMonkeyEvent(Model model, String name, boolean showInTrace) { * @param instances int: The number of instances of the specified microservice you want to shut down, can be * greater than the number of currently running instances */ - public ChaosMonkeyEvent(Model owner, String name, boolean showInTrace, Microservice microservice, int instances) { + public ChaosMonkeyEvent(MiSimModel owner, String name, boolean showInTrace, Microservice microservice, int instances) { super(owner, name, showInTrace); this.microservice = microservice; diff --git a/src/main/java/cambio/simulator/events/DelayInjection.java b/src/main/java/cambio/simulator/events/DelayInjection.java index dfb60603..03ba1d51 100644 --- a/src/main/java/cambio/simulator/events/DelayInjection.java +++ b/src/main/java/cambio/simulator/events/DelayInjection.java @@ -6,11 +6,13 @@ import cambio.simulator.entities.microservice.Microservice; import cambio.simulator.entities.microservice.Operation; import cambio.simulator.entities.networking.InternalRequest; +import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import desmoj.core.dist.ContDistNormal; -import desmoj.core.simulator.*; +import desmoj.core.simulator.ExternalEvent; +import desmoj.core.simulator.TimeSpan; /** * Event that triggers a latency injection. The injection can be applied on different levels:
Either all outgoing @@ -34,7 +36,7 @@ public class DelayInjection extends SelfScheduledExperimentAction { @Expose private double duration; - public DelayInjection(Model model, String name, boolean showInTrace) { + public DelayInjection(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } @@ -49,7 +51,7 @@ public DelayInjection(Model model, String name, boolean showInTrace) { * @param operationTrg target {@link Operation} of the operationSrc that should be affected, can be set to {@code * null} to affect all outgoing {@link InternalRequest}s */ - public DelayInjection(Model model, String name, boolean showInTrace, double delay, double stdDeviation, + public DelayInjection(MiSimModel model, String name, boolean showInTrace, double delay, double stdDeviation, Microservice microservice, Operation operationSrc, Operation operationTrg) { super(model, name, showInTrace); Objects.requireNonNull(microservice); diff --git a/src/main/java/cambio/simulator/events/ExperimentAction.java b/src/main/java/cambio/simulator/events/ExperimentAction.java index a92b48d0..07e61d19 100644 --- a/src/main/java/cambio/simulator/events/ExperimentAction.java +++ b/src/main/java/cambio/simulator/events/ExperimentAction.java @@ -1,9 +1,9 @@ package cambio.simulator.events; import cambio.simulator.entities.NamedExternalEvent; +import cambio.simulator.models.MiSimModel; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -import desmoj.core.simulator.Model; import org.jetbrains.annotations.Contract; /** @@ -17,7 +17,7 @@ public abstract class ExperimentAction extends NamedExternalEvent implements ISe @SerializedName(value = "start", alternate = {"initial_arrival_time", "arrival_time", "time"}) protected double initialArrivalTime = 0; - public ExperimentAction(Model model, String s, boolean b) { + public ExperimentAction(MiSimModel model, String s, boolean b) { super(model, s, b); } diff --git a/src/main/java/cambio/simulator/events/SelfScheduledExperimentAction.java b/src/main/java/cambio/simulator/events/SelfScheduledExperimentAction.java index 0467cd64..f0f02883 100644 --- a/src/main/java/cambio/simulator/events/SelfScheduledExperimentAction.java +++ b/src/main/java/cambio/simulator/events/SelfScheduledExperimentAction.java @@ -2,7 +2,7 @@ import java.util.Objects; -import desmoj.core.simulator.Model; +import cambio.simulator.models.MiSimModel; import desmoj.core.simulator.TimeInstant; /** @@ -12,8 +12,8 @@ */ public abstract class SelfScheduledExperimentAction extends ExperimentAction implements ISelfScheduled { - public SelfScheduledExperimentAction(Model model, String name, boolean showInTrace) { - super(model, name, showInTrace); + public SelfScheduledExperimentAction(MiSimModel owner, String name, boolean showInTrace) { + super(owner, name, showInTrace); } @Override diff --git a/src/main/java/cambio/simulator/events/SummonerMonkeyEvent.java b/src/main/java/cambio/simulator/events/SummonerMonkeyEvent.java index 808f4483..501a3ced 100644 --- a/src/main/java/cambio/simulator/events/SummonerMonkeyEvent.java +++ b/src/main/java/cambio/simulator/events/SummonerMonkeyEvent.java @@ -2,10 +2,10 @@ import cambio.simulator.entities.microservice.Microservice; import cambio.simulator.misc.Priority; +import cambio.simulator.models.MiSimModel; import cambio.simulator.parsing.JsonTypeName; import co.paralleluniverse.fibers.SuspendExecution; import com.google.gson.annotations.Expose; -import desmoj.core.simulator.Model; /** * A {@code SummonerMonkeyEvent} is an {@code ExternalEvent} that gets scheduled at the begin of the experiment. It @@ -19,7 +19,7 @@ public class SummonerMonkeyEvent extends SelfScheduledExperimentAction { @Expose private Microservice microservice; - public SummonerMonkeyEvent(Model model, String name, boolean showInTrace) { + public SummonerMonkeyEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } @@ -32,7 +32,7 @@ public SummonerMonkeyEvent(Model model, String name, boolean showInTrace) { * @param microservice int: The ID of the microservice whose instances should be started * @param instances int: The number of instances of the specified microservice should be started */ - public SummonerMonkeyEvent(Model owner, String name, boolean showInTrace, Microservice microservice, + public SummonerMonkeyEvent(MiSimModel owner, String name, boolean showInTrace, Microservice microservice, int instances) { super(owner, name, showInTrace); diff --git a/src/main/java/cambio/simulator/parsing/EntityCreator.java b/src/main/java/cambio/simulator/parsing/EntityCreator.java index 62c0565e..ffb838f4 100644 --- a/src/main/java/cambio/simulator/parsing/EntityCreator.java +++ b/src/main/java/cambio/simulator/parsing/EntityCreator.java @@ -3,14 +3,14 @@ import java.lang.reflect.*; import java.util.Objects; +import cambio.simulator.models.MiSimModel; import com.google.gson.InstanceCreator; -import desmoj.core.simulator.Model; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; /** * Extention of Gsons' {@link InstanceCreator} to create {@link desmoj.core.simulator.Entity} instances of Desmo-J - * objects. Due to type erasure and type saftey the public factory {@link EntityCreator#getCreator(Model, String, + * objects. Due to type erasure and type saftey the public factory {@link EntityCreator#getCreator(MiSimModel, String, * Class)} hast to be used to create instances of this class. * *

@@ -19,14 +19,14 @@ * * @param Type of the pattern * @author Lion Wagner - * @see EntityCreator#getCreator(Model, String, Class) + * @see EntityCreator#getCreator(MiSimModel, String, Class) */ public class EntityCreator implements InstanceCreator { - private final Model model; + private final MiSimModel model; private final String name; private final Class targetClass; - private EntityCreator(Model model, String name, + private EntityCreator(MiSimModel model, String name, Class targetClass) { this.model = model; this.name = name; @@ -45,7 +45,7 @@ private EntityCreator(Model model, String name, */ @Contract("null,_,_ -> fail; _,_,null-> fail") public static @NotNull EntityCreator getCreator( - Model model, String name, Class targetClass) { + MiSimModel model, String name, Class targetClass) { Objects.requireNonNull(model); Objects.requireNonNull(targetClass); return new EntityCreator<>(model, name, targetClass); @@ -58,13 +58,13 @@ private EntityCreator(Model model, String name, public T createInstance(Type type) { try { Constructor c = - targetClass.getDeclaredConstructor(Model.class, String.class, boolean.class); + targetClass.getDeclaredConstructor(MiSimModel.class, String.class, boolean.class); return c.newInstance(model, name, true); } catch (NoSuchMethodException e) { throw new RuntimeException( String.format( "Cannot create an instance of %s. Missing constructor of with parameters (%s, %s, %s)", - targetClass.getName(), Model.class, String.class, Boolean.class), + targetClass.getName(), MiSimModel.class, String.class, Boolean.class), e); } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) { throw new RuntimeException( diff --git a/src/main/java/cambio/simulator/parsing/PatternConfigurationParser.java b/src/main/java/cambio/simulator/parsing/PatternConfigurationParser.java index af470741..3df87d53 100644 --- a/src/main/java/cambio/simulator/parsing/PatternConfigurationParser.java +++ b/src/main/java/cambio/simulator/parsing/PatternConfigurationParser.java @@ -4,8 +4,8 @@ import java.util.Arrays; import cambio.simulator.entities.patterns.*; +import cambio.simulator.models.MiSimModel; import com.google.gson.Gson; -import desmoj.core.simulator.Model; import org.jetbrains.annotations.NotNull; /** @@ -37,7 +37,7 @@ public class PatternConfigurationParser { * @see JsonTypeName */ public static T getPatternInstance( - Model model, + MiSimModel model, String ownerName, @NotNull TypeNameAssociatedConfigurationData configurationData, Class patternBaseType) throws ClassNotFoundException { diff --git a/src/main/java/cambio/simulator/parsing/adapter/experiment/ExperimentModelAdapter.java b/src/main/java/cambio/simulator/parsing/adapter/experiment/ExperimentModelAdapter.java index 1dae77ff..08d2bbfe 100644 --- a/src/main/java/cambio/simulator/parsing/adapter/experiment/ExperimentModelAdapter.java +++ b/src/main/java/cambio/simulator/parsing/adapter/experiment/ExperimentModelAdapter.java @@ -7,7 +7,6 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import cambio.simulator.entities.generator.LoadGeneratorDescriptionExecutor; import cambio.simulator.events.ExperimentAction; diff --git a/src/main/java/cambio/simulator/resources/cpu/CPU.java b/src/main/java/cambio/simulator/resources/cpu/CPU.java index 3edb1cfd..5254b008 100644 --- a/src/main/java/cambio/simulator/resources/cpu/CPU.java +++ b/src/main/java/cambio/simulator/resources/cpu/CPU.java @@ -5,10 +5,10 @@ import cambio.simulator.entities.NamedExternalEvent; import cambio.simulator.entities.microservice.MicroserviceInstance; import cambio.simulator.export.MultiDataPointReporter; +import cambio.simulator.models.MiSimModel; import cambio.simulator.resources.cpu.scheduling.CPUProcessScheduler; import cambio.simulator.resources.cpu.scheduling.RoundRobinScheduler; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeSpan; import org.javatuples.Pair; @@ -22,7 +22,7 @@ * @author Lion Wagner * @see CPUProcess * @see CPUProcessScheduler - * @see CPU#CPU(Model, String, boolean, MicroserviceInstance, int, CPUProcessScheduler, int) + * @see CPU#CPU(MiSimModel, String, boolean, MicroserviceInstance, int, CPUProcessScheduler, int) */ public class CPU extends NamedExternalEvent { @@ -45,7 +45,7 @@ public class CPU extends NamedExternalEvent { * @see CPU#CPU * @see RoundRobinScheduler */ - public CPU(Model model, String name, boolean showInTrace, int capacity, MicroserviceInstance owner) { + public CPU(MiSimModel model, String name, boolean showInTrace, int capacity, MicroserviceInstance owner) { this(model, name, showInTrace, capacity, DEFAULT_THREADPOOLSIZE, owner); } @@ -55,7 +55,7 @@ public CPU(Model model, String name, boolean showInTrace, int capacity, Microser * @see CPU#CPU * @see RoundRobinScheduler */ - public CPU(Model model, String name, boolean showInTrace, int capacity, int threadPoolSize, + public CPU(MiSimModel model, String name, boolean showInTrace, int capacity, int threadPoolSize, MicroserviceInstance owner) { this(model, name, showInTrace, owner, capacity, new RoundRobinScheduler(name + "_scheduler"), threadPoolSize); } @@ -68,7 +68,7 @@ public CPU(Model model, String name, boolean showInTrace, int capacity, int thre * * @see CPU#CPU */ - public CPU(Model model, String name, boolean showInTrace, int capacity, CPUProcessScheduler scheduler, + public CPU(MiSimModel model, String name, boolean showInTrace, int capacity, CPUProcessScheduler scheduler, MicroserviceInstance owner) { this(model, name, showInTrace, owner, capacity, scheduler, DEFAULT_THREADPOOLSIZE); } @@ -87,7 +87,7 @@ public CPU(Model model, String name, boolean showInTrace, int capacity, CPUProce * @see CPUProcessScheduler * @see RoundRobinScheduler */ - public CPU(Model model, String name, boolean showInTrace, MicroserviceInstance owner, int capacity, + public CPU(MiSimModel model, String name, boolean showInTrace, MicroserviceInstance owner, int capacity, CPUProcessScheduler scheduler, int threadPoolSize) { super(model, name, showInTrace); this.owner = owner; diff --git a/src/main/java/cambio/simulator/resources/cpu/ComputationBurstCompletedEvent.java b/src/main/java/cambio/simulator/resources/cpu/ComputationBurstCompletedEvent.java index 25e33ccd..8c6cb583 100644 --- a/src/main/java/cambio/simulator/resources/cpu/ComputationBurstCompletedEvent.java +++ b/src/main/java/cambio/simulator/resources/cpu/ComputationBurstCompletedEvent.java @@ -2,8 +2,8 @@ import cambio.simulator.entities.NamedExternalEvent; import cambio.simulator.entities.networking.Request; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; -import desmoj.core.simulator.Model; /** * Event that represents the completion of a process burst for a specific {@link CPUProcess}. @@ -29,7 +29,7 @@ public class ComputationBurstCompletedEvent extends NamedExternalEvent { * @param owner {@link CPU} that is handling the calculation * @param completedDemand demand that was completed by the computation burst. */ - public ComputationBurstCompletedEvent(Model model, String name, boolean showInTrace, CPUProcess endingProcess, + public ComputationBurstCompletedEvent(MiSimModel model, String name, boolean showInTrace, CPUProcess endingProcess, CPU owner, int completedDemand) { super(model, name, showInTrace); this.endingProcess = endingProcess; diff --git a/src/main/java/cambio/simulator/resources/cpu/ComputationCompletedEvent.java b/src/main/java/cambio/simulator/resources/cpu/ComputationCompletedEvent.java index 9ca60794..b2ad2ee3 100644 --- a/src/main/java/cambio/simulator/resources/cpu/ComputationCompletedEvent.java +++ b/src/main/java/cambio/simulator/resources/cpu/ComputationCompletedEvent.java @@ -1,9 +1,9 @@ package cambio.simulator.resources.cpu; import cambio.simulator.entities.networking.Request; +import cambio.simulator.models.MiSimModel; import co.paralleluniverse.fibers.SuspendExecution; import desmoj.core.simulator.Event; -import desmoj.core.simulator.Model; /** * Marks the end of the last computation burst of a thread. @@ -18,7 +18,7 @@ */ public class ComputationCompletedEvent extends Event { - public ComputationCompletedEvent(Model model, String name, boolean showInTrace) { + public ComputationCompletedEvent(MiSimModel model, String name, boolean showInTrace) { super(model, name, showInTrace); } diff --git a/src/test/java/cambio/simulator/test/RandomTieredModel.java b/src/test/java/cambio/simulator/test/RandomTieredModel.java index 3b6b2bf6..fd8369d5 100644 --- a/src/test/java/cambio/simulator/test/RandomTieredModel.java +++ b/src/test/java/cambio/simulator/test/RandomTieredModel.java @@ -21,6 +21,7 @@ import cambio.simulator.entities.microservice.Microservice; import cambio.simulator.entities.microservice.Operation; import cambio.simulator.entities.networking.DependencyDescription; +import cambio.simulator.models.MiSimModel; import desmoj.core.simulator.Model; import org.junit.jupiter.api.Assertions; @@ -145,7 +146,7 @@ public void setGenerator_interval(double generator_interval) { this.generator_interval = generator_interval; } - private void createGenerators(int generator_count, double interval, Model model) { + private void createGenerators(int generator_count, double interval, MiSimModel model) { List tier1Operations = new ArrayList<>(); tiers.get(1).forEach(microservice -> tier1Operations.addAll(Arrays.asList(microservice.getOperations()))); diff --git a/src/test/java/cambio/simulator/test/TestModel.java b/src/test/java/cambio/simulator/test/TestModel.java index 52143cdd..63919846 100644 --- a/src/test/java/cambio/simulator/test/TestModel.java +++ b/src/test/java/cambio/simulator/test/TestModel.java @@ -1,5 +1,6 @@ package cambio.simulator.test; +import cambio.simulator.models.MiSimModel; import desmoj.core.simulator.Model; /** @@ -10,7 +11,7 @@ public class TestModel extends Model { private final Runnable init; - public TestModel(Model model, String s, boolean b, boolean b1, Runnable initialSchedule, Runnable init) { + public TestModel(MiSimModel model, String s, boolean b, boolean b1, Runnable initialSchedule, Runnable init) { super(model, s, b, b1); this.initialSchedule = initialSchedule; this.init = init; diff --git a/src/test/java/cambio/simulator/test/TestUtils.java b/src/test/java/cambio/simulator/test/TestUtils.java index fc5e99d9..4c4a0be5 100644 --- a/src/test/java/cambio/simulator/test/TestUtils.java +++ b/src/test/java/cambio/simulator/test/TestUtils.java @@ -150,21 +150,21 @@ public static Experiment getExampleExperiment(final Model currentModel, final do return currentExperiment; } - // public static InstanceOwnedPatternConfiguration getRetryPatternMock(Model model) { + // public static InstanceOwnedPatternConfiguration getRetryPatternMock(MiSimModel model) { // InstanceOwnedPatternConfiguration data = mock(InstanceOwnedPatternConfiguration.class); // Mockito.when(data.getPatternInstance(any(MicroserviceInstance.class))) // .thenAnswer(invocationOnMock -> new Retry(model, "Retry", true)); // return data; // } // - // public static InstanceOwnedPatternConfiguration getCircuitBreaker(Model model) { + // public static InstanceOwnedPatternConfiguration getCircuitBreaker(MiSimModel model) { // InstanceOwnedPatternConfiguration data = mock(InstanceOwnedPatternConfiguration.class); // Mockito.when(data.getPatternInstance(any(MicroserviceInstance.class))) // .thenAnswer(invocationOnMock -> new CircuitBreaker(model, "CircuitBreaker", true)); // return data; // } // - // public static ServiceOwnedPattern getAutoscaler(Model model) { + // public static ServiceOwnedPattern getAutoscaler(MiSimModel model) { // InstanceOwnedPatternConfiguration data = mock(InstanceOwnedPatternConfiguration.class); // Mockito.when(data.getPatternInstance(any(Microservice.class))) // .thenAnswer(invocationOnMock -> new BasicAutoscalingStrategyProxy(model, "AutoScaler", true)); diff --git a/src/test/java/cambio/simulator/testutils/ArchitectureGenerator.java b/src/test/java/cambio/simulator/testutils/ArchitectureGenerator.java new file mode 100644 index 00000000..e6f9c7f3 --- /dev/null +++ b/src/test/java/cambio/simulator/testutils/ArchitectureGenerator.java @@ -0,0 +1,34 @@ +package cambio.simulator.testutils; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +import com.google.gson.Gson; + +/** + * @author Lion Wagner + */ +public final class ArchitectureGenerator { + + public static String createArchitecture(String networkDelay, final int layerCount, final int maxLayerWidth) { + Map archMap = new HashMap<>(); + archMap.put("networkDelay", networkDelay); + + Map layerMap = new HashMap<>(); + + //create a parabolic function that will generate a diamond shaped architecture with max height of + // maxLayerWidth and a width of layerCount + Function distributionFunction = (x) -> (int) Math.max(1, + -4.0 * maxLayerWidth / (layerCount * layerCount) * x * x + 4.0 * maxLayerWidth / layerCount * x); + + for (int i = 1; i < layerCount; i++) { + int currentLayerWidth = distributionFunction.apply(i); + layerMap.put(i, currentLayerWidth); + } + + + return new Gson().toJson(archMap); + } + +}