diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java index 7e0fb53fd906b3925cc882d17f4839c0c4c60159..78e5b181a9342fc6065ecb99073fd25efdea0b3f 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java @@ -15,17 +15,25 @@ import edu.kit.ipd.descartes.adaptation.analysis.IModelAnalyzer; import edu.kit.ipd.descartes.adaptation.evaluation.performance.IEvaluator; import edu.kit.ipd.descartes.adaptation.evaluation.performance.WeightingFunctionEvaluator; import edu.kit.ipd.descartes.adaptation.event.EventTypeEnum; +import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.BlueYonderExperimentTracker; import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.DmmModelActionHandler; +import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.TacticsHistory; import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.util.ObjectivesHelper; import edu.kit.ipd.descartes.adaptation.analysis.pcm.PcmModelAnalyzer; import edu.kit.ipd.descartes.adaptation.model.repository.dmm.AdaptationProcessModelLoader; import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.IPerformanceDataRepositoryHandler; +import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.ObservationRepositoryHelper; +import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.PerfDataRepoConverter; +import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.PerformanceDataRepositoryHandler; import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.PerformanceDataRepositoryHandlerFactory; import edu.kit.ipd.descartes.mm.adaptation.AdaptationProcess; import edu.kit.ipd.descartes.mm.adaptation.Event; import edu.kit.ipd.descartes.mm.adaptation.Strategy; import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic; import edu.kit.ipd.descartes.perfdatarepo.Impact; +import edu.kit.ipd.descartes.perfdatarepo.Result; +import edu.kit.ipd.descartes.ql.models.repository.Observation; +import edu.kit.ipd.descartes.ql.models.repository.ObservationRepository; public class AdaptationControl { @@ -94,7 +102,7 @@ public class AdaptationControl { // set handlers dmmModelActionHandler = new DmmModelActionHandler(); executor = new TacticExecutor(dmmModelActionHandler); - modelAnalyzer = new PcmModelAnalyzer(); + modelAnalyzer = new PcmModelAnalyzer(perfDataRepoHandler); evaluator = new WeightingFunctionEvaluator(); } catch (IOException e) { logger.error("Error while initializinig controller.", e); @@ -147,7 +155,17 @@ public class AdaptationControl { */ public boolean isObjectiveFulfilled() { logger.debug("Checking if objective <<" + cause.getTriggers().getObjective().getName() + ">> is fulfilled..."); - boolean flag = ObjectivesHelper.isObjectiveFulfilled(cause, perfDataRepoHandler.getCurrentSystemState()); + Result currentSystemState = perfDataRepoHandler.getCurrentSystemState(); + // TODO: Blue Yonder specific, introduce abstraction layer + WeightedTactic latestTactic = TacticsHistory.getInstance().getLatestAppliedTactic(); + if (latestTactic != null && !(perfDataRepoHandler instanceof PerformanceDataRepositoryHandler)) { + String expName = BlueYonderExperimentTracker.getInstance() + .getExperimentNameForDistributedDataCenter(AdaptationProcessModelLoader.getDistributedDataCenter()); + logger.debug("Searching for result of " + expName); + Observation o = ObservationRepositoryHelper.getResultEndingWith(expName, (ObservationRepository) perfDataRepoHandler.getRepository()); + currentSystemState = PerfDataRepoConverter.convertResult(o); + } + boolean flag = ObjectivesHelper.isObjectiveFulfilled(cause, currentSystemState); if (flag) logger.info("Problem that caused event " + cause.getName() + " has been solved, Objective is fulfilled."); else @@ -170,12 +188,11 @@ public class AdaptationControl { * repository. */ public void analyzeModel() { - modelAnalyzer.analyze(); WeightedTactic tactic = TacticsHistory.getInstance().getLatestAppliedTactic(); if (TacticsHistory.getInstance().wasLatestTacticSuccessful()) { - // TODO Call model analysis - Impact latestImpact = perfDataRepoHandler.getLatestImpact(tactic); + modelAnalyzer.analyze(); + Impact latestImpact = modelAnalyzer.getLatestImpact(); if (latestImpact != null) tactic.setLastImpact(latestImpact); } else {