package com.linkedin.thirdeye.client.comparison;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.joda.time.DateTime;
import com.google.common.collect.Lists;
import com.linkedin.thirdeye.api.TimeGranularity;
import com.linkedin.thirdeye.client.MetricExpression;
import com.linkedin.thirdeye.client.MetricFunction;
import com.linkedin.thirdeye.client.cache.QueryCache;
import com.linkedin.thirdeye.client.comparison.Row.Metric;
import com.linkedin.thirdeye.client.pinot.PinotThirdEyeClient;
import com.linkedin.thirdeye.constant.MetricAggFunction;
import com.linkedin.thirdeye.dashboard.Utils;
/** Manual test for verifying code works as expected (ie without exceptions thrown) */
public class TimeOnTimeTest {
public static void main(String[] args) throws Exception {
PinotThirdEyeClient pinotThirdEyeClient = PinotThirdEyeClient.getDefaultTestClient(); // TODO
// make
// this
// configurable;
// PinotThirdEyeClient pinotThirdEyeClient =
// PinotThirdEyeClient.fromHostList("localhost", 8100, "localhost:8099");
QueryCache queryCache = new QueryCache(pinotThirdEyeClient, Executors.newFixedThreadPool(10));
// QueryCache queryCache = new QueryCache(pinotThirdEyeClient, Executors.newCachedThreadPool());
TimeOnTimeComparisonRequest comparisonRequest;
comparisonRequest = generateGroupByTimeRequest();
// comparisonRequest = generateGroupByDimensionRequest();
// comparisonRequest = generateGroupByTimeAndDimension();
TimeOnTimeComparisonHandler handler = new TimeOnTimeComparisonHandler(queryCache);
// long start;
// long end;
// // Thread.sleep(30000);
// for (int i = 0; i < 5; i++) {
// start = System.currentTimeMillis();
// handler.handle(comparisonRequest);
// end = System.currentTimeMillis();
// System.out.println("Time taken:" + (end - start));
// }
// System.exit(0);
long start = System.currentTimeMillis();
TimeOnTimeComparisonResponse response = handler.handle(comparisonRequest);
long end = System.currentTimeMillis();
System.out.println("Time taken:" + (end - start));
for (Metric metric : response.getRow(0).getMetrics()) {
System.out.print(metric.getMetricName() + "\t\t");
}
System.out.println();
for (int i = 0; i < response.getNumRows(); i++) {
System.out.println(response.getRow(i));
}
System.exit(0);
}
// TABULAR
private static TimeOnTimeComparisonRequest generateGroupByTimeRequest() {
TimeOnTimeComparisonRequest comparisonRequest = new TimeOnTimeComparisonRequest();
String collection = "thirdeyeAbook";
comparisonRequest.setCollectionName(collection);
comparisonRequest.setBaselineStart(new DateTime(2016, 4, 1, 00, 00));
comparisonRequest.setBaselineEnd(new DateTime(2016, 4, 2, 00, 00));
comparisonRequest.setCurrentStart(new DateTime(2016, 4, 8, 00, 00));
comparisonRequest.setCurrentEnd(new DateTime(2016, 4, 9, 00, 00));
List<MetricFunction> metricFunctions = new ArrayList<>();
metricFunctions.add(new MetricFunction(MetricAggFunction.SUM, "__COUNT", null, collection, null, null));
List<MetricExpression> metricExpressions = Utils.convertToMetricExpressions(metricFunctions);
metricExpressions.add(new MetricExpression("submit_rate", "submits/impressions"));
comparisonRequest.setMetricExpressions(metricExpressions);
comparisonRequest.setAggregationTimeGranularity(new TimeGranularity(1, TimeUnit.HOURS));
return comparisonRequest;
}
// HEATMAP
private static TimeOnTimeComparisonRequest generateGroupByDimensionRequest() {
TimeOnTimeComparisonRequest comparisonRequest = new TimeOnTimeComparisonRequest();
String collection = "thirdeyeAbook";
comparisonRequest.setCollectionName(collection);
comparisonRequest.setBaselineStart(new DateTime(2016, 4, 1, 00, 00));
comparisonRequest.setBaselineEnd(new DateTime(2016, 4, 1, 01, 00));
comparisonRequest.setCurrentStart(new DateTime(2016, 4, 8, 00, 00));
comparisonRequest.setCurrentEnd(new DateTime(2016, 4, 8, 01, 00));
comparisonRequest.setGroupByDimensions(
Lists.newArrayList("browserName", "contactsOrigin", "deviceName", "continent",
"countryCode", "environment", "locale", "osName", "pageKey", "source", "sourceApp"));
List<MetricFunction> metricFunctions = new ArrayList<>();
metricFunctions.add(new MetricFunction(MetricAggFunction.SUM, "__COUNT", null, collection, null, null));
comparisonRequest.setMetricExpressions(Utils.convertToMetricExpressions(metricFunctions));
comparisonRequest.setAggregationTimeGranularity(null);
return comparisonRequest;
}
// CONTRIBUTOR
private static TimeOnTimeComparisonRequest generateGroupByTimeAndDimension() {
TimeOnTimeComparisonRequest comparisonRequest = new TimeOnTimeComparisonRequest();
String collection = "thirdeyeAbook";
comparisonRequest.setCollectionName(collection);
comparisonRequest.setBaselineStart(new DateTime(2016, 4, 1, 00, 00));
comparisonRequest.setBaselineEnd(new DateTime(2016, 4, 2, 00, 00));
comparisonRequest.setCurrentStart(new DateTime(2016, 4, 8, 00, 00));
comparisonRequest.setCurrentEnd(new DateTime(2016, 4, 9, 00, 00));
comparisonRequest.setGroupByDimensions(
Lists.newArrayList("browserName", "contactsOrigin", "deviceName", "continent",
"countryCode", "environment", "locale", "osName", "pageKey", "source", "sourceApp"));
comparisonRequest.setGroupByDimensions(Lists.newArrayList("environment"));
List<MetricFunction> metricFunctions = new ArrayList<>();
metricFunctions.add(new MetricFunction(MetricAggFunction.SUM, "__COUNT", null, collection, null, null));
comparisonRequest.setMetricExpressions(Utils.convertToMetricExpressions(metricFunctions));
comparisonRequest.setAggregationTimeGranularity(new TimeGranularity(1, TimeUnit.HOURS));
return comparisonRequest;
}
}