KPIService.java
/*
* Copyright 2019 Global Crop Diversity Trust
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.genesys.server.service;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import javax.validation.Valid;
import org.genesys.server.model.kpi.Dimension;
import org.genesys.server.model.kpi.DimensionKey;
import org.genesys.server.model.kpi.Execution;
import org.genesys.server.model.kpi.ExecutionRun;
import org.genesys.server.model.kpi.KPIParameter;
import org.genesys.server.model.kpi.Observation;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.querydsl.core.Tuple;
public interface KPIService {
/**
* Details
*/
static class ExecutionDetails {
public Execution execution;
public ExecutionRun lastRun;
public Page<ExecutionRun> runs;
public static ExecutionDetails from(Execution execution, ExecutionRun lastRun, Page<ExecutionRun> runs) {
ExecutionDetails ed = new ExecutionDetails();
ed.execution=execution;
ed.lastRun = lastRun;
ed.runs = runs;
return ed;
}
}
static class GroupedRunObservations {
public String dimensionValue;
public Map<LocalDate, Double> runCountResult;
public GroupedRunObservations() {
}
public GroupedRunObservations(String dimensionValue, Map<LocalDate, Double> runCountResult) {
this.dimensionValue = dimensionValue;
this.runCountResult = runCountResult;
}
}
public static class ExecutionRunsRequest {
public List<LocalDate> dates;
public Map<String, Set<String>> keys;
}
KPIParameter save(@Valid KPIParameter parameter);
KPIParameter getParameter(String name);
KPIParameter getParameter(long id);
KPIParameter delete(KPIParameter parameter);
<T extends Dimension<?>> T save(@Valid T dimension);
Dimension<?> getDimension(long id);
Dimension<?> getDimension(String name);
<T extends Dimension<?>> T delete(T dimension);
<T> Set<T> getValues(Dimension<T> loadedJpa);
Execution save(@Valid Execution execution);
Execution loadExecution(String executionName);
Execution getExecution(long id);
Execution getExecution(String executionName);
Execution delete(Execution execution);
List<Observation> execute(Execution execution);
ExecutionRun executeAndSave(Execution execution);
Page<KPIParameter> listParameters(Pageable page);
Page<Dimension<?>> listDimensions(Pageable page);
Page<Execution> listExecutions(Pageable page);
List<Execution> listExecutions();
Page<Observation> listObservations(ExecutionRun executionRun, Map<String, String> dimensionFilters, Pageable page);
ExecutionRun findLastExecutionRun(Execution execution);
ExecutionRun findExecutionRunByDate(Execution execution, LocalDate date);
void deleteObservations(ExecutionRun executionRun);
Page<ExecutionRun> listExecutionRuns(Execution execution, Pageable pageable);
ExecutionRun getExecutionRun(long runId);
/**
* List selected observations of an execution with the executionRun#timestamp.
*
* @param execution the execution
* @param from the from
* @param to the to
* @param keys the keys
* @param page the page
* @return the page
*/
Page<Tuple> listObservations(Execution execution, LocalDate from, LocalDate to, Map<String, Set<String>> keys, Pageable page);
List<Observation> filterObservations(Execution execution, LocalDate date, Map<String, Set<String>> keys);
/**
* Calculate differences in observations starting at 'to' date, comparing observations
* with the earlier runs until since 'from' date.
*
* @param execution the execution
* @param from the date of the earliest run
* @param to the date of the latest run
* @return the sorted map keyed by run date, containing run differences
*/
SortedMap<LocalDate, List<Observation>> calculateRunDiff(Execution execution, LocalDate from, LocalDate to, Map<String, Set<String>> keys);
/**
* Remove runs that have the same observations and don't add much value.
*
* @param execution the execution
* @return
*/
long purgeExecutionRuns(Execution execution);
/**
* Find observations by dates and filter.
*
* @param execution the execution
* @param runsRequest the execution runs request
* @return the map of observations for dates
*/
SortedMap<LocalDate, List<Observation>> findExecutionRuns(Execution execution, ExecutionRunsRequest runsRequest);
/**
* Get observations grouped by dimension.
*
* @param execution the execution
* @param dimensionName the dimension for grouping
* @param toDate the date for searching
* @param maxRuns the max execution runs number
* @return the list of GroupedRunObservations
*/
List<GroupedRunObservations> getObservationsGroupedByDimension(Execution execution, String dimensionName, LocalDate toDate, Integer maxRuns);
/**
* Get the dimension keys generated by {@code execution} in its runs.
*
* @param execution the execution
* @param dimensionNames names of dimensions
* @return List of dimension keys
*/
List<DimensionKey> getDimensionKeys(Execution execution, Set<String> dimensionNames);
/**
* Delete KPI run
* @param run run to delete
* @return the deleted run
*/
ExecutionRun delete(ExecutionRun run);
}