Search in sources :

Example 11 with TimeBucket

use of com.linkedin.thirdeye.dashboard.views.TimeBucket in project pinot by linkedin.

the class ContributorViewHandler method getTimeBuckets.

private List<TimeBucket> getTimeBuckets(TimeOnTimeComparisonResponse response) {
    Set<TimeBucket> timeBuckets = new TreeSet<>();
    int numRows = response.getNumRows();
    for (int i = 0; i < numRows; i++) {
        Row row = response.getRow(i);
        TimeBucket bucket = TimeBucket.fromRow(row);
        timeBuckets.add(bucket);
    }
    return new ArrayList<TimeBucket>(timeBuckets);
}
Also used : TreeSet(java.util.TreeSet) TimeBucket(com.linkedin.thirdeye.dashboard.views.TimeBucket) ArrayList(java.util.ArrayList) Row(com.linkedin.thirdeye.client.comparison.Row)

Example 12 with TimeBucket

use of com.linkedin.thirdeye.dashboard.views.TimeBucket in project pinot by linkedin.

the class TabularViewHandler method process.

@Override
public TabularViewResponse process(TabularViewRequest request) throws Exception {
    // query 1 for everything from baseline start to baseline end
    // query 2 for everything from current start to current end
    // for each dimension group by top 100
    // query 1 for everything from baseline start to baseline end
    // query for everything from current start to current end
    TimeOnTimeComparisonRequest comparisonRequest = generateTimeOnTimeComparisonRequest(request);
    TimeOnTimeComparisonHandler handler = new TimeOnTimeComparisonHandler(queryCache);
    TimeOnTimeComparisonResponse response = handler.handle(comparisonRequest);
    List<TimeBucket> timeBuckets = getTimeBuckets(response);
    List<Row> rows = getRowsSortedByTime(response);
    TabularViewResponse tabularViewResponse = new TabularViewResponse();
    Map<String, String> summary = new HashMap<>();
    summary.put("baselineStart", Long.toString(comparisonRequest.getBaselineStart().getMillis()));
    summary.put("baselineEnd", Long.toString(comparisonRequest.getBaselineEnd().getMillis()));
    summary.put("currentStart", Long.toString(comparisonRequest.getCurrentStart().getMillis()));
    summary.put("currentEnd", Long.toString(comparisonRequest.getCurrentEnd().getMillis()));
    tabularViewResponse.setSummary(summary);
    List<String> expressionNames = new ArrayList<>();
    for (MetricExpression expression : request.getMetricExpressions()) {
        expressionNames.add(expression.getExpressionName());
    }
    tabularViewResponse.setMetrics(expressionNames);
    tabularViewResponse.setTimeBuckets(timeBuckets);
    String[] columns = new String[] { "baselineValue", "currentValue", "ratio", "cumulativeBaselineValue", "cumulativeCurrentValue", "cumulativeRatio" };
    // maintain same order in response
    Map<String, GenericResponse> data = new LinkedHashMap<>();
    for (String metric : expressionNames) {
        ResponseSchema schema = new ResponseSchema();
        for (int i = 0; i < columns.length; i++) {
            String column = columns[i];
            schema.add(column, i);
        }
        GenericResponse rowData = new GenericResponse();
        rowData.setSchema(schema);
        List<String[]> genericResponseData = new ArrayList<>();
        rowData.setResponseData(genericResponseData);
        data.put(metric, rowData);
    }
    tabularViewResponse.setData(data);
    Map<String, Double[]> runningTotalMap = new HashMap<>();
    for (Row row : rows) {
        for (Metric metric : row.getMetrics()) {
            String metricName = metric.getMetricName();
            if (!expressionNames.contains(metricName)) {
                continue;
            }
            Double baselineValue = metric.getBaselineValue();
            Double currentValue = metric.getCurrentValue();
            String baselineValueStr = HeatMapCell.format(baselineValue);
            String currentValueStr = HeatMapCell.format(currentValue);
            double ratio = ((currentValue - baselineValue) * 100) / baselineValue;
            if (Double.isNaN(ratio)) {
                ratio = 0;
            } else if (Double.isInfinite(ratio)) {
                ratio = 100;
            }
            String ratioStr = HeatMapCell.format(ratio);
            Double cumulativeBaselineValue;
            Double cumulativeCurrentValue;
            if (runningTotalMap.containsKey(metricName)) {
                Double[] totalValues = runningTotalMap.get(metricName);
                cumulativeBaselineValue = totalValues[0] + baselineValue;
                cumulativeCurrentValue = totalValues[1] + currentValue;
            } else {
                cumulativeBaselineValue = baselineValue;
                cumulativeCurrentValue = currentValue;
            }
            Double[] runningTotalPerMetric = new Double[] { cumulativeBaselineValue, cumulativeCurrentValue };
            runningTotalMap.put(metricName, runningTotalPerMetric);
            String cumulativeBaselineValueStr = HeatMapCell.format(cumulativeBaselineValue);
            String cumulativeCurrentValueStr = HeatMapCell.format(cumulativeCurrentValue);
            double cumulativeRatio = ((cumulativeCurrentValue - cumulativeBaselineValue) * 100) / cumulativeBaselineValue;
            if (Double.isNaN(ratio)) {
                cumulativeRatio = 0;
            } else if (Double.isInfinite(cumulativeRatio)) {
                cumulativeRatio = 100;
            }
            String cumulativeRatioStr = HeatMapCell.format(cumulativeRatio);
            String[] columnData = { baselineValueStr, currentValueStr, ratioStr, cumulativeBaselineValueStr, cumulativeCurrentValueStr, cumulativeRatioStr };
            GenericResponse rowData = data.get(metric.getMetricName());
            rowData.getResponseData().add(columnData);
        }
    }
    return tabularViewResponse;
}
Also used : HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) TimeOnTimeComparisonResponse(com.linkedin.thirdeye.client.comparison.TimeOnTimeComparisonResponse) GenericResponse(com.linkedin.thirdeye.dashboard.views.GenericResponse) TimeOnTimeComparisonHandler(com.linkedin.thirdeye.client.comparison.TimeOnTimeComparisonHandler) TimeBucket(com.linkedin.thirdeye.dashboard.views.TimeBucket) TimeOnTimeComparisonRequest(com.linkedin.thirdeye.client.comparison.TimeOnTimeComparisonRequest) MetricExpression(com.linkedin.thirdeye.client.MetricExpression) ResponseSchema(com.linkedin.thirdeye.dashboard.views.GenericResponse.ResponseSchema) Metric(com.linkedin.thirdeye.client.comparison.Row.Metric) Row(com.linkedin.thirdeye.client.comparison.Row)

