/* * 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 com.facebook.presto.server; import com.facebook.presto.execution.QueryStats; import com.facebook.presto.operator.BlockedReason; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableSet; import io.airlift.units.DataSize; import io.airlift.units.Duration; import org.joda.time.DateTime; import javax.annotation.concurrent.Immutable; import java.util.Set; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; /** * Lightweight version of QueryStats. Parts of the web UI depend on the fields * being named consistently across these classes. */ @Immutable public class BasicQueryStats { private final DateTime createTime; private final DateTime endTime; private final Duration elapsedTime; private final Duration executionTime; private final int totalDrivers; private final int queuedDrivers; private final int runningDrivers; private final int completedDrivers; private final double cumulativeMemory; private final DataSize totalMemoryReservation; private final DataSize peakMemoryReservation; private final Duration totalCpuTime; private final boolean fullyBlocked; private final Set<BlockedReason> blockedReasons; public BasicQueryStats( DateTime createTime, DateTime endTime, Duration elapsedTime, Duration executionTime, int totalDrivers, int queuedDrivers, int runningDrivers, int completedDrivers, double cumulativeMemory, DataSize totalMemoryReservation, DataSize peakMemoryReservation, Duration totalCpuTime, boolean fullyBlocked, Set<BlockedReason> blockedReasons) { this.createTime = createTime; this.endTime = endTime; this.elapsedTime = elapsedTime; this.executionTime = executionTime; checkArgument(totalDrivers >= 0, "totalDrivers is negative"); this.totalDrivers = totalDrivers; checkArgument(queuedDrivers >= 0, "queuedDrivers is negative"); this.queuedDrivers = queuedDrivers; checkArgument(runningDrivers >= 0, "runningDrivers is negative"); this.runningDrivers = runningDrivers; checkArgument(completedDrivers >= 0, "completedDrivers is negative"); this.completedDrivers = completedDrivers; this.cumulativeMemory = cumulativeMemory; this.totalMemoryReservation = totalMemoryReservation; this.peakMemoryReservation = peakMemoryReservation; this.totalCpuTime = totalCpuTime; this.fullyBlocked = fullyBlocked; this.blockedReasons = ImmutableSet.copyOf(requireNonNull(blockedReasons, "blockedReasons is null")); } public BasicQueryStats(QueryStats queryStats) { this(queryStats.getCreateTime(), queryStats.getEndTime(), queryStats.getElapsedTime(), queryStats.getExecutionTime(), queryStats.getTotalDrivers(), queryStats.getQueuedDrivers(), queryStats.getRunningDrivers(), queryStats.getCompletedDrivers(), queryStats.getCumulativeMemory(), queryStats.getTotalMemoryReservation(), queryStats.getPeakMemoryReservation(), queryStats.getTotalCpuTime(), queryStats.isFullyBlocked(), queryStats.getBlockedReasons()); } @JsonProperty public DateTime getCreateTime() { return createTime; } @JsonProperty public DateTime getEndTime() { return endTime; } @JsonProperty public Duration getElapsedTime() { return elapsedTime; } @JsonProperty public Duration getExecutionTime() { return executionTime; } @JsonProperty public int getTotalDrivers() { return totalDrivers; } @JsonProperty public int getQueuedDrivers() { return queuedDrivers; } @JsonProperty public int getRunningDrivers() { return runningDrivers; } @JsonProperty public int getCompletedDrivers() { return completedDrivers; } @JsonProperty public double getCumulativeMemory() { return cumulativeMemory; } @JsonProperty public DataSize getTotalMemoryReservation() { return totalMemoryReservation; } @JsonProperty public DataSize getPeakMemoryReservation() { return peakMemoryReservation; } @JsonProperty public Duration getTotalCpuTime() { return totalCpuTime; } @JsonProperty public boolean isFullyBlocked() { return fullyBlocked; } @JsonProperty public Set<BlockedReason> getBlockedReasons() { return blockedReasons; } }