Skip to content

Commit

Permalink
chore(usage-stats): measure time for getting buckets and aggregations (
Browse files Browse the repository at this point in the history
  • Loading branch information
darnaut authored Apr 5, 2024
1 parent 31c7ccc commit 717e40b
Showing 1 changed file with 15 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import static com.linkedin.metadata.authorization.ApiOperation.UPDATE;

import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import com.datahub.authentication.AuthenticationContext;
import com.datahub.authorization.EntitySpec;
import com.datahub.plugins.auth.authorization.Authorizer;
Expand Down Expand Up @@ -34,6 +35,7 @@
import com.linkedin.metadata.restli.RestliUtil;
import com.linkedin.metadata.timeseries.TimeseriesAspectService;
import com.linkedin.metadata.timeseries.transformer.TimeseriesAspectTransformer;
import com.linkedin.metadata.utils.metrics.MetricUtils;
import com.linkedin.parseq.Task;
import com.linkedin.restli.common.HttpStatus;
import com.linkedin.restli.server.RestLiServiceException;
Expand Down Expand Up @@ -66,6 +68,7 @@
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import javax.inject.Named;
Expand Down Expand Up @@ -369,7 +372,9 @@ public Task<UsageQueryResult> query(
@ActionParam(PARAM_END_TIME) @com.linkedin.restli.server.annotations.Optional Long endTime,
@ActionParam(PARAM_MAX_BUCKETS) @com.linkedin.restli.server.annotations.Optional
Integer maxBuckets) {
log.info("Attempting to query usage stats");
log.info(
"Querying usage stats for resource: {}, duration: {}, start time: {}, end time: {}, max buckets: {}",
resource, duration, startTime, endTime, maxBuckets);
return RestliUtil.toTask(
() -> {

Expand Down Expand Up @@ -409,11 +414,20 @@ public Task<UsageQueryResult> query(
new ConjunctiveCriterionArray(
new ConjunctiveCriterion().setAnd(new CriterionArray(criteria))));

Timer.Context timer;
long took;

// 2. Get buckets.
timer = MetricUtils.timer(this.getClass(), "getBuckets").time();
UsageAggregationArray buckets = getBuckets(filter, resource, duration);
took = timer.stop();
log.info("Usage stats for resource {} returned {} buckets in {} ms", resource, buckets.size(), TimeUnit.NANOSECONDS.toMillis(took));

// 3. Get aggregations.
timer = MetricUtils.timer(this.getClass(), "getAggregations").time();
UsageQueryResultAggregations aggregations = getAggregations(filter);
took = timer.stop();
log.info("Usage stats aggregation for resource {} took {} ms", resource, TimeUnit.NANOSECONDS.toMillis(took));

// 4. Compute totalSqlQuery count from the buckets itself.
// We want to avoid issuing an additional query with a sum aggregation.
Expand Down

0 comments on commit 717e40b

Please sign in to comment.