Aggregations

TimeBucket (com.linkedin.thirdeye.dashboard.views.TimeBucket)12 ArrayList (java.util.ArrayList)6 AnomalyTimelinesView (com.linkedin.thirdeye.anomaly.views.AnomalyTimelinesView)4 MetricExpression (com.linkedin.thirdeye.client.MetricExpression)4 Row (com.linkedin.thirdeye.client.comparison.Row)4 MetricConfigDTO (com.linkedin.thirdeye.datalayer.dto.MetricConfigDTO)3 LinkedHashMap (java.util.LinkedHashMap)3 DateTime (org.joda.time.DateTime)3 MetricTimeSeries (com.linkedin.thirdeye.api.MetricTimeSeries)2 Metric (com.linkedin.thirdeye.client.comparison.Row.Metric)2 TimeOnTimeComparisonHandler (com.linkedin.thirdeye.client.comparison.TimeOnTimeComparisonHandler)2 TimeOnTimeComparisonRequest (com.linkedin.thirdeye.client.comparison.TimeOnTimeComparisonRequest)2 TimeOnTimeComparisonResponse (com.linkedin.thirdeye.client.comparison.TimeOnTimeComparisonResponse)2 TimeSeriesCompareMetricView (com.linkedin.thirdeye.dashboard.resources.v2.pojo.TimeSeriesCompareMetricView)2 ValuesContainer (com.linkedin.thirdeye.dashboard.resources.v2.pojo.ValuesContainer)2 GenericResponse (com.linkedin.thirdeye.dashboard.views.GenericResponse)2 ResponseSchema (com.linkedin.thirdeye.dashboard.views.GenericResponse.ResponseSchema)2 HashMap (java.util.HashMap)2 Properties (java.util.Properties)2 AnomalyDetectionInputContext (com.linkedin.thirdeye.anomaly.detection.AnomalyDetectionInputContext)1