/** * Adds an {@link AtomicExecution} to this instance. Short-cut for {@link #add(AtomicExecution)}. * * @param loadProfileEstimator for which the {@link AtomicExecution} should be added * @return this instance */ public ExecutionLineageNode add(LoadProfileEstimator loadProfileEstimator) { return this.add(new AtomicExecution(loadProfileEstimator)); }
/** * Estimate the {@link LoadProfile} for all {@link AtomicExecution}s in this instance in the light of * a specific {@link EstimationContext}. * * @return the {@link LoadProfile} */ public LoadProfile estimateLoad(EstimationContext estimationContext) { return this.atomicExecutions.stream() .map(execution -> execution.estimateLoad(estimationContext)) .reduce(LoadProfile::plus) .orElse(LoadProfile.emptyLoadProfile); }
@Override public AtomicExecution deserialize(JSONObject json, Class<? extends AtomicExecution> cls) { final JSONArray estimators = json.getJSONArray("estimators"); if (estimators.length() < 1) { throw new IllegalStateException("Expected at least one serialized estimator."); } // De-serialize the main estimator. final JSONObject mainEstimatorJson = estimators.getJSONObject(0); LoadProfileEstimator mainEstimator = this.deserializeEstimator(mainEstimatorJson); // De-serialize nested estimators. for (int i = 1; i < estimators.length(); i++) { mainEstimator.nest(this.deserializeEstimator(estimators.getJSONObject(i))); } return new AtomicExecution(mainEstimator); }