package com.linkedin.thirdeye.client.comparison;
import static com.linkedin.thirdeye.client.comparison.TimeOnTimeConstants.ALL_BASELINE;
import static com.linkedin.thirdeye.client.comparison.TimeOnTimeConstants.ALL_CURRENT;
import static com.linkedin.thirdeye.client.comparison.TimeOnTimeConstants.DIMENSION_BASELINE;
import static com.linkedin.thirdeye.client.comparison.TimeOnTimeConstants.DIMENSION_CURRENT;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.DateTime;
import com.linkedin.thirdeye.api.TimeGranularity;
import com.linkedin.thirdeye.client.MetricFunction;
import com.linkedin.thirdeye.client.ThirdEyeRequest;
import com.linkedin.thirdeye.client.ThirdEyeRequest.ThirdEyeRequestBuilder;
import com.linkedin.thirdeye.dashboard.Utils;
public class ThirdEyeRequestGenerator {
public static List<ThirdEyeRequest> generateRequestsForGroupByDimensions(
TimeOnTimeComparisonRequest comparisonRequest) {
List<ThirdEyeRequest> requests = new ArrayList<>();
ThirdEyeRequest baselineALLRequest = generateRequest(ALL_BASELINE, comparisonRequest,
comparisonRequest.getBaselineStart(), comparisonRequest.getBaselineEnd(), null, null);
requests.add(baselineALLRequest);
ThirdEyeRequest currentALLRequest = generateRequest(ALL_CURRENT, comparisonRequest,
comparisonRequest.getCurrentStart(), comparisonRequest.getCurrentEnd(), null, null);
requests.add(currentALLRequest);
for (String dimension : comparisonRequest.getGroupByDimensions()) {
ThirdEyeRequest baselineDimensionRequest = generateRequest(DIMENSION_BASELINE + dimension,
comparisonRequest, comparisonRequest.getBaselineStart(),
comparisonRequest.getBaselineEnd(), dimension, null);
requests.add(baselineDimensionRequest);
ThirdEyeRequest currentDimensionRequest = generateRequest(DIMENSION_CURRENT + dimension,
comparisonRequest, comparisonRequest.getCurrentStart(), comparisonRequest.getCurrentEnd(),
dimension, null);
requests.add(currentDimensionRequest);
}
return requests;
}
public static List<ThirdEyeRequest> generateRequestsForAggregation(
TimeOnTimeComparisonRequest comparisonRequest) {
List<ThirdEyeRequest> requests = new ArrayList<>();
ThirdEyeRequest baselineALLRequest =
ThirdEyeRequestGenerator.generateRequest(ALL_BASELINE, comparisonRequest,
comparisonRequest.getBaselineStart(), comparisonRequest.getBaselineEnd(), null, null);
requests.add(baselineALLRequest);
ThirdEyeRequest currentALLRequest =
ThirdEyeRequestGenerator.generateRequest(ALL_CURRENT, comparisonRequest,
comparisonRequest.getCurrentStart(), comparisonRequest.getCurrentEnd(), null, null);
requests.add(currentALLRequest);
return requests;
}
public static ThirdEyeRequest generateRequest(String name,
TimeOnTimeComparisonRequest comparisonRequest, DateTime start, DateTime end,
String groupByDimension, TimeGranularity aggTimeGranularity) {
ThirdEyeRequestBuilder requestBuilder = new ThirdEyeRequestBuilder();
// COMMON to ALL REQUESTS
requestBuilder.setFilterSet(comparisonRequest.getFilterSet());
requestBuilder.setFilterClause(comparisonRequest.getFilterClause());
List<MetricFunction> metricFunctionsFromExpressions =
Utils.computeMetricFunctionsFromExpressions(comparisonRequest.getMetricExpressions());
requestBuilder.setMetricFunctions(metricFunctionsFromExpressions);
// REQUEST to get total value with out break down.
requestBuilder.setStartTimeInclusive(start);
requestBuilder.setEndTimeExclusive(end);
if (groupByDimension != null) {
requestBuilder.setGroupBy(groupByDimension);
}
if (aggTimeGranularity != null) {
requestBuilder.setGroupByTimeGranularity(aggTimeGranularity);
}
ThirdEyeRequest request = requestBuilder.build(name);
return request;
}
}