diff --git a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/UtilityEvaluatorController.java b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/UtilityEvaluatorController.java index 86162d8..9892ba9 100644 --- a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/UtilityEvaluatorController.java +++ b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/UtilityEvaluatorController.java @@ -9,6 +9,7 @@ import eu.nebulous.utilityevaluator.converter.NodeCandidateConverter; import eu.nebulous.utilityevaluator.model.Application; import eu.nebulous.utilityevaluator.model.NodeCandidateDTO; import eu.nebulous.utilityevaluator.model.VariableDTO; +import eu.nebulous.utilityevaluator.model.VariableType; import eu.nebulous.utilityevaluator.regression.SimpleCostRegression; import eu.nebulouscloud.exn.core.Publisher; import eu.nebulouscloud.exn.core.SyncedPublisher; @@ -47,8 +48,15 @@ public class UtilityEvaluatorController { } List convertedNodeCandidates = NodeCandidateConverter.convertToDtoList(nodeCandidates); List componentVariables = application.getVariables().get(component); - SimpleCostRegression regression = new SimpleCostRegression(component, convertedNodeCandidates, componentVariables); - application.getCostPerformanceIndicators().put(component, regression); + + if (componentVariables.stream().filter(var -> var.getType().equals(VariableType.CPU) || var.getType().equals(VariableType.RAM)).findAny().isPresent()){ + SimpleCostRegression regression = new SimpleCostRegression(component, convertedNodeCandidates, componentVariables); + application.getCostPerformanceIndicators().put(component, regression); + } + else { + log.warn("There are no variables for component {} = it is not possible to create any cost performance indicator!", component); + } + }; diff --git a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/communication/exnconnector/PerformanceIndicatorSendingService.java b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/communication/exnconnector/PerformanceIndicatorSendingService.java index 76c1675..89f0807 100644 --- a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/communication/exnconnector/PerformanceIndicatorSendingService.java +++ b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/communication/exnconnector/PerformanceIndicatorSendingService.java @@ -54,7 +54,7 @@ public class PerformanceIndicatorSendingService { String componentNameValidAMPL=component.replaceAll("/", "_").substring(1); - String piName = "cost_pi"+componentNameValidAMPL; + String piName = "cost_pi_"+componentNameValidAMPL; ObjectNode pi = performanceIndicators.addObject(); //ObjectNode pi = performanceIndicators.withObject(piName); diff --git a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/converter/NodeCandidateConverter.java b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/converter/NodeCandidateConverter.java index 2dbecf4..3bacc98 100644 --- a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/converter/NodeCandidateConverter.java +++ b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/converter/NodeCandidateConverter.java @@ -79,7 +79,7 @@ public class NodeCandidateConverter { usedNodeParameters.add(node.getCpu()); break; case RAM: - usedNodeParameters.add(Long.valueOf(node.getRam()).intValue()); + usedNodeParameters.add(Long.valueOf(node.getRam()).intValue()); break; default: log.debug("Variable type {} is not usable in cost performance indicators", variable.getType()); diff --git a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/regression/SimpleCostRegression.java b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/regression/SimpleCostRegression.java index 47aa390..3d5a08f 100644 --- a/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/regression/SimpleCostRegression.java +++ b/utility-evaluator/src/main/java/eu/nebulous/utilityevaluator/regression/SimpleCostRegression.java @@ -10,10 +10,7 @@ import eu.nebulous.utilityevaluator.model.VariableDTO; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -/* TODO: comments -this class looks good, except that the coefficient should be filtered based on the variables -*/ @Slf4j public class SimpleCostRegression { @@ -25,11 +22,14 @@ public class SimpleCostRegression { public SimpleCostRegression(String componentName, List nodeCandidates, List variables){ this.componentName = componentName; + this.regression = new OLSMultipleLinearRegression(); + //double[][] argumentsForRegression = NodeCandidateConverter.convertListToDoubleArray (nodeCandidates, variables); regression.newSampleData(convertPricesToArray(nodeCandidates), NodeCandidateConverter.convertListToDoubleArray (nodeCandidates, variables)); log.info("Data for component {} was loaded", componentName); this.coefficients = regression.estimateRegressionParameters(); log.info("Coefficients: {}", coefficients); + } private static double[] convertPricesToArray(List nodeCandidates) {