/*
* 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.client;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableList;
import javax.annotation.concurrent.Immutable;
import javax.validation.constraints.NotNull;
import java.util.List;
import static com.google.common.base.MoreObjects.toStringHelper;
import static java.util.Objects.requireNonNull;
@Immutable
public class StageStats
{
private final String stageId;
private final String state;
private final boolean done;
private final int nodes;
private final int totalSplits;
private final int queuedSplits;
private final int runningSplits;
private final int completedSplits;
private final long userTimeMillis;
private final long cpuTimeMillis;
private final long wallTimeMillis;
private final long processedRows;
private final long processedBytes;
private final List<StageStats> subStages;
@JsonCreator
public StageStats(
@JsonProperty("stageId") String stageId,
@JsonProperty("state") String state,
@JsonProperty("done") boolean done,
@JsonProperty("nodes") int nodes,
@JsonProperty("totalSplits") int totalSplits,
@JsonProperty("queuedSplits") int queuedSplits,
@JsonProperty("runningSplits") int runningSplits,
@JsonProperty("completedSplits") int completedSplits,
@JsonProperty("userTimeMillis") long userTimeMillis,
@JsonProperty("cpuTimeMillis") long cpuTimeMillis,
@JsonProperty("wallTimeMillis") long wallTimeMillis,
@JsonProperty("processedRows") long processedRows,
@JsonProperty("processedBytes") long processedBytes,
@JsonProperty("subStages") List<StageStats> subStages)
{
this.stageId = stageId;
this.state = requireNonNull(state, "state is null");
this.done = done;
this.nodes = nodes;
this.totalSplits = totalSplits;
this.queuedSplits = queuedSplits;
this.runningSplits = runningSplits;
this.completedSplits = completedSplits;
this.userTimeMillis = userTimeMillis;
this.cpuTimeMillis = cpuTimeMillis;
this.wallTimeMillis = wallTimeMillis;
this.processedRows = processedRows;
this.processedBytes = processedBytes;
this.subStages = ImmutableList.copyOf(requireNonNull(subStages, "subStages is null"));
}
@JsonProperty
public String getStageId()
{
return stageId;
}
@NotNull
@JsonProperty
public String getState()
{
return state;
}
@JsonProperty
public boolean isDone()
{
return done;
}
@JsonProperty
public int getNodes()
{
return nodes;
}
@JsonProperty
public int getTotalSplits()
{
return totalSplits;
}
@JsonProperty
public int getQueuedSplits()
{
return queuedSplits;
}
@JsonProperty
public int getRunningSplits()
{
return runningSplits;
}
@JsonProperty
public int getCompletedSplits()
{
return completedSplits;
}
@JsonProperty
public long getUserTimeMillis()
{
return userTimeMillis;
}
@JsonProperty
public long getCpuTimeMillis()
{
return cpuTimeMillis;
}
@JsonProperty
public long getWallTimeMillis()
{
return wallTimeMillis;
}
@JsonProperty
public long getProcessedRows()
{
return processedRows;
}
@JsonProperty
public long getProcessedBytes()
{
return processedBytes;
}
@NotNull
@JsonProperty
public List<StageStats> getSubStages()
{
return subStages;
}
@Override
public String toString()
{
return toStringHelper(this)
.add("state", state)
.add("done", done)
.add("nodes", nodes)
.add("totalSplits", totalSplits)
.add("queuedSplits", queuedSplits)
.add("runningSplits", runningSplits)
.add("completedSplits", completedSplits)
.add("userTimeMillis", userTimeMillis)
.add("cpuTimeMillis", cpuTimeMillis)
.add("wallTimeMillis", wallTimeMillis)
.add("processedRows", processedRows)
.add("processedBytes", processedBytes)
.add("subStages", subStages)
.toString();
}
public static Builder builder()
{
return new Builder();
}
public static class Builder
{
private String stageId;
private String state;
private boolean done;
private int nodes;
private int totalSplits;
private int queuedSplits;
private int runningSplits;
private int completedSplits;
private long userTimeMillis;
private long cpuTimeMillis;
private long wallTimeMillis;
private long processedRows;
private long processedBytes;
private List<StageStats> subStages;
private Builder() {}
public Builder setStageId(String stageId)
{
this.stageId = requireNonNull(stageId, "stageId is null");
return this;
}
public Builder setState(String state)
{
this.state = requireNonNull(state, "state is null");
return this;
}
public Builder setDone(boolean done)
{
this.done = done;
return this;
}
public Builder setNodes(int nodes)
{
this.nodes = nodes;
return this;
}
public Builder setTotalSplits(int totalSplits)
{
this.totalSplits = totalSplits;
return this;
}
public Builder setQueuedSplits(int queuedSplits)
{
this.queuedSplits = queuedSplits;
return this;
}
public Builder setRunningSplits(int runningSplits)
{
this.runningSplits = runningSplits;
return this;
}
public Builder setCompletedSplits(int completedSplits)
{
this.completedSplits = completedSplits;
return this;
}
public Builder setUserTimeMillis(long userTimeMillis)
{
this.userTimeMillis = userTimeMillis;
return this;
}
public Builder setCpuTimeMillis(long cpuTimeMillis)
{
this.cpuTimeMillis = cpuTimeMillis;
return this;
}
public Builder setWallTimeMillis(long wallTimeMillis)
{
this.wallTimeMillis = wallTimeMillis;
return this;
}
public Builder setProcessedRows(long processedRows)
{
this.processedRows = processedRows;
return this;
}
public Builder setProcessedBytes(long processedBytes)
{
this.processedBytes = processedBytes;
return this;
}
public Builder setSubStages(List<StageStats> subStages)
{
this.subStages = ImmutableList.copyOf(requireNonNull(subStages, "subStages is null"));
return this;
}
public StageStats build()
{
return new StageStats(
stageId,
state,
done,
nodes,
totalSplits,
queuedSplits,
runningSplits,
completedSplits,
userTimeMillis,
cpuTimeMillis,
wallTimeMillis,
processedRows,
processedBytes,
subStages);
}
}
}